前面幾篇部落格中,分別講述了最速下降法、newton法、擬newton法和共軛方向法,這些方法中都需要計算目標函式f(
x)的梯度,其中newton法還需要計算目標函式f(
x)的hesse矩陣。我們把以上方法統稱為導數方法。當然還有不計算導數的方法,稱為直接方法。步長加速法就是一種簡單的直接方法,對於變數較少的無約束極小化問題,步長加速法是一種簡單又比較有效的方法。
選定初始點x0
和初始步長向量s0
(這裡是步長向量,與導數法中的步長因子不一樣,可以吧步長向量看作是αk
pk),其中s0
的每乙個分量都是正數。
步長加速演算法主要由交替進行的」探測搜尋」和」模式移動」構成。探測搜尋的出發點我們稱為參考點,用向量r=
[r1,
r2,.
..,r
n]t 來表示,探測搜尋的目的是在參考點附近尋找比他更好的點(在求解最小值問題時就是值更小的點),我們把找到的更優點稱為基點,用向量b=
[b1,
b2,.
..,b
n]t 來表示。如果能找到這樣的點
b ,我們就能找到乙個有利的前進方向b−
r,因此從基點
b 出發沿著b−
r方向前進,可能還會找到比點
b 更優的點。我們把向量b−
r稱為模式,而模式移動的過程就是沿著b−
r 方向進行搜尋的過程,有如下公式r~
=b+α
(b−r
) 其中α
>
0(1)
,一般會取α=
1 ,或用直線搜尋技術來確定。當上式α=
1 時,公式變為r~
=2b−
r(2)
模式移動的起點是基點,得到的終點是新的參考點。之後再按照上文中的過程進行搜尋。
在講步長加速法的演算法之前,首先講一下探測搜尋的過程。
考慮在參考點
r 處,以s=
[s1,
s2,.
..,s
n]t為步長向量的探測搜尋。
探測搜尋演算法。
已知:目標函式f(x),步長向量s=
[s1,
s2,.
..,s
n]t ,參考點r=
[r1,
r2,.
..,r
n]t
(1)計算fr
=f(r
) ;置fb
=fr ,b=
r
(2)沿著第i=
1,2,
...,
n 座標軸方向依次搜尋,計算 f1
=f(b
+sie
i),f
2=f(
b−si
ei)
,其中 ei
是第 i
座標軸上的單位向量,必有以下三種情況之一。i)若f1
,則說明 b
+sie
i 比 b
好,置b=
b+si
ei,f
b=fi
ii)若 f
1≥fb
並且 f
2,則說明 b
+sie
i 不比 b
好,但是b−
siei
要比 b 好,因此置b=
b−si
ei,f
b=f2
iii)若 f
1≥fb
,並且 f
2≥fb
,則說明 b
+sie
i和b−
siei
都不比 b
好,則b和
fb 保持當前值不變。
探測搜尋的過程比較簡單就是分別沿著座標軸方向進行搜尋,找到乙個比基點 b
更優的點。
下面給出完整的步長加速法的演算法描述。
步長加速法。
已知:演算法說明: 演算法的第(4)步和第(7)步都是探測搜尋,但他們的作用有區別,前者的出發點即使參考點又是基點,目的是在基點周圍構造乙個模式,稱為i型探測搜尋;後者的出發點單純是參考點,目的是判別上次的模式移動是否成功,從而能夠做加速移動,稱為ii型探測搜尋。n元目標函式 f
(x) ,步長收縮係數的終止限 ϵ
(1)選定初始點 x
0 ,初始步長向量 s
0 (2)置 r
=t0,
b0=x
0,c=
1,w=
0.5(或者
0.1)
(3) s
=cs0
(4)在點 r
處以s為步長向量,按探測搜尋演算法做探測搜尋
(5)若探測搜尋成功,即 f
b,則轉(6),否則轉(10)
(6)做模式移動, r
=2b−
b0;置 b
0=b,
f0=f
b (7)在 r
處,以s為步長向量,按探測搜尋演算法做探測搜尋。
(8)若這次探測搜尋的終點 b
的目標函式值比前一次探測搜尋的終點b0
的目標函式值小,即 f
b,則稱上次的模式移動成功。同時i說明從 b
出發,沿方向b−
b0由繼續前進的必要。因此轉(6),再次做模式移動。因為 |
|b−b
0|| 一般比 |
|b−r
||大,所以凡是連續做的模式移動都是加速步驟。
(9)若 f
b≥f0
,則上次的模式移動失敗。模式移動一旦失敗,相當於說模式移動作廢,因而沒有了參考點。此時,取前一次探測搜尋的終點 b
0 作為參考點 r
,然後轉(4)
(10)由(5)轉來,若探測搜尋失敗,即fb
≥fr,則判別步長收縮係數 c
是否充分小:若
c>
ϵ,即置 c
=wc ,然後轉(3);若 c
≤ϵ,則 r
就是所求的極小點,輸出,停止。
大津法加速
int otsu2 accel cv mat src,int width,int height float pixelpro 256 統計灰度級中每個畫素在整幅影象中的個數 for int y 0 y height y float sum u 0 計算每個畫素在整幅影象中的比例 for int i ...
python 切片步長 python 切片步長
python切片 切片 list變數 值下標 結束值下標 什麼意思呢?就是獲取 list中 下標從定義的位置開始獲取資料到 自定義的下標位置結束,但是切片有個規矩就是顧頭不顧尾,舉個例子 kl oppo vivo iphone levovo print kl 0 1 結果 oppo 如果我取list...
python 切片步長
python切片 切片 list變數 值下標 結束值下標 什麼意思呢?就是獲取 list中 下標從定義的位置開始獲取資料到 自定義的下標位置結束,但是切片有個規矩就是顧頭不顧尾,舉個例子 kl oppo vivo iphone levovo print kl 0 1 結果 oppo 如果我取list...