运筹系列5:凸优化问题的拉格朗日乘子法和KKT条件

1. 从线性规划到凸优化

线性规划相对比较简单,比如:

min y = x1 + x2
s.t. x1 + 3x2 ≥ 5
2
x1 + x2 = 6
x1,x2≥0

求解步骤嘛,首先添加剩余变量x3消除不等式约束,将问题转化为:

max y = x1 + x2
s.t. x1 + 3x2 - x3 = 5
2
x1 + x2 = 6
x1,x2,x3≥0
18-5x1-x3=5

然后使用消元法:

x1 =(13 - x3)/5 ,x2 = (4 + 2x3)/5

带入目标函数,得到

min y = (17 + x3)/5

显然在x3 = 0时取得最优值 y = 3.4,对应的x1 = 2.6, x2 = 0.8。
如果变量出现二次方,三次方怎么办?这时候问题变为了“非线性规划”,对于这类问题,我们能求解的范围是有限的,一般都要求目标函数和约束条件是“凸函数”(什么是凸函数?请参考这里),这时候的优化问题称为“凸优化”问题。
最简单的凸优化问题只有目标函数,没有约束条件。比如:

min y = x 2 y = x^2 y=x2

求解方法就是对x求导,在导数为0处取得最优值:

y ′ ∣ x = 0 y'|_x = 0 yx=0
=> 2 ∗ x = 0 2*x = 0 2x=0
=> x = 0 x = 0 x=0
=> 最优值 y = x 2 = 0 y = x^2 = 0 y=x2=0

2. 消元法 vs 拉格朗日乘子法

消元法是减少变量,而拉格朗日法是增加变量,两者都是消去约束变量的好方法。
如果问题有约束条件怎么办?比如在上面问题的基础上,加上等式约束条件:

min y = x 2 y = x^2 y=x2
s.t. x = 2

可以使用拉格朗日乘子法是将等式(注意是等式!等式!)约束条件去除,比如上面的问题可以转化为:

min y = x 2 + λ ∗ ( x − 2 ) y = x^2 + λ * (x - 2) y=x2+λ(x2)

这里引入了新的变量λ。求解方法:对变量x和λ求导:

y ′ ∣ x = 0 , y ′ ∣ λ = 0 y'|_x = 0, y'|_λ = 0 yx=0,yλ=0
=> $ 2*x + λ = 0, x - 2 = 0$
=> x = 2 , λ = − 4 x = 2, λ = -4 x=2,λ=4
=> 最优值 y = x 2 = 4 y = x^2 = 4 y=x2=4

上面的例子有点简单过头了,下面来个稍微复杂点的:

min y = x 1 2 + x 2 2 y = x_1^2 + x_2^2 y=x12+x22
s.t. x 1 + x 2 = 2 x_1 + x_2 = 2 x1+x2=2

首先来看看我们都会用的方法——消元法:
将约束条件转化为 x 2 = 2 − x 1 x_2 = 2 - x_1 x2=2x1,代入目标函数

min y = x 1 2 + ( 2 − x 1 ) 2 = 2 ∗ x 1 2 − 4 ∗ x 1 + 8 y = x_1^2 + (2-x_1)^2 = 2*x_1^2 - 4*x_1 + 8 y=x12+(2x1)2=2x124x1+8

成功消除约束条件
在导数为0处取得最优值:

y ′ ∣ x 1 = 0 y'|_{x1} = 0 yx1=0
=> 4 ∗ x 1 − 4 = 0 4*x1 - 4 = 0 4x14=0
=> $ x1 = 1$
=> x 2 = 1 x2 = 1 x2=1, 最优值 y = 2 y = 2 y=2

再来看新介绍的方法——拉格朗日乘子法:
将约束条件乘上一个新变量代入目标函数

min L = x 1 2 + x 2 2 + λ ∗ ( x 1 + x 2 − 2 ) L = x_1^2 + x_2^2 + λ*(x_1+x_2-2) L=x12+x22+λ(x1+x22)

成功消除约束条件
在导数为0处取得最优值

