数学建模与数学规划:方法、案例及编程实战(Python+COPT/Gurobi实现)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.3.3 If-then约束

x是一个任意类型的决策变量,fx)是关于x的函数,y为0-1变量。假设yfx)满足如下关系:如果fx)≥0,则y=1。类似这种的约束就是If-then约束。

If-then约束的主要建模方法正是上文提到的大M建模方法。不过,在建模过程中一般需要将原命题转换为其逆否命题,这样能够更好地对应到定理2.3.2

接下来通过一个具体案例来介绍If-then约束的建模。

【例2.1】v为0-1决策变量,x1x2为任意类型的决策变量(0-1型、连续型或整数型)。若三者之间的取值关系为

试将上述关系建模为等价的线性约束。注意,x1x2也可以被替换为表达式。

注意到上述关系中包含2个命题,下面对其分别处理。

(1)第1个命题为:如果x1x2,则v=1。注意到该命题的形式和上文定理中提到的略有不同。为了转换成完全相同的形式,将该命题变成其逆否命题:如果v=0,则x1x2。借助定理2.3.2,该命题可以表示为x1-x2-Mv<0。但是,在数学规划中,一般不使用大于号(>)和小于号(<);若出现这种情况,需要将其转换成≥或者≤。转换方法是,引入一个非常小的正数ϵ,则上述约束即可改写为x1-x2+ϵ-Mv≤0,其中,Mx1-x2的一个上界。

(2)第2个命题为:如果x1x2,则v=0。同样地,将其转换为逆否命题:如果v=1,则x1x2。观察到,v=1等价于1-v=0。因此,该约束可以改写为x2-x1-M(1-v)≤0,其中,Mx2-x1的一个上界。

综上,上述If-then约束的等价线性约束为

其中,M是|x1-x2|的一个上界。

上述案例展示了详细的If-then约束的建模推导步骤。接下来汇总一些常见的If-then约束的建模方法,见表2.2[3]。其中,x为任意类型决策变量,yz1z2z3为0-1变量,fx)为关于x的函数,ϵ为一个很小的正数(例如10-6),M是一个足够大的正数(或者是对应的表达式的一个上界)。

表2.2 常见的If-then约束的建模方法

续表