罰函式法又稱乘子法,是將約束優化問題轉換為無約束最優化問題的方法之一。其基本思想就是通過在原始的目標函式中新增乙個障礙函式(也可以理解成懲罰函式)來代替約束條件中的不等式約束。如果當前解不滿足約束條件,就在目標項上加上乙個正向的懲罰(這裡考慮的都是最小化問題),強迫當前解往可行域的方向走。至於正向懲罰的力度,取決於所用的對映函式,即懲罰函式。
考慮約束優化問題:
1) 對於等式約束問題,
可採用前面提到的拉格朗日乘子法。這裡我們做一些簡化,對每個約束項採用相同的權重,定義如下輔助函式:
其中,δ
\delta
δ為足夠大的正數。注意,這裡的約束項都加了平方。前面我們提過了,不滿足約束要加上乙個正向的懲罰。為了保證正向這個條件,同時方便後期求導,就給約束項加上了平方。
從而,問題(1)被轉化為無約束問題:
min f
1(x,
δ)\min f_1(x, \delta)
minf1
(x,δ
) (3)
顯然,(3)取最優解時,hj(
x)h_j (x)
hj(x)
趨近於0。因為如果不這樣的話,δ∑h
j2(x
)\delta \sum h_j ^2 (x)
δ∑hj2
(x)將是非常大的正數,那一定存在更小的值。由此可見,求解問題(3)就能得到問題(1)的近似解。
2)對於不等式約束問題,
思路與上面基本思想一致,也是引入輔助函式:
f (x
,δ)=
f(x)
+∑i=
1mi(
gi(x
))f(x, \delta)=f(x)+\sum_ ^m i(g_i(x))
f(x,δ)
=f(x
)+∑i
=1m
i(gi
(x)
) (5)
其中,i(u
)i(u)
i(u)
即為懲罰函式(等式約束時可以理解懲罰函式為平方函式,即i(u
)=u2
i(u)=u^2
i(u)=u
2),其須符合如下特性:
對於不等式約束,引入懲罰函式的意義在於可以將約束條件直接寫入到目標函式裡面,這樣我們直接求新的函式的極小值就可以了,而不必借助於未知乘子。這種方法統稱為罰函式法。
可分為兩類:內點法和外點法。主要區別就在於懲罰函式的定義。
3.1 內點法
內點法比較完美主義,思想十分直觀。滿足約束就懲罰為0,不滿足就正無窮大,看你老不老實。其設定的懲罰函式需要滿足如下要求,
i (u
)=\infin & u \leq 0 \\ 0 & u>0 \end
i(u)
= log(-u)
i(u)=−
t1l
og(−
u)其中 ,t是用於調整近似程度的引數。從圖中可以看出,t越大近似效果越好。
那要怎樣理解這種方法呢?
相當於在可行域的邊界築起一道很高的「圍牆」,當迭代點靠近邊界時,目標函式徒然增大,以示懲罰,阻止迭代點穿越邊界,這樣就可以將最優解「擋」在可行域之內了。
也正因為這一點,使用該方法必須保證初始值在可行域內,這一點也極大的限制了該方法的使用。
3.2 外點法
相比內點法,外點法要成熟的多。既然前面太極端了,那就折中一下:滿足約束的時候懲罰為0沒錯,不滿足的時候,懲罰跟當前的偏離程度呈正相關,畢竟狗急了還跳牆呢,咱也不能逼得太狠了是吧!其設定的懲罰函式需要滿足如下要求,
i (u
)=max
==\begin u & u \leq 0 \\ 0 & u>0 \end
i(u)
=max
= )2
i(u) = \delta (\max\)^2
i(u)=δ
(max)2
其中,δ
\delta
δ為足夠大的正數,為懲罰因子。內點法是不需要懲罰因子的,因為內點法的懲罰為無窮大,乘以乙個正數也還是無窮大。可以看到,外點法的懲罰力度取決於懲罰因子δ
\delta
δ的大小。
相比於內點法,外點法可以從非可行解出發,逐步移動到可行域內,這就意味著使用外點法不需要提供初始可行解。這一點在實際問題求解中十分關鍵,畢竟對於複雜問題,找到一組可行解還是有一定難度的。但是,外點法多了乙個超參:懲罰因子,如何設定合適的懲罰因子也會極大的影響最終的結果。
最優化演算法 三
牛頓方法是現在用的比較廣泛的最優化演算法之一,其特點是收斂速度較快,上一節的梯度下降和隨機梯度下降都是一階收斂,而牛頓方法是二階收斂。回憶高等數學裡面介紹的二階泰勒展開有q x f x0 f x0 x x0 x x0 22 2f x 0 而 q x 取到極值的條件,也就是最優化條件是 q x 0 可...
Lingo解決最優化問題
目錄 三 待更新 前面,我們已經對lingo有了一定的了解,但是要想真正的熟悉lingo在解決優化問題中的強大之處,還需要不斷加強相關訓練,本文主要是使用lingo來解決優化問題,該文的主要目的有以下三點 若您對lingo的安裝及基本操作不是很了解,可暫且移步 lingo安裝 lingo基本操作 優...
無約束最優化三
2.2 a k步長的選擇 了解了a k的合理性之後,就相當於獲得了標尺,在此基礎上我們可以選擇合適的策略來求取a k。所有的line search過程在計算每一步的a k時,均需要提供乙個初始點a 0,然後再此基礎上生成一系列的,直到a i滿足2.1節所規定的條件為止,此時該a k即被確定為a i,...