罰函數法:
求解約束條件下的最優化問題
罰函數法的思路就是改變函數f(x),將f(x) 變為F(x)
使得F(x)在無約束條件下取得的最優解,正好符合我們的約束條件,且正好為f(x)在約束條件下的最優解
先有最優化問題f(x), 可行區域是c(x) <= 0
外罰函數法:
對於F(x)在可行區域內仍是f(x),在可行區域外,對函數加上懲罰即可
F(x) = f(x) c(x) <=0
F(x) = f(x) + α/2 (c(x))2
可以改寫為F(x) = f(x) + α/2 (max(c(x), 0)2)
對於一般的約束條件c1(x) <=0 ,,,,,,,cn(x) <= 0
F(x) = f(x) + α/2 (max(c1(x)2, ,,,,,,,cn(x)2,,0)
記(max(c1(x)2, ,,,,,,,cn(x)2,,0)為S(x)
可以看到,當α -> +∞時,F(x)在無約束條件下的最優解符合條件
算法流程:
選擇遞增序列 αk 此序列趨近於 +∞
選定初始點x0
對於第i次迭代,求解無約束最優化問題F(x) = f(x) + αi/2 (max(c1(x)2, ,,,,,,,cn(x)2,,0)標志
終止條件: αi * S(xi) < e
此時將xi記為最優化問題的解
一般可用 αi = 2i作為序列
缺點:
當迭代次數較多時,αi會特別大,導致Hesse矩陣的條件數特別大,這就給求解無約束最優化問題帶來了困難
求出來的解可能在約束區域之外
內罰函數法
相比於外罰函數法在不可行區域加懲罰,內罰函數法在可行域邊界築起高牆,讓目標函數無法穿過,就把目標函數擋在可行域內了。
這種懲罰策略只適用於不等式約束問題,並要求可行域的內點集非空,否則,每個可行點都是邊界點,都加上無窮大懲罰,懲罰也就失去意義了。
考慮不等式約束:
當x從可行域
的內部趨近於邊界時,則至少有一個ci(x)趨近於零,因此,不難想到可構造如下的增廣的目標函數:
稱為內罰函數或障礙函數,參數r仍稱為罰因子。
上述的內罰函數,當x靠近邊界時,會迅速增大,迫使在可行域之內進行求解。
如下圖:

具體算法:
同外罰函數法類似,我們考慮用迭代算法來求解。每次變化得到一個罰因子rk,從前一步關於罰因子rk-1的最優解出發,得到下一步關於rk的最優解;當滿足條件是,迭代結束,得到近似最優解。
經證明,內罰函數法也是收斂的,迭代結束的條件為
步驟如下:

優點: 解決了外罰函數解可能在可行域外的問題
缺點:也可會出現求解無約束優化問題困難的情況
乘子法
乘子法是將函數約束加上了乘子而已


考試時,若要用到乘子法或者罰函數法,一般是利用alaph -> 無窮來求出正確解
