有约束优化之拉格朗日乘子法求解
本篇文章将详解带有约束条件的最优化问题,约束条件分为等式约束与不等式约束,对于等式约束的优化问题,可以直接应用拉格朗日乘子法去求取最优值;对于含有不等式约束的优化问题,可以转化为在满足 KKT 约束条件下应用拉格朗日乘子法求解。
拉格朗日求得的并不一定是最优解,只有在凸优化的情况下,才能保证得到的是最优解,所以本文称拉格朗日乘子法得到的为可行解,其实就是局部极小值。
等式约束
minxf(x)\min\limits_x f(x)xminf(x)
s.t. g(x)=0s.t. ~~g(x)=0s.t. g(x)=0
拉格朗日乘子法思路:
首先假设解为x∗x_*x∗,则有:
1)g(x∗)=0g(x_*)=0g(x∗)=0,且g(x)=0g(x)=0g(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∗)=0g(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),则原等式约束问题等价于如下优化问题:
minx,λL(x,λ)\min\limits_{x,\lambda}L(x,\lambda)x,λminL(x,λ)
s.t. λ≠0s.t.~\lambda\neq0s.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).
不等式约束
minxf(x)\min\limits_x f(x)xminf(x)
s.t. g(x)≤0s.t. ~~g(x)\leq0s.t. g(x)≤0
拉格朗日乘子法思路:
首先假设解为x∗x_*x∗,则有:
1)如果解在约束边界上,即g(x∗)=0g(x_*)=0g(x∗)=0,则g(x)=0g(x)=0g(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∗)<0g(x_*)<0g(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),则原不等式约束问题等价于如下优化问题:
minx,λ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 条件
注意梯度,法向量,切线,导数区别。