在求解最最佳化問題中,拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush Kuhn Tucker)條件是兩種最常用的方法。在有等式約束時使用拉格朗日乘子法,在有不等約束時使用KKT條件。
我們這裡提到的最最佳化問題通常是指對於給定的某一函式,求其在指定作用域上的全域性最小值(因為最小值與最大值可以很容易轉化,即最大值問題可以轉化成最小值問題)。提到KKT條件一般會附帶的提一下拉格朗日乘子。對學過高等數學的人來說比較拉格朗日乘子應該會有些印象。二者均是求解最最佳化問題的方法,不同之處在於應用的情形不同。
一般情況下,最最佳化問題會碰到一下三種情況:
(1)無約束條件
這是最簡單的情況,解決方法通常是函式對變數求導,令求導函式等於0的點可能是極值點。將結果帶回原函式進行驗證即可。
(2)等式約束條件
設目標函式為f(x),約束條件為h_k(x),形如:
s.t. 表示subject to ,“受限於”的意思,l表示有l個約束條件。
則解決方法是消元法或者拉格朗日法。消元法比較簡單不在贅述,這裡主要講拉格朗日法,因為後面提到的KKT條件是對拉格朗日乘子法的一種泛化。
例如給定橢球:
求這個橢球的內接長方體的最大體積。這個問題實際上就是條件極值問題,即在條件 下,求的最大值。
當然這個問題實際可以先根據條件消去 z (消元法),然後帶入轉化為無條件極值問題來處理。但是有時候這樣做很困難,甚至是做不到的,這時候就需要用拉格朗日乘數法了。
首先定義拉格朗日函式F(x):
( 其中λk是各個約束條件的待定係數。)
然後解變數的偏導方程:
......
如果有l個約束條件,就應該有l+1個方程。求出的方程組的解就可能是最最佳化值(高等數學中提到的極值),將結果帶回原方程驗證就可得到解。
回到上面的題目,透過拉格朗日乘數法將問題轉化為
對
求偏導得到
聯立前面三個方程得到和,帶入第四個方程解之
帶入解得最大體積為:
至於為什麼這麼做可以求解最最佳化?維基百科上給出了一個比較好的直觀解釋。
舉個二維最最佳化的例子:
min f(x,y)
s.t. g(x,y) = c
這裡畫出z=f(x,y)的等高線(函式登高線定義見百度百科):
綠線標出的是約束g(x,y)=c的點的軌跡。藍線是f(x,y)的等高線。箭頭表示斜率,和等高線的法線平行。從梯度的方向上來看,顯然有d1>d2。綠色的線是約束,也就是說,只要正好落在這條綠線上的點才可能是滿足要求的點。如果沒有這條約束,f(x,y)的最小值應該會落在最小那圈等高線內部的某一點上。而現在加上了約束,最小值點應該在哪裡呢?顯然應該是在f(x,y)的等高線正好和約束線相切的位置,因為如果只是相交意味著肯定還存在其它的等高線在該條等高線的內部或者外部,使得新的等高線與目標函式的交點的值更大或者更小,只有到等高線與目標函式的曲線相切的時候,可能取得最優值。
如果我們對約束也求梯度∇g(x,y),則其梯度如圖中綠色箭頭所示。很容易看出來,要想讓目標函式f(x,y)的等高線和約束相切,則他們切點的梯度一定在一條直線上(f和g的斜率平行)。
也即在最最佳化解的時候:∇f(x,y)=λ(∇g(x,y)-C) (其中∇為梯度運算元; 即:f(x)的梯度 = λ* g(x)的梯度,λ是常數,可以是任何非0實數,表示左右兩邊同向。)
即:▽[f(x,y)+λ(g(x,y)−c)]=0λ≠0
那麼拉格朗日函式: F(x,y)=f(x,y)+λ(g(x,y)−c) 在達到極值時與f(x,y)相等,因為F(x,y)達到極值時g(x,y)−c總等於零。
min( F(x,λ) )取得極小值時其導數為0,即▽f(x)+▽∑ni=λihi(x)=0,也就是說f(x)和h(x)的梯度共線。
簡單的說,在F(x,λ)取得最最佳化解的時候,即F(x,λ)取極值(導數為0,▽[f(x,y)+λ(g(x,y)−c)]=0)的時候,f(x)與g(x) 梯度共線,此時就是在條件約束g(x)下,f(x)的最最佳化解。
(3)不等式約束條件
設目標函式f(x),不等式約束為g(x),有的教程還會新增上等式約束條件h(x)。此時的約束最佳化問題描述如下:
則我們定義不等式約束下的拉格朗日函式L,則L表示式為:
其中f(x)是原目標函式,hj(x)是第j個等式約束條件,λj是對應的約束係數,gk是不等式約束,uk是對應的約束係數。
常用的方法是KKT條件,同樣地,把所有的不等式約束、等式約束和目標函式全部寫為一個式子L(a, b, x)= f(x) + a*g(x)+b*h(x),
KKT條件是說最優值必須滿足以下條件:
1)L(a, b, x)對x求導為零;
2)h(x) =0;
3)a*g(x) = 0;
接下來主要介紹KKT條件,推導及應用。詳細推導過程如下:
參考:
【1】拉格朗日乘數法
【2】KKT條件介紹
【3】深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT條件
【4】拉格朗日乘子法和KKT條件
在求解最最佳化問題中,拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush Kuhn Tucker)條件是兩種最常用的方法。在有等式約束時使用拉格朗日乘子法,在有不等約束時使用KKT條件。
我們這裡提到的最最佳化問題通常是指對於給定的某一函式,求其在指定作用域上的全域性最小值(因為最小值與最大值可以很容易轉化,即最大值問題可以轉化成最小值問題)。提到KKT條件一般會附帶的提一下拉格朗日乘子。對學過高等數學的人來說比較拉格朗日乘子應該會有些印象。二者均是求解最最佳化問題的方法,不同之處在於應用的情形不同。
一般情況下,最最佳化問題會碰到一下三種情況:
(1)無約束條件
這是最簡單的情況,解決方法通常是函式對變數求導,令求導函式等於0的點可能是極值點。將結果帶回原函式進行驗證即可。
(2)等式約束條件
設目標函式為f(x),約束條件為h_k(x),形如:
s.t. 表示subject to ,“受限於”的意思,l表示有l個約束條件。
則解決方法是消元法或者拉格朗日法。消元法比較簡單不在贅述,這裡主要講拉格朗日法,因為後面提到的KKT條件是對拉格朗日乘子法的一種泛化。
例如給定橢球:
求這個橢球的內接長方體的最大體積。這個問題實際上就是條件極值問題,即在條件 下,求的最大值。
當然這個問題實際可以先根據條件消去 z (消元法),然後帶入轉化為無條件極值問題來處理。但是有時候這樣做很困難,甚至是做不到的,這時候就需要用拉格朗日乘數法了。
首先定義拉格朗日函式F(x):
( 其中λk是各個約束條件的待定係數。)
然後解變數的偏導方程:
......
如果有l個約束條件,就應該有l+1個方程。求出的方程組的解就可能是最最佳化值(高等數學中提到的極值),將結果帶回原方程驗證就可得到解。
回到上面的題目,透過拉格朗日乘數法將問題轉化為
對
求偏導得到
聯立前面三個方程得到和,帶入第四個方程解之
帶入解得最大體積為:
至於為什麼這麼做可以求解最最佳化?維基百科上給出了一個比較好的直觀解釋。
舉個二維最最佳化的例子:
min f(x,y)
s.t. g(x,y) = c
這裡畫出z=f(x,y)的等高線(函式登高線定義見百度百科):
綠線標出的是約束g(x,y)=c的點的軌跡。藍線是f(x,y)的等高線。箭頭表示斜率,和等高線的法線平行。從梯度的方向上來看,顯然有d1>d2。綠色的線是約束,也就是說,只要正好落在這條綠線上的點才可能是滿足要求的點。如果沒有這條約束,f(x,y)的最小值應該會落在最小那圈等高線內部的某一點上。而現在加上了約束,最小值點應該在哪裡呢?顯然應該是在f(x,y)的等高線正好和約束線相切的位置,因為如果只是相交意味著肯定還存在其它的等高線在該條等高線的內部或者外部,使得新的等高線與目標函式的交點的值更大或者更小,只有到等高線與目標函式的曲線相切的時候,可能取得最優值。
如果我們對約束也求梯度∇g(x,y),則其梯度如圖中綠色箭頭所示。很容易看出來,要想讓目標函式f(x,y)的等高線和約束相切,則他們切點的梯度一定在一條直線上(f和g的斜率平行)。
也即在最最佳化解的時候:∇f(x,y)=λ(∇g(x,y)-C) (其中∇為梯度運算元; 即:f(x)的梯度 = λ* g(x)的梯度,λ是常數,可以是任何非0實數,表示左右兩邊同向。)
即:▽[f(x,y)+λ(g(x,y)−c)]=0λ≠0
那麼拉格朗日函式: F(x,y)=f(x,y)+λ(g(x,y)−c) 在達到極值時與f(x,y)相等,因為F(x,y)達到極值時g(x,y)−c總等於零。
min( F(x,λ) )取得極小值時其導數為0,即▽f(x)+▽∑ni=λihi(x)=0,也就是說f(x)和h(x)的梯度共線。
簡單的說,在F(x,λ)取得最最佳化解的時候,即F(x,λ)取極值(導數為0,▽[f(x,y)+λ(g(x,y)−c)]=0)的時候,f(x)與g(x) 梯度共線,此時就是在條件約束g(x)下,f(x)的最最佳化解。
(3)不等式約束條件
設目標函式f(x),不等式約束為g(x),有的教程還會新增上等式約束條件h(x)。此時的約束最佳化問題描述如下:
則我們定義不等式約束下的拉格朗日函式L,則L表示式為:
其中f(x)是原目標函式,hj(x)是第j個等式約束條件,λj是對應的約束係數,gk是不等式約束,uk是對應的約束係數。
常用的方法是KKT條件,同樣地,把所有的不等式約束、等式約束和目標函式全部寫為一個式子L(a, b, x)= f(x) + a*g(x)+b*h(x),
KKT條件是說最優值必須滿足以下條件:
1)L(a, b, x)對x求導為零;
2)h(x) =0;
3)a*g(x) = 0;
接下來主要介紹KKT條件,推導及應用。詳細推導過程如下:
參考:
【1】拉格朗日乘數法
【2】KKT條件介紹
【3】深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT條件
【4】拉格朗日乘子法和KKT條件