1. 程式人生 > >最優化方法:四、一維搜尋法

最優化方法:四、一維搜尋法

主要參考書目:

  • 最優化方法及其應用/郭科,陳聆,魏友華.-北京:高等教育出版社,2007.7(2013.7重印)

迭代的基本公式是

Xk+1=Xk+tkPk;
當我們確定了搜尋方向Pk,我們要做的就是確定一個步長tk,使得minf(Xk+tkPk),從而也就確定了Xk+1,記為Xk+1=ls(Xk,Pk)。尋找tk的過程即稱是一維搜尋。
對於一個確定的目標函式f(X),一維搜尋等價於以下兩式:
1
可以證明,在Xk+1處滿足f(Xk+1)TP
k=0.
如下圖:

1、一些概念

  • 搜尋區間
    即是包含問題最優解的一個區間。
  • 單谷區間與單谷函式
    定義:
    單谷區間與單谷函式
    有性質:
    性質
    根據此性質,我們可以將一個已知的單谷區間縮短為一個更小的單谷區間,從而無限接近於最優解。

2、進退法(加步搜尋法)

該方法主要用於確定初始搜尋區間。

  • 基本原理:
    基本原理
    我們即是要尋找如圖c的情況。
  • 計算步驟
    計算步驟
    該流程圖中初始點賦的值為0,實際上可以是任意值。
  • matlab實現
function [a,b] = JinTui(f,xk0,d,th)
%進退法求搜尋區間
%輸入:
%       f:目標函式的控制代碼
%       xk0:初始值
% d:搜尋方向 % th:初始步長 %輸出: % [a b]得到的搜尋區間 %——開始 t=th; x1=xk0;y1=feval(f,x1); x2=x1+t.*d;y2=feval(f,x2); while y1==y2 t=1.1*t; x2=x1+t.*d; y2=feval(f,x2); end if y2<y1 t=2*t; x3=x2+t.*d; y3=feval(f,x3); elseif y2>y1 t=-t; %交換x1,x2 x3=x1;y3=y1; x1=x2;y1=y2; x2=x3;y2=y3; x3=x2+t.
*d; y3=feval(f,x3); end while 1 while y2==y3 t=1.1*t; x3=x2+t.*d; y3=feval(f,x3); end if y3>y2 break; else x1=x2;y1=y2; x2=x3;y2=y3; t=2*t; x3=x2+t.*d; y3=feval(f,x3); end end a=min(x1,x3); b=max(x1,x3); end

2、對分法

  • 基本思路
    在一個單谷區間內,求函式f(x)的極小值即是求f(x)=0的點。此對分法即是求函式零點的對分法,不再贅述。
  • 特點
    此方法要求“單谷”,也要求原函式導數存在。

3、牛頓切線法

  • 基本思路
    與對分法類似,同樣是把求函式f(x)的極小值轉化為求f(x)=0的點。此時的牛頓切線法也就是求函式零點的牛頓切線法,亦不贅述。
  • 特點
    此方法同樣要求“單谷”,也要求原函式二階導數存在。
    該方法若使用恰當收斂很快,但同時也容易出現不能收斂的問題。

4、黃金分割法

  • 基本思路
    利用單谷區間的性質,縮短區間,t1,t2點選為區間的兩個黃金分割點。
  • 特點
    只要求“單谷”。

5、拋物線插值法

  • 基本思路
    通過用拋物線擬合目標函式的方法求取近似極小值。
    不妨設單谷搜尋區間為[t1,t2],再任取t0[t1,t2],根據此三點確定一個拋物線,求出其最小值點t,若精度不滿足要求,再利用單谷區間的性質縮短區間進一步迭代。
  • 具體內容