有约束优化之拉格朗日乘子法求解
本篇文章将详解带有约束条件的最优化问题,约束条件分为等式约束与不等式约束,对于等式约束的优化问题,可以直接应用拉格朗日乘子法去求取最优值;对于含有不等式约束的优化问题,可以转化为在满足 KKT 约束条件下应用拉格朗日乘子法求解。
拉格朗日求得的并不一定是最优解,只有在凸优化的情况下,才能保证得到的是最优解,所以本文称拉格朗日乘子法得到的为可行解,其实就是局部极小值。
等式约束
min
x
f
(
x
)
\min\limits_x f(x)
xminf(x)
s
.
t
.
g
(
x
)
=
0
s.t. ~~g(x)=0
s.t. g(x)=0
拉格朗日乘子法思路:
首先假设解为
x
∗
x_*
x∗,则有:
1)
g
(
x
∗
)
=
0
g(x_*)=0
g(x∗)=0,且
g
(
x
)
=
0
g(x)=0
g(x)=0在点
x
∗
x_*
x∗的法向量
∇
g
(
x
∗
)
\nabla g(x_*)
∇g(x∗)必然正交于该约束曲面。
2)
f
(
x
)
f(x)
f(x)在点
x
∗
x_*
x∗的梯度
∇
f
(
x
∗
)
\nabla f(x_*)
∇f(x∗)正交于该约束曲面。
则梯度向量同方向必有
∇
f
(
x
∗
)
+
λ
∇
g
(
x
∗
)
=
0
\nabla f(x_*)+\lambda \nabla g(x_*)=0
∇f(x∗)+λ∇g(x∗)=0,且
λ
≠
0
\lambda\neq0
λ̸=0。
总的求解条件就是:
{
∇
f
(
x
∗
)
+
λ
∇
g
(
x
∗
)
=
0
g
(
x
∗
)
=
0
(
1
)
λ
≠
0
\left\{ \begin{array}{l} \nabla f(x_*)+\lambda \nabla g(x_*)=0 \\ g(x_*)=0~~~~~~~~~~~~~~~~~~~~~~~~~~~~~(1)\\ \lambda\neq0 \end{array}\right.
⎩⎨⎧∇f(x∗)+λ∇g(x∗)=0g(x∗)=0 (1)λ̸=0
如果构造拉格朗日函数:
L
(
x
,
λ
)
=
f
(
x
)
+
λ
g
(
x
)
L(x,\lambda)=f(x)+\lambda g(x)
L(x,λ)=f(x)+λg(x),则原等式约束问题等价于如下优化问题:
min
x
,
λ
L
(
x
,
λ
)
\min\limits_{x,\lambda}L(x,\lambda)
x,λminL(x,λ)
s
.
t
.
λ
≠
0
s.t.~\lambda\neq0
s.t. λ̸=0
求解:
∂
L
∂
x
=
0
\frac{\partial L}{\partial x}=0
∂x∂L=0
∂
L
∂
λ
=
0
\frac{\partial L}{\partial \lambda}=0
∂λ∂L=0
可到求解条件(1).
不等式约束
min
x
f
(
x
)
\min\limits_x f(x)
xminf(x)
s
.
t
.
g
(
x
)
≤
0
s.t. ~~g(x)\leq0
s.t. g(x)≤0
拉格朗日乘子法思路:
首先假设解为
x
∗
x_*
x∗,则有:
1)如果解在约束边界上,即
g
(
x
∗
)
=
0
g(x_*)=0
g(x∗)=0,则
g
(
x
)
=
0
g(x)=0
g(x)=0在点
x
∗
x_*
x∗的法向量
∇
g
(
x
∗
)
\nabla g(x_*)
∇g(x∗)必然正交于该约束曲面,且
f
(
x
)
f(x)
f(x)在点
x
∗
x_*
x∗的梯度
∇
f
(
x
∗
)
\nabla f(x_*)
∇f(x∗)正交于该约束曲面。且梯度方向相反,否则解将移动到约束边界内。所以有:
{
g
(
x
∗
)
=
0
∇
f
(
x
∗
)
+
λ
∇
g
(
x
∗
)
=
0
(
2
)
λ
>
0
\left\{ \begin{array}{l} g(x_*)=0\\ \nabla f(x_*)+\lambda \nabla g(x_*)=0 ~~~~~~~~~~~~~~~~~~~(2)\\ \lambda>0 \end{array}\right.
⎩⎨⎧g(x∗)=0∇f(x∗)+λ∇g(x∗)=0 (2)λ>0
2)如果解在约束边界内,即
g
(
x
∗
)
<
0
g(x_*)<0
g(x∗)<0,则约束条件不起作用,有
∇
f
(
x
∗
)
=
0
\nabla f(x_*)=0
∇f(x∗)=0。所以有:
{
g
(
x
∗
)
<
0
∇
f
(
x
∗
)
=
0
\left\{ \begin{array}{l} g(x_*)<0\\ \nabla f(x_*)=0\\ \end{array}\right.
{g(x∗)<0∇f(x∗)=0
或者(为了合并)
{
g
(
x
∗
)
<
0
∇
f
(
x
∗
)
+
λ
∇
g
(
x
∗
)
=
0
(
3
)
λ
=
0
\left\{ \begin{array}{l} g(x_*)<0\\ \nabla f(x_*)+\lambda \nabla g(x_*)=0 ~~~~~~~~~~~~~~~~~ (3)\\ \lambda=0 \end{array}\right.
⎩⎨⎧g(x∗)<0∇f(x∗)+λ∇g(x∗)=0 (3)λ=0
则合并(2)(3)总的求解条件(KKT)就是:
{
g
(
x
∗
)
≤
0
∇
f
(
x
∗
)
+
λ
∇
g
(
x
∗
)
=
0
(
4
)
λ
≥
0
λ
g
(
x
∗
)
=
0
\left\{ \begin{array}{l} g(x_*)\leq0\\ \nabla f(x_*)+\lambda \nabla g(x_*)=0 ~~~~~~~~~~~~~~~~~ (4)\\ \lambda\geq0\\ \lambda g(x_*)=0 \end{array}\right.
⎩⎪⎪⎨⎪⎪⎧g(x∗)≤0∇f(x∗)+λ∇g(x∗)=0 (4)λ≥0λg(x∗)=0
如果构造拉格朗日函数:
L
(
x
,
λ
)
=
f
(
x
)
+
λ
g
(
x
)
L(x,\lambda)=f(x)+\lambda g(x)
L(x,λ)=f(x)+λg(x),则原不等式约束问题等价于如下优化问题:
min
x
,
λ
L
(
x
,
λ
)
s
.
t
.
{
g
(
x
)
≤
0
λ
≥
0
λ
g
(
x
)
=
0
\min\limits_{x,\lambda}L(x,\lambda)\\ s.t. ~~\left\{ \begin{array}{l} g(x)\leq0\\ \lambda\geq0\\ \lambda g(x)=0 \end{array}\right.
x,λminL(x,λ)s.t. ⎩⎨⎧g(x)≤0λ≥0λg(x)=0
求解:
∂
L
∂
x
=
0
\frac{\partial L}{\partial x}=0
∂x∂L=0
∂
L
∂
λ
=
0
\frac{\partial L}{\partial \lambda}=0
∂λ∂L=0
可到求解条件(4).
对于不等式约束,只要满足一定的条件,依然可以使用拉格朗日乘子法解决,这里的条件便是 KKT 条件
注意梯度,法向量,切线,导数区别。