拉格朗日乘子法、对偶、KTT
一般情况下,最优化问题分为三类
一、 无约束条件下的最优化问题
这种最优化问题比较简单,直接求导为0就可以得到。
二、 等式约束下的最优化问题
即除了目标函数之外,还有一些约束条件。假设目标函数为 f ( x ) f(x) f(x),约束条件为 h k ( x ) h_k(x) hk(x),这里的 k k k用来表示有 k k k个约束条件。
m i n f ( x ) minf(x) minf(x)
s . t . h k ( x ) = 0 k = 1 , 2 , 3.. s.t. h_k(x) = 0 \quad k = 1,2,3.. s.t.hk(x)=0k=1,2,3..
求这样的最优化问题有两种方法:
一种是使用消元法来解,但是这种方法有的时候很难求解,甚至无解。
另一种方法便是使用拉格朗日乘子法,其求解步骤分为三步:
- 构造拉格朗日函数
- 求解变量的偏导方程
- 代入目标函数
具体步骤如下:
- 首先构造一个拉格朗日函数,我们令
F ( x , λ , l ) = f ( x ) + ∑ k = 1 l λ k h k ( x ) F(x,λ,l) = f(x) + \sum_{k=1}^lλ_kh_k(x) F(x,λ,l)=f(x)+k=1∑lλkhk(x)
其中 λ k \lambda_k λk是第k个约束条件系数,又叫拉格朗日乘子。注意这里的 F ( x , λ , l ) F(x,\lambda,l) F(x,λ,l)是对
x , λ , l x,\lambda,l x,λ,l三个变量的函数。
- 于是我们分别对 x , λ , l x,\lambda,l x,λ,l变量求偏导数为0的解,得出来的解代入目标函数便是函数在等式约束条件。
为什么这样求解得到的便是我们想要得到的约束极值呢?我们可以用图来直观的解释一下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b9HKIdxz-1602603252995)(https://raw.githubusercontent.com/Sunwzh/image_repository/master/1552132449743.png)]
图中的圆圈表示目标函数与 , f ( x , y ) ,f(x,y) ,f(x,y)投影在平面上的等值线,每个全圆圈上的值相等,黑丝的曲线表示约束条件 h ( x ) = 0 h(x)=0 h(x)=0的函数图像。等值线与曲线相交的点,便是满足约束的点,于是我们所需要的极值点只有等值线与黑线相切的地方取到。
为什么只有相切的地方才可能是极值点,而相交的地方不是呢?假设相交的点是极值点的话,那么沿着 f ( x ) f(x) f(x)的曲线向两边走,一定还有其他的点和他相交,这就意味着 f ( x , y ) f(x,y) f(x,y)的值还能变大和变小(极值点的两侧是同时变大或者同时变小的),明显与我们的假设相悖,所以交点不是极值点。
而对于切点来说,沿着 h ( x ) h(x) h(x)曲线两边走, f ( x , y ) f(x,y) f(x,y)的值只能同时变大或者同时变小,这就符合了极值点的定义。
既然极值点在切点上,那么这两个函数在这一点的梯度应该在同一条直线上,方向可以相同或者相反(梯度的方向与等高线的切线是垂直,这个定理的相关推导可以自行百度)。
所以,满足条件的极值点一定满足: ∇ f ( x , y ) = λ ∇ h ( x , y ) ∇f(x,y)=λ∇h(x,y) ∇f(x,y)=λ∇h(x,y)(其中λ可以取0,取0表示目标函数的极值点刚好也在这一点),于是我们只用和原方程 h ( x , y ) = 0 h(x,y)=0 h(x,y)=0联立,然后只要解出这个方程组,就可以得到最优解,当然,这个方程可能存在解不出来的情况.
于是我们就可以把原来的优化问题写成 f ( x , y ) + λ h ( x , y ) f(x,y)+λh(x,y) f(x,y)+λh(x,y) 的形式,然后分别的对 x , y , λ x,y,λ x,y,λ求导,然后令偏导数为0就可以得到上面推来的式子了。这种方法就是拉格朗日乘子法。即:
∇ f ( x , y ) = ( ∂ f ∂ y , ∂ f ∂ x ) ∇f(x,y)=(\frac{\partial{f}}{\partial{y}},\frac{\partial{f}}{\partial{x}}) ∇f(x,y)=(∂y∂f,∂x∂f)
λ ∇ h ( x , y ) = ( λ ∂ h ∂ y , λ ∂ h ∂ x ) λ∇h(x,y)=(λ\frac{\partial{h}}{\partial{y}},λ\frac{\partial{h}}{\partial{x}}) λ∇h(x,y)=(λ∂y∂h,λ∂x∂h)
由于 ∇ f ( x , y ) = λ ∇ h ( x , y ) ∇f(x,y)=λ∇h(x,y) ∇f(x,y)=λ∇h(x,y),则
∂ f ∂ y = λ ∂ h ∂ y \frac{\partial{f}}{\partial{y}}=λ\frac{\partial{h}}{\partial{y}} ∂y∂f=λ∂y∂h
∂ f ∂ x = λ ∂ h ∂ x \frac{\partial{f}}{\partial{x}}=λ\frac{\partial{h}}{\partial{x}} ∂x∂f=λ∂x∂h
对 f ( x , y ) + λ h ( x , y ) f(x,y)+λh(x,y) f(x,y)+λh(x,y),分别对 x , y , λ x,y,λ x,y,λ求偏导:
对x求偏导:
∂ f ∂ x + λ ∂ h ∂ x + h ( x , y ) = 0 \frac{\partial{f}}{\partial{x}} + λ\frac{\partial{h}}{\partial{x}} + h(x,y)=0 ∂x∂f+λ∂x∂h+h(x,y)=0
对y求偏导:
∂ f ∂ y + λ ∂ h ∂ y + h ( x , y ) = 0 \frac{\partial{f}}{\partial{y}} + λ\frac{\partial{h}}{\partial{y}} + h(x,y)=0 ∂y∂f+λ∂y∂h+h(x,y)=0
对λ求偏导:
h ( x , y ) = 0 h(x,y)=0 h(x,y)=0
根据这三个式子化简后,可以看到公式 f ( x , y ) + λ h ( x , y ) f(x,y)+λh(x,y) f(x,y)+λh(x,y),分别对 x , y , λ x,y,λ x,y,λ求偏导和 ∇ f ( x , y ) = λ ∇ h ( x , y ) ∇f(x,y)=λ∇h(x,y) ∇f(x,y)=λ∇h(x