L ′ ∣ x 1 = 0 , L ′ ∣ x 2 = 0 , L ′ ∣ λ = 0 L'|_{x_1} = 0,L'|_{x_2} = 0, L'|_λ = 0 Lx1=0,Lx2=0,Lλ=0
=> 2 ∗ x 1 + λ = 0 , 2 ∗ x 2 + λ = 0 , x 1 + x 2 − 2 = 0 2*x_1 + λ = 0, 2*x_2 + λ = 0, x_1+x_2 - 2 = 0 2x1+λ=0,2x2+λ=0,x1+x22=0
=> x 1 = 1 , x 2 = 1 , λ = − 2 x_1 = 1, x_2 = 1, λ = -2 x1=1,x2=1,λ=2, 最优值 y = 2 y = 2 y=2

拉格朗日乘子法好麻烦,为什么要用这个方法?因为……我们还会碰到难以消元的情形,比如约束条件里面带着2次方的问题:

min y = x 1 2 + x 2 2 y = x_1^2 + x_2^2 y=x12+x22
s.t. x 1 2 + 3 x 1 + x 2 2 − 4 x 2 = 2 x_1^2 + 3x_1 + x_2^2 - 4x_2 = 2 x12+3x1+x224x2=2

这种情况下,用拉格朗日乘子法消除约束条件更合适。

3. 不等式约束下的KKT条件

如果约束条件中有不等式约束怎么办?比如:

min y =f(x)
s.t. g(x) ≤ 0

我们用个小技巧:添加变量s(后面会把s消除掉的),并使用拉格朗日乘子法将约束转入目标函数:

min L = f ( x ) + λ ( g ( x ) + s 2 ) L =f(x) + λ(g(x) + s^2) L=f(x)+λ(g(x)+s2)

最优解需满足:

(1) L ′ ∣ x = 0 = > f ′ + λ ∗ g ′ = 0 L'|x = 0 => f' + λ*g' =0 Lx=0=>f+λg=0
(2) L ′ ∣ λ = 0 = > g + s 2 = 0 L'|λ = 0 => g + s^2 = 0 Lλ=0=>g+s2=0
(3) L ′ ∣ s = 0 = > λ ∗ s = 0 L'|s = 0 => λ*s = 0 Ls=0=>λs=0

(2)和(3)等价于:g≤0, λ*g = 0(这里是关键!关键!),条件变为:

(1)L’ = 0(定常方程)
(2)g ≤ 0(原始可行)
(3)λ*g = 0(互补剩余)

另外,为了使得min存在,还需要有

(4)λ ≥ 0(对偶可行)

简单来说,λ ≥ 0的意思是最优值必须在约束条件构成的可行域范围内。关于对偶可行的图解,可以参考这里。以上称为KKT条件。KKT条件将lagrange乘子法中的等式约束优化问题推广至不等式约束。在凸优化的情况下,KKT条件是取得最优解的充要条件。
简单来说,在凸优化的前提下,KKT条件就是带约束问题的一阶最优条件,相当于无约束问题最优点满足导数为0
如果不等式和等式混合在一起:假设问题既包含等式约束,也包含不等式约束:

min y =f(x)
s.t. g(x) ≤ 0
h(x) = 0

KKT条件加上h(x) = 0就行了:

(1)L’ =0(定常方程)
(2)g ≤ 0, h = 0(原始可行)
(3)λ*g = 0(互补剩余)
(4)λ ≥ 0(对偶可行)

4. 最后来个超简单的例子

min y = x 2 y = x^2 y=x2
s.t. x + 1 ≤ 0 x + 1 ≤ 0 x+10

使用拉格朗日乘子法,目标函数变为

min L = x 2 + λ ∗ ( x + 1 ) L = x^2 + λ*(x+1) L=x2+λ(x+1)

使用KKT条件,最优化问题转化为求解方程组:

(1) L ′ = 0 = > 2 ∗ x + λ = 0 L' = 0 => 2*x+λ = 0 L=0=>2x+λ=0
(2) g ≤ 0 = > x ≤ − 1 g ≤ 0 => x ≤ -1 g0=>x1
(3) λ ∗ g = 0 = > λ ∗ ( x + 1 ) = 0 λ*g = 0 => λ*(x+1) = 0 λg=0=>λ(x+1)=0
(4) λ ≥ 0 λ ≥ 0 λ0

λ = 0 λ = 0 λ=0,由(1)得到 x = 0 x = 0 x=0,不满足(2);
λ ≠ 0 λ \neq 0 λ=0,由(3)得到 x = − 1 x = -1 x=1,由(1)得到 λ = 2 λ = 2 λ=2,满足所有4个条件,此时最优值 y = 1 y = 1 y=1

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值