经典拉格朗日乘子法(约束条件为等式)
m
i
n
x
f
(
x
)
s.t.
g
(
x
)
=
0
\mathop{min}\limits_{x}f_{(\mathbf{x})}\text{\quad s.t.}\;g_{(\mathbf{x})}=0
xminf(x)s.t.g(x)=0
此处
x
\mathbf{x}
x是一个向量。
如下图,以二元函数举例:
由图可以看出,只需要使
f
(
x
,
y
)
=
d
f_{(x, y)}=d
f(x,y)=d与
g
(
x
,
y
)
=
0
g_{(x, y)}=0
g(x,y)=0相切即可,也就是使这两条线的梯度方向(法线方向)共线。
即:
{
▽
f
(
x
)
=
λ
▽
g
(
x
)
g
(
x
)
=
0
\begin{cases} \bigtriangledown f_{(\mathbf{x})}=\lambda \bigtriangledown g_{(\mathbf{x})}\\ g_{(\mathbf{x})}=0 \end{cases}
{▽f(x)=λ▽g(x)g(x)=0
这时引入拉格朗日函数:
L
(
x
,
λ
)
=
f
(
x
)
−
λ
g
(
x
)
L_{(\mathbf{x}, \lambda)}=f_{(\mathbf{x})}-\lambda g_{(\mathbf{x})}
L(x,λ)=f(x)−λg(x)
可以发现,对拉格朗日函数求偏导可以得到以上方程组。
约束条件不为等式
m
i
n
x
f
(
x
)
s.t.
g
(
x
)
≤
0
\mathop{min}\limits_{x}f_{(\mathbf{x})}\text{\quad s.t.}\;g_{(\mathbf{x})}\leq0
xminf(x)s.t.g(x)≤0
与经典拉格朗日乘子法相同,最优点仍需要满足
▽
f
(
x
∗
,
y
∗
)
=
λ
▽
g
(
x
∗
,
y
∗
)
\bigtriangledown f_{(x^{*},y^{*})}=\lambda \bigtriangledown g_{(x^{*},y^{*})}
▽f(x∗,y∗)=λ▽g(x∗,y∗)
引入
K
K
T
KKT
KKT条件:
λ
g
(
x
∗
,
y
∗
)
=
0
\lambda g_{(x^{*},y^{*})}=0
λg(x∗,y∗)=0
那么,如果
g
(
x
∗
,
y
∗
)
<
0
g_{(x^{*},y^{*})}<0
g(x∗,y∗)<0,则
λ
=
0
\lambda=0
λ=0。这说明,若
g
(
x
∗
,
y
∗
)
g_{(x^{*},y^{*})}
g(x∗,y∗)一定小于0,则这个约束条件并不起作用,故
λ
=
0
\lambda=0
λ=0。
用
x
\mathbf{x}
x代替
(
x
,
y
)
(x,y)
(x,y),并引入拉格朗日函数:
L
(
x
,
λ
)
=
f
(
x
)
−
λ
g
(
x
)
L_{(\mathbf{x}, \lambda)}=f_{(\mathbf{x})}-\lambda g_{(\mathbf{x})}
L(x,λ)=f(x)−λg(x)
同样对
x
\mathbf{x}
x求偏导并令其为0得到
▽
f
(
x
)
=
λ
▽
g
(
x
)
\bigtriangledown f_{(\mathbf{x})}=\lambda \bigtriangledown g_{(\mathbf{x})}
▽f(x)=λ▽g(x),但不对
λ
\lambda
λ求偏导,而是直接带入
K
K
T
KKT
KKT条件。得到:
{
▽
f
(
x
)
=
λ
▽
g
(
x
)
λ
g
(
x
)
=
0
\begin{cases} \bigtriangledown f_{(\mathbf{x})}=\lambda \bigtriangledown g_{(\mathbf{x})}\\ \lambda g_{(\mathbf{x})}=0 \end{cases}
{▽f(x)=λ▽g(x)λg(x)=0
对于多约束条件的情况,即:
{
m
i
n
x
f
(
x
)
g
i
(
x
)
≥
0
(
i
=
1
,
2
…
…
,
n
)
\begin{cases} \mathop{min}\limits_{x}f_{(\mathbf{x})}\\ g_{i(\mathbf{x})}\geq0\quad (i=1,2……,n) \end{cases}
{xminf(x)gi(x)≥0(i=1,2……,n)
令
L
(
x
,
λ
1
,
λ
2
…
…
,
λ
n
)
=
f
(
x
)
−
∑
i
=
1
n
λ
i
g
i
(
x
)
L_{(\mathbf{x},\lambda_{1},\lambda_{2}……,\lambda_{n})}=f_{\mathbf{(x)}}-\sum_{i=1}^{n}{\lambda_{i}g_{i(x)}}
L(x,λ1,λ2……,λn)=f(x)−∑i=1nλigi(x)
则需满足:
{
▽
f
(
x
)
=
∑
i
=
1
n
λ
i
▽
g
i
(
x
)
λ
i
g
i
(
x
)
=
0
(
K
K
T
条
件
)
\begin{cases} \bigtriangledown f_{(\mathbf{x})}=\sum_{i=1}^{n}{\lambda_{i}\bigtriangledown g_{i(x)}}\\ \lambda_{i} g_{i(\mathbf{x})}=0\quad (KKT条件) \end{cases}
{▽f(x)=∑i=1nλi▽gi(x)λigi(x)=0(KKT条件)
为保证两条相切直线梯度是相反的方向,需要满足
λ
i
≥
0
\lambda_{i}\geq0
λi≥0。
例题:
求得
{
x
1
=
1
x
2
=
2
γ
1
=
1
γ
2
=
0
\begin{cases} x_{1}=1\\ x_{2}=2\\ \gamma_{1}=1\\ \gamma_{2}=0 \end{cases}
⎩⎪⎪⎪⎨⎪⎪⎪⎧x1=1x2=2γ1=1γ2=0
这说明第二个约束条件在此问题中不起作用,将
(
1
,
2
)
(1,2)
(1,2)带入两个约束条件知第一个约束条件正好取等号,而第二个约束条件是一定满足的。