Я собираюсь предположить две вещи:
- Что в последнем ограничении вы имеете в виду C [d] [i] справа, а не C [i] [d]... потому что
P.shape[0] = d = 2
и C.shape[0] = 2
. - То, что вы хотите, чтобы ограничения были для всех
d
, а также для всех i
.
Принимая во внимание вышесказанное, следующее должно делать то, что вы хотите:
from pulp import *
import numpy as np
P = np.array([[[0.7, 0.3,0,0],
[0,0.7,0.3,0],
[0,0,0.6,0.4],
[0,0,0,1]],
[[0.7,0.3,0,0],
[0.7,0.3,0,0],
[0.7,0.3,0,0],
[0.7,0.3,0,0]]])
C = np.array([[100,80,50,10],[-100,-100,-100,-100]])
beta = 0.9
set_D = range(0, P.shape[0])
set_I = range(0, P.shape[1])
# Generate proble, & Create variables
prob = LpProblem("numpy_constraints", LpMinimize)
V = pulp.LpVariable.dicts("V", set_I, cat='Continuous')
# Make up an objective, let's say sum of V_i
prob += lpSum([V[i] for i in set_I])
# Apply constraints
for d in set_D:
for i in set_I:
prob += V[i] - beta*lpSum([P[d][i][j]*V[j] for j in set_I]) >= C[d][i]
# Solve problem
prob.solve()
# Print results:
V_soln = np.array([V[i].varValue for i in set_I])
print (("Status:"), LpStatus[prob.status])
print("V_soln: ")
print(V_soln)
С помощью которого я получаю следующее.Я не проверял, что ваши ограничения удовлетворены, но они должны быть.
Status: Optimal
V_soln:
[690.23142 575.50231 492.35502 490.23142]