我正在尝试在 MIP 中对以下约束进行建模:
x_1 +x_2 + ... +x_n != d
这个想法是引入一个变量 z 是 1,如果 x_1 +x_2 + ... +x_n = d 并添加约束
z <= 0.
但我不知道如何为约束建模
(x_1 +x_2 + ... +x_n = d) ==> z=1
在整数程序中。
我正在尝试在 MIP 中对以下约束进行建模:
x_1 +x_2 + ... +x_n != d
这个想法是引入一个变量 z 是 1,如果 x_1 +x_2 + ... +x_n = d 并添加约束
z <= 0.
但我不知道如何为约束建模
(x_1 +x_2 + ... +x_n = d) ==> z=1
在整数程序中。
我假设所有x_i
都是整数。让L
和U
是常数,使得
L <= x_1+x_2 + ... +x_n <= U
和y
一个二进制变量。这些约束表达了您正在寻找的内容:
x_1+x_2 + ... +x_n >= d+1 + (L-d-1)y
x_1+x_2 + ... +x_n <= d-1 + (U-d+1)(1-y)
如果y=0
那么第一个约束x_1 +x_2 + ... +x_n >= d+1
必须成立,并且第二个约束x_1+x_2 + ... +x_n <= U
满足 的定义U
。
如果y=1
then 则第二个约束x_1 +x_2 + ... +x_n <= d-1
必须成立,并且第一个约束x_1+x_2 + ... +x_n >= L
由 的定义满足L
。
(请检查错别字。)
这就是整数规划中臭名昭著的大 M 方法。它可能导致放松不良,也可能导致病态问题。
更多技巧,谷歌“整数编程技巧”。特别是,请参阅AIMMS 建模指南 - 整数编程技巧,了解这个大 M 方法技巧。