赞
踩
Benders分解由Jacques F. Benders在1962年提出[1]. 它是一种把线性规划问题分解为小规模子问题的技巧. 通过迭代求解主问题和子问题, 从而逼近原问题的最优解. 适合应用在混合整数规划问题中,将原问题分解成两个只包含连续变量和整数变量的子问题. 本文介绍的内容基于 Georrion和Graves[2].
(注:本文内容参考另外一篇博客[3])
给定如下的一个混合整数规划问题
P
(
x
,
y
)
P(x,y)
P(x,y):
m
i
n
:
c
T
x
+
f
(
y
)
A
x
+
F
(
y
)
=
b
x
≥
0
y
∈
Z
min: c^T x+f(y)\\ \ \ \ \ \ \ \ \ \ \ \ Ax+F(y)=b\\ x\geq 0\\ y\in Z
min:cTx+f(y) Ax+F(y)=bx≥0y∈Z
其中
A
∈
R
m
×
n
A\in R^{m\times n}
A∈Rm×n,
c
∈
R
n
c\in R^n
c∈Rn,
b
∈
R
m
b\in R^m
b∈Rm.
f
(
y
)
f(y)
f(y)和
F
(
y
)
F(y)
F(y)可以是线性的,也可以是非线性的,另外
y
y
y也可以是连续的.
Benders Decomposition的基本思想是固定
y
y
y,那么这个混合整数优化问题就变成了一个连续的线性规划问题. 那么如何确定这个固定的
y
y
y的值,就是Benders Decomposition算法的细节了.
等价形式
先将原问题
P
(
x
,
y
)
P(x,y)
P(x,y)写成如下形式:
m
i
n
y
{
f
(
y
)
+
m
i
n
x
{
c
T
x
∣
A
x
=
b
−
F
(
y
)
,
x
≥
0
}
}
\underset{y}{min}\{f(y)+\underset{x}{min}\{c^T x|Ax=b-F(y),x\geq 0\}\}
ymin{f(y)+xmin{cTx∣Ax=b−F(y),x≥0}}
将其中的这个子优化问题设为
P
(
x
∣
y
)
P(x|y)
P(x∣y):
P
(
x
∣
y
)
:
m
i
n
x
{
c
T
x
∣
A
x
=
b
−
F
(
y
)
,
x
≥
0
}
P(x|y): \underset{x}{min}\{c^T x|Ax=b-F(y),x\geq 0\}
P(x∣y):xmin{cTx∣Ax=b−F(y),x≥0}
这个子问题就是一个标准的线性规划问题,根据对偶性原理,这个子问题的最优解和它的对偶问题的最优解相等,因此,将这个式子变形成它的对偶问题:
D
(
u
∣
y
)
:
m
a
x
u
{
[
b
−
F
(
y
)
]
T
u
∣
A
T
u
≤
c
}
D(u|y): \underset{u}{max}\{[b-F(y)]^Tu|A^T u\leq c\}
D(u∣y):umax{[b−F(y)]Tu∣ATu≤c}
因此
P
(
x
,
y
)
P(x,y)
P(x,y)进而可以写成:
m
i
n
y
{
f
(
y
)
+
m
a
x
u
{
[
b
−
F
(
y
)
]
T
u
∣
A
T
u
≤
c
}
}
\underset{y}{min}\{f(y)+\underset{u}{max}\{[b-F(y)]^Tu|A^T u\leq c\}\}
ymin{f(y)+umax{[b−F(y)]Tu∣ATu≤c}}
写成上述形式的好处是
D
(
u
∣
y
)
D ( u ∣ y )
D(u∣y)中的约束与变量
y
y
y无关. 因此, 其最优解一定是多面体(Polytope)
Q
=
{
u
∣
A
T
u
≤
c
}
Q=\{u | A^T u\leq c\}
Q={u∣ATu≤c}中的一个顶点. 令
U
U
U代表多面体
Q
Q
Q顶点的集合. 因此原问题等价于
m
i
n
y
{
f
(
y
)
+
m
a
x
u
∈
U
{
[
b
−
F
(
y
)
]
T
u
}
}
\underset{y}{min}\{f(y)+\underset{u\in U}{max}\{[b-F(y)]^Tu\}\}
ymin{f(y)+u∈Umax{[b−F(y)]Tu}}
继续转化为
P
1
(
x
,
y
)
P_1 (x,y)
P1(x,y):
m
i
n
:
f
(
y
)
+
z
s
.
t
.
[
b
−
F
(
y
)
]
T
u
≤
z
,
u
∈
U
min:f(y)+z\\ s.t. [b-F(y)]^Tu\leq z,\ \ \ u\in U
min:f(y)+zs.t.[b−F(y)]Tu≤z, u∈U
对原问题
P
(
x
,
y
)
P ( x , y )
P(x,y), 我们先固定
y
y
y得到
P
(
x
∣
y
)
P ( x ∣ y )
P(x∣y), 然后考虑其对偶问题
D
(
u
∣
y
)
D ( u ∣ y )
D(u∣y). 通过这种方式我们把原问题转化成等价问题
P
1
(
u
,
y
)
P_1(u,y)
P1(u,y) . 在新问题
P
1
(
u
,
y
)
P_1(u,y)
P1(u,y)中, 每个约束条件对应一个对偶问题
D
(
u
∣
y
)
D ( u ∣ y )
D(u∣y)的基本解, 且目标函数
f
(
y
)
+
z
f(y)+z
f(y)+z与
u
u
u无关. 这样一来, 使得我们可以通过迭代的方式进行求解:
主问题
P
1
(
u
,
y
)
P 1 ( u , y )
P1(u,y)一开始
U
=
∅
U=\empty
U=∅, 求解出原问题的下界,将最优解对应的
y
y
y赋值给对偶问题
D
(
u
∣
y
)
D ( u ∣ y )
D(u∣y),求解出对偶问题最优解对应的
u
u
u,从而添加新的约束到
P
1
(
u
,
y
)
P_1(u,y)
P1(u,y) ,继续求解。。。如此迭代,直到逼近最优解.
主问题
M
(
y
,
z
∣
u
)
M(y,z|u)
M(y,z∣u)
m
i
n
:
f
(
y
)
+
z
s
.
t
.
[
b
−
F
(
y
)
]
T
u
≤
z
,
u
∈
U
min:f(y)+z\\ s.t. [b-F(y)]^Tu\leq z,\ \ \ u\in U
min:f(y)+zs.t.[b−F(y)]Tu≤z, u∈U
子问题
S
(
u
∣
y
)
S(u|y)
S(u∣y)
m
i
n
:
[
b
−
F
(
y
)
]
T
u
s
.
t
.
A
T
u
≤
c
min:[b-F(y)]^T u\\ s.t. A^T u\leq c
min:[b−F(y)]Tus.t.ATu≤c
伪代码:
Init: B = empty; UB = inf; e = -1e-4;
solve master problem M(y, z) by fixing z := 0 and get y;
let LB := f(y) + z;
While UB - LB > e:
solve sub problem S(u|y) and get u;
update UB := min {UB, f(y) + OPT(sub)};
add constraint [b-F(y)]^T u <= z to the master problem;
solve master problem M(y, z) and get y;
update LB := OPT(master);
EndWhile
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。