王鵬程,李鐸
(上海理工大學(xué) 機(jī)械工程學(xué)院,上海 200093)
很多優(yōu)秀的算法最初都是源自于學(xué)者們對大自然的觀察與思考,目前已經(jīng)有很多學(xué)者根據(jù)大自然中眾多生物的習(xí)性特征提出了各種優(yōu)秀的優(yōu)化算法,其中比較出名的群智能算法有: 粒子群優(yōu)化、蟻群優(yōu)化、布谷鳥搜索和蝙蝠算法等。每種算法都有使用的工作領(lǐng)域,并在不同的領(lǐng)域內(nèi)展示出了非常好的使用效果。由英國學(xué)者X-S.Yang所提出的蝙蝠算法是一種仿生模擬蝙蝠獵食行為的搜索算法[1]。標(biāo)準(zhǔn)蝙蝠算法(BA)是用初始化后的種群數(shù)據(jù)模擬自然界中的蝙蝠個體,把搜索整個種群最終得到最優(yōu)數(shù)據(jù)的過程模擬成蝙蝠個體捕食時(shí)進(jìn)行的搜索和移動過程[2],把求解問題的目標(biāo)函數(shù)的適應(yīng)度值度量成蝙蝠個體所處位置的優(yōu)劣。
實(shí)際工程問題的優(yōu)化求解通常具有多種復(fù)雜的約束條件,解決此類復(fù)雜問題需要高效的優(yōu)化算法[3],但傳統(tǒng)的標(biāo)準(zhǔn)蝙蝠算法在迭代過程中,常常會因?yàn)檫^早收斂而陷入局部最優(yōu)解后停滯更新,導(dǎo)致無法得到全局最優(yōu)解。因此,從蝙蝠算法提出至今,主要應(yīng)用于求解函數(shù)優(yōu)化問題,很少對實(shí)際工程中的復(fù)雜模型參數(shù)進(jìn)行優(yōu)化。盛孟龍[4]等人針對蝙蝠算法處理高維復(fù)雜問題易陷入局部最優(yōu)解的情況,引入了交叉變化來更新蝙蝠群體的位置,提出了一種改進(jìn)的自適應(yīng)變異蝙蝠算法;呂石磊、黃永霖[5]等人在基本蝙蝠算法中加入了自適應(yīng)步長控制機(jī)制和變異機(jī)制,有效解決了基本蝙蝠算法易陷入局部最優(yōu)解的問題;Z.Chen[6]將基本蝙蝠算法的速度因子去除,同時(shí)利用正態(tài)分布來控制位置的變化,有效避免了基本蝙蝠算法易陷入局部最優(yōu)解的情況?;谝陨涎芯炕A(chǔ),本文提出了一種適用于求解高維復(fù)雜模型的新型混合蝙蝠算法。
為了改善BA算法對高維復(fù)雜模型的求解優(yōu)化問題,筆者通過引入小生境思想對BA算法按照初始化種群后的區(qū)間進(jìn)行分段,并融合了粒子群算法中的速度和位置更新公式,最后根據(jù)區(qū)間的分段采用主機(jī)和分機(jī)共同求解優(yōu)化模型的分布式方法,構(gòu)成了本文提出的混合蝙蝠算法(HBA)。實(shí)驗(yàn)結(jié)果表明: 本文提出的HBA算法可以顯著提高BA算法的性能,使求解速度更快、精度更高,該算法對求解高維函數(shù)和優(yōu)化復(fù)雜模型參數(shù)非常有用。
蝙蝠算法是一種模擬自然界中的蝙蝠利用超聲波探測獵物、避免障礙物的隨機(jī)搜索算法。其基本工作原理[7]是: 模擬蝙蝠捕捉獵物時(shí)進(jìn)行探測、定位最終達(dá)到捕獲成功的一系列過程和優(yōu)化目標(biāo)功能相聯(lián)系,達(dá)到對目標(biāo)函數(shù)進(jìn)行初始化、優(yōu)化、最終獲得最優(yōu)值的效果。BA算法將搜索和優(yōu)化過程模擬成蝙蝠個體搜尋獵物和移動過程,以求解模型的適應(yīng)度函數(shù)值來衡量蝙蝠所處位置的優(yōu)劣,將個體的優(yōu)勝劣汰過程類比為優(yōu)化和搜索過程中用好的可行解替代較差可行解的迭代過程。
每只蝙蝠利用回聲定位搜尋獵物時(shí)都具有各自獨(dú)立的位置、速度、頻率、脈沖發(fā)射率、音強(qiáng)。在捕獵時(shí),蝙蝠一般會發(fā)出音強(qiáng)響度約為110 dB的超聲波脈沖,脈沖發(fā)射率為10~20個/s,在搜尋探索獵物時(shí),較大的音強(qiáng)響度可以使蝙蝠的超聲波傳播更遠(yuǎn)的距離,以便更快地搜索到獵物,當(dāng)鎖定捕獲目標(biāo)后,蝙蝠就會逐漸降低音強(qiáng)響度增大脈沖發(fā)射率,通常達(dá)到200個/s,使蝙蝠更加精準(zhǔn)地掌握獵物不斷變化的空間位置,最終捕獲目標(biāo)獵物[8]。
在BA算法中,X-S.Yang做了如下三點(diǎn)假設(shè)[9]:
1)蝙蝠利用回聲定位來感知距離,每只蝙蝠都有自己的一套方法分辨獵物和障礙物。
2)第i只蝙蝠在位置xi以固定的頻率fi和速度vi隨機(jī)飛行,當(dāng)發(fā)現(xiàn)獵物后蝙蝠根據(jù)其當(dāng)前的位置和獵物的距離動態(tài)地調(diào)整自己的脈沖發(fā)射率ri和音強(qiáng)響度Ai來搜索獵物。
3)在BA算法中,音強(qiáng)響度是從1個最大值A(chǔ)0變化到固定最小值A(chǔ)min的,變化區(qū)間視具體問題而定。
在模擬蝙蝠搜索過程中,t時(shí)刻蝙蝠i的頻率、速度和位置更新如式(1)~式(3)所示:
fi=fmin+(fmax-fmin)β
(1)
(2)
(3)
式中:fmax,fmin——頻率的最大值和最小值;fi——第i只蝙蝠在當(dāng)前時(shí)刻的頻率,調(diào)整區(qū)間為[fmin,fmax];β——在[0, 1]區(qū)間的1個隨機(jī)向量;x*——群體中當(dāng)前最優(yōu)位置。
在局部搜索中,如果1只蝙蝠選擇了1個最優(yōu)解,那么將在此最優(yōu)解附近隨機(jī)產(chǎn)生1個新解:
xnew=xold+εAt
(4)
式中:xold——從當(dāng)前最優(yōu)解中選擇的1個解;xnew——位置更新后得到的新解;At——在t時(shí)刻所有蝙蝠音強(qiáng)響度的平均值;ε——[-1, 1]內(nèi)的1個隨機(jī)數(shù)。
蝙蝠的音強(qiáng)響度Ai和脈沖發(fā)射率ri通過式(5)~式(6)進(jìn)行更新:
(5)
(6)
式中:α,γ——常數(shù),并且0<α<1,γ>0。
在BA算法中,最適應(yīng)度值如同蝙蝠的獵物,脈沖頻率的變化在一定程度上可以表示為蝙蝠接近獵物的程度。
通過分析上述BA算法的機(jī)理可知,蝙蝠種群的初始化優(yōu)劣對算法的性能具有較大影響。如果蝙蝠種群的初始化群體過于分散就有可能造成算法在迭代過程中出現(xiàn)收斂速度慢、甚至不收斂的情況。由于BA算法采用的是隨機(jī)產(chǎn)生初始化種群,所以很容易出現(xiàn)陷入局部極值的情況。本文提出的HBA算法是通過加入了粒子群優(yōu)化算法中的速度和位置更新公式,并引入小生境思想,按初始化種群的區(qū)間范圍對蝙蝠種群進(jìn)行分段,求解時(shí)采用分布式多機(jī)共同求解的方式運(yùn)行算法,分機(jī)分別求解對應(yīng)區(qū)間段上的局部最優(yōu)解,最后把所有局部最優(yōu)解匯總到主機(jī)進(jìn)行全局最優(yōu)解的求解,這樣的求解方式可以大幅提高算法的求解速度,解決了BA算法中收斂速度慢等缺陷。按區(qū)間分段求解示意如圖1所示。
由于BA算法中速度和位置的更新方式比較單一,在算法進(jìn)行到迭代后期時(shí)會出現(xiàn)種群多樣性丟失的情況,尤其是BA算法在求解高維復(fù)雜模型的最優(yōu)值時(shí)經(jīng)常會出現(xiàn)陷入局部極值而無法求解出全局最優(yōu)解,導(dǎo)致BA算法搜索結(jié)果不準(zhǔn)確,常常會出現(xiàn)較大偏差的問題。通過分析BA算法中的位置和速度更新公式,可以看出在整個迭代過程中BA算法看重的是局部最適應(yīng)值,而對速度和位置的更新都是采用隨機(jī)的方式進(jìn)行迭代更新的,為了克服BA算法中的更新缺陷,本文采用結(jié)合粒子群算法中的速度和位置迭代公式來保證后期種群的多樣性,對各個次優(yōu)解和最優(yōu)解進(jìn)行不同方式的迭代,以避免陷入局部最優(yōu)解。
圖1 按區(qū)間分段求解示意
小生境思想在本文提出的HBA算法中的應(yīng)用及分布式求解過程介紹: 為了解決BA算法在迭代過程中容易陷入局部極值而停滯迭代的問題,對蝙蝠種群進(jìn)行初始化后,根據(jù)當(dāng)前計(jì)算機(jī)的分機(jī)數(shù)量定義種群區(qū)間的分段數(shù)量,然后分別讓每臺分機(jī)求解每一段種群區(qū)間上的局部最優(yōu)解,最后把各分機(jī)求解得到的局部最優(yōu)解返回給主機(jī)記錄,主機(jī)將各分機(jī)返回的局部最優(yōu)解作為初始化種群再一次對其進(jìn)行求解,得到全局最優(yōu)值。保持該最優(yōu)值的位置,然后在該最優(yōu)位置分別加上和減去0.5個搜索空間的步長,并保存返回到下次的區(qū)間分配,進(jìn)行下一次的迭代,最終迭代直至搜索完全部區(qū)域,輸出最優(yōu)解。
根據(jù)每次迭代得出的全局最優(yōu)值及其對應(yīng)的蝙蝠位置對蝙蝠種群的速度和位置進(jìn)行更新,改進(jìn)后的蝙蝠速度和位置在t時(shí)刻第i次迭代時(shí)的更新如式(7)~(8)所示[10]:
(7)
(8)
式中:groupjbest——分機(jī)求解得到的局部最優(yōu)解;xjbest——局部最優(yōu)解的位置,下標(biāo)j表示分機(jī)號;finbest——主機(jī)求解得到的全局最優(yōu)解;ω——慣性權(quán)重,通常取0.9;c1,c2——學(xué)習(xí)因子,一般取值為2[12]。
由于BA算法中的位置更新公式中的解容易陷入局部最優(yōu)的情況,種群多樣性丟失,為了提高局部搜索能力,對蝙蝠的位置進(jìn)行更新,i為現(xiàn)迭代次數(shù),如式(9)所示:
xnew=μx*+vi
(9)
式中:μ——與最優(yōu)蝙蝠位置的比重,取值范圍為0.5~1.0。
本文提出的HBA算法運(yùn)行步驟如下:
1)參數(shù)初始化: 種群規(guī)模P,目標(biāo)函數(shù)f(x),最大音強(qiáng)響度A0,最大脈沖發(fā)射率r0,最大頻率fmax和最小頻率fmin,音強(qiáng)的衰減系數(shù)α,頻率的增強(qiáng)系數(shù)γ,最大迭代次數(shù)n等。
2)隨機(jī)產(chǎn)生初始蝙蝠種群,計(jì)算個體適應(yīng)度和總?cè)旱钠骄m應(yīng)度,記錄最優(yōu)個體及其位置,按照種群區(qū)間將種群分組,并根據(jù)式(1),式(4),式(5),式(7),式(8)對蝙蝠的位置和速度進(jìn)行更新。
3)對所有蝙蝠的適應(yīng)度值進(jìn)行排序,找出當(dāng)前的最優(yōu)解和最優(yōu)值,并重復(fù)執(zhí)行步驟2),直至得到滿足算法結(jié)束條件,輸出最優(yōu)解。
為了研究自動化攪拌機(jī)工作特性,自主設(shè)計(jì)了1臺自動化攪拌試驗(yàn)臺,該自動化攪拌裝置主要是由1臺小型高精度直線電機(jī)和1臺小功率高精度的旋轉(zhuǎn)電機(jī)組建而成,該裝置的主要功能是通過調(diào)節(jié)直線電機(jī)的運(yùn)動方式與旋轉(zhuǎn)電機(jī)的轉(zhuǎn)動方式達(dá)到模擬各種定制化需求的攪拌器的效果,從而可達(dá)到對攪拌效果進(jìn)行分析和預(yù)測的效果。
實(shí)驗(yàn)臺上方是直線電機(jī)動子,可根據(jù)定制化需求做各種不同要求的直線運(yùn)動(如: 勻速直線運(yùn)動、勻加速直線運(yùn)動、變加速直線運(yùn)動、正弦/余弦函數(shù)運(yùn)動等);下方的旋轉(zhuǎn)電機(jī)也可根據(jù)定制化需求做各種不同要求的旋轉(zhuǎn)運(yùn)動(如: 勻速旋轉(zhuǎn)、勻加速旋轉(zhuǎn)、正反向換向旋轉(zhuǎn)、正弦/余弦函數(shù)旋轉(zhuǎn)等)。介于直線電機(jī)動子和連接桿之間的力傳感器用于實(shí)時(shí)檢測連桿的受力情況,防止直線電機(jī)動子加速度過大產(chǎn)生的導(dǎo)致連桿受到過載扭矩產(chǎn)生的連桿變形。
由上述介紹可知,由于該試驗(yàn)臺裝置需要滿足各種定制化需求的復(fù)雜運(yùn)動,因此試驗(yàn)臺中用于連接直線電機(jī)和旋轉(zhuǎn)電機(jī)的4根連接桿受力過大時(shí)容易受損變形。試驗(yàn)結(jié)果表明,該自動化攪拌試驗(yàn)臺最重要的1個參數(shù)是直線電機(jī)的加速度a,如果直線電機(jī)的加速度a設(shè)置過小,由于受電機(jī)導(dǎo)軌長度的限制,無法達(dá)到期望的直線電機(jī)的運(yùn)動速度;如果直線電機(jī)的加速度a設(shè)置過大,輕則會造成直線電機(jī)定位出現(xiàn)誤差,試驗(yàn)臺出現(xiàn)劇烈抖動,無法保證試驗(yàn)數(shù)據(jù)的準(zhǔn)確性;重則甚至直接造成試驗(yàn)臺連接桿彎曲變形,導(dǎo)致整個試驗(yàn)臺數(shù)據(jù)失真。
考慮到該試驗(yàn)臺裝置后期需要滿足多種復(fù)雜的運(yùn)動狀態(tài),本文通過設(shè)定直線電機(jī)的運(yùn)動速度v按照正弦函數(shù)y=sinx圖形進(jìn)行變化,旋轉(zhuǎn)電機(jī)的旋轉(zhuǎn)速度按照余弦函數(shù)y=cosx圖形進(jìn)行變化。本文分別采用了BA算法和HBA算法對直線電機(jī)加速度參數(shù)進(jìn)行優(yōu)化,并對兩者進(jìn)行了對比和分析。BA和HBA算法測試對比見表1所列。
表1 BA和HBA算法測試對比
表1分別統(tǒng)計(jì)了經(jīng)BA算法和HBA算法對直線電機(jī)加速度參數(shù)進(jìn)行優(yōu)化后的正確率和用時(shí),通過5次的試驗(yàn)數(shù)據(jù)對比可以看到,BA算法的正確率低于本文改進(jìn)后的HBA算法,采用HBA算法進(jìn)行優(yōu)化時(shí),正確率都在95%以上,最高可達(dá)98%,幾乎可以滿足一般實(shí)際工程標(biāo)準(zhǔn);另外在用時(shí)上,由于HBA算法采用了多機(jī)共同進(jìn)行處理的方式,優(yōu)化時(shí)間只用了傳統(tǒng)的單機(jī)標(biāo)準(zhǔn)蝙蝠算法的25%,大幅提高了優(yōu)化效率,對復(fù)雜多維模型的優(yōu)化有重要的借鑒意義。BA和HBA優(yōu)化求解比較如圖2所示。
圖2 BA和HBA優(yōu)化求解比較示意
如圖2所示,多組試驗(yàn)數(shù)據(jù)表明,采用BA算法優(yōu)化直線電機(jī)加速度a時(shí),當(dāng)?shù)降?32次時(shí)才逐漸停止了迭代更新,得到的最佳加速度值為4.86 m/s2;而采用HAB算法時(shí)只迭代了86次就找到了最優(yōu)加速度值,為1.18 m/s2。將以上a值代入直線電機(jī)的運(yùn)動模型后得到的直線電機(jī)速度曲線如圖3所示,可清晰地看出采用HBA算法優(yōu)化得到的直線電機(jī)速度變化曲線與理論速度變化曲線可以很好地吻合,而由BA算法優(yōu)化過后的直線電機(jī)運(yùn)動速度與理論狀態(tài)的速度有較大偏差。此外,在優(yōu)化時(shí)間上,由于本試驗(yàn)采用1臺主機(jī)、3臺分機(jī)對模型參數(shù)進(jìn)行優(yōu)化,采用混合蝙蝠算法能節(jié)約大量的優(yōu)化時(shí)間。
圖3 優(yōu)化后直線電機(jī)速度變化示意
本文通過引入小生境思想提出了一種對初始化后的種群按照區(qū)間進(jìn)行分段的方法來對BA算法進(jìn)行改進(jìn),同時(shí)為了克服BA算法中數(shù)據(jù)收斂過快,易陷入局部極值等缺陷,本文在標(biāo)準(zhǔn)蝙蝠算法基礎(chǔ)公式的基礎(chǔ)上引入了粒子群算法中的速度和位置更新公式,對BA算法中的速度和位置更新進(jìn)行了補(bǔ)充,使本文提出的HBA算法速度和位置更新更加具有多樣性。試驗(yàn)結(jié)果表明,本文提出的HBA算法能夠得到更加準(zhǔn)確的優(yōu)化值,同時(shí)大幅縮短了優(yōu)化時(shí)間,對現(xiàn)代工程優(yōu)化領(lǐng)域具有重要的參考價(jià)值。