【运筹优化】整数规划优化方法:割平面法详解 + Java调用Cplex代码实战


一、割平面法介绍

割平面法(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+6310x1,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+x31:观察模型可知, 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+x31:由于 ( 1 , 0 , 1 ) (1,0,1) (1,0,1) 是原整数模型的可行解,且不满足该不等式,所以该不等式不是有效不等式
  • 3 x 1 + 5 x 2 ≤ 10 3x_1+5x_2\le 10 3x1+5x210:观察模型可知,因为约束(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+2x22B:x1+x21

冗余:简单来说,如果不等式A并不能切除任何的可行解,那么就称A是冗余的。

具体示例如下(假设 x 1 ≥ 0 x_1 \ge 0 x10):

A : x 1 ≥ − 1 A: x_1 \ge -1 \\ A:x11

强有效不等式:如果不等式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=1najxjb(这可以从基础约束中直接获得)
  • (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=1nuajxjub
  • (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=1nuajxjub。 有效不等式 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+4x226x1x25x1,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+74x2722x131x235

对上述两个不等式(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+215x22141

然后,对不等式(9)的左端和右端系数向下取整,得到新的有效不等式(10),这就是一个 Chvatal-Gomory Cut:
2 x 1 ≤ 1 \begin{align} &2x_1 \le 1 \end{align} 2x11

当然,针对这个案例,我们还可以进一步对不等式(10)加强:由于 x 1 ∈ { 0 , 1 } x_1 \in \{0,1\} x1{0,1} 2 x 1 ≤ 1 2x_1 \le 1 2x11 ,所以就可以得到 :

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=bxZ+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+jNBcˉjxjxBi+jNBaˉijxj=bˉii=1,...,mxZ+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ˉi0(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+jNBaˉijxjbˉ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ˉijaˉij⌋)xjbˉibˉ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ˉibˉi f i j = a ˉ i j − ⌊ a ˉ i j ⌋ f_{ij}=\bar{a}_{ij} - \lfloor \bar{a}_{ij} \rfloor fij=aˉijaˉ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} jfijxjfi0

下面给出加强的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} fijfi0fijxj+fij>fi01fi0fi0(1fij)xjfi0

不等式(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=bxR+n1,yZ+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} c1Rn1,c2Rn2,bRm

假设已知其线性松弛问题的最优基 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+jN2aˉijyj+jN1aˉ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} fijfi0fijyj+fij>fi01fi0fi0(1fij)yij+aˉij>0aˉijxj+aˉij<01fi0fi0aˉijxjfi0

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+yb},如果 f = b − ⌊ b ⌋ > 0 f=b-\lfloor b \rfloor > 0 f=bb>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} xf(⌈by)  yx+yb

是集合 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}nj=1nwjxjb}

如果集合 C C C 满足 ∑ j ∈ C w j > b \sum_{j\in C}{w_j} > b jCwj>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} jCxjC1

接着,我们还可以得到 加强的Covering Cut (证明过程略):

∑ j ∈ E ( C ) x j ≤ ∣ C ∣ − 1 \begin{align} &\sum_{j\in E(C)}x_j \le |C|-1 \end{align} jE(C)xjC1

其中, 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{jwjwi,iC}


四、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+x2x1+x243x1+x22x1,x2{0,1}

Java代码实现如下:

未完待续...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WSKH0929

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值