声明:
- 本文的目的是记录和分享学到的知识。作者已尽一切努力确保本文内容的准确性。作者在此声明不承担因本文中的错误或遗漏造成的任何损失所带来的责任,无论这些错误或遗漏是意外、疏忽或其他原因导致的。
- 转载请备注来源,欢迎点赞、收藏或指出本文不足。
- 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
- 本文链接:https://blog.csdn.net/weixin_45746917/article/details/125524606
本文由作者用心整理,希望对您有所帮助。如果您入门或困扰于该问题,请您静下心来阅读,准备纸笔推导,一定会有所收获。所有例子和引证均带有来源,可点超链接深入了解。
快速查阅
1 概述
拉格朗日松弛是一种求解整数规划的、基于优化的启发式算法。该算法能提供较为优质的解,可证明解的质量(可得到优化上下界),但不保证最优性。拉格朗日松弛的应用十分广泛,例如无容量限制的设施选址问题(该问题为NP-hard问题)。
拉格朗日松弛算法可追溯到Everett 1963年,Fisher 1973使用了该算法求解了调度问题。注意,该算法并不是拉格朗日提出的,是借鉴了拉格朗日乘子法的一些启示,由(Geoffrion 1974)命名。
-
松弛方法对于一个优化问题十分重要,因为这种方法为最优值提供了“上下界限”。
-
松弛就是把一个问题的约束变弱,这样可行域就大了,也能方便求解了。
-
最小化问题中,松弛问题的最优值是下界。最大化问题是上界。
-
松弛技术的精髓就是设计一个容易求解的松弛问题并得到一个优质的“界”。
链接: Everett 1963
链接: Fisher 1973
1.1 从拉格朗日乘子法开始
微积分中,一类问题是求解一个函数的极大值或者极小值。当这个函数受限于另一个函数的时候,问题求解将变得困难。详见同济版《高等数学 下》(高等教育出版社)多元函数的极值及其求法——条件极值 拉格朗日乘数法。
1.1.1 维基百科的一个例子
参见维基百科。
求函数
f
(
x
,
y
)
f(x,y)
f(x,y)的极值,且要求满足条件
g
(
x
,
y
)
=
c
g(x,y)=c
g(x,y)=c。
这里简单描述一下原理和证明过程,详细证明参见引用来源。假设
f
(
x
,
y
)
f(x,y)
f(x,y)的取值为
d
n
d_n
dn,注意
d
n
d_n
dn是随
x
x
x和
y
y
y的值变化的。只有
f
(
x
,
y
)
=
d
n
f(x,y)=d_n
f(x,y)=dn和
g
(
x
,
y
)
=
c
g(x,y)=c
g(x,y)=c相切时,同时沿着有
f
(
x
,
y
)
=
d
n
f(x,y)=d_n
f(x,y)=dn和
g
(
x
,
y
)
=
c
g(x,y)=c
g(x,y)=c的方向前进,在这种情况下,会出现极值。
由于二者是相切关系,那么二者的梯度满足如下关系:(切线、法线、梯度的关系)
∇
f
(
x
,
y
)
=
−
λ
∇
(
g
(
x
,
y
)
−
c
)
\nabla f(x,y) = -\lambda \nabla (g(x,y)-c)
∇f(x,y)=−λ∇(g(x,y)−c)
于是,有
∇
[
f
(
x
,
y
)
+
λ
(
g
(
x
,
y
)
−
c
)
]
=
0
\nabla[f(x,y) + \lambda (g(x,y)-c)]=0\\
∇[f(x,y)+λ(g(x,y)−c)]=0
这样,如果求出了
λ
\lambda
λ的值,带到
F
(
x
,
y
,
λ
)
=
f
(
x
,
y
)
+
λ
(
g
(
x
,
y
)
−
c
)
F(x,y,\lambda)=f(x,y) + \lambda(g(x,y)-c)
F(x,y,λ)=f(x,y)+λ(g(x,y)−c)中,就能求出无约束条件下的极值和对应的极值点。
F
(
x
,
y
,
λ
)
F(x,y,\lambda)
F(x,y,λ)和
f
(
x
,
y
)
f(x,y)
f(x,y)在极值点处相等。极值点处,
∇
F
(
x
,
y
,
λ
)
=
0
\nabla F(x,y,\lambda)=0
∇F(x,y,λ)=0,且
∂
F
∂
λ
=
g
(
x
,
y
)
−
c
\frac{\partial F}{\partial \lambda}=g(x,y)-c
∂λ∂F=g(x,y)−c,
g
(
x
,
y
)
−
c
=
0
g(x,y)-c=0
g(x,y)−c=0,所以极值点处有
F
(
x
,
y
,
λ
)
=
f
(
x
,
y
)
F(x,y,\lambda)=f(x,y)
F(x,y,λ)=f(x,y)。
1.1.2 同济版第7版《高等数学 下》的例子
第九章p117给出了更详细的证明,这里直接给出结论:要找
z
=
f
(
x
,
y
)
z=f(x,y)
z=f(x,y)在附加条件
ϕ
(
x
,
y
)
=
0
\phi (x,y)=0
ϕ(x,y)=0下的可能极值点,可做拉格朗日函数:
L
(
x
,
y
)
=
f
(
x
,
y
)
+
λ
ϕ
(
x
,
y
)
L(x,y) = f(x,y) + \lambda \phi(x,y)
L(x,y)=f(x,y)+λϕ(x,y)
其中
λ
\lambda
λ为参数,然后求
L
L
L对
x
,
y
,
λ
x,y,\lambda
x,y,λ的一阶偏导,并令其为0,将这个三个等式联立。方程组求解得到的解
(
x
,
y
)
(x,y)
(x,y)就是
f
(
x
,
y
)
f(x,y)
f(x,y)可能的极值点。
2 整数规划拉格朗日松弛
2.1 问题构建
给定一个待求解的整数规划问题(
P
P
P):
Z
=
min
c
x
s.t.
A
x
=
b
D
x
≤
e
x
≥
0
and integral
(
P
)
\begin{aligned} Z=& \min c x \\ \text { s.t. } & A x=b \\ & D x \leq e \\ & x \geq 0 \text { and integral } \end{aligned} \quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\left(\mathrm{P}\right)
Z= s.t. mincxAx=bDx≤ex≥0 and integral (P)
我们松弛其整数约束,得到
L
P
LP
LP问题:
Z
=
min
c
x
s.t.
A
x
=
b
D
x
≤
e
x
≥
0
(
L
P
)
\begin{aligned} Z=& \min c x \\ \text { s.t. } & A x=b \\ & D x \leq e \\ & x \geq 0 \end{aligned} \quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\left(\mathrm{LP}\right)
Z= s.t. mincxAx=bDx≤ex≥0(LP)
我们松弛第一个等于约束,得到一个松弛后的拉格朗日问题(
L
R
u
LR_u
LRu),其中
u
=
{
u
1
,
u
2
,
.
.
.
u
m
}
u=\{u_1,u_2,...u_m\}
u={u1,u2,...um}是拉格朗日乘子。
Z
D
(
u
)
=
min
c
x
+
u
(
A
x
−
b
)
s.t.
D
x
≤
e
x
≥
0
and integral
(
L
R
u
)
\begin{aligned} Z_D(u)=& \min c x + u(Ax-b) \\ \text { s.t. } & D x \leq e \\ & x \geq 0 \text { and integral } \end{aligned} \quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\left(\mathrm{LR_u}\right)
ZD(u)= s.t. mincx+u(Ax−b)Dx≤ex≥0 and integral (LRu)
设
x
∗
x^*
x∗是
P
P
P问题的最优解,此时,有:
Z
D
(
u
)
=
m
i
n
c
x
+
u
(
A
x
−
b
)
≤
c
x
∗
+
u
(
A
x
∗
−
b
)
=
c
x
∗
=
Z
Z_D(u)= {\rm{min}}\,cx + u(Ax-b)\le cx^*+u(Ax^*-b) = cx^* = Z
ZD(u)=mincx+u(Ax−b)≤cx∗+u(Ax∗−b)=cx∗=Z
这说明,
Z
D
(
u
)
Z_D(u)
ZD(u)的值一定小于等于
Z
Z
Z的值。不等号的来源是松弛,因为
L
R
u
LR_u
LRu比
P
P
P的约束更少,所以
L
R
u
LR_u
LRu的最优解一定小于等于把
x
∗
x^*
x∗直接带入
L
R
u
LR_u
LRu得到的目标函数值。由于在
P
P
P中,
A
x
∗
=
b
Ax^* =b
Ax∗=b,所以
c
x
∗
+
u
(
A
x
∗
−
b
)
=
c
x
∗
=
Z
cx^*+u(Ax^*-b) = cx^* = Z
cx∗+u(Ax∗−b)=cx∗=Z。
如果
A
x
=
b
Ax=b
Ax=b的约束变成了
A
x
≤
b
Ax\le b
Ax≤b,则需要求
u
≥
0
u\ge 0
u≥0,如果
A
x
=
b
Ax=b
Ax=b的约束变成了
A
x
≥
b
Ax\ge b
Ax≥b,则需要求
u
≤
0
u\le 0
u≤0。
总之,不管怎么样,
Z
D
(
u
)
≤
Z
Z_D(u)\le Z
ZD(u)≤Z在一定条件下成立,即
Z
D
(
u
)
Z_D(u)
ZD(u)小于等于原问题的最优目标函数值。
2.2 乘子 u u u取值
2.2.1 拉格朗日对偶问题 D {D} D
首先,应明确在
u
u
u的特定取值下,
Z
D
(
u
)
Z_D(u)
ZD(u)可以等于
Z
Z
Z。此时,这个问题就变成了跟
u
u
u相关的问题。如何给
u
u
u取值,使得
Z
D
(
u
)
Z_D(u)
ZD(u)尽可能取最大值以接近
Z
Z
Z的问题,称作拉格朗日对偶问题
D
D
D,即:
Z
D
=
max
u
Z
D
(
u
)
(D)
Z_D = \max _u Z_D(u) \tag{D}
ZD=umaxZD(u)(D)
该问题的决策变量是
u
u
u,目标函数是最大化
Z
D
(
u
)
Z_D(u)
ZD(u)的值。也就是说,求解原问题
P
P
P的最小化目标函数值
Z
Z
Z已经转换成求解拉格朗日对偶问题
D
D
D的目标函数值
Z
D
(
u
)
Z_D(u)
ZD(u)了。
那么问题来了,拉格朗日对偶问题的形式很抽象,我们如何具象描述它呢?
2.2.2 拉格朗日对偶重构问题 D ˉ \bar{D} Dˉ
假设拉格朗日松弛 L R u LR_u LRu的可行解集 X = { x ∣ D x ≤ e , x ≥ 0 and integer } X=\{x|Dx\le e ,x\ge 0 \text{ and integer}\} X={x∣Dx≤e,x≥0 and integer}是有限集,则我们可以令 X = { x t , t = 1 , . . . , T } X=\{x^t,t=1,...,T\} X={xt,t=1,...,T}。
这样,问题
D
D
D可重构为
D
ˉ
\bar{D}
Dˉ:
Z
D
=
m
a
x
w
s.t.
w
≤
c
x
t
+
u
(
A
x
t
−
b
)
,
t
=
1
,
.
.
.
,
T
(
D
ˉ
)
\begin{aligned} Z_D&=\quad {\rm{max}}\,w\\ \text{s.t.}\quad w &\le cx^t + u(Ax^t-b),t=1,...,T\\ \end{aligned} \quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\left(\mathrm{\bar{D}}\right)
ZDs.t.w=maxw≤cxt+u(Axt−b),t=1,...,T(Dˉ)
问:为什么可以这样重构?
答:令
w
=
Z
D
(
u
)
w=Z_D(u)
w=ZD(u),问题
D
D
D想求
Z
D
(
u
)
Z_D(u)
ZD(u)关于
u
u
u的最大值,所以
D
ˉ
\bar{D}
Dˉ的目标函数是求最大值。
Z
D
(
u
)
Z_D(u)
ZD(u)是最小化
c
x
+
u
(
A
x
−
b
)
c x + u(Ax-b)
cx+u(Ax−b),那么
Z
D
(
u
)
Z_D(u)
ZD(u)一定小于等于
L
R
u
LR_u
LRu的任意一个可行解
x
t
x^t
xt带入该表达式的值,即
min
c
x
+
u
(
A
x
−
b
)
=
Z
D
(
u
)
=
w
≤
c
x
t
+
u
(
A
x
t
−
b
)
\min c x + u(Ax-b) = Z_D(u) = w \le cx^t + u(Ax^t-b)
mincx+u(Ax−b)=ZD(u)=w≤cxt+u(Axt−b)
当
x
t
x^t
xt是
L
R
u
LR_u
LRu问题的最优解时等号成立。
2.2.3 拉格朗日对偶重构问题的线性规划对偶 P ˉ \bar{P} Pˉ
这时,再求
D
ˉ
\bar{D}
Dˉ的线性规划对偶
P
ˉ
\bar{P}
Pˉ
Z
D
=
min
∑
t
=
1
T
λ
t
c
x
t
s.t.
∑
t
=
1
T
λ
t
A
x
t
=
b
∑
t
=
1
T
λ
t
=
1
λ
t
≥
0
,
t
=
1
,
…
,
T
(
P
ˉ
)
\begin{aligned} Z_{D}=& \min \sum_{t=1}^{T} \lambda_{t} c x^{t} \\ \text { s.t. } & \sum_{t=1}^{T} \lambda_{t} A x^{t}=b \\ & \sum_{t=1}^{T} \lambda_{t}=1 \\ & \lambda_{t} \geq 0, t=1, \ldots, T \end{aligned} \quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\left(\mathrm{\bar{P}}\right)
ZD= s.t. mint=1∑Tλtcxtt=1∑TλtAxt=bt=1∑Tλt=1λt≥0,t=1,…,T(Pˉ)
对偶推导:从
P
ˉ
\bar{P}
Pˉ向
D
ˉ
\bar{D}
Dˉ推导,把
b
b
b分解成凸组合;从
D
ˉ
\bar{D}
Dˉ向
P
ˉ
\bar{P}
Pˉ推导,把
w
w
w看成
1
w
+
0
u
1w+0u
1w+0u,其中
w
w
w和
u
u
u是无约束的决策变量。
虽然 P ˉ \bar{P} Pˉ和 L P LP LP不是等价问题,即 P ˉ \bar{P} Pˉ并不是原问题 P P P的线性松弛版本,但是当 λ t \lambda_t λt是整数(0或1)时, P ˉ \bar{P} Pˉ等价于 P P P。理由如下: x t x^t xt是 L R u LR_u LRu的可行解,一定满足约束 D x ≤ e Dx\le e Dx≤e。既然满足了这个约束,在所有的可行解中,也肯定存在一个 x t x^t xt满足 A x t = b Ax^t=b Axt=b,那么令对应的 λ t \lambda _t λt等于1即可。(满足条件a的所有解中,一定有一个解同时满足a和b,子集关系)
2.2.4 拉格朗日对偶重构问题 D ˉ \bar{D} Dˉ的意义
问题
D
ˉ
\bar{D}
Dˉ表明,
Z
D
(
u
)
Z_D(u)
ZD(u)是一系列线性函数的下限值。为了方便理解,假设
x
x
x的变量数只有一个,
T
=
4
T=4
T=4表示对于问题
L
R
u
LR_u
LRu仅有4个可行解。那么,
Z
D
(
u
)
Z_D(u)
ZD(u)随
u
u
u变化的图像如图所示:
在这个图中, x t x^t xt是已知的,是常数,那么得到了四个关于 u u u的线性函数。取这些函数在 u u u不同取值的最小值,即为函数 Z D ( u ) Z_D(u) ZD(u),如图中加粗线条所示。
我们发现, Z D ( u ) Z_D(u) ZD(u)是连续的,是凹函数(参照国际定义)。这样找最大值就很简单,比如,我们使用爬山算法,但是我们不能求导,因为最优点处不可导。
既然不可导,那就用次梯度法。
2.2.5 次梯度法
2.2.5.1 次梯度概念
满足如下公式的
y
y
y 值为
Z
D
(
u
)
Z_D(u)
ZD(u) 在
u
ˉ
\bar{u}
uˉ 处的次梯度。
y
(
u
−
u
ˉ
)
≥
Z
D
(
u
)
−
Z
D
(
u
)
,
∀
u
y(u-\bar{u}) \ge Z_D(u) - Z_D(u), \forall u
y(u−uˉ)≥ZD(u)−ZD(u),∀u
2.2.5.2 次梯度性质
- 向量 A x t − b Ax^t-b Axt−b在 x t x^t xt求解 L R u LR_u LRu 对应位置的次梯度。其余的次梯度都是这些“基础”次梯度的凸组合。
- 当且仅当 u ∗ u^* u∗和 λ ∗ \lambda^* λ∗是可行的且满足互补松弛定理时, u ∗ u^* u∗是 D ˉ \bar{D} Dˉ的最优解且 λ ∗ \lambda^* λ∗是 P ˉ \bar{P} Pˉ的最优解,这等价于当且仅当 Z D ( u ) Z_D(u) ZD(u) 在 u ∗ u^* u∗ 处的次梯度为0时, u ∗ u^* u∗是 D D D的最优解。(说白了就是 Z D ( u ) Z_D(u) ZD(u)取到了关于 u u u的最大值)
2.2.5.3 次梯度法更新乘子
给定一个初始的乘子值
u
0
u^0
u0,后续乘子第
k
k
k次迭代的值为
u
k
u^k
uk,迭代公式如下:
u
k
+
1
=
u
k
+
t
k
(
A
x
k
−
b
)
u^{k+1} = u^{k} + t_k(Ax^k-b)
uk+1=uk+tk(Axk−b)
其中 x k x^k xk是 ( L R u k ) (LR_{u^k}) (LRuk)的最优解, t k t_k tk是一个正数,称为迭代步长。
Goffin (1977)表明:
当 t k → 0 t_k→0 tk→0且 ∑ i = 0 k t i = 0 \sum_{i=0}^kt_i=0 ∑i=0kti=0时, Z D ( u k ) → Z D Z_D(u^k)→Z_D ZD(uk)→ZD。
常用的迭代步长公式为:
t k = λ k ( Z ∗ − Z D ( u k ) ) ∣ ∣ A x k − b ∣ ∣ 2 t_k = \frac{\lambda_k(Z^*-Z_D(u^k))} {||Ax^k-b||^2} tk=∣∣Axk−b∣∣2λk(Z∗−ZD(uk))
其中,
λ
k
\lambda_k
λk是一个
(
0
,
2
]
(0,2]
(0,2]之间的标量,
Z
∗
Z^*
Z∗是
Z
D
Z_D
ZD的上界,且使用启发式修改为
P
P
P的可行解。通常,
λ
k
\lambda_k
λk的初始值设置为2,当一定迭代次数后,
Z
D
(
u
)
Z_D(u)
ZD(u)的值仍未增加,
λ
k
\lambda_k
λk的值减半。
注意,这是一个经验性的方法,并不一定能满足最优收敛。