本發(fā)明屬于極值搜索技術(shù)領(lǐng)域,更為具體地講,涉及一種基于梯度法極值搜索的多峰極值搜索方法。
背景技術(shù):
對(duì)于單輸入單輸出系統(tǒng),其輸入和輸出會(huì)滿(mǎn)足一定的函數(shù)關(guān)系。在實(shí)際應(yīng)用中,通常需要將輸入調(diào)整到合適的值,以使輸出達(dá)到極值,此時(shí)就需要用到極值搜索方法。目前傳統(tǒng)的極值搜索算法只能搜索到局部峰值,如果系統(tǒng)函數(shù)為多峰函數(shù),那么就只能搜索到初始點(diǎn)附近的一個(gè)峰值,對(duì)于其他峰值的搜索無(wú)能為力,而局部峰值并不一定是全局峰值。顯然,要想搜索得到多峰函數(shù)系統(tǒng)的極值,極大地依賴(lài)于初始點(diǎn)的設(shè)置,而初始點(diǎn)一般是人為設(shè)置的,很難擺脫主觀因素的影響,因此亟需一種能夠?qū)Χ喾搴瘮?shù)的極值進(jìn)行搜索的方法。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于克服現(xiàn)有技術(shù)的不足,提供一種基于梯度法極值搜索的多峰極值搜索方法,通過(guò)不斷更新初始點(diǎn)進(jìn)行極值搜索,以實(shí)現(xiàn)對(duì)系統(tǒng)函數(shù)為多峰函數(shù)的單輸入單輸出系統(tǒng)的多峰極值搜索。
為實(shí)現(xiàn)上述發(fā)明目的,本發(fā)明基于梯度法極值搜索的多峰極值搜索方法包括以下步驟:
s1:設(shè)定極值搜索的輸入初始點(diǎn)x0;
s2:以初始點(diǎn)x0作為系統(tǒng)輸入,采用梯度法極值搜索算法進(jìn)行時(shí)長(zhǎng)為t+m的極值搜索,記錄時(shí)刻t的系統(tǒng)輸出yt和時(shí)刻t+m的系統(tǒng)輸出yt+m,t和m都是根據(jù)實(shí)際情況設(shè)置的時(shí)間參數(shù);梯度法極值搜索算法的具體步驟包括:
s2.1:令系統(tǒng)輸入
s2.2:將系統(tǒng)輸入
s2.3:將系統(tǒng)輸入x輸入系統(tǒng),得到對(duì)應(yīng)的系統(tǒng)輸出y,通過(guò)濾波器濾去不穩(wěn)定的波形,得到穩(wěn)定的輸出
s2.4:將輸出
s2.5:將δy乘以一個(gè)常系數(shù)-k后進(jìn)行積分,其中k>0,在估計(jì)點(diǎn)
s3:判斷是否|yt+m-yt|<ε,ε表示預(yù)設(shè)閾值,ε>0,如果是,則將yt+m作為當(dāng)前初始點(diǎn)x0對(duì)應(yīng)的極值,進(jìn)入步驟s6,否則進(jìn)入步驟s4;
s4:延長(zhǎng)梯度法極值搜索算法的搜索時(shí)間,延長(zhǎng)的搜索時(shí)間為τ+m,τ表示延長(zhǎng)時(shí)間參數(shù),記錄本次延長(zhǎng)搜索時(shí)間中時(shí)刻τ的系統(tǒng)輸出yτ和時(shí)刻τ+m的系統(tǒng)輸出yτ+m;
s5:判斷是否|yτ+m-yτ|<ε,ε表示預(yù)設(shè)閾值,如果是,則將yτ+m作為當(dāng)前初始點(diǎn)x0對(duì)應(yīng)的極值,進(jìn)入步驟s6,否則返回步驟s4;
s6:令初始點(diǎn)x0=x0+h,返回步驟s2,h表示初始點(diǎn)更新步長(zhǎng);
在步驟s2至步驟s6循環(huán)執(zhí)行期間,對(duì)搜索結(jié)束參數(shù)進(jìn)行監(jiān)測(cè),一旦達(dá)到搜索結(jié)束條件,則多峰極值搜索結(jié)束。
本發(fā)明基于梯度法極值搜索的多峰極值搜索方法,針對(duì)單輸入單輸出系統(tǒng),給定輸入初始點(diǎn)采用梯度法極值搜索進(jìn)行預(yù)設(shè)時(shí)間的極值搜索,通過(guò)判斷搜索結(jié)束時(shí)段兩個(gè)相近時(shí)間點(diǎn)的差值來(lái)確定是否搜索到局部極值,如果搜索到局部極值,則更新輸入初始點(diǎn)搜索下一個(gè)局部極值,否則延長(zhǎng)搜索時(shí)間繼續(xù)搜索該初始點(diǎn)對(duì)應(yīng)的局部極值。
本發(fā)明針對(duì)傳統(tǒng)極值搜索算法無(wú)法對(duì)系統(tǒng)函數(shù)為多峰函數(shù)的單輸入單輸出系統(tǒng)進(jìn)行多峰極值搜索的情況,基于梯度法極值搜索算法進(jìn)行了擴(kuò)展,增加了改變輸入初始點(diǎn)的外循環(huán),通過(guò)對(duì)初始點(diǎn)的改變,利用梯度法極值搜索算法搜索出不同初始點(diǎn)附近的極值,從而完成對(duì)多峰函數(shù)的極值搜索過(guò)程。通過(guò)仿真驗(yàn)證可以發(fā)現(xiàn),本發(fā)明是一個(gè)雙閉環(huán)系統(tǒng),可以準(zhǔn)確搜索到不同輸入初始點(diǎn)相對(duì)應(yīng)的極值,搜索速度快,穩(wěn)定性好。
附圖說(shuō)明
圖1是本發(fā)明基于梯度法極值搜索的多峰極值搜索方法的具體實(shí)施方式流程圖;
圖2是本發(fā)明中梯度法極值搜索算法示意圖;
圖3是本實(shí)施例中系統(tǒng)函數(shù)的曲線(xiàn)圖;
圖4是本實(shí)施例中采用本發(fā)明多峰極值搜索方法得到的波峰值與時(shí)間的變化圖;
圖5是圖4中對(duì)應(yīng)極值點(diǎn)與時(shí)間的變化圖;
圖6是輸入初始點(diǎn)為3時(shí)梯度法極值搜索算法的波峰值與時(shí)間的變化圖;
圖7是輸入初始點(diǎn)為4時(shí)梯度法極值搜索算法的波峰值與時(shí)間的變化圖;
圖8是輸入初始點(diǎn)為5時(shí)梯度法極值搜索算法的波峰值與時(shí)間的變化圖;
圖9是輸入初始點(diǎn)為6時(shí)梯度法極值搜索算法的波峰值與時(shí)間的變化圖;
圖10是本實(shí)施例中采用本發(fā)明多峰極值搜索方法得到的波谷值與時(shí)間的變化圖;
圖11是圖10中對(duì)應(yīng)極值點(diǎn)與時(shí)間的變化圖;
圖12是初始點(diǎn)為3時(shí)梯度法極值搜索算法的波谷值與時(shí)間的變化圖;
圖13是初始點(diǎn)為4時(shí)梯度法極值搜索算法的波谷值與時(shí)間的變化圖;
圖14是初始點(diǎn)為5時(shí)梯度法極值搜索算法的波谷值與時(shí)間的變化圖。
具體實(shí)施方式
下面結(jié)合附圖對(duì)本發(fā)明的具體實(shí)施方式進(jìn)行描述,以便本領(lǐng)域的技術(shù)人員更好地理解本發(fā)明。需要特別提醒注意的是,在以下的描述中,當(dāng)已知功能和設(shè)計(jì)的詳細(xì)描述也許會(huì)淡化本發(fā)明的主要內(nèi)容時(shí),這些描述在這里將被忽略。
實(shí)施例
圖1是本發(fā)明基于梯度法極值搜索的多峰極值搜索方法的具體實(shí)施方式流程圖。如圖1所示,本發(fā)明基于梯度法極值搜索的多峰極值搜索方法的具體步驟包括:
s101:設(shè)定初始參數(shù):
設(shè)定極值搜索的輸入初始點(diǎn)x0。
s102:梯度法極值搜索:
以初始點(diǎn)x0作為系統(tǒng)輸入,采用梯度法極值搜索算法進(jìn)行時(shí)長(zhǎng)為t+m的極值搜索,記錄時(shí)刻t的系統(tǒng)輸出yt和時(shí)刻t+m的系統(tǒng)輸出yt+m,t和m都是根據(jù)實(shí)際情況設(shè)置的時(shí)間參數(shù)。
圖2是本發(fā)明中梯度法極值搜索算法示意圖。如圖2所示,梯度法極值搜索算法的具體過(guò)程包括以下步驟:
s201:令系統(tǒng)輸入
s202:輸入擾動(dòng)處理:
將系統(tǒng)輸入
本實(shí)施例中采用的擾動(dòng)表示式為:
s(t)=a(h1cos(w(t))+h2sin(w(t)))(1)
其中,η(t)=[cos(w(t)),sin(w(t))]t是布朗單位圓運(yùn)動(dòng),h1>0,h2>0和a>0是設(shè)計(jì)參數(shù)。
s203:獲取對(duì)應(yīng)系統(tǒng)輸出:
將系統(tǒng)輸入x輸入系統(tǒng),得到對(duì)應(yīng)的系統(tǒng)輸出y,通過(guò)濾波器濾去不穩(wěn)定的波形,得到穩(wěn)定的輸出
s204:輸出擾動(dòng)處理:
將輸出
本實(shí)施例中擾動(dòng)m(t)可表示為:
s205:尋找下一個(gè)估計(jì)迭代點(diǎn):
將δy乘以一個(gè)常系數(shù)-k后進(jìn)行積分,其中k>0,在估計(jì)點(diǎn)
梯度法的迭代公式為:x(k+1)=x(k)+λ(k)d(k),其中d(k)=-▽y(x(k)),λ(k)是迭代系數(shù),在此處二個(gè)估計(jì)點(diǎn)的差值:
s103:判斷是否搜索得到局部極值:
通過(guò)比較時(shí)刻t的系統(tǒng)輸出yt和時(shí)刻t+m的系統(tǒng)輸出yt+m的差值是否小于預(yù)設(shè)閾值即可判定是否搜索得到局部極值,即判斷是否|yt+m-yt|<ε,ε表示預(yù)設(shè)閾值,ε>0,如果是,則將yt+m作為當(dāng)前初始點(diǎn)x0對(duì)應(yīng)的極值,進(jìn)入步驟s107,否則進(jìn)入步驟s104。顯然,m是一個(gè)較短的時(shí)間間隔。
s104:延長(zhǎng)搜索時(shí)間:
如果還未搜索到當(dāng)前初始點(diǎn)x0對(duì)應(yīng)的極值,則需要延長(zhǎng)梯度法極值搜索算法的搜索時(shí)間,延長(zhǎng)的搜索時(shí)間為τ+m,τ表示延長(zhǎng)時(shí)間參數(shù),記錄本次延長(zhǎng)搜索時(shí)間中時(shí)刻τ的系統(tǒng)輸出yτ和時(shí)刻τ+m的系統(tǒng)輸出yτ+m。
s105:判斷延長(zhǎng)搜索是否搜索得到局部極值:
與步驟s103類(lèi)似,通過(guò)比較延長(zhǎng)搜索時(shí)間中時(shí)刻τ的系統(tǒng)輸出yτ和時(shí)刻τ+m的系統(tǒng)輸出yτ+m的差值是否小于預(yù)設(shè)閾值即可判定是否搜索得到局部極值,即判斷是否|yτ+m-yτ|<ε,ε表示預(yù)設(shè)閾值ε>0,如果是,則將yτ+m作為當(dāng)前初始點(diǎn)x0對(duì)應(yīng)的極值,進(jìn)入步驟s106,否則返回步驟s104。
可見(jiàn),如果從以初始點(diǎn)x0作為梯度法極值搜索的初始輸入開(kāi)始計(jì)時(shí),首先會(huì)進(jìn)行時(shí)長(zhǎng)為t+m的極值搜索,如果搜索不到極值,還會(huì)繼續(xù)進(jìn)行時(shí)長(zhǎng)τ+m的極值搜索,以此類(lèi)推,每次延長(zhǎng)時(shí)長(zhǎng)為τ+m的搜索,一直搜索下去。
s106:更新初始點(diǎn):
令初始點(diǎn)x0=x0+h,返回步驟s102,h表示初始點(diǎn)更新步長(zhǎng),是根據(jù)實(shí)際情況來(lái)設(shè)置的。
可見(jiàn),步驟s102至步驟s106形成了一個(gè)循環(huán),持續(xù)搜索得到系統(tǒng)的各個(gè)極值。在步驟s102至步驟s106循環(huán)執(zhí)行期間,對(duì)搜索結(jié)束參數(shù)進(jìn)行監(jiān)測(cè),一旦達(dá)到搜索結(jié)束條件,則多峰極值搜索結(jié)束。一般來(lái)說(shuō),搜索結(jié)束參數(shù)可以設(shè)置為兩種,一種是多峰極值搜索方法的總體運(yùn)行時(shí)間,即采用一個(gè)計(jì)時(shí)器來(lái)記錄多峰極值搜索方法的總體運(yùn)行時(shí)間,當(dāng)總體運(yùn)行時(shí)間達(dá)到預(yù)設(shè)閾值,則多峰極值搜索結(jié)束;一種是當(dāng)前初始點(diǎn)的值,即如果初始點(diǎn)x0超出預(yù)設(shè)范圍,則多峰極值搜索結(jié)束。用戶(hù)可以根據(jù)實(shí)際系統(tǒng)的情況來(lái)選擇采用哪種搜索結(jié)束條件進(jìn)行判定。
為了說(shuō)明本發(fā)明的可行性和正確性,下面分別通過(guò)理論推導(dǎo)和仿真驗(yàn)證兩種方式來(lái)對(duì)本發(fā)明的技術(shù)方案進(jìn)行分析說(shuō)明。
本發(fā)明在對(duì)每個(gè)初始值進(jìn)行局部峰值搜索時(shí),采用的是梯度法極值搜索算法,該方法對(duì)于一個(gè)給定初始值,能通過(guò)不斷的迭代進(jìn)行自閉環(huán)循環(huán),從而搜索到給定初始點(diǎn)附近的峰值,其證明的具體過(guò)程如下。
對(duì)于任意統(tǒng)函數(shù)為二次方程的系統(tǒng):
其中x*,f*和f″是未知的,任意函數(shù)f(x)在x=x*處有極值,當(dāng)f″≠0時(shí)(3)式為其局部近似方程,不失一般性,假設(shè)f″>0,設(shè)計(jì)一個(gè)算法使x-x*盡可能的小,那么輸出y=f(ω)就會(huì)趨近于極值f*。
定義
為輸入估計(jì)誤差。
根據(jù)圖2所示的基于梯度法的極值搜索方法可知:
上標(biāo)“·”表示一階導(dǎo)數(shù),h>0,b1>0,b2>0,c>0和a>0是設(shè)計(jì)參數(shù),1-b1b2c>0,
將式(4)帶入式(6)并由式(7)和式(8),可得:
由式(4)和式(5)可得:
將式(12)帶入式(3),可得輸出
定義輸出誤差變量φ=h/(s+h)[y]-f*,x(t)=w(σt),σ表示尺度變換參數(shù),可得誤差動(dòng)態(tài)系統(tǒng):
對(duì)于系統(tǒng)(14)使用均值理論,可得其均值系統(tǒng):
由均值系統(tǒng)可得均衡點(diǎn):
與其相應(yīng)的雅可比矩陣:
由h>0,f″>0,k>0,1-b1b2c>0,c>0,b1>0和a>0,可知雅可比矩陣經(jīng)行變換后即為赫爾維茲矩陣,那么均值系統(tǒng)在均衡點(diǎn)
本發(fā)明多峰極值搜索方法通過(guò)比較兩個(gè)相近時(shí)間點(diǎn)輸出值的差值是否小于一閥值來(lái)判斷是否搜索到該初始點(diǎn)附近的極值,若搜索到,則將初始點(diǎn)每次增加h后作為新的初始點(diǎn)。通過(guò)更新初始點(diǎn)的值,即可實(shí)現(xiàn)對(duì)單輸入單輸出系統(tǒng)的多峰極值搜索。
為了證明本發(fā)明的技術(shù)效果,采用一個(gè)具體的系統(tǒng)進(jìn)行了仿真驗(yàn)證。所采用系統(tǒng)的系統(tǒng)函數(shù)如下:
圖3是本實(shí)施例中系統(tǒng)函數(shù)的曲線(xiàn)圖。如圖3所示,本實(shí)施例中系統(tǒng)函數(shù)是一個(gè)周期函數(shù),有無(wú)窮多個(gè)峰值。本實(shí)施例中僅對(duì)其中幾個(gè)峰值進(jìn)行仿真驗(yàn)證。
首先采用本發(fā)明方法對(duì)該系統(tǒng)的進(jìn)行峰值搜索,然后利用梯度法極值搜索算法進(jìn)行局部單峰的搜索以作為對(duì)比,由于梯度法極值搜索算法每次只能搜索到一個(gè)峰值,因此采用本發(fā)明方法的輸入初始值進(jìn)行多次搜索。
在采用本發(fā)明方法對(duì)該系統(tǒng)進(jìn)行峰值搜索時(shí),各參數(shù)設(shè)置如下:初始值x0=3,初始值更新步長(zhǎng)h=1,搜索時(shí)間參數(shù)t=20,m=1,延長(zhǎng)時(shí)間參數(shù)τ=4,局部極值的判斷閾值ε=0.1,搜索結(jié)束條件采用搜索的總體運(yùn)行時(shí)間t總=50。為了更好地進(jìn)行對(duì)比,本次仿真驗(yàn)證中對(duì)波峰和波谷分別進(jìn)行搜索,即波峰判斷局部極值點(diǎn)的條件為0≤yt+m-yt<ε和0≤yτ+m-yτ<ε,波谷判斷局部極值點(diǎn)的條件為0≤yt-yt+m<ε和0≤yτ-yτ+m<ε。
圖4是本實(shí)施例中采用本發(fā)明多峰極值搜索方法得到的波峰值與時(shí)間的變化圖。圖5是圖4中對(duì)應(yīng)極值點(diǎn)與時(shí)間的變化圖。如圖4和圖5所示,可知共搜索到了3個(gè)不同的波峰值,對(duì)應(yīng)的初始點(diǎn)分別為3、4和5,當(dāng)初始點(diǎn)x0=3時(shí)y0=3.596,當(dāng)x0=4時(shí)y1=6.170,當(dāng)x0=5時(shí)y2=14.476。將圖3和圖4中搜索到的波峰值和對(duì)應(yīng)極值點(diǎn)與圖3相比較,可以看出是相吻合的。
分別設(shè)置初始值x0為3、4、5采用梯度法極值搜索算法進(jìn)行單峰搜索。圖6是輸入初始點(diǎn)為3時(shí)梯度法極值搜索算法的波峰值與時(shí)間的變化圖。圖7是輸入初始點(diǎn)為4時(shí)梯度法極值搜索算法的波峰值與時(shí)間的變化圖。圖8是輸入初始點(diǎn)為5時(shí)梯度法極值搜索算法的波峰值與時(shí)間的變化圖。如圖6至圖8所示,對(duì)于梯度法極值搜索算法,當(dāng)給定的初始值x0=3時(shí)y=3.608,當(dāng)給定的初始值x0=4時(shí)y=6.175,當(dāng)給定的初始值x0=5時(shí)y=6.157,將這三幅圖的搜索結(jié)果與圖4的搜索結(jié)果進(jìn)行對(duì)比可知,前兩幅圖誤差均小于0.1,而第三幅圖相差較大,這是由于在多峰極值搜索中因?yàn)椴粩嗟乃阉魇箶_動(dòng)量有所積累,所以搜索到了x0=5右邊的峰值,而梯度法極值搜索算法中擾動(dòng)量每次都是從0開(kāi)始的,搜索到x0=5左邊的峰值。再對(duì)x0=6進(jìn)行搜索。圖9是輸入初始點(diǎn)為6時(shí)梯度法極值搜索算法的波峰值與時(shí)間的變化圖。由圖9可知,當(dāng)給定的初始值x0=6時(shí)y=14.480,與圖3中x0=5搜索到的峰值誤差小于0.1,由此可以說(shuō)明在搜索不同初始點(diǎn)附近的峰值方面我們方法的正確性。
圖10是本實(shí)施例中采用本發(fā)明多峰極值搜索方法得到的波谷值與時(shí)間的變化圖。圖11是圖10中對(duì)應(yīng)極值點(diǎn)與時(shí)間的變化圖。如圖10和圖11所示,可知共搜索到了3個(gè)不同的波谷值,對(duì)應(yīng)的初始點(diǎn)分別為3、4和5,當(dāng)初始點(diǎn)x0=3時(shí)y0=-2.623,當(dāng)x0=4時(shí)y1=-3.588,當(dāng)x0=5時(shí)y2=-12.841。將圖10和圖11中搜索到的波谷值和對(duì)應(yīng)極值點(diǎn)與圖3相比較,可以看出是相吻合的。
同樣地,分別設(shè)置初始點(diǎn)x0為3、4、5采用梯度法極值搜索算法對(duì)波谷值進(jìn)行單峰搜索。圖12是初始點(diǎn)為3時(shí)梯度法極值搜索算法的波谷值與時(shí)間的變化圖。圖13是初始點(diǎn)為4時(shí)梯度法極值搜索算法的波谷值與時(shí)間的變化圖。圖14是初始點(diǎn)為5時(shí)梯度法極值搜索算法的波谷值與時(shí)間的變化圖。如圖12至圖14所示,對(duì)于梯度法極值搜索算法,當(dāng)給定的初始點(diǎn)x0=3時(shí)y=-2.635,當(dāng)給定的初始點(diǎn)x0=4時(shí)y=-3.582,當(dāng)給定的初始點(diǎn)x0=5時(shí)y=-12.862,將這三幅圖的搜索結(jié)果與圖10的搜索結(jié)果進(jìn)行對(duì)比可知,誤差均小于0.1,由此可以說(shuō)明在搜索波谷方面本發(fā)明方法也是正確的。
綜上所述,可知本文所提算法能夠準(zhǔn)確穩(wěn)定的搜索到多峰函數(shù)的峰值,對(duì)于波峰和波谷的搜索都適用。
盡管上面對(duì)本發(fā)明說(shuō)明性的具體實(shí)施方式進(jìn)行了描述,以便于本技術(shù)領(lǐng)域的技術(shù)人員理解本發(fā)明,但應(yīng)該清楚,本發(fā)明不限于具體實(shí)施方式的范圍,對(duì)本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)講,只要各種變化在所附的權(quán)利要求限定和確定的本發(fā)明的精神和范圍內(nèi),這些變化是顯而易見(jiàn)的,一切利用本發(fā)明構(gòu)思的發(fā)明創(chuàng)造均在保護(hù)之列。