王鵬程,李鐸
(上海理工大學(xué) 機(jī)械工程學(xué)院,上海 200093)
很多優(yōu)秀的算法最初都是源自于學(xué)者們對(duì)大自然的觀察與思考,目前已經(jīng)有很多學(xué)者根據(jù)大自然中眾多生物的習(xí)性特征提出了各種優(yōu)秀的優(yōu)化算法,其中比較出名的群智能算法有: 粒子群優(yōu)化、蟻群優(yōu)化、布谷鳥(niǎo)搜索和蝙蝠算法等。每種算法都有使用的工作領(lǐng)域,并在不同的領(lǐng)域內(nèi)展示出了非常好的使用效果。由英國(guó)學(xué)者X-S.Yang所提出的蝙蝠算法是一種仿生模擬蝙蝠獵食行為的搜索算法[1]。標(biāo)準(zhǔn)蝙蝠算法(BA)是用初始化后的種群數(shù)據(jù)模擬自然界中的蝙蝠個(gè)體,把搜索整個(gè)種群最終得到最優(yōu)數(shù)據(jù)的過(guò)程模擬成蝙蝠個(gè)體捕食時(shí)進(jìn)行的搜索和移動(dòng)過(guò)程[2],把求解問(wèn)題的目標(biāo)函數(shù)的適應(yīng)度值度量成蝙蝠個(gè)體所處位置的優(yōu)劣。
實(shí)際工程問(wèn)題的優(yōu)化求解通常具有多種復(fù)雜的約束條件,解決此類(lèi)復(fù)雜問(wèn)題需要高效的優(yōu)化算法[3],但傳統(tǒng)的標(biāo)準(zhǔn)蝙蝠算法在迭代過(guò)程中,常常會(huì)因?yàn)檫^(guò)早收斂而陷入局部最優(yōu)解后停滯更新,導(dǎo)致無(wú)法得到全局最優(yōu)解。因此,從蝙蝠算法提出至今,主要應(yīng)用于求解函數(shù)優(yōu)化問(wèn)題,很少對(duì)實(shí)際工程中的復(fù)雜模型參數(shù)進(jìn)行優(yōu)化。盛孟龍[4]等人針對(duì)蝙蝠算法處理高維復(fù)雜問(wèn)題易陷入局部最優(yōu)解的情況,引入了交叉變化來(lái)更新蝙蝠群體的位置,提出了一種改進(jìn)的自適應(yīng)變異蝙蝠算法;呂石磊、黃永霖[5]等人在基本蝙蝠算法中加入了自適應(yīng)步長(zhǎng)控制機(jī)制和變異機(jī)制,有效解決了基本蝙蝠算法易陷入局部最優(yōu)解的問(wèn)題;Z.Chen[6]將基本蝙蝠算法的速度因子去除,同時(shí)利用正態(tài)分布來(lái)控制位置的變化,有效避免了基本蝙蝠算法易陷入局部最優(yōu)解的情況。基于以上研究基礎(chǔ),本文提出了一種適用于求解高維復(fù)雜模型的新型混合蝙蝠算法。
為了改善BA算法對(duì)高維復(fù)雜模型的求解優(yōu)化問(wèn)題,筆者通過(guò)引入小生境思想對(duì)BA算法按照初始化種群后的區(qū)間進(jìn)行分段,并融合了粒子群算法中的速度和位置更新公式,最后根據(jù)區(qū)間的分段采用主機(jī)和分機(jī)共同求解優(yōu)化模型的分布式方法,構(gòu)成了本文提出的混合蝙蝠算法(HBA)。實(shí)驗(yàn)結(jié)果表明: 本文提出的HBA算法可以顯著提高BA算法的性能,使求解速度更快、精度更高,該算法對(duì)求解高維函數(shù)和優(yōu)化復(fù)雜模型參數(shù)非常有用。
蝙蝠算法是一種模擬自然界中的蝙蝠利用超聲波探測(cè)獵物、避免障礙物的隨機(jī)搜索算法。其基本工作原理[7]是: 模擬蝙蝠捕捉獵物時(shí)進(jìn)行探測(cè)、定位最終達(dá)到捕獲成功的一系列過(guò)程和優(yōu)化目標(biāo)功能相聯(lián)系,達(dá)到對(duì)目標(biāo)函數(shù)進(jìn)行初始化、優(yōu)化、最終獲得最優(yōu)值的效果。BA算法將搜索和優(yōu)化過(guò)程模擬成蝙蝠個(gè)體搜尋獵物和移動(dòng)過(guò)程,以求解模型的適應(yīng)度函數(shù)值來(lái)衡量蝙蝠所處位置的優(yōu)劣,將個(gè)體的優(yōu)勝劣汰過(guò)程類(lèi)比為優(yōu)化和搜索過(guò)程中用好的可行解替代較差可行解的迭代過(guò)程。
每只蝙蝠利用回聲定位搜尋獵物時(shí)都具有各自獨(dú)立的位置、速度、頻率、脈沖發(fā)射率、音強(qiáng)。在捕獵時(shí),蝙蝠一般會(huì)發(fā)出音強(qiáng)響度約為110 dB的超聲波脈沖,脈沖發(fā)射率為10~20個(gè)/s,在搜尋探索獵物時(shí),較大的音強(qiáng)響度可以使蝙蝠的超聲波傳播更遠(yuǎn)的距離,以便更快地搜索到獵物,當(dāng)鎖定捕獲目標(biāo)后,蝙蝠就會(huì)逐漸降低音強(qiáng)響度增大脈沖發(fā)射率,通常達(dá)到200個(gè)/s,使蝙蝠更加精準(zhǔn)地掌握獵物不斷變化的空間位置,最終捕獲目標(biāo)獵物[8]。
在BA算法中,X-S.Yang做了如下三點(diǎn)假設(shè)[9]:
1)蝙蝠利用回聲定位來(lái)感知距離,每只蝙蝠都有自己的一套方法分辨獵物和障礙物。
2)第i只蝙蝠在位置xi以固定的頻率fi和速度vi隨機(jī)飛行,當(dāng)發(fā)現(xiàn)獵物后蝙蝠根據(jù)其當(dāng)前的位置和獵物的距離動(dòng)態(tài)地調(diào)整自己的脈沖發(fā)射率ri和音強(qiáng)響度Ai來(lái)搜索獵物。
3)在BA算法中,音強(qiáng)響度是從1個(gè)最大值A(chǔ)0變化到固定最小值A(chǔ)min的,變化區(qū)間視具體問(wèn)題而定。
在模擬蝙蝠搜索過(guò)程中,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個(gè)隨機(jī)向量;x*——群體中當(dāng)前最優(yōu)位置。
在局部搜索中,如果1只蝙蝠選擇了1個(gè)最優(yōu)解,那么將在此最優(yōu)解附近隨機(jī)產(chǎn)生1個(gè)新解:
xnew=xold+εAt
(4)
式中:xold——從當(dāng)前最優(yōu)解中選擇的1個(gè)解;xnew——位置更新后得到的新解;At——在t時(shí)刻所有蝙蝠音強(qiáng)響度的平均值;ε——[-1, 1]內(nèi)的1個(gè)隨機(jī)數(shù)。
蝙蝠的音強(qiáng)響度Ai和脈沖發(fā)射率ri通過(guò)式(5)~式(6)進(jìn)行更新:
(5)
(6)
式中:α,γ——常數(shù),并且0<α<1,γ>0。
在BA算法中,最適應(yīng)度值如同蝙蝠的獵物,脈沖頻率的變化在一定程度上可以表示為蝙蝠接近獵物的程度。
通過(guò)分析上述BA算法的機(jī)理可知,蝙蝠種群的初始化優(yōu)劣對(duì)算法的性能具有較大影響。如果蝙蝠種群的初始化群體過(guò)于分散就有可能造成算法在迭代過(guò)程中出現(xiàn)收斂速度慢、甚至不收斂的情況。由于BA算法采用的是隨機(jī)產(chǎn)生初始化種群,所以很容易出現(xiàn)陷入局部極值的情況。本文提出的HBA算法是通過(guò)加入了粒子群優(yōu)化算法中的速度和位置更新公式,并引入小生境思想,按初始化種群的區(qū)間范圍對(duì)蝙蝠種群進(jìn)行分段,求解時(shí)采用分布式多機(jī)共同求解的方式運(yùn)行算法,分機(jī)分別求解對(duì)應(yīng)區(qū)間段上的局部最優(yōu)解,最后把所有局部最優(yōu)解匯總到主機(jī)進(jìn)行全局最優(yōu)解的求解,這樣的求解方式可以大幅提高算法的求解速度,解決了BA算法中收斂速度慢等缺陷。按區(qū)間分段求解示意如圖1所示。
由于BA算法中速度和位置的更新方式比較單一,在算法進(jìn)行到迭代后期時(shí)會(huì)出現(xiàn)種群多樣性丟失的情況,尤其是BA算法在求解高維復(fù)雜模型的最優(yōu)值時(shí)經(jīng)常會(huì)出現(xiàn)陷入局部極值而無(wú)法求解出全局最優(yōu)解,導(dǎo)致BA算法搜索結(jié)果不準(zhǔn)確,常常會(huì)出現(xiàn)較大偏差的問(wèn)題。通過(guò)分析BA算法中的位置和速度更新公式,可以看出在整個(gè)迭代過(guò)程中BA算法看重的是局部最適應(yīng)值,而對(duì)速度和位置的更新都是采用隨機(jī)的方式進(jìn)行迭代更新的,為了克服BA算法中的更新缺陷,本文采用結(jié)合粒子群算法中的速度和位置迭代公式來(lái)保證后期種群的多樣性,對(duì)各個(gè)次優(yōu)解和最優(yōu)解進(jìn)行不同方式的迭代,以避免陷入局部最優(yōu)解。

