1. 前言
- 本課程由數學系開設,旨在講述求解數學問題的各類最優化方法。
- 本博客僅對課程中的以下內容進行詳細介紹:
- 凸集、凸函數、凸規劃
- 線性規劃
- 無約束最優化方法
- 約束最優化方法
2. 凸集、凸函數、凸規劃
2.1 凸集
- 凸集的定義:
- 設\(S \subseteq \mathbf { R } ^ { n }\),若\(\forall x ^ { ( 1 ) } , x ^ { ( 2 ) } \in S , \lambda \in [ 0,1 ]\),必有\(\lambda x ^ { ( 1 ) } + ( 1 - \lambda ) x ^ { ( 2 ) } \in S\),則稱\(S\)爲凸集。
- 形式化理解凸集的定義,即集合中任意兩點連線上的點都在集合內。
- 對於凸集的證實,每每利用定義進行證實。
2.2 凸函數
- 凸函數的定義:
- 設集合\(S \subseteq \mathbf { R } ^ { n }\)爲凸集,函數\(f : S \rightarrow \mathbf { R }\)。若\(\forall x ^ { ( 1 ) } , x ^ { ( 2 ) } \in S , \lambda \in ( 0,1 )\),恆有\(f \left( x ^ { ( 1 ) } + ( 1 - \lambda ) x ^ { ( 2 ) } \right) \leq \lambda f \left( x ^ { ( 1 ) } \right) + ( 1 - \lambda ) f \left( x ^ { ( 2 ) } \right)\),則稱\(f\)爲凸集\(S\)上的凸函數。
- 若是上面不等式以嚴格不等式成立,則稱\(f(x)\)爲凸集\(S\)上的嚴格凸函數。
- 凸函數的證實:
- 凸函數與一階特徵、二階特徵互爲充要條件,每每利用二階特徵進行證實,
- 二階特徵:
- \(f\)在\(S\)上凸,等價於,\(S\)中任意一點,其對應的海塞矩陣半正定。
- \(f\)在\(S\)上嚴格凸,等價於,\(S\)中任意一點,其對應的海塞矩陣正定。
- 凸函數是定義在凸集上的函數,若是要證實凸函數,首先要說明定義域爲凸集。
2.3 凸規劃
- 凸規劃的定義:
- 若是問題\((fS)\)中,\(S\)爲凸集,\(f\)爲凸函數,則稱這個問題是凸規劃。
- 凸規劃的定理:
- 在凸規劃問題中,局部最優解也是全局最優解。
- 若是\(f\)爲嚴格凸函數,則該局部最優解是惟一全局最優解。
- 依據凸規劃的定理,證實一個局部最優勢爲惟一全局最優解,只需證實函數\(f\)爲嚴格凸函數。
- 凸規劃的性質十分利於咱們尋找問題的最優解,所以咱們常常須要證實一個問題是凸規劃問題。
3. 線性規劃
3.1 線性規劃標準形式
- 首先介紹線性規劃的標準形式,以後的單純形法都是在標準形式上進行計算,對於不是標準形式的線性規劃須要對其進行轉換。
- 標準形式以下:
\[( L P )\left\{ \begin{array} { c } { \operatorname { max } z=c ^ { T } x } \\ {s.t. \quad Ax = b } \\ {\quad \quad x \geq 0 } \end{array} \right.\]
- 四個特色:
- 採用以下方式,將通常形式轉化爲標準化形式:
- 極小化目標函數的問題:利用負號轉化爲目標最大化
- 約束不是等式的問題:引入鬆弛變量
- 變量無符號限制的問題:用兩個非負變量之差來表示一個無符號限制的變量
- 右端項有負值的問題:乘以\(-1\)
3.2 單純形法
- 單純形法的基本思路是有選擇地取基本可行解,便是從可行域的一個極點出發,沿着可行域的邊界移到另外一個相鄰的極點,要求新極點的目標函數值不比原目標函數值差。
- 單純形法要求係數矩陣中存在單位陣,將其做爲初始的基本可行解,以後一步步迭代。對於某些標準形式中不含有單位陣的線性規劃問題,能夠採用大M法和兩階段法。
- 單純形法的計算比較簡單,這裏只給出例子進行說明。
\[( L P ) \quad \left\{ \begin{array} { c } { \operatorname { max } z=1500x_1+2500x_2} \\ { 3x_1+2x_2+x_3 = 65 } \\ { 2x_1+x_2+x_4 = 40 }\\ { 3x_2+x_5 = 75 }\\ { x_1,x_2,x_3,x_4,x_5 \geq 0 } \end{array} \right.\]
- 單純形表以下所示:
![](http://static.javashuo.com/static/loading.gif)
- 最優解爲\(x _ { 1 } = 5, x _ { 2 } = 25 , x _ { 4 } = 5\)。
- 與單純形法相對應的還有對偶單純形法,兩者的算法流程圖對好比下所示:
![](http://static.javashuo.com/static/loading.gif)
4. 無約束最優化方法
4.1 最優性條件
- 一階必要條件:若是\(x^*\)爲局部最小點, 則\(x^*\)爲駐點,即該點梯度爲\(0\)。
- 二階必要條件:若是\(x^*\)爲局部最小點, 則該點梯度爲\(0\),且海塞矩陣半正定。
4.2 最速降低法
- 該方法就是就是梯度降低法的雛形,是求解無約束問題\(minf(x)\)的古老而基本的方法。
- 在迭代收斂的過程當中,每一步令該點的負梯度方向爲降低方向。
- 在降低方向肯定後,須要找到步長\(\lambda\),因爲是單變量求最優的問題,採用一維搜索的方式便可。
- 最速降低法的「最速」是局部性質,在舉例最優勢較遠處降低的比較快,而距離較近的時候會發生扭擺現象。
- 最速降低法是一種線性收斂的算法,在特定條件下具備全局收斂性。
- 該算法的流程圖以下所示:
![](http://static.javashuo.com/static/loading.gif)
4.3 牛頓法
- 牛頓法的思想是利用二次函數近似目標函數,把這個二次函數的極小點做爲新的迭代點。該方法應用的前提是函數\(f(x)\)二次連續可微,而且求解的問題是無約束問題\(minf(x)\)。
- 其數學公式由泰勒展開式取前三項獲得,即二階Taylor近似函數:
\[q_k( x ) = f \left( x ^ { ( k ) } \right) + \nabla f ^ { \mathrm { T } } \left( x ^ { ( k ) } \right) \left( x - x ^ { ( k ) } \right) + ( 1 / 2 ) \left( x - x ^ { ( k ) } \right) ^ { \mathrm { T } } \nabla ^ { 2 } f \left( x ^ { ( k ) } \right) \left( x - x ^ { ( k ) } \right)\]
- 對該函數求駐點獲得:
\[\nabla q_k( x )= \nabla f \left( x ^ { ( k ) } \right) + \nabla ^ { 2 } f \left( x ^ { ( k ) } \right) \left( x - x ^ { ( k ) } \right) = 0\]
- 顯然只要計算\(x^{(k)}\)點的梯度值,以及海塞矩陣,便可找到下一步的迭代點,至關於最速降低法中的步長爲1。將上述公式轉換爲:
\[\boldsymbol { x } ^ { ( k + 1 ) } = \boldsymbol { x } ^ { ( k ) } - \left[ \nabla ^ { 2 } f \left( \boldsymbol { x } ^ { ( k ) } \right) \right] ^ { - 1 } \nabla f \left( \boldsymbol { x } ^ { ( k ) } \right)\]
- 牛頓法的算法流程圖以下所示:
![](http://static.javashuo.com/static/loading.gif)
- 牛頓法的優勢
- 牛頓法的收斂速度爲二階,屬於平方收斂。牛頓法對正定二次函數一步迭代便可達到最優解,所以具備二次終結性。
- 牛頓法的缺點
- 牛頓法是局部收斂的,在初始點選擇不當時,每每致使不收斂。
- 牛頓法不是降低算法,當二階海塞矩陣非正定時,不能保證產生的方向是降低方向。
- 二階海塞矩陣必須可逆。
- 要求函數二階連續可微,計算量大。
5. 約束最優化方法
- 約束最優化問題是實踐中常見的問題,難度大於無約束最優化問題。約束最優化問題的形式通常是\((fgh)\)問題,即:
\[( fgh ) \left\{ \begin{array} { c } { \operatorname { min } f(x)} \\ { s.t. \quad g ( x ) \leq 0 } \\ {\quad \quad h ( x ) = 0 } \end{array} \right.\]
5.1 Kuhn-Tucker條件
- 對於\((fgh)\)問題,K-T條件的公式以下:
\[\nabla f \left( x ^ { * } \right) + \sum _ { i \in I } u _ { i } ^ { * } \nabla g _ { i } \left( x ^ { * } \right) + \sum _ { j = 1 } ^ { l } v _ { j } ^ { * } \nabla h _ { j } \left( x ^ { * } \right) = 0\]算法
5.2 罰函數法(外點法)
- 解決玉樹問題的一個直接想法是,把違背約束做爲對求最小值的一種懲罰,把約束加入到目標函數,從而獲得了一個輔助的無約束最優化問題,以後採用無約束最優化方法進行求解,這就是罰函數的基本思想。
- 在實際求解無約束最優化問題時,求駐點即可以解決大多數問題。
- 構造的輔助函數形式以下:
\[minf(x)+\mu \alpha (x)\]
- \(\mu\)爲罰因子,大於0。
- 其中\(\alpha ( x ) = \sum _ { i = 1 } ^ { m } \phi \left( g _ { i } ( x ) \right) + \sum _ { j = 1 } ^ { 1 } \varphi \left( h _ { j } ( x ) \right)\)
一般令\(\phi(x)=[max{0,x}]^p\), \(\varphi (x)=|x|^p\), \(p\)值一般爲\(2\)。優化
求解過程就是對輔助函數求駐點,並計算\(\mu\)趨近無窮大時,最優解的值。spa
5.3 閘函數法(內點法)
- 閘函數適用於不等式約束問題,即\((fg)\)問題。思想與罰函數基本相同。不一樣點在於該方法將懲罰家在約束集的邊界,當靠近邊界時,懲罰項無窮大。
- 構造的輔助函數形式以下:
\[minf(x)+\mu B(x)\]
- \(\mu\)爲罰因子,大於0。
- 其中\(B ( x ) = \sum _ { i = 1 } ^ { m } \phi \left( g _ { i } ( x ) \right)\)
- 一般令\(\phi(x)= - \frac { 1 } { x }\)。
- 求解過程就是對輔助函數求駐點,並計算\(\mu\)趨近\(0^+\)時,最優解的值。