如何在PuLP中添加逻辑约束

时间:2015-10-27 06:02:04

标签: python-3.x pulp coin-or-cbc

我正在尝试使用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()时会抛出错误。

我希望我很清楚。让我知道如果需要任何帮助来理解这个查询,但我认为给定的代码片段足够了。

1 个答案:

答案 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)

祝你好运