【发布时间】:2021-09-09 11:02:14
【问题描述】:
我正在尝试解决具有以下约束的线性规划问题:
对于N 和T 的某些给定值。所以假设N={1,2} 和T={1,2}
小|N|容易写出来,但N变大就不可能写出来了。
我很困惑如何通过索引我的目标变量来实际编码这些总和。
我使用以下内容来创建我的目标变量:
for t in range(1,T+1):
for i in range(1,n+1):
for j in range(1,n+1):
# Skip the x_i,i,t entries
if j == i:
continue
element = "x"+str(i)+','+str(j)+','+str(t)
x_ijt_holding.append(element)
x_ijt =[]
for i in x_ijt_holding:
x_ijt.append(pulp.LpVariable(i, cat = "Binary"))
最初我以为我可以用 LpVariable 定义每个约束,但我意识到求解器不喜欢这样。
例如我做了:
# Constraint 2 enter entries
x_ijt_2_holding = []
for j in range(1,n+1):
for i in range(1,j):
equations_2 = []
equations_3 = []
for t in range(1, T+1):
equations_2.append("x"+str(i)+','+str(j)+','+str(t))
equations_2.append("x"+str(j)+','+str(i)+','+str(t))
x_ijt_2_holding.append(equations_2)
# Constraint 2 as LpVariable:
for i in x_ijt_2_holding:
temp = []
for sublist in i:
temp.append(pulp.LpVariable(sublist, cat = "Binary"))
x_ijt_con2.append(temp)
那么我该如何将约束编码到问题中呢?
【问题讨论】:
-
这有点乱。您似乎只有一个变量
x[i,j,t]。你在哪里定义,如何定义?您应该使用LpVariable.dicts()来执行此操作。您可以编辑您的代码以包含它吗?您不需要添加任何变量来处理约束……但我们可以做到这一点。 -
谢谢,这就是我最终所做的。这让我的问题变得简单了一些。
-
好的。那么,您是否弄清楚了约束条件?如果没有,您应该编辑上面的帖子以显示您如何定义变量
x以及您在约束方面所做的尝试。它应该只是几个循环,LpSum()s 等。
标签: python-3.x optimization pulp