Benders分解
基本描述
原问题的矩阵表示形式:
M
i
n
i
m
i
z
e
z
=
c
T
x
+
f
T
y
s
u
b
j
e
c
t
t
o
:
A
x
+
B
y
=
b
x
≥
0
,
y
∈
Y
⊆
R
q
\begin{array}{r}\mathrm{Minimize~z=c^T x+f^T y}\\\mathrm{subject~to:~Ax+By=b}\\\mathrm{x\geq0,y\in Y~\subseteq\mathbb{R^q}}\end{array}
Minimize z=cTx+fTysubject to: Ax+By=bx≥0,y∈Y ⊆Rq
主问题(master problem):
Minimize
z= f
T
y
+
q
(
y
)
subject to: y
∈
Y
\begin{array}{l}\text{Minimize\quad z= f}^\mathrm{T}\mathrm{y}+\mathrm{q}(\mathrm{y})\\\text{subject to: y}\in\mathrm{Y}\end{array}
Minimizez= fTy+q(y)subject to: y∈Y
式中
q
(
y
)
q(y)
q(y)是在y给定时子问题的最优值
子问题(subproblem):
Minimize c
T
x
subject to: A
x
=
b
−
B
y
x
≥
0
\begin{array}{c}\text{Minimize c}^\mathrm{T}\text{x}\\\text{subject to: A}\mathrm{x}=\mathrm{b}-\mathrm{B}\mathrm{y}\\\mathrm{x}\geq0\end{array}
Minimize cTxsubject to: Ax=b−Byx≥0
子问题的对偶问题为:
max
u
{
(
b
−
B
y
)
T
u
:
A
T
u
≤
c
,
u
∈
R
+
p
}
\max_u\left\{(b-By)^Tu:A^Tu\leq c,u\in R_+^p\right\}
umax{(b−By)Tu:ATu≤c,u∈R+p}
子问题有解策略
若子问题无界,则原问题无界。在子问题有界时,我们可以通过求解子问题的对偶问题来求解 q ( y ) q(y) q(y)。
注意,在子问题的对偶问题中,不看目标函数,只看约束条件:
A
T
u
≤
c
,
u
∈
R
+
p
A^Tu\leq c,u\in R_+^p
ATu≤c,u∈R+p,可行空间中存在多个极点
(
u
)
(u)
(u),这些极点中的一个:
u
∗
u^*
u∗是全局最优的
y
∗
y^*
y∗对应的极点。这些极点中的另一个**
u
ˉ
\bar{u}
uˉ是当前的y对应的极点。由于对偶问题是一个max问题,对
y
∗
y^*
y∗来说,
u
ˉ
\bar{u}
uˉ**计算出的目标值一定小于等于
u
∗
u^*
u∗计算出的目标值:
(
b
−
B
y
∗
)
T
u
∗
+
f
T
y
∗
≥
(
b
−
B
y
∗
)
T
u
ˉ
+
f
T
y
∗
(\mathbf{b}-B\mathbf{y^*})^{\mathrm{T}}\mathbf{{u}^*}+\mathbf{f}^{\mathrm{T}}\mathbf{y^*}\geq (\mathbf{b}-B\mathbf{y^*})^{\mathrm{T}}\mathbf{\bar{u}}+\mathbf{f}^{\mathrm{T}}\mathbf{y^*}
(b−By∗)Tu∗+fTy∗≥(b−By∗)Tuˉ+fTy∗
这就相当于给出了
z
z
z的一个下界。(所有依赖于线性规划的最优解一定取在顶点上)
z
≥
(
b
−
B
y
)
T
u
ˉ
+
f
T
y
z\geq (\mathbf{b}-B\mathbf{y})^{\mathrm{T}}\mathbf{\bar{u}}+\mathbf{f}^{\mathrm{T}}\mathbf{y}
z≥(b−By)Tuˉ+fTy
将此约束加入到主问题中,在最小化问题中,下界直接限制了y的变化范围,让其离真实的y越来越近。
子问题无解策略
如果子问题无解,说明取得y不合理,需要对y加以限制。
根据弱对偶原理,原问题 与 对偶问题 ,
一个无界 , 另一个肯定不可行 ;
一个不可行 , 另一个不一定可行 , 有两种情况 ① 无界解 ② 无可行解 ;
如果子问题的对偶问题不可行,无论y怎么调整子问题的对偶问题都不可行;如果子问题的对偶问题无界,调整y可以使其可行。
基于此,采用加入极方向约束进行限制:
v
t
(
b
−
B
y
)
≤
0
v^t\left(b-By\right)\leq0
vt(b−By)≤0
其中
v
t
v^t
vt是对偶问题的极方向。其中极方向集合为
U
=
{
v
∈
R
+
p
:
A
T
v
≥
c
}
U=\left\{v\in R_{+}^{p}:\:A^{T}v\geq c\right\}
U={v∈R+p:ATv≥c}
通过此方法可以限制y让其在此极方向上有解。
收敛条件
上界:
子问题的解加主问题的解,y是这一轮迭代求解出的值。
U
B
=
(
b
−
B
y
)
T
u
ˉ
+
f
T
y
UB=(\mathbf{b}-B\mathbf{y})^{\mathrm{T}}\mathbf{\bar{u}}+\mathbf{f}^{\mathrm{T}}\mathbf{y}
UB=(b−By)Tuˉ+fTy
下界:
每次迭代主问题的解,主问题如下所示:
min
z
v
t
(
b
−
B
y
)
≤
0
z
≥
(
b
−
B
y
)
T
u
ˉ
+
f
T
y
\min~z\\ v^t\left(b-By\right)\leq0\\ z\geq (\mathbf{b}-B\mathbf{y})^{\mathrm{T}}\mathbf{\bar{u}}+\mathbf{f}^{\mathrm{T}}\mathbf{y}
min zvt(b−By)≤0z≥(b−By)Tuˉ+fTy
算法流程:
-
step1:初始化,初始化上下界 U B : = + ∞ , L B : = − ∞ UB := +\infty, LB := -\infty UB:=+∞,LB:=−∞
-
step2:若 U B − L B > ϵ UB-LB>\epsilon UB−LB>ϵ 则进入Step 3,否则直接输出最优解
-
step3:求解对偶问题,得到最优解 u ˉ \bar{u} uˉ
-
step4:若对偶问题无界,则添加约束 v t ( b − B y ) ≤ 0 v^t\left(b-By\right)\leq0 vt(b−By)≤0到主问题中
-
step5:若对偶问题有解,则添加约束 z ≥ ( b − B y ) T u ˉ + f T y z\geq (\mathbf{b}-B\mathbf{y})^{\mathrm{T}}\mathbf{\bar{u}}+\mathbf{f}^{\mathrm{T}}\mathbf{y} z≥(b−By)Tuˉ+fTy到主问题中,更新 U B = min { U B , ( b − B y ) T u ˉ + f T y } UB= \min\{UB,(\mathbf{b}-B\mathbf{y})^{\mathrm{T}}\mathbf{\bar{u}}+\mathbf{f}^{\mathrm{T}}\mathbf{y}\} UB=min{UB,(b−By)Tuˉ+fTy}
-
step6:求解主问题得到最优解 y n e w , η n e w y_{new},\eta_{new} ynew,ηnew,然后更新 L B : = f T y n e w + η n e w LB:=f^{T}y_{new}+\eta_{new} LB:=fTynew+ηnew,返回step 2
参考: