[Math & Algorithm] 拉格朗日乘數法

  拉格朗日乘數法(Lagrange Multiplier Method)以前聽數學老師授課的時候就是隻知其一;不知其二,如今愈加感受拉格朗日乘數法應用的普遍性,因此特地抽時間學習了麻省理工學院的在線數學課程。新學到的知識必定要馬上記錄下來,但願對各位博友有些許幫助。算法

1. 拉格朗日乘數法的基本思想

  做爲一種優化算法,拉格朗日乘子法主要用於解決約束優化問題,它的基本思想就是經過引入拉格朗日乘子來將含有n個變量和k個約束條件的約束優化問題轉化爲含有(n+k)個變量的無約束優化問題。拉格朗日乘子背後的數學意義是其爲約束方程梯度線性組合中每一個向量的係數。函數

  如何將一個含有n個變量和k個約束條件的約束優化問題轉化爲含有(n+k)個變量的無約束優化問題?拉格朗日乘數法從數學意義入手,經過引入拉格朗日乘子創建極值條件,對n個變量分別求偏導對應了n個方程,而後加上k個約束條件(對應k個拉格朗日乘子)一塊兒構成包含了(n+k)變量的(n+k)個方程的方程組問題,這樣就能根據求方程組的方法對其進行求解。學習

  解決的問題模型爲約束優化問題:優化

  min/max a function f(x,y,z), where x,y,z are not independent and g(x,y,z)=0.atom

  即:min/max f(x,y,z)spa

    s.t. g(x,y,z)=03d

2. 數學實例

  首先,咱們先以麻省理工學院數學課程的一個實例來做爲介紹拉格朗日乘數法的引子。blog

  【麻省理工學院數學課程實例】求雙曲線xy=3上離遠點最近的點。ip

  解:數學

  首先,咱們根據問題的描述來提煉出問題對應的數學模型,即:

  min f(x,y)=x2+y2(兩點之間的歐氏距離應該還要進行開方,可是這並不影響最終的結果,因此進行了簡化,去掉了平方)

  s.t. xy=3.

  根據上式咱們能夠知道這是一個典型的約束優化問題,其實咱們在解這個問題時最簡單的解法就是經過約束條件將其中的一個變量用另一個變量進行替換,而後代入優化的函數就能夠求出極值。咱們在這裏爲了引出拉格朗日乘數法,因此咱們採用拉格朗日乘數法的思想進行求解。

  咱們將x2+y2=c的曲線族畫出來,以下圖所示,當曲線族中的圓與xy=3曲線進行相切時,切點到原點的距離最短。也就是說,當f(x,y)=c的等高線和雙曲線g(x,y)相切時,咱們能夠獲得上述優化問題的一個極值(注意:若是不進一步計算,在這裏咱們並不知道是極大值仍是極小值)。

  如今原問題能夠轉化爲求當f(x,y)和g(x,y)相切時,x,y的值是多少?

  若是兩個曲線相切,那麼它們的切線相同,即法向量是相互平行的,▽f//▽g.

  由▽f//▽g能夠獲得,▽f=λ*▽g。

  這時,咱們將原有的約束優化問題轉化爲了一種對偶的無約束的優化問題,以下所示:

  原問題:min f(x,y)=x2+y2              對偶問題:由▽f=λ*▽g得,

      s.t. xy=3                                       fx=λ*gx,

                                                                     fy=λ*gy,

                                                                          xy=3.

                  約束優化問題                                   無約束方程組問題

  經過求解右邊的方程組咱們能夠獲取原問題的解,即

  2x=λ*y

  2y=λ*x

  xy=3

  經過求解上式可得,λ=2或者是-2;當λ=2時,(x,y)=(sqrt(3), sqrt(3))或者(-sqrt(3), -sqrt(3)),而當λ=-2時,無解。因此原問題的解爲(x,y)=(sqrt(3), sqrt(3))或者(-sqrt(3), -sqrt(3))。

  經過舉上述這個簡單的例子就是爲了體會拉格朗日乘數法的思想,即經過引入拉格朗日乘子(λ)將原來的約束優化問題轉化爲無約束的方程組問題。

