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

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

(7)

(8)
式中:groupjbest——分機求解得到的局部最優解;xjbest——局部最優解的位置,下標j表示分機號;finbest——主機求解得到的全局最優解;ω——慣性權重,通常取0.9;c1,c2——學習因子,一般取值為2[12]。
由于BA算法中的位置更新公式中的解容易陷入局部最優的情況,種群多樣性丟失,為了提高局部搜索能力,對蝙蝠的位置進行更新,i為現迭代次數,如式(9)所示:
xnew=μx*+vi
(9)
式中:μ——與最優蝙蝠位置的比重,取值范圍為0.5~1.0。
本文提出的HBA算法運行步驟如下:
1)參數初始化: 種群規模P,目標函數f(x),最大音強響度A0,最大脈沖發射率r0,最大頻率fmax和最小頻率fmin,音強的衰減系數α,頻率的增強系數γ,最大迭代次數n等。
2)隨機產生初始蝙蝠種群,計算個體適應度和總群的平均適應度,記錄最優個體及其位置,按照種群區間將種群分組,并根據式(1),式(4),式(5),式(7),式(8)對蝙蝠的位置和速度進行更新。
3)對所有蝙蝠的適應度值進行排序,找出當前的最優解和最優值,并重復執行步驟2),直至得到滿足算法結束條件,輸出最優解。
為了研究自動化攪拌機工作特性,自主設計了1臺自動化攪拌試驗臺,該自動化攪拌裝置主要是由1臺小型高精度直線電機和1臺小功率高精度的旋轉電機組建而成,該裝置的主要功能是通過調節直線電機的運動方式與旋轉電機的轉動方式達到模擬各種定制化需求的攪拌器的效果,從而可達到對攪拌效果進行分析和預測的效果。
實驗臺上方是直線電機動子,可根據定制化需求做各種不同要求的直線運動(如: 勻速直線運動、勻加速直線運動、變加速直線運動、正弦/余弦函數運動等);下方的旋轉電機也可根據定制化需求做各種不同要求的旋轉運動(如: 勻速旋轉、勻加速旋轉、正反向換向旋轉、正弦/余弦函數旋轉等)。介于直線電機動子和連接桿之間的力傳感器用于實時檢測連桿的受力情況,防止直線電機動子加速度過大產生的導致連桿受到過載扭矩產生的連桿變形。
由上述介紹可知,由于該試驗臺裝置需要滿足各種定制化需求的復雜運動,因此試驗臺中用于連接直線電機和旋轉電機的4根連接桿受力過大時容易受損變形。試驗結果表明,該自動化攪拌試驗臺最重要的1個參數是直線電機的加速度a,如果直線電機的加速度a設置過小,由于受電機導軌長度的限制,無法達到期望的直線電機的運動速度;如果直線電機的加速度a設置過大,輕則會造成直線電機定位出現誤差,試驗臺出現劇烈抖動,無法保證試驗數據的準確性;重則甚至直接造成試驗臺連接桿彎曲變形,導致整個試驗臺數據失真。
考慮到該試驗臺裝置后期需要滿足多種復雜的運動狀態,本文通過設定直線電機的運動速度v按照正弦函數y=sinx圖形進行變化,旋轉電機的旋轉速度按照余弦函數y=cosx圖形進行變化。本文分別采用了BA算法和HBA算法對直線電機加速度參數進行優化,并對兩者進行了對比和分析。BA和HBA算法測試對比見表1所列。

表1 BA和HBA算法測試對比
表1分別統計了經BA算法和HBA算法對直線電機加速度參數進行優化后的正確率和用時,通過5次的試驗數據對比可以看到,BA算法的正確率低于本文改進后的HBA算法,采用HBA算法進行優化時,正確率都在95%以上,最高可達98%,幾乎可以滿足一般實際工程標準;另外在用時上,由于HBA算法采用了多機共同進行處理的方式,優化時間只用了傳統的單機標準蝙蝠算法的25%,大幅提高了優化效率,對復雜多維模型的優化有重要的借鑒意義。BA和HBA優化求解比較如圖2所示。

圖2 BA和HBA優化求解比較示意
如圖2所示,多組試驗數據表明,采用BA算法優化直線電機加速度a時,當迭代到第232次時才逐漸停止了迭代更新,得到的最佳加速度值為4.86 m/s2;而采用HAB算法時只迭代了86次就找到了最優加速度值,為1.18 m/s2。將以上a值代入直線電機的運動模型后得到的直線電機速度曲線如圖3所示,可清晰地看出采用HBA算法優化得到的直線電機速度變化曲線與理論速度變化曲線可以很好地吻合,而由BA算法優化過后的直線電機運動速度與理論狀態的速度有較大偏差。此外,在優化時間上,由于本試驗采用1臺主機、3臺分機對模型參數進行優化,采用混合蝙蝠算法能節約大量的優化時間。

圖3 優化后直線電機速度變化示意
本文通過引入小生境思想提出了一種對初始化后的種群按照區間進行分段的方法來對BA算法進行改進,同時為了克服BA算法中數據收斂過快,易陷入局部極值等缺陷,本文在標準蝙蝠算法基礎公式的基礎上引入了粒子群算法中的速度和位置更新公式,對BA算法中的速度和位置更新進行了補充,使本文提出的HBA算法速度和位置更新更加具有多樣性。試驗結果表明,本文提出的HBA算法能夠得到更加準確的優化值,同時大幅縮短了優化時間,對現代工程優化領域具有重要的參考價值。