0

我正在尝试使用 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()

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

4

1 回答 1

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 我们有“lpsum() <= 1”,如果 f==1 我们有这个 lpsum 可以是任何东西。玩弄这种类型的约束,让 f 以你想要的方式行事。

(3) 约束“prob += lpSum(c[i] for i in range (len(c)) + f)”什么都不做,除非它应该是您 MILP 的目标?如果是这样,您应该在 prob = LpProblem("The MILP problem", LpMinimize) 之后立即添加它

祝你好运

于 2015-10-27T08:20:38.153 回答