文字理解
內點法屬於約束優化算法。約束優化算法的基本思想是:通過引入效用函數的方法將約束優化問題轉換成無約束問題,再利用優化迭代過程不斷地更新效用函數,以使得算法收斂。
內點法(罰函數法的一種)的主要思想是:在可行域的邊界築起一道很高的“圍牆”,當迭代點靠近邊界時,目標函數徒然增大,以示懲罰,阻止迭代點穿越邊界,這樣就可以將最優解“檔”在可行域之內了。
數學定義
對於下面的不等式約束的優化問題:
利用內點法進行求解時,構造懲罰函數的一般表達式為
或者
算法步驟
- 取初始懲罰因子\(r^{(0)}>0\),允許誤差\(\epsilon>0\);
- 在可行域\(D\)內選取初始點\(X^{(0)}\),令\(k=1\);
- 構造懲罰函數\(\varphi (X, r^{(k)})\),從\(X^{(k-1)}\)點出發用無約束優化方法求懲罰函數\(\varphi (X, r^{(k)})\)的極值點\((X^{*}, r^{(k)})\);
- 檢查迭代終止准則:如果滿足$$|X^{} r^{(k)}-X^{} r^{(k-1)}|\leq\epsilon_{1}=10^{-5}-10^{-7}$$或者$$|\frac{\varphi (X^{} ,r^{(k)})-\varphi (X^{}, r^{(k-1)})}{\varphi (X^{*}, r^{(k-1)})}|\leq\epsilon_{2}=10^{-3}-10^{-4}$$則停止迭代計算,並以\((X^{*}, r^{(k)})\)作為原目標函數\(f(X)\)的約束最優解,否則轉入下一步;
- 取\(r^{(k+1)}=cr^{(k)}\),\(X^{(0)}=X^{*}r^{(k)}\),\(k=k+1\),轉向步驟3。遞減系數\(c=0.1-0.5\),通常取0.1。
內點懲罰函數法特點及其應用
- 懲罰函數定義於可行域內,序列迭代點在可行域內不斷趨於約束邊界上的最優點(這就是稱為內點法的原因)
- 只適合求解具有不等式約束的優化問題
內點法求解案例
用內點法求下面約束優化問題的最優解,取迭代初始\(X^0 = [0, 0]^{\mathrm{T}}\),懲罰因子的初始值\(r^0 = 1\),收斂終止條件\(\|X^k - X^{k-1}\| \leq \varepsilon\),\(\varepsilon = 0.01\)
- 構造內懲罰函數:\(\varphi(X, r) = x_1^2 + x_1^2 - x_1x_2 - 10x_1 - 4x_2 + 60 -r\ln(x_1 + x_2 -8)\)
- 用解析法求內懲罰函數的極小值
令\(\nabla \varphi(X, r) = 0\)得:\(\begin{align}2x_1 - x_2 - 10 - \frac{r}{x_1 + x_2 - 8} = 0 \\ 2x_2 - x_1 - 4 - \frac{r}{x_1 + x_2 - 8} = 0\end{align}\)
解得:
\(X^*_1(r) = \begin{bmatrix}\frac{13 + \sqrt{9+2r}}{2} & \frac{9 + \sqrt{9+2r}}{2}\end{bmatrix}^{\mathrm{T}}\)
\(X^*_2(r) = \begin{bmatrix}\frac{13 - \sqrt{9+2r}}{2} & \frac{9 - \sqrt{9+2r}}{2}\end{bmatrix}^{\mathrm{T}}\)
\(\because g(X^*_1(r)) > 0\)
\(\therefore\) 舍去\(X^*_1(r)\)
\(\because \varphi(X, r)\)為凸函數
\(\therefore\) 無約束優化問題的最優解為\(X^*(r) = X^*_2(r) = \begin{bmatrix}\frac{13 - \sqrt{9+2r}}{2} & \frac{9 - \sqrt{9+2r}}{2}\end{bmatrix}^{\mathrm{T}}\)
- 求最優解
當\(r^0 = 1\)時,\(X^*(r^0) = \begin{pmatrix}4.8417 & 2.8417\end{pmatrix}^{\mathrm{T}}\),\(\|X^*(r^0) - X^0\| = 5.6140 > \varepsilon\)
當\(r^1 = 0.1\)時,\(X^*(r^1) = \begin{pmatrix}4.9834 & 2.9834\end{pmatrix}^{\mathrm{T}}\),\(\|X^*(r^1) - X^*(r^0)\| = 0.2004 > \varepsilon\)
當\(r^2 = 0.01\)時,\(X^*(r^2) = \begin{pmatrix}4.9983 & 2.9983\end{pmatrix}^{\mathrm{T}}\),\(\|X^*(r^2) - X^*(r^1)\| = 0.0211 > \varepsilon\)
當\(r^3 = 0.01\)時,\(X^*(r^3) = \begin{pmatrix}4.9998 & 2.9998\end{pmatrix}^{\mathrm{T}}\),\(\|X^*(r^3) - X^*(r^2)\| = 0.0021 < \varepsilon\)
即\(X^*(r^3)\)為最優解