圖1 按區(qū)間分段求解示意
小生境思想在本文提出的HBA算法中的應(yīng)用及分布式求解過(guò)程介紹: 為了解決BA算法在迭代過(guò)程中容易陷入局部極值而停滯迭代的問(wèn)題,對(duì)蝙蝠種群進(jìn)行初始化后,根據(jù)當(dāng)前計(jì)算機(jī)的分機(jī)數(shù)量定義種群區(qū)間的分段數(shù)量,然后分別讓每臺(tái)分機(jī)求解每一段種群區(qū)間上的局部最優(yōu)解,最后把各分機(jī)求解得到的局部最優(yōu)解返回給主機(jī)記錄,主機(jī)將各分機(jī)返回的局部最優(yōu)解作為初始化種群再一次對(duì)其進(jìn)行求解,得到全局最優(yōu)值。保持該最優(yōu)值的位置,然后在該最優(yōu)位置分別加上和減去0.5個(gè)搜索空間的步長(zhǎng),并保存返回到下次的區(qū)間分配,進(jìn)行下一次的迭代,最終迭代直至搜索完全部區(qū)域,輸出最優(yōu)解。
根據(jù)每次迭代得出的全局最優(yōu)值及其對(duì)應(yīng)的蝙蝠位置對(duì)蝙蝠種群的速度和位置進(jìn)行更新,改進(jìn)后的蝙蝠速度和位置在t時(shí)刻第i次迭代時(shí)的更新如式(7)~(8)所示[10]:

