从 if-else 语句构建 MILP 约束

1 linear-programming integer-programming mixed-integer-programming

我需要从这个 if-else 语句构建一个 MILP(混合整数线性规划)约束:其中 beta 是一个常量。

if (a > b) then c = beta else c = 0
Run Code Online (Sandbox Code Playgroud)

如何构建 MILP 约束的语句。有没有什么技术可以解决这个问题。谢谢。

Lar*_*610 6

我假设ab、 和c都是这里的决策变量。为了构建约束,您需要添加一个新的二进制变量(我们称之为它x),如果是则等于 1,a > b否则等于 0。您还需要一个大常数M。然后添加以下约束:

Mx >= a - b
M(1-x) >= b - a
x in {0,1}
Run Code Online (Sandbox Code Playgroud)

逻辑是:如果a > b,则x根据第一个约束必须等于 1(并且根据第二个约束x 可能等于 1)。如果b > a,则1-x根据第二个约束必须等于 1,即x必须等于 0(并且根据第一个约束x 可能等于 0)。

接下来,我们需要一个约束,表示 if x = 1,then c = beta,否则,c = 0

c = beta * x
Run Code Online (Sandbox Code Playgroud)

注意:上面的逻辑允许c等于 0 或 beta if a = b; 求解器将决定​​。if需要c等于 0吗a = b

另请注意:在M像这样的“大”型公式中,最好在M保持约束有效性的同时保持尽可能小。在这种情况下,这意味着设置和M之间的最大可能(或合理)差异。如果您的模型很小,那么它不会有太大影响,但如果您有很多这样的决策变量,那么它可能会很重要。ab