【最优化导论】一维搜索方法
一維搜索方法
本文將介紹一維搜索方法,即尋找一元單值函數的極小點問題。其中包括黃金分割法、斐波那契數列法等,還將介紹在多維搜索算法中一維搜索方法所發揮的作用。
一維問題也就是指目標函數為一元單值函數f:R→Rf:\mathbb{R}\rightarrow \mathbb{R}f:R→R的優化問題,一維問題的求解方法統稱為一維搜索方法,也稱為線性搜索方法。一維搜索方法的重要性體現在以下兩個方面:
- 一維搜索方法是多變量問題求解方法的特例
- 一維搜索方法是多變量問題求解算法的一部分
在通過當前迭代點x(k)\mathbf{x}^{(k)}x(k)和目標函數fff來構建下一個迭代點x(k+1)\mathbf{x}^{(k+1)}x(k+1)的過程中,有些算法可能要利用當前迭代點處的函數值fff,有些算法可能要用到當前迭代點處的一階導數f′f'f′,有些可能要用到二階導數f′′f''f′′。
接下來將介紹以下一維搜索方法:
- 黃金分割法(使用fff)
- 斐波那契數列方法(使用fff)
- 二分法(使用f’f’f’)
- 割線法(使用f’f’f’)
- 牛頓法(使用f’f’f’和f′’f'’f′’)
1. 黃金分割法
黃金分割法用于求解一元單值函數在閉區間[a0,b0][a_0,b_0][a0?,b0?]上的極小點,后面所講的斐波那契數列方法和二分法也是針對這一問題,該問題的唯一前提是目標函數在區間內是單峰的,即存在唯一極小點。
該方法的基本思想是挑選區間[a0,b0][a_0,b_0][a0?,b0?]中的點,通過不斷縮小極小點所在的區間,直到達到足夠的精度水平。
如上圖中,極小點為x?x^*x?,令區間長度為lll,則新產生的點為:
a1=a0+ρ?la_1=a_0+\rho \cdot la1?=a0?+ρ?l
b1=b0?ρ?lb_1=b_0-\rho \cdot lb1?=b0??ρ?l
其中ρ<12\rho<\frac{1}{2}ρ<21?,接著比較f(a1)f(a_1)f(a1?)和f(b1)f(b_1)f(b1?)的大小:
- 如果f(a1)<f(b1)f(a_1)<f(b_1)f(a1?)<f(b1?),則極小點位于區間[a0,b1][a_0,b_1][a0?,b1?]之間
- 如果f(a1)≥f(b1)f(a_1)\geq f(b_1)f(a1?)≥f(b1?),則極小點位于區間[a1,b0][a_1,b_0][a1?,b0?]之間
然后在新的區間中不斷進行壓縮區間,就可以不斷逼近極小點。為了減少計算次數,如上圖例子中所示,下一次的時候不計算b2b_2b2?,而是直接把上一次的a1a_1a1?當做b2b_2b2?,下一次迭代只需計算相應的函數值就好了。
為了不失一般性,假設區間長度為1,則前兩次的迭代過程如下圖所示:
首先,a0到b0的長度為1,a0到b1的區間長度為1?ρ1-\rho1?ρ??s小區間至[a0,b1][a_0,b_1][a0?,b1?]。
然后,a1=b2,b2到b1的區間長度為1?2ρ1-2\rho1?2ρ。
在a0到b1區間上又滿足,b1減去 ρ\rhoρ倍的區間長度為b2,所以:
ρ(1?ρ)=1?2ρ\rho(1-\rho)=1-2\rhoρ(1?ρ)=1?2ρ
所以解得:
ρ1=3+52,ρ2=3?52\rho_1=\frac{3+\sqrt{5}}{2},\rho_2=\frac{3-\sqrt{5}}{2}ρ1?=23+5??,ρ2?=23?5??
又因為ρ<12\rho<\frac{1}{2}ρ<21?,所以ρ=3?52=0.382\rho=\frac{3-\sqrt{5}}{2}=0.382ρ=23?5??=0.382
同時滿足ρ1?ρ=1?p1\frac{\rho}{1-\rho}=\frac{1-p}{1}1?ρρ?=11?p?,即能夠是短區間與長區間的長度之比等于長區間與整個區間之比,這意味著就符合黃金分割法則。
利用黃金分割法開展區間壓縮,區間按照1?ρ≈0.618031-\rho\approx 0.618031?ρ≈0.61803的比例逐漸壓縮,壓縮N次之后,新的區間長度將是原來區間長度的(1?ρ)N≈(0.61803)N(1-\rho)^N\approx (0.61803)^N(1?ρ)N≈(0.61803)N。
2. 斐波那契數列法
在黃金分割法中,參數ρ\rhoρ始終保持不變。如果動態的改變參數ρ\rhoρ則會產生一種新的搜索算法。假設第k次的參數為ρk\rho_kρk?,第k+1次的參數為ρk+1\rho_{k+1}ρk+1?,則參數之間也滿足兩次迭代之間的關系式:
ρk+1(1?ρk)=1?2ρk\rho_{k+1}(1-\rho_k)=1-2\rho_kρk+1?(1?ρk?)=1?2ρk?
整理后可得:
ρk+1=1?ρk1?ρk\rho_{k+1}=1-\frac{\rho_k}{1-\rho_k}ρk+1?=1?1?ρk?ρk??
在壓縮過程中,經過N次迭代之后,可以將極小點所在的區間長度壓縮到初始區間長度的:
(1?ρ1)(1?ρ2)?(1?ρN)(1-\rho_1)(1-\rho_2)\cdots(1-\rho_N)(1?ρ1?)(1?ρ2?)?(1?ρN?)
采用不同的參數序列,所得到的壓縮比也會不同,總壓縮比是越小越好。
可以將斐波那契數列將參數的設置結合,對于斐波那契數列F1,F2,F3,?F_1,F_2,F_3,\cdotsF1?,F2?,F3?,?,按照常規做法,令F?1=0,F0=1F_{-1}=0,F_0=1F?1?=0,F0?=1,對k≥0k\geq0k≥0,有:
Fk+1=Fk+Fk?1F_{k+1}=F_k+F_{k-1}Fk+1?=Fk?+Fk?1?
由此可知斐波那契數列的前8項為:
采用斐波那契數列參數為:
此時總壓縮比為:
(1?ρ1)(1?ρ2)?(1?ρN)=FNFN+1FN?1FN?F1F2=1FN+1(1-\rho_1)(1-\rho_2)\cdots(1-\rho_N)=\frac{F_N}{F_{N+1}}\frac{F_{N-1}}{F_{N}}\cdots\frac{F_1}{F_{2}}=\frac{1}{F_{N+1}}(1?ρ1?)(1?ρ2?)?(1?ρN?)=FN+1?FN??FN?FN?1???F2?F1??=FN+1?1?
但會發現ρN=1?F1F2=12\rho_N=1-\frac{F_1}{F_{2}}=\frac{1}{2}ρN?=1?F2?F1??=21?,那么此時會選擇中點作為新的點,那么就無法再進行壓縮了,所以需要調整一下:
令ρN=1/2??\rho_N=1/2-\epsilonρN?=1/2??,?\epsilon?為一個很小的正數,那么在最后一次迭代過程中,極小點所在的區間壓縮比可能是:
1?ρN=121-\rho_N=\frac{1}{2}1?ρN?=21?或1?(ρN??)=12+?=1+2?21-(\rho_N-\epsilon)=\frac{1}{2}+\epsilon=\frac{1+2\epsilon}{2}1?(ρN???)=21?+?=21+2??
兩個壓縮比能夠產生兩個不同的新點,分別計算對應的目標函數值,保留目標函數值更小的點。這意味著,在最壞的情況下,波那契數列法的總壓縮比為:
1+2?FN+1\frac{1+2\epsilon}{F_{N+1}}FN+1?1+2??
3.二分法
同前面的方法一樣,仍然要求函數fff在區間[a0,b0][a_0,b_0][a0?,b0?]上位單峰函數。另外,二分法還要求函數為連續可微的,因為要使用到一階導數f′f'f′。
求解的過程為:
1)確定初始區間的中點x(0)=(a0+b0)/2x^{(0)}=(a_0+b_0)/2x(0)=(a0?+b0?)/2。
2)計算函數在x(0)x^{(0)}x(0)處的一階導數f′(x(0))f'(x^{(0)})f′(x(0))
-
如果f′(x(0))>0f'(x^{(0)})>0f′(x(0))>0,說明極小點在x(0)x^{(0)}x(0)左側,區間壓縮為[a0,x(0)][a_0,x^{(0)}][a0?,x(0)]
-
如果f′(x(0))<0f'(x^{(0)})<0f′(x(0))<0,說明極小點在x(0)x^{(0)}x(0)右側,區間壓縮為[x(0),b0][x^{(0)},b_0][x(0),b0?]
-
如果f′(x(0))=0f'(x^{(0)})=0f′(x(0))=0,說明極小點為x(0)x^{(0)}x(0)
按照如上的方式,在第k次迭代過程中計算相應的一階導數并判斷極小點可能在的區間。
4.牛頓法
牛頓法需要函數連續二階可微,即在x(k)x^{(k)}x(k)處的f(x(k)),f′(x(k)),f′′(x(k))f(x^{(k)}),f'(x^{(k)}),f''(x^{(k)})f(x(k)),f′(x(k)),f′′(x(k))均可求得。此時就可以使用泰勒公式的展開來近似原函數:
q(x)=f(x(k))+f′(x(k))(x?x(k))+12f′′(x(k))(x?x(k))2q(x)=f(x^{(k)})+f'(x^{(k)})(x-x^{(k)})+\frac{1}{2}f''(x^{(k)})(x-x^{(k)})^2q(x)=f(x(k))+f′(x(k))(x?x(k))+21?f′′(x(k))(x?x(k))2
其中q(x)為原函數f(x)的近似,所以函數f的極小點可近似于求解q的極小點,函數q的極小點需要滿足一階必要條件:
0=q′(x)=f′(x(k))+f′′(x(k))(x?x(k))0=q'(x)=f'(x^{(k)})+f''(x^{(k)})(x-x^{(k)})0=q′(x)=f′(x(k))+f′′(x(k))(x?x(k))
令x=x(k+1)x=x^{(k+1)}x=x(k+1),解得:
x(k+1)=x(k)?f′f′′x^{(k+1)}=x^{(k)}-\frac{f'}{f''}x(k+1)=x(k)?f′′f′?
當f′′>0f''>0f′′>0在區間內成立,則牛頓法可以正常運行,如下左圖所示;否則若f′′>0f''>0f′′>0牛頓法可能會收斂到極大點。
牛頓法是通過不斷破事目標函數f的一階導數趨于0所得到的,因此也稱為牛頓切線法。令g(x)=f′(x)g(x)=f'(x)g(x)=f′(x),則求解過程就是不斷趨近函數g(x)的零點。
即在x(k)x^{(k)}x(k)處切線與x軸的交點就是x(k+1)x^{(k+1)}x(k+1),但與此同時初始點的選擇就比較重要,如下圖所示為會使牛頓法失效的例子。
5.割線法
從迭代公式可以看出牛頓法需要用到二階導數:
x(k+1)=x(k)?f′f′′x^{(k+1)}=x^{(k)}-\frac{f'}{f''}x(k+1)=x(k)?f′′f′?
如果二階導數不存在,可以使用不同點處的一階導數對其近似得到,比如可以利用下式計算f′′f''f′′:
f′(x(k))?f′(x(k?1))x(k)?x(k?1)\frac{f'(x^{(k)})-f'(x^{(k-1)})}{x^{(k)}-x^{(k-1)}}x(k)?x(k?1)f′(x(k))?f′(x(k?1))?
所以可以得到一個新的迭代公式:
x(k+1)=x(k)?x(k)?x(k?1)f′(x(k))?f′(x(k?1))f′(x(k))x^{(k+1)}=x^{(k)}-\frac{x^{(k)}-x^{(k-1)}}{f'(x^{(k)})-f'(x^{(k-1)})}f'(x^{(k)})x(k+1)=x(k)?f′(x(k))?f′(x(k?1))x(k)?x(k?1)?f′(x(k))
該公式對應的方法為割線法,這個方法需要兩個初始點。
不同于牛頓法使用g的斜率來確定下一個迭代點,割線法使用的是第k-1個和第k個選代點之間的割線確定第k+1個迭代點。
6.劃界法
前面所討論的方法中,都有一個前提,即初始區間是已經知道的。二劃界法就是尋找初始區間的一種方法。
劃界法的基本思想是找出3個點a<c<b,是的函數值滿足f?<f(a),f?<f(b)。其計算過程大致如下:
任選3個點x0<x1<x2x_0<x_1<x_2x0?<x1?<x2?,
-
若f(x1)<f(x0)f(x_1)<f(x_0)f(x1?)<f(x0?)且f(x1)<f(x2)f(x_1)<f(x_2)f(x1?)<f(x2?),則區間為[x0,x2]
-
若f(x0)>f(x1)>f(x2)f(x_0)>f(x_1)>f(x_2)f(x0?)>f(x1?)>f(x2?),則另取一個點x3>x2x_3>x_2x3?>x2?,繼續檢查函數值,如下圖所示:
7. 多維優化問題中的一維搜索
在多維優化問題的求解過程中,通常每次迭代的過程中都包括一維搜索過程。
令目標函數f:Rn→Rf:\mathbb{R}^n \rightarrow\mathbb{R}f:Rn→R,求其極小點的迭代算法中的迭代公式為:
x(k+1)=x(k)+αkd(k)\mathbf{x}^{(k+1)}=\mathbf{x}^{(k)}+\alpha_k\mathbfze8trgl8bvbq^{(k)}x(k+1)=x(k)+αk?d(k)
其中αk≥0\alpha_k\ge0αk?≥0為步長,其確定方式使函數?k(α)=f(x(k)+αkd(k))\phi_k(\alpha)=f(\mathbf{x}^{(k)}+\alpha_k\mathbfze8trgl8bvbq^{(k)})?k?(α)=f(x(k)+αk?d(k))達到最小;
向量d(k)\mathbfze8trgl8bvbq^{(k)}d(k)為搜索方向,例如梯度方向。
上述的一維搜索方法可以用來求解?k(α)=f(x(k)+αkd(k))\phi_k(\alpha)=f(\mathbf{x}^{(k)}+\alpha_k\mathbfze8trgl8bvbq^{(k)})?k?(α)=f(x(k)+αk?d(k))的極小點,其中參數為α\alphaα,符合一維情況。
如上圖為一個在多維優化問題中的一維搜索應用示例。
總結
以上是生活随笔為你收集整理的【最优化导论】一维搜索方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html5体感游戏开发,使用HTML5开
- 下一篇: 无刷有感电机测速、速度闭环控制