首页 > 解决方案 > 在线性规划中表达 OR 约束

问题描述

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

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

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

标签: constraintslinear-programming

解决方案


所以让我们假设你想要约束:

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

推荐阅读