条件如下:
if(x > 0)
{
y >= a;
z <= b;
}
如果x,则很容易将条件转换为线性规划约束都是二元变量。但我没有找到一个方法来做到这一点。
可以分两步完成
步骤1:引入二进制虚拟变量
由于x
是连续的,我们可以引入二进制0/1
哑变量。设为x_positive
如果x>0
,那么我们想要x_positive =1
。我们可以通过以下约束来实现,其中M
是一个非常大的数字。
x < x_positive * M
注意,如果x本身为正数,则强制x_positive变为1。如果x是负的,x_positive
可以是任何值。(我们可以通过将其添加到目标函数中并加上适当的符号来强制它为零。)
步骤2:使用虚拟变量实现接下来的2个约束
中文:ifx_positive = 1
, theny >= a
然而,如果x_positive = 0
, y可以是任何(y > -inf
)
y > a - M (1 - x_positive)
相似的,
如果x_positive = 1
,则z <= b
z <= b + M * (1 - x_positive)
当x <=0时,上述两个线性约束都将生效;当x <=0时,上述两个线性约束都将被满足。