如何解决在Python Pulp中编写复杂目标和约束的正确方法
我正在看一本解释高级线性程序的书。到目前为止,一切都很好,但是这个示例让我为如何正确编写目标函数和约束而烦恼。
下面您会发现我尝试对左系数进行编码,但是如您所见,它似乎并不正确。
到目前为止,我的实现方式如下
import pulp as lp
# data
r = 0.02
T = 2
J = 3
E = 6
K = {(1): 2,(2): 3,(3): 4,(4): 4,(5): 6,(6): 7}
C_j_t = {(1,1): 2,(1,2): 3,(2,1): 4,2): 5,(3,1): 6,2): 7}
F_j_e = {(1,2): 7}
I_j_e = {(1,2): 7}
# F_j_e = 1
prob = lp.LpProblem('Foobar Village Highway Problem',lp.LpMaximize)
X_j_t = lp.LpVariable.dicts("X",[(j,t)
for j in range(1,J)
for t in range(1,T)],cat='Continuous')
coef_left = {}
for t in range(1,T):
for j in range(1,J):
coef_left[(j,t)] = (1 + r)**-t * C_j_t[(j,t)]
pv = (1 + r)**-T
right_side = {}
for j in range(1,J):
for e in range(1,K[(j)]):
right_side[(j,e)] = pv * F_j_e[(j,e)] * I_j_e[(j,e)]
prob += lp.lpSum(coef_left[(j,t)] * X_j_t[(j,t)] + right_side[(j,e)]
for j in range(1,J)
for t in range(1,T)
for e in range(1,E))
prob.writeLP(r'8.2.1.lp')
# Solve
prob.solve()
我认为这不正确,或者我使用正确的方法将这个复杂的目标编码为约束。
它返回以下内容:
\* Foobar_Village_Highway_Problem *\
Maximize
OBJ: 3.92156862745 X_(1,_1) + 7.8431372549 X_(2,_1)
Subject To
Bounds
X_(1,_1) free
X_(2,_1) free
End
解决方法
由于片段不完整,我们无法复制太多,但是循环结构似乎存在问题:
prob += lp.lpSum(coef_left[(j,t)] * X_j_t[(j,t)]
for j in range(1,J)
for i in range(1,T)) <----- for t
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。