漫步最優化二十五——斐波那契搜索






便




I LOVE YOU
——

考慮不確定區間
Ik=[xL,k,xU,k]

並且假設兩點xa,k,xb,k 均位於Ik 中,如圖1所示,對於f(x) 在點xa,k,xb,k 處的值f(xa,k),f(xb,k) ,如果f(xa,k)<f(xb,k) ,那麼我們選擇左區間

ILk+1=[xL,k,xb,k]

如果f(xa,k)>f(xb,k) ,那麼我們選擇右區間

IRk+1=[xa,k,xU,k]

如果

f(xa,k)=f(xb,k)

那麼可以選擇IRk+1,ILk+1 中的任何一個。如果右區間IRk+1 被選中,那麼它將包含最小值,另外還知道點xb,k 處的函數值。如果我們知道點xb,k+1 處的值,那麼我們就有充分的信息來進一步減小不確定區域,然後不斷重複此過程。這種方法每次迭代只需要估計一個函數值,計算量相對於二分搜索要小。

根據圖1可知

Ik=ILk+1+IRk+2

爲了方便,我們假設區間相等,那麼

ILk+1=IRk+1=Ik+1ILk+2=IRk+2=Ik+2

由此可得

Ik=Ik+1+Ik+2

如果上面的過程重複多次,那麼我們會得到如下的區間序列{I1,I2,,In} :

I1I2In=I2+I3=I3+I4=In+1+In+2


這裏寫圖片描述
圖1

上面的n 個等式中,有n+2 個變量,如果I1 是給定的初始區間,那麼有n+1 個變量。所以給定的規則不同,就會生成不同的序列,我們這裏討論兩個特殊的序列:斐波那契序列與黃金分割序列。本篇博文先介紹前者,下一篇介紹後者。

假設n+2 次迭代後區間消失,即In+2=0 ,那麼我們就得到斐波那契序列,如果我們令k=n ,可以得到

In+1InIn1In2In3In4IkI1=InIn+2=InF0In=In+1+In+2=InF1In=In+In+1=2InF2In=In1+In=3InF3In=In2+In1=5InF4In=In3+In2=8InF5In=Ik+1+Ik+2=Fnk+1In=I2+I3=FnIn

所生成的序列

{1,1,2,3,5,8,13,}={F0,F1,F2,F3,F4,F5,F6,}

就是著名的斐波那契數列,它可以由遞歸關係

Fk=Fk1+Fk2for k2

得出,其中F0=F1=1 。將其應用到一維優化上就得到斐波那契搜索法,當n=6,I1=100 時,該方法得出的結果如圖2所示。

如果迭代的總數爲n ,那麼斐波那契搜索將不確定區間縮小到

In=I1Fn

例如如果n=11 ,那麼Fn=144 ,這樣的話In 將縮小到不足I1 的1\%,其中會有11次迭代。因爲每次迭代只需要一個函數估計值,所以一共需要11個函數估計值,如果二分搜索要達到同樣的精度需要14個函數估計值,故斐波那契搜索比二分搜索效率更高。事實上,相對於其他幾個搜索方法,從計算效率上看它是最高效的。

如果n 是已知的,那麼我們可以得到唯一的斐波那契區間序列。如果我們的目標是在給定的誤差下找到x ,那麼可以求出所需的n 。然而,如果我們的目標是最小化f(x) ,沒有等式求出所需的n ,唯一知道的信息是在解的鄰域內,f(x) 越平滑,n 值越小,f(x) 變化越快,n 值越大。

我們可以用上面的原則來實現斐波那契搜索。我們假設最小值的初始邊界爲xL,1,xU,1 ,並且n 值已經給定,f(x) 的數學形式也是已知的,那麼要實現的內容就是計算區間,估計f(x) 並選擇合適的區間。


這裏寫圖片描述
圖2

k 次迭代後,xL,k,xa,k,xb,k,xU,k,Ik+1,fa,k=f(xa,k),fb,k=f(xb,k) 是已知的,我們需要求xL,k+1,xa,k+1,xb,k+1,xU,k+1,Ik+2,fa,k+1,fb,k+1 ,區間Ik+2 通過下式獲得
Ik+2=Fnk1FnkIk+1

然後依次進行。

如果fa,k>fb,k ,那麼x 位於區間[xa,k,xU,k] 中,所以x 的新邊界更新爲

xL,k+1=xa,kxU,k+1=xU,k

同樣的,新區間的兩個內點xa,k+1,xb,k+1 將會是xb,k,xL,k+1+Ik+2 ,因此我們令

xa,k+1=xb,kxb,k+1=xL,k+1+Ik+2

如圖3所示,fb,k 的值作爲f(x) 在點xa,k+1 處的值,f(x) 在點xb,k+1 處計算如下:

fa,k+1=fb,kfb,k+1=f(xb,k+1)


這裏寫圖片描述
圖3

另一方面,如果fa,k<fb,k ,那麼x 在區間[xL,k,xb,k] 中,這時候
xL,k+1xU,k+1xa,k+1xb,k+1fb,k+1=xL,k=xb,k=xU,k+1Ik+2=xa,k=fa,k

並且計算

fa,k+1=f(xa,k+1)

如圖4所示。對於fa,k=fb,k ,上面兩種情況均可以,因爲x 同時包含在[xL,k,xb,k],[xa,k,xU,k]


這裏寫圖片描述
圖4

上面的過程重複執行,直到k=n2 ,此時
Ik+2=In


x=xa,k+1=xb,k+1

如圖5所示。顯然,可以確定最小值在容忍誤差±1/Fn 範圍內。

如果n 足夠大,那噩夢xa,k,xb,k 的差將會非常小,由於舍入誤差,xa,k 可能超過xb,k ,如果這種情況發生的話,我們將會得到不可靠的結果。對於這樣的應用,爲了消除這個問題,我們需要加入一下檢查措施,一種方法是終止算法,這是因爲如果xa,kxb,k ,那麼我們已經達到了足夠高的精度。


這裏寫圖片描述
圖5

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章