精確一維搜索
試探法
精確一維搜索就是通過迭代取減少搜索區間
對於搜索區間[a, b]
在這個區間中找連個互不相同的試探點p1 p2獲取f(p1), f(p2), 設p1 < p2
若f(p1) < f(p2) 則丟棄區間 [p2, b]
若f(p1) >= f(p2) 則丟棄區間 [a, p1]
這樣就達到了通過一次迭代減小搜索區間的目的
當搜索區間長度< 給定的誤差e時,終止迭代
不同的試探法,其實不同的是選取p1, p2的方法
0.618法
0.618法就是
p1 = a * 0.618 + b * (1-0,618)
p2 = a * (1-0,618) + b * 0.618
斐波那契法:
對與第i次迭代
p1 = Fi+1 / (Fi + Fi+1) * a + Fi / (Fi + Fi+1) * b
p2 = Fi / (Fi + Fi+1) * a + Fi+1 / (Fi + Fi+1) * b
插值法
通過已有的條件構造插值函數
通過求插值函數的極小值點去近似已有函數的極小值點
三點二次插值
已有三個點(p1,f(p1)),(p2,f(p2)),(p3,f(p3))
通過拉格朗日插值法獲取插值函數
求得插值函數的倒數為0獲取插值函數的極小值點(p0,f(p0))
現在我們有四個點了,通過這種方法得到四個點后,通過試探法的迭代方法去縮小區間即可
終止准則也同迭代法的終止准則
二點二次插值
給定初始步長alaph和步長縮減因子
我可以獲得x的函數值和他的導數
獲取第一個點x0,f(x0), f'(x0)
給定步長alaph,往函數下降的方法走alaph得到x1
若f(x1) > f(x0) + f'(x0) * abs(x0 - x1) 則步長不斷以alaph = 2*alaph增加直到不滿足條件
通過f(x1), f(x0), f'(x0)計算插值函數,並求得最優點u
若f‘(u) < e 終止迭代
否則將u作為初始點,繼續迭代步長alaph = p * alaph
一般來說 alaph = 2 p = 1/10
二點三次插值
給定初始步長alaph和步長縮減因子
我可以獲得x的函數值和他的導數
獲取第一個點x0,f(x0), f'(x0)
給定步長alaph,往函數下降的方法走alaph得到x1
計算得到f(x1), f'(x1)
若f'(x1) * f'(x0) > 0 則將x1做為x0 alaph = 2 * alaph的方式迭代直到不滿足條件
通過f(x1),f'(x1), f(x0), f'(x0)計算插值函數,並求得最優點u
若f‘(u) < e 終止迭代
否則將u作為初始點,繼續迭代步長alaph = p * alaph
一般來說 alaph = 2 p = 1/10
非精確一維搜索
Goldstein方法
對於函數Φ(x) 我能知道在任意一點的函數值與倒數
對於區間[umin, umax],置精度要求0<β1<β2<1
一般來說umin= 0 umax = +∞
取初始點u0
若Φ(u) > Φ(0) + β1 * Φ(0)’ * u
umax = u
若Φ(0) + β2 * Φ(0)‘ * u <= Φ(u) <= Φ(0) + β1 * Φ(0)’ * u
達到精度要求,停止計算
若Φ(u) < Φ(0) + β2 * Φ(0)‘ * u
umin = u
當 umax = +∞時,置下一步的試探點為u = 2 * umin
否則u = (umin+umax) / 2
Armijo方法
取一大於0的數M,0<β1<1
Φ(u) <= Φ(0) + β1 * Φ(0)‘ * u
且Φ(u*M) >= Φ(0) + β1 * Φ(0) ’* u
條件終止
Wolfe-Powell方法
置精度要求0<β1<β2<1
Φ(u) <= Φ(0) + β1 * Φ(0)‘ * u
Φ’(u) <= β2 * Φ(0)'