从if-else语句构建MILP约束

时间:2019-04-29 07:59:34

标签: linear-programming integer-programming mixed-integer-programming

我需要通过以下if-else语句构建MILP(混合整数线性规划)约束: Beta是一个常数。

if (a > b) then c = beta else c = 0

如何构建对MILP约束的语句。是否有解决此问题的技术。谢谢。

1 个答案:

答案 0 :(得分:1)

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

Mx >= a - b
M(1-x) >= b - a
x in {0,1}

逻辑是:如果a > b,则x必须等于第一个约束的1(而x 可以必须等于第二个约束的1)。如果b > a,则1-x必须等于第二个约束,即x必须等于0(而x 可以等于0第一约束)。

接下来,我们需要一个约束条件,如果为x = 1,则为c = beta,否则为c = 0

c = beta * x

注意:以上逻辑允许c等于0或beta(如果a = b;求解器将决定​​。如果c是否需要a = b等于0?

另一注:在像这样的“大M”型公式中,最好始终保持M尽可能小,同时保持其有效性。约束。在这种情况下,这意味着将M设置为ab之间的最大可能差值。如果您的模型很小,那就没关系了,但是,如果您有很多这样的决策变量,那么那就很重要了。