約束優化算法是一類專門處理目標函數在存在約束條件下求解最優解的方法。為了更好地理解約束優化算法,我們需要了解一些核心概念和基本方法。
約束優化的核心概念
- 可行域(Feasible Region):
- 比喻:想象你在一個園藝場里種植不同種類的植物,但只有特定區域可以種植。可行域就是這些允許種植的區域。
- 技術細節:可行域是滿足所有約束條件的所有點的集合。若約束條件為 g i ( x ) ≤ 0 g_i(x) \leq 0 gi?(x)≤0 和 h j ( x ) = 0 h_j(x) = 0 hj?(x)=0 ,則可行域可以表示為 { x ∣ g i ( x ) ≤ 0 , h j ( x ) = 0 } \{ x \, | \, g_i(x) \leq 0, \, h_j(x) = 0 \} {x∣gi?(x)≤0,hj?(x)=0} 。
- 拉格朗日乘子法(Lagrange Multipliers):
- 比喻:假設你在調整種植區域時,既想保持植物健康生長(目標函數),又要遵循園藝場的規定(約束條件)。拉格朗日乘子法就像在這兩者之間找到一個平衡點。
- 技術細節:拉格朗日乘子法引入拉格朗日乘子 λ \lambda λ ,構造拉格朗日函數 L ( x , λ ) = f ( x ) + λ g ( x ) L(x, \lambda) = f(x) + \lambda g(x) L(x,λ)=f(x)+λg(x) 。通過求解 ? L = 0 \nabla L = 0 ?L=0 可以找到約束優化問題的解。
常用的約束優化算法
- 罰函數法(Penalty Method):
- 比喻:罰函數法就像在種植區域外種植植物時會受到罰款,這樣你會盡量保持在可行域內。
- 技術細節:將約束條件轉換為目標函數的一部分,加上一個懲罰項,使得在違反約束條件時目標函數的值變得很大。例如,對于約束 g ( x ) ≤ 0 g(x) \leq 0 g(x)≤0 ,構造目標函數 f ( x ) + 1 2 ρ max ? ( 0 , g ( x ) ) 2 f(x) + \frac{1}{2}\rho \max(0, g(x))^2 f(x)+21?ρmax(0,g(x))2 ,其中 ρ \rho ρ 是罰參數。
- 障礙函數法(Barrier Method):
- 比喻:障礙函數法就像在可行域邊界設置了障礙物,防止你越過邊界。
- 技術細節:引入障礙函數 ? ( x ) \phi(x) ?(x) ,當 x x x 靠近約束邊界時,障礙函數值趨于無窮大。例如,對于約束 g ( x ) ≤ 0 g(x) \leq 0 g(x)≤0 ,構造目標函數 f ( x ) ? μ log ? ( ? g ( x ) ) f(x) - \mu \log(-g(x)) f(x)?μlog(?g(x)) ,其中 μ \mu μ 是障礙參數。
- 拉格朗日乘子法(Lagrangian Method):
- 比喻:拉格朗日乘子法就像同時調整種植區域和遵守規定的權重,使兩者達到平衡。
- 技術細節:構造拉格朗日函數 L ( x , λ , ν ) = f ( x ) + ∑ λ i g i ( x ) + ∑ ν j h j ( x ) L(x, \lambda, \nu) = f(x) + \sum \lambda_i g_i(x) + \sum \nu_j h_j(x) L(x,λ,ν)=f(x)+∑λi?gi?(x)+∑νj?hj?(x) ,通過求解 ? L = 0 \nabla L = 0 ?L=0 可以找到問題的鞍點,從而求解優化問題。
實例一
讓我們通過一個實例來具體了解約束優化的過程:
假設我們要最小化函數 f ( x ) = x 1 2 + x 2 2 f(x) = x_1^2 + x_2^2 f(x)=x12?+x22? ,但有約束 g ( x ) = x 1 + x 2 ? 1 ≤ 0 g(x) = x_1 + x_2 - 1 \leq 0 g(x)=x1?+x2??1≤0 。
- 罰函數法:
- 構造罰函數: P ( x ) = x 1 2 + x 2 2 + 1 2 ρ max ? ( 0 , x 1 + x 2 ? 1 ) 2 P(x) = x_1^2 + x_2^2 + \frac{1}{2}\rho \max(0, x_1 + x_2 - 1)^2 P(x)=x12?+x22?+21?ρmax(0,x1?+x2??1)2 。
- 當 x 1 + x 2 ≤ 1 x_1 + x_2 \leq 1 x1?+x2?≤1 時,無懲罰項;當 x 1 + x 2 > 1 x_1 + x_2 > 1 x1?+x2?>1 時,有懲罰項,導致目標函數值增加。【目標是使目標函數最小】
- 障礙函數法:
- 構造障礙函數: B ( x ) = x 1 2 + x 2 2 ? μ log ? ( 1 ? x 1 ? x 2 ) B(x) = x_1^2 + x_2^2 - \mu \log(1 - x_1 - x_2) B(x)=x12?+x22??μlog(1?x1??x2?) 。
- 當 x 1 + x 2 x_1 + x_2 x1?+x2? 接近 1 1 1 時, ? log ? ( 1 ? x 1 ? x 2 ) -\log(1 - x_1 - x_2) ?log(1?x1??x2?) 的值趨于無窮大,使得目標函數值增大。
- 拉格朗日乘子法:
- 構造拉格朗日函數: L ( x , λ ) = x 1 2 + x 2 2 + λ ( x 1 + x 2 ? 1 ) L(x, \lambda) = x_1^2 + x_2^2 + \lambda (x_1 + x_2 - 1) L(x,λ)=x12?+x22?+λ(x1?+x2??1) 。
- 求解 ? L = 0 \nabla L = 0 ?L=0 得到: 2 x 1 + λ = 0 2x_1 + \lambda = 0 2x1?+λ=0 , 2 x 2 + λ = 0 2x_2 + \lambda = 0 2x2?+λ=0 , x 1 + x 2 ? 1 = 0 x_1 + x_2 - 1 = 0 x1?+x2??1=0 。
- 解得 x 1 = x 2 = 1 2 , λ = ? 1 x_1 = x_2 = \frac{1}{2} ,\lambda = -1 x1?=x2?=21?,λ=?1。
實例二
我們需要最小化函數 f ( x , y ) = x + 3 y f(x, y) = x + \sqrt{3}y f(x,y)=x+3?y ,并且滿足約束條件 x 2 + y 2 = 1 x^2 + y^2 = 1 x2+y2=1 。
罰函數法
-
構造罰函數:
首先,我們將約束條件轉換為一個懲罰項。對于約束條件 x 2 + y 2 = 1 x^2 + y^2 = 1 x2+y2=1 ,我們可以構造以下罰函數: P ( x , y ) = ( x 2 + y 2 ? 1 ) 2 P(x, y) = (x^2 + y^2 - 1)^2 P(x,y)=(x2+y2?1)2這里,我們使用平方形式來確保任何違約束的情況都會被顯著地懲罰。
-
構造新的目標函數:
將懲罰項加入到目標函數中,形成新的目標函數: F ( x , y ) = x + 3 y + ρ 2 ( x 2 + y 2 ? 1 ) 2 F(x, y) = x + \sqrt{3}y + \frac{\rho}{2} (x^2 + y^2 - 1)^2 F(x,y)=x+3?y+2ρ?(x2+y2?1)2其中, ρ \rho ρ 是一個正的罰參數,用來調整懲罰項的權重。
-
求解優化問題:
我們的目標是找到使新的目標函數 F ( x , y ) F(x, y) F(x,y) 最小的 x x x 和 y y y 值。
-
圖 6.1 的解釋
圖的描述
這兩個圖展示了二次罰函數在不同罰參數 σ \sigma σ 值時的等高線圖。等高線圖是一種展示三維地形的方法,其中每條線表示函數值相同的點的集合。
- 左圖 (a) σ = 1 \sigma = 1 σ=1:
- 這個圖顯示了當罰參數 σ = 1 \sigma = 1 σ=1 時的情況。等高線顯示目標函數在不同點的值分布。
- 右圖 (b) σ = 10 \sigma = 10 σ=10:
- 這個圖顯示了當罰參數 σ = 10 \sigma = 10 σ=10 時的情況。我們可以看到等高線的形狀和分布與左圖有明顯的不同。
圖的含義
1. 罰函數的作用
罰函數的目的是將違反約束條件的解顯著地懲罰,使得優化過程更傾向于在可行域內找到最優解。罰參數 σ \sigma σ 控制了這個懲罰的強度。
- 低罰參數 σ = 1 \sigma = 1 σ=1:懲罰強度較低,等高線分布較為平緩。違反約束條件的解不會受到很大的懲罰,因此優化過程可能會在可行域外找到較低的函數值點。
- 高罰參數 σ = 10 \sigma = 10 σ=10:懲罰強度較高,等高線分布較為陡峭。違反約束條件的解會受到顯著的懲罰,因此優化過程更傾向于在可行域內找到最優解。
2. 等高線的變化
等高線的形狀和分布反映了目標函數值在不同點的變化情況。
- 左圖 (a):當 σ = 1 \sigma = 1 σ=1 時,等高線較為平滑,表明目標函數值的變化較為緩慢,罰函數的影響較小。
- 右圖 (b):當 σ = 10 \sigma = 10 σ=10 時,等高線變得更為密集和復雜,表明目標函數值在靠近約束邊界時變化迅速,罰函數的影響顯著增加。
詳細解析
為了更好地理解這個圖,讓我們回顧一下罰函數法的目標函數形式:
F ( x , y ) = x + 3 y + σ 2 ( x 2 + y 2 ? 1 ) 2 F(x, y) = x + \sqrt{3}y + \frac{\sigma}{2} (x^2 + y^2 - 1)^2 F(x,y)=x+3?y+2σ?(x2+y2?1)2
- 原始目標函數: f ( x , y ) = x + 3 y f(x, y) = x + \sqrt{3}y f(x,y)=x+3?y
- 罰函數: P ( x , y ) = σ 2 ( x 2 + y 2 ? 1 ) 2 P(x, y) = \frac{\sigma}{2} (x^2 + y^2 - 1)^2 P(x,y)=2σ?(x2+y2?1)2
隨著 σ \sigma σ 的增加,罰函數的影響變得更加顯著。這意味著在優化過程中,違反約束條件 x 2 + y 2 = 1 x^2 + y^2 = 1 x2+y2=1 的點會被顯著地懲罰,使得優化算法更傾向于找到滿足約束條件的最優解。
直觀解釋
想象你在平地上行走(左圖 (a)),地面比較平坦,因此你可以隨意移動。但是,當地面上突然出現很多山谷和山峰(右圖 (b)),你就會傾向于沿著較為平坦的區域移動,以避免爬山或下谷。高罰參數 σ \sigma σ 就像這些山谷和山峰,迫使你在可行域內找到最優路徑。
總結
- 低罰參數 σ \sigma σ 使得優化過程在可行域外也能找到較低的目標函數值點,但可能不滿足約束條件。
- 高罰參數 σ \sigma σ 強制優化過程在可行域內找到最優解,因為違反約束條件的點會被顯著懲罰。
- 左圖 (a) σ = 1 \sigma = 1 σ=1:
二次罰函數法算法詳解
基本概念
- 目標函數:我們想最小化的函數。例如, f ( x , y ) = x + 3 y f(x, y) = x + \sqrt{3}y f(x,y)=x+3?y 。
- 約束條件:限制條件,必須滿足。例如, x 2 + y 2 = 1 x^2 + y^2 = 1 x2+y2=1 。
罰函數法通過將約束條件轉換為懲罰項,加入到目標函數中,從而形成新的目標函數。這個新目標函數在每次迭代時會逐步增加懲罰力度,使得解最終滿足約束條件。
步驟解析
第一步:初始化
- 給定初始罰參數 σ 1 > 0 \sigma_1 > 0 σ1?>0:
- 這是初始的懲罰參數。懲罰參數決定了違反約束條件時受到的懲罰程度。
- 例如,設定 σ 1 = 1 \sigma_1 = 1 σ1?=1。
- 設定初始點 x 0 x^0 x0:
- 這是我們開始優化的初始猜測值。
- 例如, x 0 = [ 0.5 , 0.5 ] x^0 = [0.5, 0.5] x0=[0.5,0.5] 。
- 設定迭代次數 k ← 1 k \leftarrow 1 k←1:
- 這是一個計數器,用于跟蹤迭代次數。
- 設定懲罰因子增長系數 ρ > 1 \rho > 1 ρ>1:
- 這是一個用來增加懲罰參數的因子,每次迭代后懲罰參數會乘以這個因子。
- 例如,設定 ρ = 10 \rho = 10 ρ=10。
第二步:迭代過程
while
循環:- 這個循環會持續運行,直到滿足某個收斂準則(例如,目標函數值變化很小,或達到最大迭代次數)。
- 以當前點為初始點,求解新的點:
-
我們要最小化新的目標函數 P E ( x , σ k ) P_E(x, \sigma_k) PE?(x,σk?) ,找到新的 x k + 1 x^{k+1} xk+1 。
-
新的目標函數形式為:
P E ( x , σ k ) = f ( x ) + σ k 2 ( x 2 + y 2 ? 1 ) 2 P_E(x, \sigma_k) = f(x) + \frac{\sigma_k}{2} (x^2 + y^2 - 1)^2 PE?(x,σk?)=f(x)+2σk??(x2+y2?1)2
-
使用數值優化方法(如梯度下降法)來求解這個新的目標函數。
-
- 更新罰參數:
- 計算新的罰參數 σ k + 1 = ρ σ k \sigma_{k+1} = \rho \sigma_k σk+1?=ρσk?。
- 更新迭代次數:
- k ← k + 1 k \leftarrow k + 1 k←k+1 。
- 結束迭代:
- 當滿足收斂準則時,結束
while
循環。
- 當滿足收斂準則時,結束
詳細解釋與實例
初始化
我們設定初始參數:
σ 1 = 1 , x 0 = [ 0.5 , 0.5 ] , ρ = 10 , k = 1 \sigma_1 = 1, \quad x^0 = [0.5, 0.5], \quad \rho = 10, \quad k = 1 σ1?=1,x0=[0.5,0.5],ρ=10,k=1
迭代過程
假設我們要最小化以下目標函數:
f ( x , y ) = x + 3 y f(x, y) = x + \sqrt{3}y f(x,y)=x+3?y
并且滿足約束條件:
x 2 + y 2 = 1 x^2 + y^2 = 1 x2+y2=1
第一次迭代
-
構造新的目標函數:
P E ( x , σ 1 ) = x + 3 y + 1 2 σ 1 ( x 2 + y 2 ? 1 ) 2 P_E(x, \sigma_1) = x + \sqrt{3}y + \frac{1}{2} \sigma_1 (x^2 + y^2 - 1)^2 PE?(x,σ1?)=x+3?y+21?σ1?(x2+y2?1)2
其中 σ 1 = 1 \sigma_1 = 1 σ1?=1。
-
求解新目標函數:
使用數值優化方法找到最小化 P E ( x , 1 ) P_E(x, 1) PE?(x,1) 的 x x x 和 y y y 值。
假設我們找到新的點 x 1 x^1 x1 。 -
更新罰參數:
σ 2 = ρ σ 1 = 10 × 1 = 10 \sigma_2 = \rho \sigma_1 = 10 \times 1 = 10 σ2?=ρσ1?=10×1=10
-
更新迭代次數:
k ← 2 k \leftarrow 2 k←2
第二次迭代
-
構造新的目標函數:
P E ( x , σ 2 ) = x + 3 y + 1 2 σ 2 ( x 2 + y 2 ? 1 ) 2 P_E(x, \sigma_2) = x + \sqrt{3}y + \frac{1}{2} \sigma_2 (x^2 + y^2 - 1)^2 PE?(x,σ2?)=x+3?y+21?σ2?(x2+y2?1)2
其中 σ 2 = 10 \sigma_2 = 10 σ2?=10。
-
求解新目標函數:
使用數值優化方法找到最小化 P E ( x , 10 ) P_E(x, 10) PE?(x,10) 的 x x x 和 y y y 值。
假設我們找到新的點 x 2 x^2 x2 。 -
更新罰參數:
σ 3 = ρ σ 2 = 10 × 10 = 100 \sigma_3 = \rho \sigma_2 = 10 \times 10 = 100 σ3?=ρσ2?=10×10=100
-
更新迭代次數:
k ← 3 k \leftarrow 3 k←3
這個過程不斷重復,直到滿足收斂準則為止。
什么是收斂準則
收斂準則是用來決定優化算法何時停止迭代的標準。常見的收斂準則包括以下幾種:
- 目標函數值變化很小:
- 如果在連續的迭代中,目標函數的值變化很小(小于某個閾值),則認為算法已收斂,可以停止迭代。
- 例如,設定閾值為 ? \epsilon ?,如果 ∣ f ( x k + 1 ) ? f ( x k ) ∣ < ? |f(x^{k+1}) - f(x^k)| < \epsilon ∣f(xk+1)?f(xk)∣<?,則停止迭代。
- 梯度值很小:
- 如果目標函數的梯度(或導數)值很小,表示已經到達了極值點附近,則可以停止迭代。
- 例如,如果 ∥ ? f ( x k ) ∥ < ? \|\nabla f(x^k)\| < \epsilon ∥?f(xk)∥<?,則停止迭代。
- 迭代次數達到上限:
- 如果迭代次數達到了預先設定的最大迭代次數,則停止迭代。
- 例如,設定最大迭代次數為 N N N,如果 k ≥ N k \geq N k≥N,則停止迭代。