最優化-罰函數法,乘子法


罰函數法:

  求解約束條件下的最優化問題

  罰函數法的思路就是改變函數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)標志

    終止條件:  α* S(xi) < e

    此時將xi記為最優化問題的解

    一般可用 α= 2i作為序列

 

  缺點:

    當迭代次數較多時,αi會特別大,導致Hesse矩陣的條件數特別大,這就給求解無約束最優化問題帶來了困難

    求出來的解可能在約束區域之外

 

內罰函數法

  相比於外罰函數法在不可行區域加懲罰,內罰函數法在可行域邊界築起高牆,讓目標函數無法穿過,就把目標函數擋在可行域內了。

  這種懲罰策略只適用於不等式約束問題,並要求可行域的內點集非空,否則,每個可行點都是邊界點,都加上無窮大懲罰,懲罰也就失去意義了。

  考慮不等式約束:

       

  當x從可行域

  的內部趨近於邊界時,則至少有一個ci(x)趨近於零,因此,不難想到可構造如下的增廣的目標函數:

   

   

  稱為內罰函數或障礙函數,參數r仍稱為罰因子。

  上述的內罰函數,當x靠近邊界時,會迅速增大,迫使在可行域之內進行求解。

  如下圖:

  

 

 

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

  經證明,內罰函數法也是收斂的,迭代結束的條件為

  步驟如下:  

  
 

 

 優點: 解決了外罰函數解可能在可行域外的問題

 缺點:也可會出現求解無約束優化問題困難的情況

 

乘子法

乘子法是將函數約束加上了乘子而已

 

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

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM