关于拉格朗日乘数法和KKT条件的一些思考
从我开始接触拉格朗日乘数法到现在已经将近有四个月了,但似乎直到今天我对其的理解才开始渐渐清晰,相信很多人在科研初期也会对一些基础的算法困惑不解,而一篇好的教程则可以大大缩短困惑的时间,从而把更多时间用在开创性的工作上去。经过近几日的搜索,我发现网上还是有一些说明是很不错得,英文较好的同学可以直接去阅读Hugo的介绍(http://www.onmyphd.com/?p=lagrange.multipliers)。下面是我近几日学下来的一些见解,看下来如果有想讨论,指点或者交流的欲望,请可以直接发邮件联系我([email protected]).
什么是拉格朗日乘数法?
简单来讲,拉格朗日乘数法是一种方法,一种求解带约束的优化问题的方法,而这里的约束只能是等式约束。什么是带等式约束的优化问题呢?其实这是一个十分常见的问题,比如我们小学时经常做的一些应用题,像如何用一定长的铁丝,围城一个最大面积的矩形?以及高中时做过的物理题:用一定的力扔出一个物体,沿着哪个角度扔出能最远?等等。就是在一定的条件下,是目标最好。用数学的语言表示如下:
min f(X) 或 max(fx)
s.t. hi(x)=0 i=1,2,...,n
其中,f(X)是我们的期望,有些事情希望越小越好,有些事情希望越大越好,因人因事而异,而hi(x)=0则就是受到的约束。而X则是一些因素,一些会影响到期望值的因素,这些因素收到hi(x)的约束。如何求出使期望最大(j或者最小)的因素的取值呢,拉格朗日乘数法是这样做的:1.首先构造拉格朗日函数L(x)=f(x)+∑iαihi(x),其中αi就是拉格朗日乘数,2.求L(x)的梯度,可知在满足约束条件的前提下,当梯度为零向量时,L(x)取得极值,而且由于hi(x)=0,所以此时的极值也正是f(X)的极值,3.解方程,求出αi和x,假设XŒR(k),其中一共有k+n个未知数,,也正好有k+n个方程,其中梯度为零k个,约束条件n个。这样就做完了。
此外拉格朗日乘数法还可以这样理解:是目标方程取得极值的点一定是目标方程与约束面相切的地方,相切等价于法向量共线,这里得到的方程和拉格朗日函数梯度为零得到的方程式一致的。
注意此种方法并不是一直适用的,L(X)的梯度无法为零时,那么f(X)则无法通过这种方法求得极值。
什么是KKT条件?
拉格朗日乘数法只能解决等式约束的优化问题,但等式约束并不足以描述人们面临的问题,不等式约束比等式约束更为常见,大部分实际问题的约束都是不超过多少时间,不超过多少人力,不超过多少成本等等。所以有几个科学家拓展了拉格朗日乘数法,增加了几个条件之后便可以用拉格朗日乘数法来求解不等式约束的优化问题了。
min f(X) 或 max(fx)
s.t. hi(x)=0 i=1,2,...,n
gj(x)<=0 j=1,2,...,m
1.同样构造拉格朗日函数,L(x)=f(x)+∑iαihi(x)+∑jβjgj(x)
2.求L(X)的梯度,令其等于0,得到K个方程(XŒR(k)),但此时L(X)的极值不一定为f(x)的极值,此时L(x)<=f(X),等号成立的条件是∑jβjgj(x)=0,也就是βjgj(x)=0,j=0,1,2...,m.(其中βj>=0)再加上等式约束,解方程即可求得最优解。
(当求minf(x)时,L(x)=f(x)+∑iαihi(x)+∑jβjgj(x)(f(X)>=L(X)),求最大值时L(x)=f(x)+∑iαihi(x)+∑jβjgj(x)f(X)<=L(X))
如有疑问或错误,欢迎提出宝贵建议([email protected])