在线性规划中表达“或”约束

时间:2018-06-22 12:02:33

标签: constraints linear-programming

我在线性程序中有一个浮点变量x,该浮点变量应为0或两个常数CONSTANT_ACONSTANT_B之间:

LP.addConstraint(x == 0 OR CONSTANT_A <= x <= CONSTANT_B)

当然,线性编程中没有明确的OR这样的东西。有没有办法表达这种约束?

1 个答案:

答案 0 :(得分:1)

因此,假设您需要约束:

x == 0 OR 1 <= x <= 2

很明显,线性程序的可行区域不是凸的,因为x = 0和x = 1都是可行的,但是没有合适的凸组合是可行的。结果,用线性程序对此模型进行建模是不可能的。

话虽如此,如果您引入一个二进制决策变量y,就很容易对此建模,如果我们在该范围内,则取值为1;如果固定为0,则取值为0。那么您可以对以下内容进行建模:

y <= x <= 2*y
y binary

或者,在您的一般情况下:

y*CONSTANT_A <= x <= y*CONSTANT_B
y binary