群体智能优化算法之蝙蝠算法(Bat Algorithm,BA)
獲取更多資訊,趕快關(guān)注上面的公眾號(hào)吧!
文章目錄
- 第十章 蝙蝠算法
- 10.1 介紹
- 10.2 蝙蝠的自然行為概述
- 10.3 蝙蝠算法的數(shù)學(xué)表達(dá)
- 10.4 蝙蝠算法變種
- 10.4.1 混沌蝙蝠算法
- 10.4.2 二進(jìn)制蝙蝠算法
- 10.4.3 并行蝙蝠算法
- 10.4.4 定向蝙蝠算法
- 10.4.5 自適應(yīng)蝙蝠算法
- 參考文獻(xiàn)
第十章 蝙蝠算法
10.1 介紹
蝙蝠算法(Bat Algorithm,BA)是一種基于群體智能的算法,是受微型蝙蝠的回聲定位的啟發(fā),由Xin-She Yang(Yang, 2010a)[1]于2010年提出的。大多數(shù)微型蝙蝠將聲音輻射到周圍環(huán)境,并聆聽這些聲音來自不同物體的的回聲,從而可以識(shí)別獵物,躲避障礙物,并追蹤黑暗的巢穴。聲音脈沖因蝙蝠的種類而異,基本上,頻率調(diào)諧是一種突變,因?yàn)樗诮庵幸鸩▌?dòng),主要是在較好的解附近,盡管較大的突變導(dǎo)致全局搜索。特定的選擇是通過對(duì)相對(duì)恒定的選擇施加壓力來實(shí)現(xiàn)的,這是由于在目前已經(jīng)建立的種群中使用了最優(yōu)解。與遺傳算法相比,沒有明顯的交叉;然而,響度和脈沖發(fā)射的偏差會(huì)導(dǎo)致變異的不同。另外,還有一種自動(dòng)縮放的功能,即隨著搜索在響度和脈沖發(fā)射率的變化上接近全局最優(yōu),利用就會(huì)變得集中起來,這導(dǎo)致從探索階段自動(dòng)切換到利用階段。
10.2 蝙蝠的自然行為概述
蝙蝠是唯一有翅膀的哺乳動(dòng)物,它們具有非凡的回聲定位能力。它們是世界上種類第二多的哺乳動(dòng)物,有超過1200種。一般分為蝙蝠可以分為兩類:回聲定位微型蝙蝠和以水果為食的巨型蝙蝠。蝙蝠算法是由Yang Xin-She (2010a)[1]基于第一類蝙蝠的行為而開發(fā)的。大多數(shù)蝙蝠以倒掛的棲息姿勢(shì)休息。所有的微型蝙蝠和一些巨型蝙蝠都會(huì)發(fā)出超聲波來產(chǎn)生回聲。微型蝙蝠的大腦和聽覺神經(jīng)系統(tǒng)可以通過比較出站脈沖和反復(fù)出現(xiàn)的回聲,對(duì)環(huán)境產(chǎn)生深入的圖像。微型蝙蝠發(fā)出這些超聲波(通過喉部產(chǎn)生)通常通過嘴巴,偶爾通過鼻子,它們會(huì)在回聲返回前就結(jié)束發(fā)出超聲波。回聲定位可以是低負(fù)荷循環(huán),也開始是高負(fù)荷循環(huán),第一種情況時(shí),蝙蝠可以根據(jù)時(shí)間區(qū)分它們的叫聲和多次出現(xiàn)的回聲;第二種情況時(shí),蝙蝠發(fā)出不間斷的叫聲,并在頻率上將脈沖和回聲分離。回聲定位也被稱為生物聲納,主要用于動(dòng)物的導(dǎo)航和覓食。在這些回聲的幫助下,蝙蝠測(cè)量物體的大小和距離,有些種類的蝙蝠甚至能夠測(cè)量物體移動(dòng)的速度。
10.3 蝙蝠算法的數(shù)學(xué)表達(dá)
蝙蝠在尋找目標(biāo)、對(duì)象或獵物時(shí),在位置xi以速度vi隨機(jī)飛行,其具有靜態(tài)的頻率fmin,變化的波長λ,響度A0。頻率變化范圍為fmin到fmax,聲音的響度可以根據(jù)需要在A0和Amin之間變化。Xin-She Yang (2010a)[1]建立了一系列規(guī)則來更新蝙蝠尋找獵物時(shí)的速度、位置和響度。蝙蝠算法的數(shù)學(xué)公式如下:
fi=fmin?+(fmax??fmin?)×β(1){f_i} = {f_{\min }} + \left( {{f_{\max }} - {f_{\min }}} \right) \times \beta \tag 1 fi?=fmin?+(fmax??fmin?)×β(1)
vit+1=vit+(xit?x?)×fi(2)v_i^{t + 1} = v_i^t + \left( {x_i^t - {x_*}} \right) \times {f_i}\tag 2 vit+1?=vit?+(xit??x??)×fi?(2)
xit+1=xit+vit(3)x_i^{t + 1} = x_i^t + v_i^t\tag 3 xit+1?=xit?+vit?(3)
Ait+1=αAit,rit+1=ri0[1?exp?(?γt)](4)A_i^{t + 1} = \alpha A_i^t,r_i^{t + 1} = r_i^0[1 - \exp ( - \gamma t)]\tag 4 Ait+1?=αAit?,rit+1?=ri0?[1?exp(?γt)](4)
Ait→0,rit→riU,ast→∞(5)A_i^t \to 0,r_i^t \to r_i^U,{\rm{ }}as{\rm{ }}t \to \infty \tag 5 Ait?→0,rit?→riU?,ast→∞(5)
其中β為[0,1]內(nèi)均勻分布的隨機(jī)數(shù),x*表示當(dāng)前種群中的全局最優(yōu)解,r為脈沖發(fā)射率,α和γ為常數(shù)且0<α<1,γ>0。
選擇全局最優(yōu)解后,當(dāng)前種群中每一個(gè)局部解(xold)使用式(6)更新其位置:
xnew=xold+εAt(6){x_{new}} = {x_{old}} + \varepsilon {A^t}\tag 6 xnew?=xold?+εAt(6)
其中ε為[-1,1]之間的任意數(shù)。
BA結(jié)合了粒子群優(yōu)化、遺傳算法和和聲搜索的最佳特性,因此,與這些算法相比,它提供了良好的結(jié)果。參數(shù)α和γ的調(diào)整會(huì)影響收斂速度。BA的實(shí)現(xiàn)有點(diǎn)復(fù)雜,但它已經(jīng)證明了它的性能,并稱為一種良好的受自然啟發(fā)的元啟發(fā)式。
10.4 蝙蝠算法變種
蝙蝠算法在優(yōu)化問題上取得了很好的效果。最近,它經(jīng)歷了多次改進(jìn),并通過將其與現(xiàn)有的元啟發(fā)式雜交或引入一些新的參數(shù)來開發(fā)一些變體,這里選取一些進(jìn)行討論。
10.4.1 混沌蝙蝠算法
Gandomi和Yang(2014)[2]開發(fā)了混沌BA的四個(gè)變種,每個(gè)變種都在13個(gè)混沌映射的幫助下得到驗(yàn)證。這些混沌映射代替了固定的參數(shù),增強(qiáng)了靈活性和多樣性,因?yàn)椴煌幕煦缬成鋾?huì)導(dǎo)致算法的不同行為。提出的改進(jìn)主要是對(duì)參數(shù)β、γ(分別見式(7)和(8)),響度A和脈沖發(fā)射率r進(jìn)行改變。
fi=fmin?+(fmax??fmin?)×CMi(7){f_i} = {f_{\min }} + \left( {{f_{\max }} - {f_{\min }}} \right) \times C{M_i}\tag 7 fi?=fmin?+(fmax??fmin?)×CMi?(7)
vit+1=vit+(xit?x?)×CMi×fi(8)v_i^{t + 1} = v_i^t + \left( {x_i^t - {x_*}} \right) \times C{M_i} \times {f_i}\tag 8 vit+1?=vit?+(xit??x??)×CMi?×fi?(8)
10.4.2 二進(jìn)制蝙蝠算法
Mirjalili, Mirjalili和Yang(2014)[3]在修改了速度和位置的一些基本概念后,使程序現(xiàn)代化,產(chǎn)生了BA的二進(jìn)制版本。在離散二進(jìn)制搜索空間中,由于現(xiàn)有方法無法對(duì)位置進(jìn)行更新,因此引入傳遞函數(shù)對(duì)位置進(jìn)行更新,所使用的傳遞函數(shù)為:
S(vik(t))=11+e?vik(t)(9)S\left( {v_i^k(t)} \right) = \frac{1}{{1 + {e^{ - v_i^k(t)}}}}\tag 9 S(vik?(t))=1+e?vik?(t)1?(9)
其中vik(t)表示第i個(gè)個(gè)體在第k維上速度。使用傳遞函數(shù)的位置更新如下:
xik(t+1)={0if?rand?<S(vik(t+1))1if?rand?≥S(vik(t+1))(10)x_{i}^{k}(t+1)=\left\{\begin{array}{ll}{0} & {\text { if } \quad \text { rand }<S\left(v_{i}^{k}(t+1)\right)} \\ {1} & {\text { if } \quad \text { rand } \geq S\left(v_{i}^{k}(t+1)\right)}\end{array}\right.\tag {10} xik?(t+1)={01??if??rand?<S(vik?(t+1))?if??rand?≥S(vik?(t+1))?(10)
在這個(gè)過程中,每個(gè)個(gè)體被分配0或1,因此,隨著速度的增加,個(gè)體的位置保持不變。為了克服這個(gè)問題,提出了一種新的v形傳遞函數(shù),并利用該函數(shù)設(shè)計(jì)了新的位置更新過程,分別如式(11)和(12)所示:
V(vik(t))=∣2πarctan?(π2vik(t))∣(11)V\left( {v_i^k(t)} \right) = \left| {\frac{2}{\pi }\arctan \left( {\frac{\pi }{2}v_i^k(t)} \right)} \right|\tag {11} V(vik?(t))=∣∣∣∣?π2?arctan(2π?vik?(t))∣∣∣∣?(11)
xik(t+1)={(xik(t))?1if?rand?<V(vik(t+1))xik(t)if?rand?≥V(vik(t+1))(12)x_{i}^{k}(t+1)=\left\{\begin{array}{ll}{\left(x_{i}^{k}(t)\right)^{-1}} & {\text { if } \operatorname{rand}<V\left(v_{i}^{k}(t+1)\right)} \\ {x_{i}^{k}(t)} & {\text { if } \operatorname{rand} \geq V\left(v_{i}^{k}(t+1)\right)}\end{array}\right.\tag {12} xik?(t+1)={(xik?(t))?1xik?(t)??if?rand<V(vik?(t+1))?if?rand≥V(vik?(t+1))?(12)
10.4.3 并行蝙蝠算法
BA的并行版本是由Tsai, Dao, Yang和Pan (2014)[4]提出的,在并行BA中,群體被分割成了一些子群體,然后這些子群體獨(dú)立地進(jìn)行工作。在Tsai, Dao, Yang和Pan (2014)[4]中,群體被分成G組,總迭代包含R(R={R1,2R1,3R1,…})次通信。并行BA算法如下:
Step1:初始化:生成蝙蝠種群,分成G組。分別初始化每個(gè)組,并定義迭代集R來實(shí)現(xiàn)通信策略。
Step2:評(píng)估:獲取每個(gè)組中每只蝙蝠的適應(yīng)度值。
Step3:更新:使用基本BA(式(2)和(3))更新蝙蝠的速度和位置。
Step4:通信策略:選擇當(dāng)前群體中最優(yōu)的蝙蝠(Gt),并將其遷移到每一個(gè)組中,每R1次迭代,使用變異的Gt替換每組中最差的蝙蝠。
Step5:終止:重復(fù)Step2-Step5,直到滿足終止條件。存儲(chǔ)函數(shù)f(Gt)的最優(yōu)值,以及所有蝙蝠Gt中最優(yōu)蝙蝠的位置。
10.4.4 定向蝙蝠算法
Chakri、Khelif、Benouaret和Yang(2017)[5]提出了一種新的BA變體—定向BA(dBA),在基本BA算法基礎(chǔ)做了四項(xiàng)新的修正,以求解高維問題。蝙蝠在兩個(gè)不同的方向產(chǎn)生聲音脈沖,一個(gè)方向是當(dāng)前群體中最好的,另一個(gè)方向是隨機(jī)的,通過個(gè)體的適應(yīng)性來決定最佳可行食物來源的位置。蝙蝠運(yùn)動(dòng)的數(shù)學(xué)公式由式(13)給出:
{xit+1=xit+(x??xit)f1+(xkt?xit)f2if?F(xkt)<F(xit)xit+1=xit+(x??xit)f1otherwise?(13)\left\{\begin{array}{ll}{x_{i}^{t+1}=x_{i}^{t}+\left(x^{*}-x_{i}^{t}\right) f_{1}+\left(x_{k}^{t}-x_{i}^{t}\right) f_{2}} & {\text { if } F\left(x_{k}^{t}\right)<F\left(x_{i}^{t}\right)} \\ {x_{i}^{t+1}=x_{i}^{t}+\left(x^{*}-x_{i}^{t}\right) f_{1}} & {\text { otherwise }}\end{array}\right.\tag {13} {xit+1?=xit?+(x??xit?)f1?+(xkt??xit?)f2?xit+1?=xit?+(x??xit?)f1???if?F(xkt?)<F(xit?)?otherwise??(13)
其中,x*代表當(dāng)前種群中最優(yōu)的蝙蝠,xkt表示在k個(gè)方向隨機(jī)選擇的蝙蝠,F(.)表示適應(yīng)度函數(shù)。兩個(gè)脈沖的頻率根據(jù)式(14)計(jì)算得到:
{f1=fmin?+(fmax??fmin?)×rand?1f2=fmin?+(fmax??fmin?)×rand?2(14)\left\{\begin{array}{l}{f_{1}=f_{\min }+\left(f_{\max }-f_{\min }\right) \times \operatorname{rand}_{1}} \\ {f_{2}=f_{\min }+\left(f_{\max }-f_{\min }\right) \times \operatorname{rand}_{2}}\end{array}\right.\tag {14} {f1?=fmin?+(fmax??fmin?)×rand1?f2?=fmin?+(fmax??fmin?)×rand2??(14)
提出的策略僅在前期的迭代中增強(qiáng)了探索能力,可以避免過早收斂。蝙蝠的位置更新使用式(15)進(jìn)行更新,式中用到了響度At和單調(diào)遞減函數(shù)wit。
xit+1=xit+<At>εwit(15)x_i^{t + 1} = x_i^t + < {A^t} > \varepsilon w_i^t\tag {15} xit+1?=xit?+<At>εwit?(15)
其中wi是縮放參數(shù),用于調(diào)節(jié)搜索過程,其計(jì)算工時(shí)如下:
wit=(wi0?wi∞1?tmax?)×(t?tmax?)+wi∞(16)w_i^t = \left( {\frac{{{w_{i0}} - {w_{i\infty }}}}{{1 - {t_{\max }}}}} \right) \times \left( {t - {t_{\max }}} \right) + {w_{i\infty }}\tag {16} wit?=(1?tmax?wi0??wi∞??)×(t?tmax?)+wi∞?(16)
縮放參數(shù)的初值(wi0)和終值(wi∞)分別使用式(17)和(18)進(jìn)行計(jì)算:
wi0=(Ubi?Lbi)/4(17){w_{i0}} = \left( {U{b_i} - L{b_i}} \right)/4\tag {17} wi0?=(Ubi??Lbi?)/4(17)
wi∞=wi0/100(18){w_{i\infty }} = {w_{i0}}/100\tag {18} wi∞?=wi0?/100(18)
Chakri等(2017)[5]提出了脈率和響度的變化,如式(19)和(20)所示。
rt=(r0?r∞1?tmax?)×(t?tmax?)+r∞(19){r^t} = \left( {\frac{{{r_0} - {r_\infty }}}{{1 - {t_{\max }}}}} \right) \times \left( {t - {t_{\max }}} \right) + {r_\infty }\tag {19} rt=(1?tmax?r0??r∞??)×(t?tmax?)+r∞?(19)
At=(A0?A∞1?tmax?)×(t?tmax?)+A∞(20){A^t} = \left( {\frac{{{A_0} - {A_\infty }}}{{1 - {t_{\max }}}}} \right) \times \left( {t - {t_{\max }}} \right) + {A_\infty }\tag {20} At=(1?tmax?A0??A∞??)×(t?tmax?)+A∞?(20)
所提出的兩組脈沖發(fā)射方向不同,探索和利用都得到了改善,因?yàn)樗沟靡苿?dòng)在最優(yōu)蝙蝠的方向更加接近有利的搜索空間。此外,提出的脈沖發(fā)射速率和響度自適應(yīng)控制了不同迭代階段的探索和利用。
10.4.5 自適應(yīng)蝙蝠算法
Fister, Fong, and Brest(2014)[6]提出了一種自適應(yīng)BA,期望控制參數(shù)在算法運(yùn)行時(shí)能夠自動(dòng)調(diào)整,其提出的響度和脈沖率自適應(yīng)調(diào)整如下:
At+1={Alb(t)+rand?0(Aub(t)?Alb(t))if?rand?1<τ1A(t)otherwise?(21)A^{t+1}=\left\{\begin{array}{ll}{A_{l b}^{(t)}+\operatorname{rand}_{0}\left(A_{u b}^{(t)}-A_{l b}^{(t)}\right)} & {\text { if } \operatorname{rand}_{1}<\tau_{1}} \\ {A^{(t)}} & {\text { otherwise }}\end{array}\right.\tag {21} At+1={Alb(t)?+rand0?(Aub(t)??Alb(t)?)A(t)??if?rand1?<τ1??otherwise??(21)
其中τi(i={1,2})表示學(xué)習(xí)率,取固定值τi=0.1。使用該自適應(yīng)策略,每10個(gè)候選解就會(huì)被重新構(gòu)造一次,而且Fister等人(2014)將這種自適應(yīng)技術(shù)與一種流行的進(jìn)化算法—差分進(jìn)化(DE)雜交。受自然啟發(fā)的元啟發(fā)式的最佳特征是它們之間是合作的,而不是競(jìng)爭的,因此它們可以彼此雜交。雜交BA使用DE策略更新試驗(yàn)解,如下所示:
yn={DE?Strategy,?if?rand?(0,1)≤CR∨n=Dxin(t)otherwise?(23)y_{n}=\left\{\begin{array}{ll}{D E_{-} S \text { trategy, }} & {\text { if } \operatorname{rand}(0,1) \leq C R \vee n=D} \\ {x_{i n}^{(t)}} & {\text { otherwise }}\end{array}\right.\tag {23} yn?={DE??S?trategy,?xin(t)???if?rand(0,1)≤CR∨n=D?otherwise??(23)
考慮四種DE策略:
DE/rand/1/bin:
yj=xr1,j+F×(xr2,j?xr3,j)(24){y_j} = {x_{r1,j}} + F \times \left( {{x_{r2,j}} - {x_{r3,j}}} \right)\tag {24} yj?=xr1,j?+F×(xr2,j??xr3,j?)(24)
DE/best/1/bin:
yj=xbest,j+F×(xr1,j?xr2,j)(25){y_j} = {x_{best,j}} + F \times \left( {{x_{r1,j}} - {x_{r2,j}}} \right)\tag {25} yj?=xbest,j?+F×(xr1,j??xr2,j?)(25)
DE/best/2/bin:
yj=xbest,j+F×(xr1,j+xr2,j?xr3,j?xr4,j)(26){y_j} = {x_{best,j}} + F \times \left( {{x_{r1,j}} + {x_{r2,j}} - {x_{r3,j}} - {x_{r4,j}}} \right)\tag {26} yj?=xbest,j?+F×(xr1,j?+xr2,j??xr3,j??xr4,j?)(26)
DE/rand_to_best/1/bin:
yj=xi,j+F×(bestj?xi,j)?F×(xr1,j?xr2,j)(27){y_j} = {x_{i,j}} + F \times \left( {bes{t_j} - {x_{i,j}}} \right) - F \times \left( {{x_{r1,j}} - {x_{r2,j}}} \right)\tag {27} yj?=xi,j?+F×(bestj??xi,j?)?F×(xr1,j??xr2,j?)(27)
所使用的DE策略是修改操作中的最佳解,即“rand_to_best/1/bin”、“best/2/bin”和“best/1/bin”,通常將模擬蝙蝠引導(dǎo)到當(dāng)前最佳解的方向。
參考文獻(xiàn)
總結(jié)
以上是生活随笔為你收集整理的群体智能优化算法之蝙蝠算法(Bat Algorithm,BA)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++基础知识(四)—— 操作符/运算符
- 下一篇: 微信撤回软件安卓版_微信强制撤回app