整数规划不等约束

时间:2013-06-23 02:52:15

标签: mathematical-optimization integer-programming

我正在尝试在MIP中建模以下约束:

x_1 +x_2 + ... +x_n != d

我们的想法是引入一个变量z,如果x_1 + x_2 + ... + x_n = d则为1,并添加约束

z <= 0.

但我无法弄清楚如何建模约束

(x_1 +x_2 + ... +x_n = d) ==> z=1 

在整数程序中。

1 个答案:

答案 0 :(得分:5)

我假设所有x_i都是整数。让LU成为常量

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那么第二个约束x_1 +x_2 + ... +x_n <= d-1必须成立,x_1+x_2 + ... +x_n >= L的定义符合第一个约束L

(请检查拼写错误。)


这是整数编程中的臭名昭着的大M方法。它可能导致不良松弛,也可能导致病态问题。


进一步的技巧,谷歌“整数编程技巧”。特别是,请参阅AIMMS Modeling Guide - Integer Programming Tricks了解这个大M方法技巧。