在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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)