kkt條件例題求最優解 對KKT條件的理解

2021-10-14 05:01:36 字數 3205 閱讀 8885

在大學的時候我們都學過等式約束的的拉格朗日優化方法,但是我們很少去理解拉格朗日優化的內在邏輯,而是直接去使用它,這裡我給出自己看了一些資料後的理解。

首先,我們給出拉格朗日的數學描述:

arg

s.t

我們的計算方法是構造乙個拉格朗日函式,然後通過求拉格朗日函式的最優解從而得到等式條件約束下的最優解,即:

通常情況下我們都會直接對上面的函式求偏導數,然後令其等於0來求解,即:

在上面的圖形中xy = 3為約束條件,

為目標函式,我們可以看到如果沒有約束條件的情況下,目標函式的最小值為0,即想x,y都為0,但是有了約束條件後,取到的值必須在約束條件xy = 3的圖形上。對於目標函式我們可以把其當做一圈圈等高線,目標函式的值越大,等高線圍起來的面積就越大,表現在圖中就是圓的半徑越大。所以我們可以從中心處出發,做一圈圈的圓,當圓的半徑較小的時候,目標函式和約束條件沒有交點,不滿足約束條件,當圓的半徑比較大的時候目標函式和約束條件有四個交點,雖然目標滿足了約束條件。但是我們可以發現,如果縮小圓的半徑,那麼目標函式仍然與約束條件有交點,而且此時的目標函式更小。所以我們可以縮小圓的半徑,直到和約束條件的圖形相切。此時,我們發現此時如果在縮小半徑,那麼就不滿足約束條件了,所以在相切的時候目標函式取到約束條件下的最小值。

如果約束條件有多個那麼可以表示為:

我們仔細觀察上式可以發現這個式子等價與我們之前拉格朗日函式中的

和 所以我們發現把目標函式和約束條件放在一起並引入引數

構造乙個拉格朗日函式,然後求導,其實就是通過梯度共線的約束確保目標函式和約束條件相切與某一點,這個時候才可能取到最值,達到我們優化的目的。

首先我們給出kkt條件

kkt條件是針對含有不等式約束的優化問題的,我們先給出優化目標:

arg

s.t

根據優化目標,我們同樣可以構造處拉格朗日函式,並對其進行優化,從而得到:

...(1)

...(2)

...(3)

...(4)

...(5)

...(6)上述就是完整的乙個kkt條件的表述。

在上面的條件中,我們可以發現(1)(2)(3)(4)和等式約束的中的作用相同,但是(5),(6)新加的兩個條件又該怎麼理解呢?

與等式約束相比增加(5)式的理解

我們首先來理解一下,在不等式約束的情況下發生了什麼變化:

在不等式的約束中,可行域發生了改變,從一條或者乙個曲面變成了乙個區域或者乙個空間:

如上圖,如果是等式約束,那麼最後的結果必須在直線上,但是如果是不等式約束,那麼得到的最值點,可以在直線下方。而當出現多個不等式約束的時候,比如另外出現一條直線在直線

的下方,比如

,那麼此時由於約束的新增使得可行域進一步變小,而變小之後的可行域同樣也滿足

的約束,所以這個時候就像相當於

已經不起作用了,變成了無效約束。那麼當優化目標出現了多重條件約束的時候,就會出現有的約束有效,有的約束無效的問題,但是我們又不能直觀的識別處,那些約束是有效的,那些約束是無效的,那麼我們該如何處理這個問題呢?

我們假定對於所有的不等式約束,我們已經取得其交集,即我們已經得到滿足所有不等式約束所確定的可行域和可行域的邊界,那麼我們優化的結果可能出現兩種情況,一種是最優值出現在可行域的中間點,一種是最優值出現在可行域的邊界上。如果說最優值出現在可行域的中間點,那麼相當於所有的不等式約束都不起作用,因為即使是沒有不等式約束,最優值也會出現在這裡,這個時候所有的不等式都不應該出現在優化的目標函式中,即

