5. 凸优化:拉格朗日乘子法、KKT条件

2018-08-05  本文已影响0人  IE06

1. 从线性规划到凸优化

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

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

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

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

然后使用消元法:

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

带入目标函数,得到

min y = (17 + 3*x3)/5

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

2. 最简单的凸优化问题

只有目标函数,没有约束条件。比如:

min y = x^2

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

y'|x = 0
=> 2*x = 0
=> x = 0
=> 最优值 y = x^2 = 0

3. 拉格朗日乘子法

如果问题有约束条件怎么办?比如在上面问题的基础上,加上等式约束条件:

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

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

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

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

y'|x = 0, y'|λ = 0
=> 2*x + λ = 0, x - 2 = 0
=> x = 2, λ = -4
=> 最优值 y = x^2 = 4

4. 来个复杂点的例子

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

min y = x1^2 + x2^2
s.t. x1 + x2 = 2

首先来看看我们都会用的方法——消元法:

将约束条件转化为 x2 = 2 - x1,代入目标函数
=> min  y = x1^2 + (2-x1)^2 = 2*x1^2 - 4*x1 + 8,成功消除约束条件
在导数为0处取得最优值:
y'|x1 = 0
=> 4*x1 - 4 = 0
=> x1 = 1
=> x2 = 1, 最优值 y = 2

再来看新介绍的方法——拉格朗日乘子法:

将约束条件乘上一个新变量代入目标函数
=> min L = x1^2 + x2^2 + λ*(x1+x2-2),成功消除约束条件
在导数为0处取得最优值
L'|x1 = 0,L'|x2 = 0, L'|λ = 0
=> 2*x1 + λ = 0, 2*x2 + λ = 0, x1+x2 - 2 = 0
=> x1 = 1, x2 = 1, λ = -2, 最优值 y = 2

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

min y = x1^2 + x2^2
s.t. x1^2 + 3*x1 + x2^2 - 4*x2 = 2

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

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

如果约束条件中有不等式约束怎么办?添加不等式约束后问题变为:

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

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

min L =f(x) + λ*(g(x) + s^2)
最优解需满足:
(1)L'|x = 0 => f' + λ*g' =0
(2)L'|λ = 0 => g + s^2 = 0
(3)L'|s = 0 => λ*s = 0

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

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

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

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

简单来说,λ ≥ 0的意思是最优值必须在约束条件构成的可行域范围内。关于对偶可行的图解,可以参考https://en.wikipedia.org/wiki/Karush%E2%80%93Kuhn%E2%80%93Tucker_conditions
以上称为KKT条件。KKT条件将lagrange乘子法中的等式约束优化问题推广至不等式约束。在凸优化的情况下,KKT条件是取得最优解的充要条件。

5. 如果不等式和等式混合在一起……

假设问题既包含等式约束,也包含不等式约束:

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(对偶可行)

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

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

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

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

使用KKT条件,问题转化为求解:

(1)L' =0 => 2*x+λ = 0
(2)g ≤ 0 => x ≤ -1
(3)λ*g = 0 => λ*(x+1) = 0
(4)λ ≥ 0

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

上一篇下一篇

猜你喜欢

热点阅读