約束優化的拉格朗日乘子(KKT)

貪心科技發表於2019-02-12

  • 拉格朗日乘數法

  • 約束條件的集中形式

  • 求解不同約束條件問題的最優方法

本文討論帶有約束條件的最優化問題,約束條件分為兩種,一種是等式約束;另一種是不等式約束。對於第一種等式約束的優化問題,可以直接利用拉格朗日乘子法去獲得最優解;對於不等式約束的優化問題,可以轉化未Karush–Kuhn–Tucker conditions(KKT條件)下去應用拉格朗日乘子法求解。也就是說都是應用拉格朗日乘數法求解。

一、拉格朗日乘數法

拉格朗日乘數法是一種優化演算法,主要運用於解決優化問題,它的基本思想就是用過拉格朗日乘子來把含有m個變數和l個約束條件的約束優化問題轉換成含有(m+l)個變數的無約束優化問題。

二、約束條件的集中形式

約束優化的拉格朗日乘子(KKT)


三、求解不同約束條件問題的最優方法

(1)等式條件下求最優解:

其實,高中的時候已經接觸過等式條件機制求最優解的問題,都知道用拉格朗日乘數法可以求得最優解。首先構建一個Lagrange multiplier:

約束優化的拉格朗日乘子(KKT)

構建出 L(x,y,λ) 後,跟原來的問題對比一下,構建出的Lagrange multiplier把原來的等數條件約束情況變成含三個引數 (x,y,λ) 無條件極值的問題,最後可以通過求導數,令極值為零可以求出可行解 x 。

約束優化的拉格朗日乘子(KKT)

(拉格朗日乘子求的解不一定是最優解,其實只是區域性最優解,這裡稱作可行解,只有在凸函式中才能保證最優解)至於為什麼可以把原始的等式條件極值問題轉化成求 L(x,y,λ) 的極值問題?可以觀察一下下面的二維圖:

約束優化的拉格朗日乘子(KKT)

圖一

藍色虛線是目標函式 f(x,y) 的等高線,綠色實現 g(x,y)=c 是約束條件。圖中,目標函式和條件函式有三種情況:

1、相離

對於相離的情況,我們以前學過,兩個函式有交點才說明是兩個函式的解,所以相離明顯不行。

2、相交

兩個函式相交的才是兩個函式的解,但是相交得到的一定不是最優值,因為相交意味著肯定還存在其它的等高線在該條等高線的內部或者外部,使得新的等高線與目標函式的交點的值更大或者更小。

3、相切

圖中,等高線與條件函式相切時候,只有一個交點,是可行解。

當等高線與條件函式在可行解處(相切時候)的梯度平行有下式:

約束優化的拉格朗日乘子(KKT)

對上式子移項後,可得到:

約束優化的拉格朗日乘子(KKT)

該式子恰好與令Lagrange multiplier的導數為零是式子相同。

舉一個小栗子:

約束優化的拉格朗日乘子(KKT)

根據上式子可知是一個典型的約束優化問題,約束條件是等式,可以用拉格朗日乘子。

約束優化的拉格朗日乘子(KKT)

原來的條件約束問題,轉化為無約束方程組問題。

約束優化的拉格朗日乘子(KKT)

(2)不等式條件下求最優解

上述都是等式條件約束的優化問題,但事實上,很多時候等式約束很難覆蓋我們顯示的問題,計算成本時候,通常說不能超過多少資金,不能超多多少時間,都是一個範圍內,通常面對更多的是不等式條件約束的情況,面對這種情況,可以通過增加KKT條件後,通過拉格朗日乘子求解不等式約束的優化問題。

可以把目標函式和所有的約束條件寫成一個式子:

約束優化的拉格朗日乘子(KKT)

對於不等式條件的情況有兩種:即可行解在 g(x)<0 或者 g(x)=0 區域內取得(如下圖)

約束優化的拉格朗日乘子(KKT)

圖二

約束優化的拉格朗日乘子(KKT)約束優化的拉格朗日乘子(KKT)

約束優化的拉格朗日乘子(KKT)

約束優化的拉格朗日乘子(KKT)

原文來自學員知乎作業

https://zhuanlan.zhihu.com/p/55532322

相關文章