全為0;如果說最優值出現在可行域的邊界上,那麼對應的不等式約束就應該變成等式約束,所以就應該有

,同時應該出現在優化的目標函式中,其

不等於0。由於可行域的邊界可能是多個不等式約束的交集,即對於這些不等式而言都有

。而那些並不能構成可行域的邊界的不等式約束同樣不應該出現在優化目標函式中,所以應該有

。所以我們發現無論不等式約束是不是有效約束,總會有

。有了上面的基礎之後那些不等式約束是有效約束,我們就可以根據最終優化後,如果

不等於0那麼該不等式約束就是有效約束,如果

,則該不等式約束就是無效約束。

與等式約束相比增加(6)式的理解

在等式約束中我們已經知道在取得最優值的時候目標函式和約束條件的梯度是共線的(如果是多條件約束,那麼約束條件的梯度是多個約束條件梯度的線性組合),這裡梯度共線的條件在不等式約束中的作用同樣適用。

那麼為什麼在kkt條件中會多了乙個條件(6)呢,其實這首先與這與kkt條件以標準形式給出有關係。觀察kkt條件我們會發現目標函式是求最小值,不等式約束的方式總是<=0(這主要是為了方便定義kkt條件,不容因為形式的改變而造成形成產生多種情況)。如果有的朋友不理解,那麼你可以理解這就是kkt條件的標準形式。其實不管什麼優化問題都可以轉化為kkt條件中的標準形式,例如我們需要最大化乙個變數,我們加乙個負號就變成了最小化的問題,不等式是》=的話,加乙個負號也可以變成<=。

基於kkt條件的標準形式我們就可以解釋為什麼會出現條件(6)了:

條件(6)的出現主要是因為我們再求最小化的時候,如果存在最優值,那麼根據我們上面講的內容,目標函式和約束條件的梯度應該共線,而我們的kkt條件中標準形式是最小化且不等式約束條件都是<=0的,所以進一步的有目標函式和約束條件梯度反向。具體如下圖:

來自於維基百科

這裡需要解釋一下,為什麼不是

要大於等於0。如上圖所示,後面的約束比前面的更強。看右半部分那個圖,我們已經知道了問題中的可行域是在

一側,而g(x)的梯度是指向大於 0 的一側,也就是不是可行域的一側。而求的問題是極小值,所以

在交點處的梯度是指向可行域的一側,也就是說兩個梯度一定是相反的。所以也就可以確定這裡的係數

一定是大於 0 的。在不等式約束是無效約束的時候,

。而等式約束中由於不知道等式的梯度方向,所以對它沒有約束。

判斷kkt條件的例題 kkt條件例題求解

karush kuhn tucker條件,kkt條件 kkt點 稱 為對.計算結果 1 0 2 4 3 3 4 1 w1 2 w2 2 b 3 疑問 1.為什麼要規定 i 0 2.kkt 條件在求解過程中體現在什麼地方。x sin x y 在 x0 y0 0.5,0.5 附近的乙個 近似 解。y c...

判斷kkt條件的例題 KKT條件原理

問題引入 max f x,y s.t.g x,y 0 幾何解釋 a.g x y 0為上圖中z 0平面中的圓,圓的邊表示g x,y 0,圓的內部表示g x,y 0。b.z f x,y 為上圖中的曲面。上述極值問題就是要求當點 x,y 落在圓內時 包括圓的邊 f x,y 的最大值。1 如果極值點在圓內,...

拉格朗日乘子和KKT條件 的最優化問題

在求取有約束條件的優化問題時,拉格朗日乘子法 lagrange multiplier 和kkt條件是非常重要的兩個求取方法,對於等式約束的優化問題,可以應用拉格朗日乘子法去求取最優值 如果含有不等式約束,可以應用kkt條件去求取。當然,這兩個方法求得的結果只是必要條件,只有當是凸函式的情況下,才能保...