如何在PuLP中添加逻辑约束

问题描述 投票:0回答:1

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

我希望我很清楚。如果在理解此查询时需要任何帮助,请告诉我,但我认为给定的代码段足够了。

python-3.x pulp coin-or-cbc
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之后立即添加它(“MILP问题”,LpMinimize)

祝好运

© www.soinside.com 2019 - 2024. All rights reserved.