2.3.3 If-then约束
若x是一个任意类型的决策变量,f(x)是关于x的函数,y为0-1变量。假设y和f(x)满足如下关系:如果f(x)≥0,则y=1。类似这种的约束就是If-then约束。
If-then约束的主要建模方法正是上文提到的大M建模方法。不过,在建模过程中一般需要将原命题转换为其逆否命题,这样能够更好地对应到定理2.3.2。
接下来通过一个具体案例来介绍If-then约束的建模。
【例2.1】设v为0-1决策变量,x1和x2为任意类型的决策变量(0-1型、连续型或整数型)。若三者之间的取值关系为
试将上述关系建模为等价的线性约束。注意,x1和x2也可以被替换为表达式。
注意到上述关系中包含2个命题,下面对其分别处理。
(1)第1个命题为:如果x1≥x2,则v=1。注意到该命题的形式和上文定理中提到的略有不同。为了转换成完全相同的形式,将该命题变成其逆否命题:如果v=0,则x1<x2。借助定理2.3.2,该命题可以表示为x1-x2-Mv<0。但是,在数学规划中,一般不使用大于号(>)和小于号(<);若出现这种情况,需要将其转换成≥或者≤。转换方法是,引入一个非常小的正数ϵ,则上述约束即可改写为x1-x2+ϵ-Mv≤0,其中,M是x1-x2的一个上界。
(2)第2个命题为:如果x1<x2,则v=0。同样地,将其转换为逆否命题:如果v=1,则x1≥x2。观察到,v=1等价于1-v=0。因此,该约束可以改写为x2-x1-M(1-v)≤0,其中,M是x2-x1的一个上界。
综上,上述If-then约束的等价线性约束为
其中,M是|x1-x2|的一个上界。
上述案例展示了详细的If-then约束的建模推导步骤。接下来汇总一些常见的If-then约束的建模方法,见表2.2[3]。其中,x为任意类型决策变量,y、z1、z2、z3为0-1变量,f(x)为关于x的函数,ϵ为一个很小的正数(例如10-6),M是一个足够大的正数(或者是对应的表达式的一个上界)。
表2.2 常见的If-then约束的建模方法
续表