用numpy阵列求解LP

2024-05-15 08:15:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用numpy矩阵和PuLP来设置约束。在

我有一个2x4x4 numpy矩阵,我想用这个矩阵来约束,但问题是如何使用它。实际上,我在索引时遇到了问题,因为我必须循环所有变量并修复约束。 这些是矩阵。在

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

p矩阵是概率矩阵,第二个矩阵是成本矩阵。 每个4x4矩阵描述了从一个状态到另一个状态的转移概率。 我的约束是

这里是变量。在


Tags: numpy状态np矩阵概率arraypulpbeta
1条回答
网友
1楼 · 发布于 2024-05-15 08:15:02

我要假设两件事

  1. 在最后一个约束中,你指的是右边的C[d][i],而不是C[i][d]。。。因为P.shape[0] = d = 2,和{}。在
  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)

我得到以下结论。我没有检查你的约束是否满足,但它们应该满足。在

^{pr2}$

相关问题 更多 >