(7)

(8)
式中:groupjbest——分機(jī)求解得到的局部最優(yōu)解;xjbest——局部最優(yōu)解的位置,下標(biāo)j表示分機(jī)號(hào);finbest——主機(jī)求解得到的全局最優(yōu)解;ω——慣性權(quán)重,通常取0.9;c1,c2——學(xué)習(xí)因子,一般取值為2[12]。
由于BA算法中的位置更新公式中的解容易陷入局部最優(yōu)的情況,種群多樣性丟失,為了提高局部搜索能力,對(duì)蝙蝠的位置進(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ì)算個(gè)體適應(yīng)度和總?cè)旱钠骄m應(yīng)度,記錄最優(yōu)個(gè)體及其位置,按照種群區(qū)間將種群分組,并根據(jù)式(1),式(4),式(5),式(7),式(8)對(duì)蝙蝠的位置和速度進(jìn)行更新。
3)對(duì)所有蝙蝠的適應(yīng)度值進(jìn)行排序,找出當(dāng)前的最優(yōu)解和最優(yōu)值,并重復(fù)執(zhí)行步驟2),直至得到滿足算法結(jié)束條件,輸出最優(yōu)解。
為了研究自動(dòng)化攪拌機(jī)工作特性,自主設(shè)計(jì)了1臺(tái)自動(dòng)化攪拌試驗(yàn)臺(tái),該自動(dòng)化攪拌裝置主要是由1臺(tái)小型高精度直線電機(jī)和1臺(tái)小功率高精度的旋轉(zhuǎn)電機(jī)組建而成,該裝置的主要功能是通過(guò)調(diào)節(jié)直線電機(jī)的運(yùn)動(dòng)方式與旋轉(zhuǎn)電機(jī)的轉(zhuǎn)動(dòng)方式達(dá)到模擬各種定制化需求的攪拌器的效果,從而可達(dá)到對(duì)攪拌效果進(jìn)行分析和預(yù)測(cè)的效果。
實(shí)驗(yàn)臺(tái)上方是直線電機(jī)動(dòng)子,可根據(jù)定制化需求做各種不同要求的直線運(yùn)動(dòng)(如: 勻速直線運(yùn)動(dòng)、勻加速直線運(yùn)動(dòng)、變加速直線運(yùn)動(dòng)、正弦/余弦函數(shù)運(yùn)動(dòng)等);下方的旋轉(zhuǎn)電機(jī)也可根據(jù)定制化需求做各種不同要求的旋轉(zhuǎn)運(yùn)動(dòng)(如: 勻速旋轉(zhuǎn)、勻加速旋轉(zhuǎn)、正反向換向旋轉(zhuǎn)、正弦/余弦函數(shù)旋轉(zhuǎn)等)。介于直線電機(jī)動(dòng)子和連接桿之間的力傳感器用于實(shí)時(shí)檢測(cè)連桿的受力情況,防止直線電機(jī)動(dòng)子加速度過(guò)大產(chǎn)生的導(dǎo)致連桿受到過(guò)載扭矩產(chǎn)生的連桿變形。
由上述介紹可知,由于該試驗(yàn)臺(tái)裝置需要滿足各種定制化需求的復(fù)雜運(yùn)動(dòng),因此試驗(yàn)臺(tái)中用于連接直線電機(jī)和旋轉(zhuǎn)電機(jī)的4根連接桿受力過(guò)大時(shí)容易受損變形。試驗(yàn)結(jié)果表明,該自動(dòng)化攪拌試驗(yàn)臺(tái)最重要的1個(gè)參數(shù)是直線電機(jī)的加速度a,如果直線電機(jī)的加速度a設(shè)置過(guò)小,由于受電機(jī)導(dǎo)軌長(zhǎng)度的限制,無(wú)法達(dá)到期望的直線電機(jī)的運(yùn)動(dòng)速度;如果直線電機(jī)的加速度a設(shè)置過(guò)大,輕則會(huì)造成直線電機(jī)定位出現(xiàn)誤差,試驗(yàn)臺(tái)出現(xiàn)劇烈抖動(dòng),無(wú)法保證試驗(yàn)數(shù)據(jù)的準(zhǔn)確性;重則甚至直接造成試驗(yàn)臺(tái)連接桿彎曲變形,導(dǎo)致整個(gè)試驗(yàn)臺(tái)數(shù)據(jù)失真。
考慮到該試驗(yàn)臺(tái)裝置后期需要滿足多種復(fù)雜的運(yùn)動(dòng)狀態(tài),本文通過(guò)設(shè)定直線電機(jī)的運(yùn)動(dòng)速度v按照正弦函數(shù)y=sinx圖形進(jìn)行變化,旋轉(zhuǎn)電機(jī)的旋轉(zhuǎn)速度按照余弦函數(shù)y=cosx圖形進(jìn)行變化。本文分別采用了BA算法和HBA算法對(duì)直線電機(jī)加速度參數(shù)進(jìn)行優(yōu)化,并對(duì)兩者進(jìn)行了對(duì)比和分析。BA和HBA算法測(cè)試對(duì)比見(jiàn)表1所列。

