你喜歡有小情緒,
像夜晚的月亮,
但各有各的精彩。
你情感豐富,
時常給我驚喜,
我像探祕一樣,
對你的一切都充滿好奇。
想系好安全帶,
帶你去世界各個地方,
都留下我們的小腳印與美好的回憶。
——暢寶寶的傻逼哥哥
考慮一個單峯函數,在區間[xL,xU] 內有最小值,這個區間稱爲不確定範圍,通過不斷縮小這個不確定範圍可以得出f(x) 的最小值x∗ 。在搜索方法中,使用f(x) 在合適點處的值就能確定出來。
如果f(x) 在點xa 處的值是已知的,其中xL<xa<xU ,那麼點x∗ 可能在xL 與xa 之間,或者xa 與xU 之間,如圖1所示,因此獲得信息不足以進一步縮小不確定範圍。然而,如果我們知道f(x) 在兩個點xa,xb 處的值,那就可以縮小了,這時候會有三種情況:
- f(xa)<f(xb)
- f(xa)>f(xb)
- f(xa)=f(xb)
對於第一種情況,x∗ 的範圍可能是xL<x∗<xa 或者xa<x∗<xb ,即xL<x∗<xb ,如圖1所示。xb<x∗<xU 的情況被排除了,否則的話f(x) 會有兩個極小值:一個在xb 的左邊,一個在xb 的右邊。同樣的,對於第二種情況,我們肯定有xa<x∗<xU ,如圖2所示。對於第三種情況,我們有xa<x∗<xb ,即不等式xL<x∗<xb 與xa<x∗<xU 都滿足,如圖3所示。
圖1
圖2
一種縮小不確定範圍的基本策略是二分搜索。對於這個方法,首先計算
f(x) 在兩點
xa=x1−ε/2 與
xb=x1+ε/2 的值,其中
ε 是很小的正數,然後根據
f(xa)<f(xb) 還是
f(xa)>f(xb) ,判斷範圍是
xL 到
x1+ε/2 還是
x1−ε/2 到
xU ,如果
f(xa)=f(xb) ,那麼兩者都可以。假設
x1−xL=xU−x1 ,即
x1=(xL+xU)/2 ,那麼不確定範圍立刻減半,不斷重複這個過程直到滿足要求爲止。例如,如果二分查找應用到圖4所示的函數上,那麼不確定範圍在四次迭代後從
0<x∗<1 減小到
9/16+ε/2<x∗<5/8−ε/2 。
圖3
圖4