1
第 3章 整数规划
2
第 3章的主要内容
整数规划问题与模型
整数规划算法
3
3.1 整数规划问题举例
背背包问题
实例:一
(重量)
目标:选
价值 大
题
一个背包
为 wi,
选择一些
大。
包,容量为
价值 vi。
些物品装入
4
为 W。n
入背包,
n 件物品
使其总容
,物品 i
容量 W
i 容量
W,总
5
问题建模
变量 xi – 是否选择物品 i。
整数规划(0‐1规划):
max i vixi
s.t. i wixi W
xi {0, 1}
6
集合覆盖(Set Cover)问题
实例:基础集合 U = {e1, e2, …, en},集合族 C = {S1, S2, …,
Sm},每一个集合 Si是 U 的一个子集。
目标: 小数目的子集的集合族 C’ C,使得 C’中子
集的“并”包含(覆盖)U 中的所有元素。
整数规划(0‐1规划):
定义判定变量 xi,xi = 1表示集合 Si被选取,xi = 0 表示
7
集合 Si未被选取。
min i xi
s.t. Si: e Si xi 1, e U
xi {0, 1}
旅行售货员(TSP)问题
实例:给定 n+1 个城市,任两个城市 vi 和 vj 之间
有一个距离 cij 0(cij = cji, cii = 0)。一个旅行售货员,
从城市 v0 出发,走遍所有的城市,再回到 v0。
8
目标:售货员应该怎样走,才能使走过的总距离 短?
9
图片来自 www.princeton.edu
10
TSP问题建模
变量 xij:是否使用从城市 vi 到城市 vj 的路径。
约束
每个城市只能到达一次、离开一次。
所走过的路径构成一个圈(不能多于一个圈)。
11
njix
nSx
njx
nix
xc
ij
SjSiij
n
iij
n
jij
jiijij
,,2,1,0,1,0
},2,1,0{1
,,2,1,0,1
,,2,1,0,1s.t.
min
,
0
0
12
强制路径构成仅一个圈
使用如下约束:
nSxSjSi
ij ,,1,0,1,
13
14
整数线性规划的特征、模型
特征—变量整数性要求
问题本身的要求
引入的逻辑变量的需要
性质—可行域是离散点的集合
整数线性规划的常见模型:
一般整数规划模型——变量取值为整数。
0‐1整数规划模型——变量取值为 0 或 1。
15
混合整数规划模型——部分变量取值为整数,部分
变量取值为实数。
整数规划与线性规划的关系
整数规划 线性规划
为整数, ixxbAx
xc
0s.t.
min
0s.t.
min
xbAx
xc
16
线性规划是整数规划的放松。
整数规划的可行解是对应的放松问题的可行解。
放松的线性规划的 优值 整数规划的 优值。
解整数规划
对整数规划的几点说明:
对放松问题的 优解进行简单的舍入(如,四舍五入)
不能得到整数规划的 优解。这样的整数解对于原整
数规划甚至是不可行的。
17
整数可行解的数目可呈爆炸性增长,简单的枚举法不
18
可取。
算法
求精确解:
割平面算法
分枝定界算法
求近似解:
舍入法
原始‐对偶方法
19
3.2 Gomory割平面算法
20
割平面算法的基本思想[Gomory, 1958]
用单纯形法解松驰问题(P0),求到 优解 x0。
若 x0是整数向量,则 x0是 ILP问题(P)的 优解,计算
结束。
否则,根据 x0 设法对(P0)增加一个约束条件,称为割
平面条件。这个割平面条件将(P0)的可行域割掉一块,
且 x0在被割掉的区域中,而原 ILP的任何一个整数可行
解都没有被割掉。
21
记增加了约束条件的问题为(P1)。对(P1)继续上述过程,
直到求到一个整数 优解为止。
说明
如果在增加约束的过程中,得到的 LP 没有可行解,则
原 ILP没有可行解。
如果得到的 LP 问题无界,则原 ILP问题或者无界,或
者没有可行解。
22
割平面生成方法
给定整数规划问题 IP0,A, b, c 中的元素均为整数。
设它的松弛问题为 LP0。用单纯形算法解 LP0,设求得
的 优 bfs为 x0,它的基为 B = (AB(1), AB(2), , AB(m))。
为简便,记非基变量下标的集合为 N。 后一张单纯
形表所表示的 LP0的典式为:
23
mibxax
zxz
iNj
jijiB
Njjj
,,1,)(
0
为简便记,令 zxB )0( , jja 0 , 00 zb 。上式将统
一记为
mibxax iNj
jijiB ,,0 ,)( 。
若 ib 全为整数(0 i m),则 x0为原问题 IP0的 优
解。
24
否则假设 lb 不是整数(0 l m)。 lb 所对应的约束为:
lNj
jljlB bxax
)( 。 (1)
因为 0, jxj ,可知
Nj
jljNj
jlj xaxa。因此有
lNj
jljlB bxax
)( 。由于所要求的 x 为整数向量,该
不等式可加强到
lNj
jljlB bxax
)( 。 (2)
25
(1) (2),得: llNj
jljlj bbxaa 。将该式记为
lNj
jlj fxf , (3)
其中 0 flj < 1, j;0 < fl < 1,称为割平面条件。
割平面条件(3)式是一个新的约束。将它加到 LP0 中,
得到更紧的松弛问题 LP1。
将(3)式两端乘以1,再引入松弛变量 s,得到
lNj
jlj fsxf ,称为割平面方程。
26
这样就得到 LP1 的一个基本(不可行)解和其对偶的
一个可行解,从而可使用对偶单纯形算法继续求解 LP1。
注意
在割平面条件 lNj
jlj fxf 中,有 ljljlj aaf 和
lll bbf 。
当 0lja (以及 0lb )时, ljf (以及 lf )为 lja (以
及 lb )的小数部分。
27
例: 25.1lja , 25.0125.125.125.1 ljf 。
当 0lja 时, ljf 等于 1 “ lja 的小数部分”。( lb 总是
0)
例: 25.1lja , 75.0225.125.125.1 ljf 。
割割平面算算法的流流程图
28
29
算例
整数,0,023
623s.t.
max
21
21
21
2
xxxx
xx
x
解解:
30
31
将松弛问题 LP0化为标准型:
0,,,023
623..
min
4321
421
321
2
xxxxxxx
xxxts
x
,
使用单纯形算法求解:
x1 x2 x3 x4
z 0 1 0 0 0
x3 3 2 1 0 6
x4 3 2 0 1 0
32
x1 x2 x3 x4
z 3/2 0 0 1/2 0
x3 6 0 1 1 6
x2 3/2 1 0 1/2 0
x1 x2 x3 x4
z 0 0 1/4 1/4 3/2
x1 1 0 1/6 1/6 1
x2 0 1 1/4 1/4 3/2
求到松弛问题 LP0的 优 bfs,不是整数解。
33
第 2 行生成的割平面条件为:
21
41
41
43 xx ,
割平面方程为:
21
41
41
143 sxx 。
加入割平面方程,得到松弛问题 LP1的单纯形表:
x1 x2 x3 x4 s1
z 0 0 1/4 1/4 0 3/2
34
x1 1 0 1/6 1/6 0 1
x2 0 1 1/4 1/4 0 3/2
s1 0 0 1/4 1/4 1 1/2
应用对偶单纯形算法继续求解 LP1。
x1 x2 x3 x4 s1
z 0 0 0 0 1 1
x1 1 0 0 1/3 2/3 2/3
x2 0 1 0 0 1 1
x3 0 0 1 1 4 2
LP1的 优解为 x = (2/3, 1, 2, 0, 0),仍然不是整数解。
35
第 1 行生成的割平面条件为:
32
32
32
14 sx 。
对应的割平面方程为:
32
32
32
214 ssx 。
加入割平面方程,得到松弛问题 LP2:
x1 x2 x3 x4 s1 s2
z 0 0 0 0 1 0 1
36
x1 1 0 0 1/3 2/3 0 2/3
x2 0 1 0 0 1 0 1
x3 0 0 1 1 4 0 2
s2 0 0 0 2/3 2/3 1 2/3
继续用对偶单纯形算法求解。
x1 x2 x3 x4 s1 s2
z 0 0 0 0 1 0 1
x1 1 0 0 0 1 1/2 1
x2 0 1 0 0 1 0 1
x3 0 0 1 0 5 3/2 1
37
x4 0 0 0 1 1 3/2 1
得到 LP2的 优解 x = (1, 1, 1, 1, 0, 0),是整数解。
因此原问题 IP0的 优解为 x* = (1, 1)。
对算例的解释
第 1 次切割,割平面条件为
21
41
41
43 xx 。 (1)
由问题 LP0,可知
38
213 236 xxx , (2)
214 23 xxx (3)
将(2)、(3)代入(1),得到与(1)等价的割平面条件:
12 x 。
第 1 次切割,加入的割平面方程为
21
41
41
143 sxx 。(4)
将(2) 、(3)代入(4),可将 s1写成 x1和 x2的线性组合:
121 xs 。 (5)
39
第 2 次切割,割平面条件为
32
32
32
14 sx 。 (6)
将(3)、(5)代入(6),得到与(6)等价的割平面条件:
021 xx 。
40
41
3.3 分枝定界法
42
分枝定界法的基本思想
将状态空间 U 一分为二。——分枝
状态空间可以取 IP 的可行域,或者比其更大。
进入一个状态空间 U’。若判定在 U’ 内不可能找到比
当前已知解更好的解,则摒弃该搜索空间。——剪枝
若在状态空间 U’ 内能够找到更好的解,则用新的解
代替当前的已知解。——定界
若在状态空间 U’ 内已经找到了 好的解,则结束对
43
U’ 的搜索。
否则对状态空间 U’ 继续分枝。
整数规划的情形
考虑整数规划问题 IP0,其松弛记为 LP0:
整数,0s.t.min T
xbAx
xc
, 0s.t.min T
xbAx
xc
。
求 LP0的 优解,记为 x0。若 x0为整数解,则已经求
44
到了 IP0的 优解。
否则设0ix 不为整数。向 IP0 中分别加入两个约束
0ii xx 和 0
ii xx ,得到两个整数规划问题 IP1和 IP2:
整数,0
s.t.min
0
T
xxxbAx
xc
ii , 整数,0
s.t.min
0
T
xxxbAx
xc
ii 。
显然,若 IP0有 优解,则其 优解必定或者在 IP1上
取得,或者在 IP2上取得。
45
解 LP1,若其 优解不是整数解,则对 IP1继续进行分
枝……;解 LP2,若其 优解不是整数解,则对 IP2继
续进行分枝……。
在这个过程中,若对某个 LPk,其 优解 xk为整数解,
且解值比当前已知的 IP0的整数解 x*的解值还要好,
则将 xk作为 IP0的当前已知 好解。
若 LPk 的 优解不是整数解,且其解值 cTxk 比当前已
知的 IP0的 好的整数解的解值 cTx*还要差(即,cTxk
cTx*),则放弃对 LPk的搜索。
46
重复上述过程,当整个状态空间(或者由于求到了整
数解,或者由于剪枝)都搜索完毕后,当前已知 IP0好的解 x*就是 IP0的 优解。
47
搜索树
48
例子
解整数规划:
整数,0,21
1124124.s.t
min
21
2
21
21
21
xx
x
xxxx
xx
。
解:
49
解 LP0, 优解为
T0
25
23
x
, 优解值 z0 = cTx0 = 4。
在01x 上进行分枝,得到两个约束:x1 1和 x1 2。
IP1
整数,0,121
1124124.s.t
min
21
1
2
21
21
21
xxx
x
xxxx
xx
, IP2
整数,0,221
1124124.s.t
min
21
1
2
21
21
21
xxx
x
xxxx
xx
。
50
解 LP2 , 优 解 为
T2
232
x
, 优 解 值
272T2 xcz 。
在22x 上进行分枝,得到两个约束:x2 1和 x2 2。
51
IP3
整数,0,2
121
1124124.s.t
min
21
1
2
21
21
21
xxx
x
xxxx
xx
, IP4
整数,0,22
1124124.s.t
min
21
1
2
21
21
21
xxxx
xxxx
xx
。
解 LP3, 优解为 T3 125.2x ,解值 25.33T2 xcz 。
在31x 上进行分枝,得到两个约束:x1 2和 x1 3。
52
IP5
整数,0,2
121
1124124.s.t
min
21
1
2
21
21
21
xxx
x
xxxx
xx
, IP6
整数,0,3
121
1124124.s.t
min
21
1
2
21
21
21
xxx
x
xxxx
xx
。
解 LP5, 优解为 T5 12x , 优解值 33T5 xcz ,
将其保存为当前已知 IP0 的 好的解 T* 12x ,
53
3* z 。
解 LP6,无解(到达叶节点)。
解 LP4,无解(到达叶节点)。
解 LP1, 优解
T1
231
x
,解值*1T1
25 zxcz ,
剪枝。
状态空间搜索完毕,求得 优解 T* 12x ,解值
3* z 。
54
例子的搜索树
IP0
IP2 IP1
IP3 IP4
IP5 IP6
21 x 11 x
12 x 22 x
31 x21 x
35 z无解
无解
剪枝 251 z
T5 12x
55
例子的搜索过程
56
分枝定界法解整数规划的算法
1 活点集合 A {IP0},上界 U +,当前 好的整
数解 x* NIL。
57
2 while A do
3 从 A 中取出一个问题 IPk,
并将 IPk从 A 中删除。
4 解 LPk。
5 if 无解 then 转 2 else 记 优解为 xk*,值为 zk*。
6 if zk* < U then
7 if xk* 是整数解 then x* xk*,U zk*
else 选择 xk* 的一个非整数分量,生成
IPk 的两个后代问题,加入 A。
58
8 endif
9 endwhile
10 if x* = NIL then 输出“IP0 无解” else 输出解 x*。
11 return
线性规划舍入法
解整数规划的一个方法,是将其放松为线性规划,解
线性规划得到分数 优解,再将分数 优解舍入为原
整数规划的近似解。
59
没有通用的舍入方法。必须针对具体的问题,设计不
同的舍入方法。
举例:顶点覆盖问题
实例:无向图 G = (V, E)。 目标:找 V 的一个最小尺寸的顶点覆盖(子集 V’,使得 V’包含 E 中每一条边的至少一个顶点)。
60
整数规划: VvxEvuxx
x
v
vu
Vvv
}1,0{),(1s.t.
min
线性规划: VvxEvuxx
x
v
vu
Vvv
0),(1s.t.
min
舍入方法: 设 x 是顶点覆盖 LP 的最优解。构造整数解 x 如下:
61
o.w.,021,1 v
vxx
。
分析: x 是一个顶点覆盖。 证明:任取一条边 e = (u, v)。因为 x 是一个可行解,
因此有 xu + xv 1。这表明 xu和 xv中必至少有一个
1/2。即, ux 和 vx 中至少有一个为 1。因此, x 是一个
顶点覆盖。
x 的解值 xSOL 不超过最优解值 OPT 的 2 倍。
例
证明:
例子:
SOL x Vv
vx
62
2 Vv
vx OPT2。
63
OPTf = 3/2 OPT = 2 SOL = 3 SOL 2OPT
64