在线性规划中表达 OR 约束

the*_*sys 3 constraints linear-programming

我在线性程序中有一个浮点变量x,该变量应位于0两个常量CONSTANT_A和之间或之间CONSTANT_B

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

当然,OR线性规划中不存在显式的东西。有没有办法表达这个约束?

jos*_*ber 7

因此,我们假设您想要约束:

x == 0 OR 1 <= x <= 2
Run Code Online (Sandbox Code Playgroud)

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

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

y <= x <= 2*y
y binary
Run Code Online (Sandbox Code Playgroud)

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

y*CONSTANT_A <= x <= y*CONSTANT_B
y binary
Run Code Online (Sandbox Code Playgroud)