3. 拉格朗日乘數法的基本形態

   求函數在知足下的條件極值,能夠轉化爲函數的無條件極值問題。

  咱們能夠畫圖來輔助思考。

  綠線標出的是約束g(x,y)=c的點的軌跡。藍線是f(x,y)的等高線。箭頭表示斜率,和等高線的法線平行。

  從圖上能夠直觀地看到在最優解處,f和g的斜率平行。

  ▽[f(x,y)+λ(g(x,y)−1)]=0, λ≠0

  一旦求出λ的值,將其套入下式,易求在無約束極值和極值所對應的點。

  F(x,y)=f(x,y)+λ(g(x,y)−c)

  新方程F(x,y)在達到極值時與f(x,y)相等,由於F(x,y)達到極值時g(x,y)−c總等於零。

  上述式子取得極小值時其導數爲0,即▽f(x)+▽∑λigi(x)=0,也就是說f(x)和g(x)的梯度共線。

  題目1:

  給定橢球

     

  求這個橢球的內接長方體的最大致積。這個問題實際上就是條件極值問題,即在條件   

    

  下,求的最大值。

  固然這個問題實際能夠先根據條件消去,而後帶入轉化爲無條件極值問題來處理。可是有時候這樣作很困難,甚至是作不到的,這時候就須要用拉格朗日乘數法了。經過拉格朗日乘數法將問題轉化爲

     

  對求偏導獲得

     

  聯立前面三個方程獲得,帶入第四個方程解之

      

  帶入解得最大致積爲

      

  拉格朗日乘數法對通常多元函數在多個附加條件下的條件極值問題也適用。

  題目2:

  題目:求離散分佈的最大熵。

  分析:由於離散分佈的熵表示以下

     

     而約束條件爲

     

     要求函數的最大值,根據拉格朗日乘數法,設

     

     對全部的求偏導數,獲得

     

     計算出這個等式的微分,獲得

     

     這說明全部的都相等,最終解得

     

     所以,使用均勻分佈可獲得最大熵的值。

4. 拉格朗日乘數法與KKT條件

  咱們上述討論的問題均爲等式約束優化問題,但等式約束並不足以描述人們面臨的問題,不等式約束比等式約束更爲常見,大部分實際問題的約束都是不超過多少時間,不超過多少人力,不超過多少成本等等。因此有幾個科學家拓展了拉格朗日乘數法,增長了KKT條件以後即可以用拉格朗日乘數法來求解不等式約束的優化問題了。

  首先,咱們先介紹一下什麼是KKT條件。

  KKT條件是指在知足一些有規則的條件下, 一個非線性規劃(Nonlinear Programming)問題能有最優化解法的一個必要和充分條件. 這是一個廣義化拉格朗日乘數的成果. 通常地, 一個最優化數學模型的列標準形式參考開頭的式子, 所謂 Karush-Kuhn-Tucker 最優化條件,就是指上式的最優勢x必須知足下面的條件:

  1). 約束條件知足gi(x)≤0,i=1,2,…,p, 以及,hj(x)=0,j=1,2,…,q

  2). ∇f(x)+∑i=1μi∇gi(x)+∑j=1λj∇hj(x)=0, 其中∇爲梯度算子;

  3). λj≠0且不等式約束條件知足μi≥0,μigi(x)=0,i=1,2,…,p。

  KKT條件第一項是說最優勢x必須知足全部等式及不等式限制條件, 也就是說最優勢必須是一個可行解, 這一點天然是毋庸置疑的. 第二項代表在最優勢x, ∇f必須是∇gi和∇hj的線性組合, μi和λj都叫做拉格朗日乘子. 所不一樣的是不等式限制條件有方向性, 因此每個μi都必須大於或等於零, 而等式限制條件沒有方向性,因此λj沒有符號的限制, 其符號要視等式限制條件的寫法而定.

  爲了更容易理解,咱們先舉一個例子來講明一下KKT條件的由來。

  leL(x,μ)=f(x)+k=1μkgk(x),其中μk≥0,gk(x)≤0

  ∵μk≥0 gk(x)≤0  =>  μg(x)≤0

  ∴maxμL(x,μ)=f(x)                  (2)

  ∴minxf(x)=minxmaxμL(x,μ)     (3)

  maxμminxL(x,μ)=maxμ[minxf(x)+minxμg(x)]=maxμminxf(x)+maxμminxμg(x)=minxf(x)+maxμminxμg(x)

  又∵μk≥0, gk(x)≤0

  

  ∴maxμminxμg(x)=0, 此時μ=0 or g(x)=0.

  ∴maxμminxL(x,μ)=minxf(x)+maxμminxμg(x)=minxf(x)      (4)
  此時μ=og(x)=0.
  聯合(3),(4)咱們獲得minxmaxμL(x,μ)=maxμminxL(x,μ), 亦即

   

  minxmaxμL(x,μ)=maxμminxL(x,μ)=minxf(x)

  咱們把maxμminxL(x,μ)稱爲原問題minxmaxμL(x,μ)的對偶問題,上式代表當知足必定條件時原問題、對偶的解、以及minxf(x)是相同的,且在最優解x處μ=0 or g(x)=0。把x代入(2)得maxμL(x,μ)=f(x),由(4)得maxμminxL(x,μ)=f(x),因此L(x,μ)=minxL(x,μ),這說明x也是L(x,μ)的極值點,即

  

  最後總結一下:

  

  KKT條件是拉格朗日乘子法的泛化,若是咱們把等式約束和不等式約束一併歸入進來則表現爲:

  

  注:x,λ,μ都是向量。

  

  代表f(x)在極值點x處的梯度是各個hi(x)和gk(x)梯度的線性組合。

相關文章
相關標籤/搜索