拉格朗日乘數法與KKT條件


關於拉格朗日乘數法和KKT條件的一些思考

  從我開始接觸拉格朗日乘數法到現在已經將近有四個月了,但似乎直到今天我對其的理解才開始漸漸清晰,相信很多人在科研初期也會對一些基礎的算法困惑不解,而一篇好的教程則可以大大縮短困惑的時間,從而把更多時間用在開創性的工作上去。經過近幾日的搜索,我發現網上還是有一些說明是很不錯得,英文較好的同學可以直接去閱讀Hugo的介紹(http://www.onmyphd.com/?p=lagrange.multipliers)。下面是我近幾日學下來的一些見解,看下來如果有想討論,指點或者交流的欲望,請可以直接發郵件聯系我(tjdqwangxw@163.com).

  什么是拉格朗日乘數法?

  簡單來講,拉格朗日乘數法是一種方法,一種求解帶約束的優化問題的方法,而這里的約束只能是等式約束。什么是帶等式約束的優化問題呢?其實這是一個十分常見的問題,比如我們小學時經常做的一些應用題,像如何用一定長的鐵絲,圍城一個最大面積的矩形?以及高中時做過的物理題:用一定的力扔出一個物體,沿着哪個角度扔出能最遠?等等。就是在一定的條件下,是目標最好。用數學的語言表示如下:

  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))

  如有疑問或錯誤,歡迎提出寶貴建議(tjdqwangxw@163.com)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM