经典拉格朗日乘子法(约束条件为等式)
xminf(x)s.t.g(x)=0
此处
x是一个向量。
如下图,以二元函数举例:
由图可以看出,只需要使
f(x,y)=d与
g(x,y)=0相切即可,也就是使这两条线的梯度方向(法线方向)共线。
即:
{▽f(x)=λ▽g(x)g(x)=0
这时引入拉格朗日函数:
L(x,λ)=f(x)−λg(x)
可以发现,对拉格朗日函数求偏导可以得到以上方程组。
约束条件不为等式
xminf(x)s.t.g(x)≤0
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191130143744777.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2NzU4OTE0#pic_center)
与经典拉格朗日乘子法相同,最优点仍需要满足
▽f(x∗,y∗)=λ▽g(x∗,y∗)
引入
KKT条件:
λg(x∗,y∗)=0
那么,如果
g(x∗,y∗)<0,则
λ=0。这说明,若
g(x∗,y∗)一定小于0,则这个约束条件并不起作用,故
λ=0。
用
x代替
(x,y),并引入拉格朗日函数:
L(x,λ)=f(x)−λg(x)
同样对
x求偏导并令其为0得到
▽f(x)=λ▽g(x),但不对
λ求偏导,而是直接带入
KKT条件。得到:
{▽f(x)=λ▽g(x)λg(x)=0
对于多约束条件的情况,即:
{xminf(x)gi(x)≥0(i=1,2……,n)
令
L(x,λ1,λ2……,λn)=f(x)−∑i=1nλigi(x)
则需满足:
{▽f(x)=∑i=1nλi▽gi(x)λigi(x)=0(KKT条件)
为保证两条相切直线梯度是相反的方向,需要满足
λi≥0。
例题:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191130175914253.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2NzU4OTE0#pic_center)
求得
⎩⎪⎪⎪⎨⎪⎪⎪⎧x1=1x2=2γ1=1γ2=0
这说明第二个约束条件在此问题中不起作用,将
(1,2)带入两个约束条件知第一个约束条件正好取等号,而第二个约束条件是一定满足的。