文章目录
一、割平面法介绍
割平面法(Cutting Plane Method)是 R. Gomory 于 1958 年首次提出,主要用于求解整数线性规划模型,其主要思想是:先不考虑整数约束,求解原问题相应的线性松弛问题,并通过不断引入割平面(有效不等式)来缩进线性松弛模型,使得松弛模型不断逼近原整数规划模型的可行域,进而求出原问题的最优解。
对于IP问题而言,B&B有很多提高分枝定界效率的技巧,同样割平面法也有很多增加效率的技巧,比如如何添加有效的割平面,从而提高算法的收敛速度。
下面给出了割平面法的一般流程:
- 步骤1:初始化。松弛整数规划模型为线性松弛模型,松弛模型记作 L P LP LP
- 步骤2:求解当前 L P LP LP ,记其最优解为 x x x
- 步骤3:如果 x x x 为整数解,则其就是原整数模型的最优解,程序结束
- 步骤4:鉴别有效不等式。生成可以切除解 x x x 的有效不等式,并将其加入 L P LP LP
- 步骤5:转到步骤1
二、有效不等式
2.1 有效不等式简介
定义:如果一个线性不等式对于原整数规划模型的所有整数解都成立,那么这个线性不等式就称为原整数规划模型的有效不等式
有效不等式通常会增强其线性松弛模型的有效性
然而,并不是所有有效不等式都可以增强线性松弛模型的有效性。为了增强线性松弛模型的有效性,一个有效不等式必须切除一些在线性模型中可行,但是在整数模型中不可行的解。
一个例子如下所示:
m a x 3 x 1 + 14 x 2 + 18 x 3 s . t . 3 x 1 + 5 x 2 + 6 3 ≤ 10 x 1 , x 2 , x 3 ∈ { 0 , 1 } \begin{align} max \quad &3x_1+14x_2+18x_3 \\ s.t. \quad &3x_1+5x_2+6_3\le 10 \\ &x_1,x_2,x_3 \in \{0,1\} \end{align} maxs.t.3x1+14x2+18x33x1+5x2+63≤10x1,x2,x3∈{0,1}
它的线性最优解为 ( 0 , 0.8 , 1 ) (0,0.8,1) (0,0.8,1)。判断下面不等式是否有效,是否可以加强线性模型:
- x 2 + x 3 ≤ 1 x_2+x_3\le 1 x2+x3≤1:观察模型可知, x 2 x_2 x2 和 x 3 x_3 x3 不能同时取 1 1 1,所以它是原整数模型的有效不等式。并且当前线性模型的最优解 ( 0 , 0.8 , 1 ) (0,0.8,1) (0,0.8,1) 不满足该不等式 0.8 + 1 > 1 0.8 + 1 > 1 0.8+1>1 ,所以它可以增强线性松弛模型的有效性
- x 1 + x 2 + x 3 ≤ 1 x_1+x_2+x_3 \le 1 x1+x2+x3≤1:由于 ( 1 , 0 , 1 ) (1,0,1) (1,0,1) 是原整数模型的可行解,且不满足该不等式,所以该不等式不是有效不等式
- 3 x 1 + 5 x 2 ≤ 10 3x_1+5x_2\le 10 3x1+5x2≤10:观察模型可知,因为约束(2)的存在,所以原整数模型的可行解一定满足该不等式,所以它是有效不等式。但是,对于松弛模型的所有可行解,也都满足该不等式,所以该不等式不能加强线性松弛模型的有效性
最后,总结一个平凡有效的有效不等式应该满足下面两个条件:
- 不能切掉原整数模型的可行解
- 要能切掉线性松弛模型中的可行解
2.2 强有效不等式
在介绍强有效不等式前,先介绍两个基本概念:占优和冗余。
占优:简单来说,假设有两个有效不等式A和B,如果A能切除的解B都能切除,并且B还能切除更多的解,那么就称B占优A。
具体示例如下(假设 x 1 , x 2 ∈ { 0 , 1 } x_1,x_2 \in \{0,1\} x1,x2∈{0,1}):
A : x 1 + 2 x 2 ≤ 2 B : x 1 + x 2 ≤ 1 A: x_1+2x_2 \le 2 \\ B: x_1+x_2 \le 1 A:x1+2x2≤2B:x1+x2≤1
冗余:简单来说,如果不等式A并不能切除任何的可行解,那么就称A是冗余的。
具体示例如下(假设 x 1 ≥ 0 x_1 \ge 0 x1≥0):
A : x 1 ≥ − 1 A: x_1 \ge -1 \\ A:x1≥−1
强有效不等式:如果不等式A是有效不等式,且不存在有效不等式B占优A,则称A是强有效不等式
三、常用有效不等式
3.1 Chvatal-Gomory Cut
Chvatal-Gomory 割平面也被称为 Chvatal-Gomory Cut,是一种简单的有效不等式。原则上,一个整数规划模型的任意有效不等式都可以由这类有效不等式生成。
下面介绍 Chvatal-Gomory Cut 的生成步骤(又称为 Chvatal-Gomory 方法):
- (1)已知 I P IP IP 的一个有效不等式 A A A 为 ∑ j = 1 n a j x j ≤ b \sum_{j=1}^{n}a_jx_j \le b ∑j=1najxj≤b(这可以从基础约束中直接获得)
- (2)在 A A A 的两边同时乘上一个非负数 u u u,从而得到一个新的不等式 B : ∑ j = 1 n u a j x j ≤ u b B: \sum_{j=1}^{n}ua_jx_j \le ub B:∑j=1nuajxj≤ub
- (3)对不等式
B
B
B 的左端系数和右端系数分别向下取整可以得到不等式
C
:
∑
j
=
1
n
⌊
u
a
j
⌋
x
j
≤
⌊
u
b
⌋
C: \sum_{j=1}^{n}\lfloor ua_j \rfloor x_j \le \lfloor ub \rfloor
C:∑j=1n⌊uaj⌋xj≤⌊ub⌋。 有效不等式
C
C
C 就被称为
Chvatal-Gomory Cut
定理:整数规划模型的任意有效不等式都可以通过执行有限次的 Chvatal-Gomory 方法得到(因为生成 Chvatal-Gomory Cut 的步骤(2)中使用到的非负数 u u u 有很多可能的取值,并且有效不等式之间的加减运算又可以构造出新的不等式)
下面用一个简单例子来展示生成 Chvatal-Gomory Cut 的过程:
考虑如下的 0-1 整数规划模型的约束条件:
x 1 + 4 x 2 ≤ 2 6 x 1 − x 2 ≤ 5 x 1 , x 2 ∈ { 0 , 1 } \begin{align} &x_1+4x_2 \le 2 \\ &6x_1-x_2 \le 5 \\ & x_1,x_2 \in \{0,1\} \end{align} x1+4x2≤26x1−x2≤5x1,x2∈{0,1}
假设对于两个约束的非负数 u u u 分别取 u 1 = 1 7 u_1=\frac{1}{7} u1=71 和 u 2 = 1 3 u_2=\frac{1}{3} u2=31,然后在不等式 (4)的两边乘上 u 1 u_1 u1,在不等式(5)的两边乘上 u 2 u_2 u2,可以得到两个新的不等式:
1 7 x 1 + 4 7 x 2 ≤ 2 7 2 x 1 − 1 3 x 2 ≤ 5 3 \begin{align} &\frac{1}{7}x_1+\frac{4}{7}x_2 \le \frac{2}{7} \\ &2x_1-\frac{1}{3}x_2 \le \frac{5}{3} \\ \end{align} 71x1+74x2≤722x1−31x2≤35
对上述两个不等式(7)和(8)进行加权求和,得到有效不等式为:
15
7
x
1
+
5
21
x
2
≤
41
21
\begin{align} &\frac{15}{7}x_1+\frac{5}{21}x_2 \le \frac{41}{21} \end{align}
715x1+215x2≤2141
然后,对不等式(9)的左端和右端系数向下取整,得到新的有效不等式(10),这就是一个 Chvatal-Gomory Cut:
2
x
1
≤
1
\begin{align} &2x_1 \le 1 \end{align}
2x1≤1
当然,针对这个案例,我们还可以进一步对不等式(10)加强:由于 x 1 ∈ { 0 , 1 } x_1 \in \{0,1\} x1∈{0,1} 且 2 x 1 ≤ 1 2x_1 \le 1 2x1≤1 ,所以就可以得到 :
x 1 = 0 \begin{align} &x_1 =0 \end{align} x1=0
直接就可以把 x 1 x_1 x1 的值给确定下来了~!
3.2 Gomory Cut
Gomory Cut 是第一个通用的割平面方法,其基本思想是先求解整数线性规划模型的线性松弛得到最优基,然后选择松弛问题最优解中的非整数基,利用其相应的约束构造 Gomory Cut
3.2.1 纯整数规划模型
考虑如下的纯整数规划模型:
m i n z = c T x s . t . A x = b x ∈ Z + n \begin{align} min \quad &z=\bf c^Tx \\ s.t. \quad &\bf Ax = b \\ &\bf x\in Z^{n}_+ \end{align} mins.t.z=cTxAx=bx∈Z+n
其中, A \bf A A 是一个 m × n m×n m×n 的矩阵。假设已知其线性松弛模型的最优基 B \bf B B,不妨假设 B \bf B B 对应的列为 A \bf A A 的前 m m m 列,记作 A = ( B , N ) \bf A=(B,N) A=(B,N),则模型(12)-(14)可以写成下面的形式:
m i n z = c ˉ 0 + ∑ j ∈ N B c ˉ j x j s . t . x B i + ∑ j ∈ N B a ˉ i j x j = b ˉ i ∀ i = 1 , . . . , m x ∈ Z + n \begin{align} min \quad &z=\bar{c}_0 + \sum_{j\in NB}{\bar{c}_j}x_j \\ s.t. \quad &x_{B_i} + \sum_{j \in NB}{\bar{a}_{ij}x_j} = \bar{b}_i \quad \forall i=1,...,m \\ &\bf x\in Z^{n}_+ \end{align} mins.t.z=cˉ0+j∈NB∑cˉjxjxBi+j∈NB∑aˉijxj=bˉi∀i=1,...,mx∈Z+n
其中, x B i x_{B_i} xBi 为第 i i i 个基变量, b ˉ i ≥ 0 ( i = 1 , . . . , m ) \bar{b}_i\ge 0(i=1,...,m) bˉi≥0(i=1,...,m), N B NB NB 是非基变量指标集
如果线性松弛模型的最优解不是整数解,必然存在某行的右端项 b ˉ i \bar{b}_i bˉi 是非整数的。
因此,我们可以利用 Chvatal-Gomory 方法得到有效不等式:
x B i + ∑ j ∈ N B ⌊ a ˉ i j ⌋ x j ≤ ⌊ b ˉ i ⌋ \begin{align} \quad &x_{B_i} + \sum_{j \in NB}{\lfloor \bar{a}_{ij}\rfloor x_j} \le \lfloor \bar{b}_i \rfloor \end{align} xBi+j∈NB∑⌊aˉij⌋xj≤⌊bˉi⌋
将式(18)两端乘
−
1
-1
−1 并与等式(16)相加,可得到如下所示的有效不等式,称之为 基本的Gomory Cut
:
∑ j ( a ˉ i j − ⌊ a ˉ i j ⌋ ) x j ≥ b ˉ i − ⌊ b ˉ i ⌋ \begin{align} \quad &\sum_{j}{(\bar{a}_{ij} - \lfloor \bar{a}_{ij} \rfloor)x_j \ge \bar{b}_i - \lfloor \bar{b}_i \rfloor} \end{align} j∑(aˉij−⌊aˉij⌋)xj≥bˉi−⌊bˉi⌋
对于任意行 i = 1 , . . . , m i=1,...,m i=1,...,m 和任意列 j = 1 , . . . , n j=1,...,n j=1,...,n ,定义 f i 0 = b ˉ i − ⌊ b ˉ i ⌋ f_{i0}=\bar{b}_i-\lfloor \bar{b}_i \rfloor fi0=bˉi−⌊bˉi⌋, f i j = a ˉ i j − ⌊ a ˉ i j ⌋ f_{ij}=\bar{a}_{ij} - \lfloor \bar{a}_{ij} \rfloor fij=aˉij−⌊aˉij⌋,则不等式(19)还可以等效表达为:
∑ j f i j x j ≥ f i 0 \begin{align} \quad &\sum_{j}{f_{ij}x_j \ge f_{i0}} \end{align} j∑fijxj≥fi0
下面给出加强的Gomory Cut
:
∑ f i j ≤ f i 0 f i j x j + ∑ f i j > f i 0 f i 0 1 − f i 0 ( 1 − f i j ) x j ≥ f i 0 \begin{align} \quad &\sum_{f_{ij}\le f_{i0}}{f_{ij}x_j} + \sum_{f_{ij}>f_{i0}}{\frac{f_{i0}}{1-f_{i0}}(1-f_{ij})x_j} \ge f_{i0} \end{align} fij≤fi0∑fijxj+fij>fi0∑1−fi0fi0(1−fij)xj≥fi0
不等式(21)比不等式(20)更强(证明过程略)
3.2.2 混合整数规划模型
上面介绍的 Gomory Cut 只适用于纯整数规划模型,下面介绍适用于混合整数规划模型的 Gomory Cut
考虑下面的混合整数规划模型:
m i n z = c 1 T x + c 2 T y s . t . A 1 x + A 2 y = b x ∈ R + n 1 , y ∈ Z + n 2 \begin{align} min \quad &z = \bf c^T_1x+c^T_2y \\ s.t. \quad &\bf A_1x + A_2y = b \\ & \bf x \in R^{n_1}_+,y\in Z^{n_2}_+ \end{align} mins.t.z=c1Tx+c2TyA1x+A2y=bx∈R+n1,y∈Z+n2
其中, A 1 \bf A_1 A1 和 A 2 \bf A_2 A2 分别是 m × n 1 m×n_1 m×n1 和 m × n 2 m×n_2 m×n2 的矩阵, c 1 ∈ R n 1 , c 2 ∈ R n 2 , b ∈ R m \bf c_1\in R^{n_1},c_2\in R^{n_2} ,b\in R^{m} c1∈Rn1,c2∈Rn2,b∈Rm
假设已知其线性松弛问题的最优基 B \bf B B,并且在 B \bf B B 中存在并未取到整数值的基变量 y B i y_{B_i} yBi,则其对应的等式约束可以写成以下形式:
y B i + ∑ j ∈ N 2 a ˉ i j y j + ∑ j ∈ N 1 a ˉ i j x j = b ˉ i \begin{align} &y_{B_i} + \sum_{j\in N_2}{\bar{a}_{ij}y_j} + \sum_{j\in N_1}{\bar{a}_{ij}x_j} = \bar{b}_i \end{align} yBi+j∈N2∑aˉijyj+j∈N1∑aˉijxj=bˉi
其中, N 2 N_2 N2 对应非基变量中的整数变量, N 1 N_1 N1 对应非基变量中的实数变量
则可以给出适用于混合整数规划模型的 Gomory Cut 如下所示(称之为 Gomory 混合整数割
):
∑ f i j ≤ f i 0 f i j y j + ∑ f i j > f i 0 f i 0 ( 1 − f i j ) 1 − f i 0 y i j + ∑ a ˉ i j > 0 a ˉ i j x j + ∑ a ˉ i j < 0 f i 0 1 − f i 0 a ˉ i j x j ≥ f i 0 \begin{align} &\sum_{f_{ij}\le f_{i0}}{f_{ij}y_j} + \sum_{f_{ij}>f_{i0}}{\frac{f_{i0}(1-f_{ij})}{1-f_{i0}}y_{ij}} + \sum_{\bar{a}_{ij} > 0}{\bar{a}_{ij}x_j} + \sum_{\bar{a}_{ij} < 0}{\frac{f_{i0}}{1-f_{i0}}\bar{a}_{ij}x_j} \ge f_{i0} \end{align} fij≤fi0∑fijyj+fij>fi0∑1−fi0fi0(1−fij)yij+aˉij>0∑aˉijxj+aˉij<0∑1−fi0fi0aˉijxj≥fi0
3.3 Mixed Integer Rounding Cut
设 N = { ( x , y ) ∈ R + × Z + ∣ x + y ≥ b } N=\{(x,y)\in R_+ × Z_+ | x+y \ge b\} N={(x,y)∈R+×Z+∣x+y≥b},如果 f = b − ⌊ b ⌋ > 0 f=b-\lfloor b \rfloor > 0 f=b−⌊b⌋>0,则
x ≥ f ( ⌈ b ⌉ − y ) 或 x y + y ≥ ⌈ b ⌉ \begin{align} &x \ge f(\lceil b \rceil-y) \ 或\ \frac{x}{y} + y \ge \lceil b \rceil \end{align} x≥f(⌈b⌉−y) 或 yx+y≥⌈b⌉
是集合
N
N
N 的有效不等式,称为 Mixed Integer Rounding Cut(混合舍入整数割)
3.4 Covering Cut
考虑 0-1 背包集合( b b b 为背包的容量, w j w_j wj为第 j j j 个物品的重量, x j x_j xj 表示是否放入第 j j j 个物品):
N = { x ∈ { 0 , 1 } n ∣ ∑ j = 1 n w j x j ≤ b } \begin{align} &N=\{ x\in \{0,1\}^n | \sum_{j=1}^{n}{w_jx_j} \le b\} \end{align} N={x∈{0,1}n∣j=1∑nwjxj≤b}
如果集合
C
C
C 满足
∑
j
∈
C
w
j
>
b
\sum_{j\in C}{w_j} > b
∑j∈Cwj>b,则称
C
C
C 是一个覆盖
,若覆盖集合
C
C
C 中去掉任何一个元素之后都不再是覆盖,则称
C
C
C 为最小覆盖
由覆盖的定义可以得到如下的 Covering Cut(覆盖不等式)
:
∑ j ∈ C x j ≤ ∣ C ∣ − 1 \begin{align} &\sum_{j\in C}x_j \le |C|-1 \end{align} j∈C∑xj≤∣C∣−1
接着,我们还可以得到 加强的Covering Cut
(证明过程略):
∑ j ∈ E ( C ) x j ≤ ∣ C ∣ − 1 \begin{align} &\sum_{j\in E(C)}x_j \le |C|-1 \end{align} j∈E(C)∑xj≤∣C∣−1
其中, E ( C ) = C ∪ { j ∣ w j ≥ w i , ∀ i ∈ C } E(C)=C \cup \{j|w_j\ge w_i,\forall i \in C\} E(C)=C∪{j∣wj≥wi,∀i∈C}
四、Java调用Cplex代码实战
4.1 实战1:基于 Gomory Cut 的割平面法求解 IP
考虑下面的纯整数规划模型:
m a x x 1 + x 2 s . t . − x 1 + x 2 ≤ 4 3 x 1 + x 2 ≤ 2 x 1 , x 2 ∈ { 0 , 1 } \begin{align} max \quad &x_1+x_2 \\ s.t. \quad &-x_1+x_2 \le 4 \\ & 3x_1+x_2\le 2 \\ &x_1,x_2 \in \{0,1\} \end{align} maxs.t.x1+x2−x1+x2≤43x1+x2≤2x1,x2∈{0,1}
Java代码实现如下:
未完待续...