我正在尝试使用PuLP解决FLP问题。我想为变量值添加逻辑约束。
我有LpVariable f,C是LpVariables列表。我想将f添加到问题的约束中,这取决于c [i]的值。
以下是代码段>
prob = LpProblem("The MILP problem", LpMinimize)
添加了第一个约束:
prob += lpSum(c[i] for i in range (len(c))) == 2
现在我想添加以下约束:
if`lpSum(c[i] for i in range (len(c))) > 1:
` prob += f == 1
else:
prob += f == 0
prob += lpSum(c[i] for i in range (len(c)) + f )
现在问题是LpVariables c [i]用None
初始化,因此在计算lpSum()
时会抛出错误。
我希望我很清楚。让我知道如果需要任何帮助来理解这个查询,但我认为给定的代码片段足够了。
答案 0 :(得分:1)
三点:
(1) 你的第一个约束迫使lpsum等于2,所以在你的例子中f总是为1 - 你确定你的公式是正确的吗?
(2) 如果语句不能与lpSum结合使用 - 您应该将其表述为实际约束。
例如,您可以将f定义为二进制变量并添加此约束:
prob += lpSum(c[i] for i in range (len(c))) - 1 <= M*f
其中M是足够大的数字。 然后,如果f == 0,我们就得到了&#34; lpsum()&lt; = 1&#34;如果f == 1我们知道lpsum可以是任何东西。使用这种类型的约束来使f表现出你想要的行为。
(3) 约束&#34; prob + = lpSum(c [i] for i in range(len(c))+ f)&#34;什么都不做,除非它应该是你的MILP的目标?如果是这样,你应该在prob = LpProblem之后立即添加它(&#34; MILP问题&#34;,LpMinimize)
祝你好运