無約束問題
無約束問題定義如下:
f(x)稱為目標函數, 其中x是一個向量,它的維度是任意的。
通過求導, 令導數等於零即可:
如下圖所示:
等式約束問題
單約束問題
單約束問題定義如下:
g(x)稱為約束函數
單約束問題的解決步驟如下:
1, 加一個變量,這個變量稱為拉格朗日乘子將約束條件和目標函數聯立構造拉格朗日函數
2, 對每個變量分別求導, 令導數等於零,求得最優值
這是一個例子:
使用一個約束,一個拉格朗日乘子,得到拉格朗日函數:
求導得到:
解得:
代入f(x, y)可得2, -2, 0, 也就是我們的最優值
約束函數的即是一維空間的圓圈,變成目標函數的約束條件嵌入到目標函數的曲面中,整個過程如圖:
多約束問題
等式約束的多約束問題即有多個約束函數, 多約束問題的定義如下:
多約束的問題和單約束問題的解決過程類似:
1, 加k個拉格朗日乘子,將約束條件和目標函數聯立構造拉格朗日函數
2, 對每個變量分別求導, 令導數等於零,求得最優值
在約束線上找到一個點可以和等高線相切,所得的值實在約束范圍內的最大值或者最小值如下面兩個圖, 分別是原圖和等高線圖
不等式約束問題
不等式問題單約束問題定義如下:
多約束的問題定義如下:
單約束和多約束問題的解法是類似的,下面以分析單約束問題為例。
不等式的約束,會出現兩種情況,一種是最優解不在不等式的約束中,我們稱為約束無效(下圖左), 一種是在不等式的約束中,約束有效(下圖右)。
情況一:約束無效
如圖左,由於最優點在可行域內, 約束了跟沒約束一樣,由於等價於沒有約束作用,所以直接可以對 f(x)+λh(x) 用拉格朗日乘子法
情況二:約束有效
如圖右,由於有約束的作用,約束條件最弱的時候取得最優值,可以看出, 最優解在可行域的邊界上取得,轉化成了等式約束,因此,不等式約束變成了等式約束。
(我也不想用可以看出的, 但是確實是這樣,從等高圖直觀的來看, 可行域里面的等高更高,邊界才有可能取得最優解)
h(x), g(x) 為0沒有問題,但是為什么 大於 0 呢?后面通過例題來解釋(先記住,俺也沒咋搞懂, 老師跟我說這里很簡單,但是他也記不得了,我搜了一堆博客,大部分都是用梯度解釋的【慘兮兮)。
綜上, 在情況一下,μ=0 且 g(x)≤0,情況二下,μ≥0 且 g(x)=0,將上面的條件綜合起來, 寫成多約束的形式,即可以得到大名鼎鼎的KKT條件:
一個例子
對於情況一,問題如下:
這個不等式約束包含了原點, 求它相當於沒有求, 屬於約束無效, 如圖:
對於情況二,問題如下:
這個不等式不包含原點, 在不等式約束下,最小值是在邊緣相切的地方取得,和用等式h(x,y)=x+y=-2進行約束效果是一樣的,如圖:
但是這里又不能完全等價為等式約束, 因為不等式帶來了新的條件, 就是我們需要解釋的μ
如圖, 同心圓是凸函數的等高線,等高線的值如下排列,所以在相切處,法線也就是的方向如下(法線也就是梯度,指向增長或下降最快的方向,這里用的是增長的, 也就是等高線的值變大的方向)
而凸函數h(x,y)的法線也一樣指向h(x,y)增長的方向,這個方向正好和
相反:
因此, 我們有
μ ≥ 0說明了兩個梯度是方向是相反的。
KKT總結:
各個項以及對應的含義如下: