KKT最優化條件是Karush[1939],以及Kuhn和Tucker[1951]先後獨立發表出來的。這組最優化條件在Kuhn和Tucker發表之後才逐漸受到重視,因此許多情況下只記載成庫恩塔克條件(Kuhn-Tucker conditions)
庫恩塔克條件(Kuhn-Tucker conditions)是非線性規劃領域裡最重要的理論成果之一,是確定某點為極值點的必要條件。如果所討論的規劃是凸規劃,那麼庫恩-塔克條件也是充分條件。
本文不對數學公式進行詳細推導,而是從直觀上對KKT條件進行理解。當然KKT條件與拉格朗日乘子是相關聯的,看完本文後,可以參閱相關資料。
無約束優化問題的極值(函數的最大值/最小值)通常發生在斜率為零的點上。
因此,為了找到極值,我們只需要搜索斜率為零的點。 我們可以用很好的數學形式表達這個屬性。
如果 x* 是無約束優化問題的極值, 那麼
▽f(x*)=0
等式約束的優化問題
如果x*是等式約束的優化問題的極值, 那麼
▽f(x*)=λ×▽g(x*)
g(x*)=0
不等式約束的優化問題
如果x*是不等式約束的優化問題的極值, 那麼,
KKT條件:
原可行性:g(x*)≤0 對偶可行性: α≥0 互補鬆弛條件:αg(x*)=0 拉格朗日平穩性: ▽f(x*)=α×▽g(x*)為了找到具有不等式約束的優化問題的極值,我們需要搜索必須滿足所有KKT條件的點(x*)
KKT條件直觀理解
1.拉格朗日平穩性:下面顯示了具有等式約束的優化問題的等高線圖(它是通過繪製2D格式上的目標函數值的常量切片來表示3D表面的圖)。 分析結束後,你會意識到為什麼我選擇了一個等式約束來解釋拉格朗日平穩性條件。
從等高線圖中,我們可以推斷出上述問題只發生了兩種可行點:1、切點2、交點。 切點是水平曲線(等高線)和約束線彼此相切的點。 交點是水平曲線和約束線相交的點。
在等高線圖中,如果從交叉點(沿約束線)向左移動,則目標函數值會增加。 它表明該問題在這方面有改進的餘地。 同樣,如果從交叉點向右移動,我們的目標函數值會減小。 但是,對於上圖中的切線點,從切線點向右或向左移動只會降低目標函數值。這意味著約束優化問題的極值總是落在切點上。
結論1:約束優化問題的極值總是發生在切點上。
我們知道函數的梯度指向函數增加最大的方向。在下面的等高線圖中,從一個水平曲線移動到另一個水平曲線的最短路徑是垂直方向,水平曲線與函數中沒有立即變化的方向相切。 這意味著任何點處函數的梯度都垂直於該點的函數水平曲線。
結論2:函數的梯度和函數的水平曲線的相切是正交的
通過結合結論1和2,我們可以得出結論,約束的梯度(▽g)和目標函數的梯度(▽f)在極值處(切線點)方向是相同或者相反的。 表達如下:
▽f(x*)=α×▽g(x*)
2. 對偶鬆弛(α≥0)
α被稱為KKT乘子或對偶變量(如果我們將原始問題轉換為對偶形式,KKT乘子將成為對偶形式的變量)。在解釋KKT乘子只允許非負值的原因之前,讓我告訴KKT乘子符號在約束優化問題中的影響是什麼.
如果α≥0, 那麼 ▽f 和 ▽g 方向是同向的 (▽f(x*)=α×▽g(x*)).
同樣,如果α≤0, 那麼▽f 和▽g方向是相反的。
例如:
Max 2x22y2 (1)
s.t. x+y≤1
上述問題的最優解是4/3 ,
當x*=2/3 , y*=1/3 and α=4/3。
正如我們在上文看到的那樣,拉格朗日乘子對具有等式約束的優化問題沒有任何符號限制。但是,對於具有不等式約束的優化問題,KKT乘子是有符號限制的(α≥0)。 你可能會懷疑我們為什麼對不等式約束有這個符號限制。在講KKT乘子只取非負值的原因之前,咱們先來分析下可行域。
· g(x,y)=0(x+y1=0):可行域僅是一條直線
· g(x,y)≥0:直線上方都是可行域。
· g(x,y)≤0:直線的下方是可行域。
結論3:約束梯度(▽g)始終指向約束控制的可行區域(g(x,y)≥0,g(x,y)≤0方向分別相反)
現在,你可能會理解上述問題中的KKT乘子,只有在可行區域翻轉時才會出現負號(i.e.,x+y≥1)。
如果發生這種情況,約束不會對目標函數產生任何影響。 這就像解決一個無約束的優化問題。
Max f(x,y)=2x22y2 (2)
s.t. x+y≥1
最優解: 在點(0,0),f(x,y) 取得最優解2。
這意味著如果約束是活躍狀態(下文),極值發生在▽f和▽g平行的點(α≥0)。 如果它們在極值上不平行,則意味著約束處於非活動狀態。
3. 互補鬆弛條件
α×g(x*)=0
這個條件是說,KKT乘子(對偶變量)或不等式約束(g(x*)≤0)在極值處為零。 我們可以將任何不等式約束分為兩類:1、活躍約束2、非活躍約束。
1)活躍約束:極值發生在約束的限制區域(邊界)上。 例如:問題1(見式1)最優解在
(x*=22,y*=13) ,約束 g(x*,y*)1=0。
2)非活躍約束:極值發生在可行區域內(不在限制區域的邊界上)。例如:問題2(見式2)最優解在
(x*=0,y*=0) ,約束g(x*,y*)1≥0。
從例1中可以看出▽f和▽g平行,α取正值。 在示例2中,我們看到α取負值的情況,導致約束變為非活躍狀態。 這意味著
Max f(x)+αg(x)=Max f(x)
只有當α取值為零時,上述情況才有可能。
所以g(x)≠0在極值點處,約束處於非活躍狀態