表1 BA和HBA算法測(cè)試對(duì)比
表1分別統(tǒng)計(jì)了經(jīng)BA算法和HBA算法對(duì)直線電機(jī)加速度參數(shù)進(jìn)行優(yōu)化后的正確率和用時(shí),通過(guò)5次的試驗(yàn)數(shù)據(jù)對(duì)比可以看到,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)化效率,對(duì)復(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)動(dòng)模型后得到的直線電機(jī)速度曲線如圖3所示,可清晰地看出采用HBA算法優(yōu)化得到的直線電機(jī)速度變化曲線與理論速度變化曲線可以很好地吻合,而由BA算法優(yōu)化過(guò)后的直線電機(jī)運(yùn)動(dòng)速度與理論狀態(tài)的速度有較大偏差。此外,在優(yōu)化時(shí)間上,由于本試驗(yàn)采用1臺(tái)主機(jī)、3臺(tái)分機(jī)對(duì)模型參數(shù)進(jìn)行優(yōu)化,采用混合蝙蝠算法能節(jié)約大量的優(yōu)化時(shí)間。

圖3 優(yōu)化后直線電機(jī)速度變化示意
本文通過(guò)引入小生境思想提出了一種對(duì)初始化后的種群按照區(qū)間進(jìn)行分段的方法來(lái)對(duì)BA算法進(jìn)行改進(jìn),同時(shí)為了克服BA算法中數(shù)據(jù)收斂過(guò)快,易陷入局部極值等缺陷,本文在標(biāo)準(zhǔn)蝙蝠算法基礎(chǔ)公式的基礎(chǔ)上引入了粒子群算法中的速度和位置更新公式,對(duì)BA算法中的速度和位置更新進(jìn)行了補(bǔ)充,使本文提出的HBA算法速度和位置更新更加具有多樣性。試驗(yàn)結(jié)果表明,本文提出的HBA算法能夠得到更加準(zhǔn)確的優(yōu)化值,同時(shí)大幅縮短了優(yōu)化時(shí)間,對(duì)現(xiàn)代工程優(yōu)化領(lǐng)域具有重要的參考價(jià)值。