微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Python Pulp中编写复杂目标和约束的正确方法

如何解决在Python Pulp中编写复杂目标和约束的正确方法

我正在看一本解释高级线性程序的书。到目前为止,一切都很好,但是这个示例让我为如何正确编写目标函数和约束而烦恼。

linear program example

下面您会发现我尝试对左系数进行编码,但是如您所见,它似乎并不正确。

到目前为止,我的实现方式如下

   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 举报,一经查实,本站将立刻删除。