群体智能优化算法之蝙蝠算法(Bat Algorithm,BA)

在这里插入图片描述

获取更多资讯,赶快关注上面的公众号吧!

第十章 蝙蝠算法

10.1 介绍

蝙蝠算法(Bat Algorithm,BA)是一种基于群体智能的算法,是受微型蝙蝠的回声定位的启发,由Xin-She Yang(Yang, 2010a)[1]于2010年提出的。大多数微型蝙蝠将声音辐射到周围环境,并聆听这些声音来自不同物体的的回声,从而可以识别猎物,躲避障碍物,并追踪黑暗的巢穴。声音脉冲因蝙蝠的种类而异,基本上,频率调谐是一种突变,因为它在解中引起波动,主要是在较好的解附近,尽管较大的突变导致全局搜索。特定的选择是通过对相对恒定的选择施加压力来实现的,这是由于在目前已经建立的种群中使用了最优解。与遗传算法相比,没有明显的交叉;然而,响度和脉冲发射的偏差会导致变异的不同。另外,还有一种自动缩放的功能,即随着搜索在响度和脉冲发射率的变化上接近全局最优,利用就会变得集中起来,这导致从探索阶段自动切换到利用阶段。

10.2 蝙蝠的自然行为概述

蝙蝠是唯一有翅膀的哺乳动物,它们具有非凡的回声定位能力。它们是世界上种类第二多的哺乳动物,有超过1200种。一般分为蝙蝠可以分为两类:回声定位微型蝙蝠和以水果为食的巨型蝙蝠。蝙蝠算法是由Yang Xin-She (2010a)[1]基于第一类蝙蝠的行为而开发的。大多数蝙蝠以倒挂的栖息姿势休息。所有的微型蝙蝠和一些巨型蝙蝠都会发出超声波来产生回声。微型蝙蝠的大脑和听觉神经系统可以通过比较出站脉冲和反复出现的回声,对环境产生深入的图像。微型蝙蝠发出这些超声波(通过喉部产生)通常通过嘴巴,偶尔通过鼻子,它们会在回声返回前就结束发出超声波。回声定位可以是低负荷循环,也开始是高负荷循环,第一种情况时,蝙蝠可以根据时间区分它们的叫声和多次出现的回声;第二种情况时,蝙蝠发出不间断的叫声,并在频率上将脉冲和回声分离。回声定位也被称为生物声纳,主要用于动物的导航和觅食。在这些回声的帮助下,蝙蝠测量物体的大小和距离,有些种类的蝙蝠甚至能够测量物体移动的速度。

10.3 蝙蝠算法的数学表达

蝙蝠在寻找目标、对象或猎物时,在位置xi以速度vi随机飞行,其具有静态的频率fmin,变化的波长λ,响度A0。频率变化范围为fmin到fmax,声音的响度可以根据需要在A0和Amin之间变化。Xin-She Yang (2010a)[1]建立了一系列规则来更新蝙蝠寻找猎物时的速度、位置和响度。蝙蝠算法的数学公式如下:
f i = f min ⁡ + ( f max ⁡ − f min ⁡ ) × β (1) {f_i} = {f_{\min }} + \left( {{f_{\max }} - {f_{\min }}} \right) \times \beta \tag 1 fi=fmin+(fmaxfmin)×β(1)
v i t + 1 = v i t + ( x i t − x ∗ ) × f i (2) v_i^{t + 1} = v_i^t + \left( {x_i^t - {x_*}} \right) \times {f_i}\tag 2 vit+1=vit+(xitx)×fi(2)
x i t + 1 = x i t + v i t (3) x_i^{t + 1} = x_i^t + v_i^t\tag 3 xit+1=xit+vit(3)
A i t + 1 = α A i t , r i t + 1 = r i 0 [ 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[1exp(γt)](4)
A i t → 0 , r i t → r i U , a s t → ∞ (5) A_i^t \to 0,r_i^t \to r_i^U,{\rm{ }}as{\rm{ }}t \to \infty \tag 5 Ait0,ritriU,ast(5)

其中β为[0,1]内均匀分布的随机数,x*表示当前种群中的全局最优解,r为脉冲发射率,α和γ为常数且0<α<1,γ>0。
选择全局最优解后,当前种群中每一个局部解(xold)使用式(6)更新其位置:
x n e w = x o l d + ε A t (6) {x_{new}} = {x_{old}} + \varepsilon {A^t}\tag 6 xnew=xold+εAt(6)

其中ε为[-1,1]之间的任意数。

BA结合了粒子群优化、遗传算法和和声搜索的最佳特性,因此,与这些算法相比,它提供了良好的结果。参数α和γ的调整会影响收敛速度。BA的实现有点复杂,但它已经证明了它的性能,并称为一种良好的受自然启发的元启发式。

10.4 蝙蝠算法变种

蝙蝠算法在优化问题上取得了很好的效果。最近,它经历了多次改进,并通过将其与现有的元启发式杂交或引入一些新的参数来开发一些变体,这里选取一些进行讨论。

10.4.1 混沌蝙蝠算法

Gandomi和Yang(2014)[2]开发了混沌BA的四个变种,每个变种都在13个混沌映射的帮助下得到验证。这些混沌映射代替了固定的参数,增强了灵活性和多样性,因为不同的混沌映射会导致算法的不同行为。提出的改进主要是对参数β、γ(分别见式(7)和(8)),响度A和脉冲发射率r进行改变。
f i = f min ⁡ + ( f max ⁡ − f min ⁡ ) × C M i (7) {f_i} = {f_{\min }} + \left( {{f_{\max }} - {f_{\min }}} \right) \times C{M_i}\tag 7 fi=fmin+(fmaxfmin)×CMi(7)
v i t + 1 = v i t + ( x i t − x ∗ ) × C M i × f i (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+(xitx)×CMi×fi(8)

10.4.2 二进制蝙蝠算法

Mirjalili, Mirjalili和Yang(2014)[3]在修改了速度和位置的一些基本概念后,使程序现代化,产生了BA的二进制版本。在离散二进制搜索空间中,由于现有方法无法对位置进行更新,因此引入传递函数对位置进行更新,所使用的传递函数为:
S ( v i k ( t ) ) = 1 1 + e − v i k ( t ) (9) S\left( {v_i^k(t)} \right) = \frac{1}{{1 + {e^{ - v_i^k(t)}}}}\tag 9 S(vik(t))=1+evik(t)1(9)

其中vik(t)表示第i个个体在第k维上速度。使用传递函数的位置更新如下:

x i k ( t + 1 ) = { 0  if   rand  < S ( v i k ( t + 1 ) ) 1  if   rand  ≥ S ( v i k ( 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)

在这个过程中,每个个体被分配0或1,因此,随着速度的增加,个体的位置保持不变。为了克服这个问题,提出了一种新的v形传递函数,并利用该函数设计了新的位置更新过程,分别如式(11)和(12)所示:
V ( v i k ( t ) ) = ∣ 2 π arctan ⁡ ( π 2 v i k ( 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))=π2arctan(2πvik(t))(11)

x i k ( t + 1 ) = { ( x i k ( t ) ) − 1  if  rand ⁡ < V ( v i k ( t + 1 ) ) x i k ( t )  if  rand ⁡ ≥ V ( v i k ( 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 randV(vik(t+1))(12)

10.4.3 并行蝙蝠算法

BA的并行版本是由Tsai, Dao, Yang和Pan (2014)[4]提出的,在并行BA中,群体被分割成了一些子群体,然后这些子群体独立地进行工作。在Tsai, Dao, Yang和Pan (2014)[4]中,群体被分成G组,总迭代包含R(R={R1,2R1,3R1,…})次通信。并行BA算法如下:

Step1:初始化:生成蝙蝠种群,分成G组。分别初始化每个组,并定义迭代集R来实现通信策略。
Step2:评估:获取每个组中每只蝙蝠的适应度值。
Step3:更新:使用基本BA(式(2)和(3))更新蝙蝠的速度和位置。
Step4:通信策略:选择当前群体中最优的蝙蝠(Gt),并将其迁移到每一个组中,每R1次迭代,使用变异的Gt替换每组中最差的蝙蝠。
Step5:终止:重复Step2-Step5,直到满足终止条件。存储函数f(Gt)的最优值,以及所有蝙蝠Gt中最优蝙蝠的位置。

10.4.4 定向蝙蝠算法

Chakri、Khelif、Benouaret和Yang(2017)[5]提出了一种新的BA变体—定向BA(dBA),在基本BA算法基础做了四项新的修正,以求解高维问题。蝙蝠在两个不同的方向产生声音脉冲,一个方向是当前群体中最好的,另一个方向是随机的,通过个体的适应性来决定最佳可行食物来源的位置。蝙蝠运动的数学公式由式(13)给出:
{ x i t + 1 = x i t + ( x ∗ − x i t ) f 1 + ( x k t − x i t ) f 2  if  F ( x k t ) < F ( x i t ) x i t + 1 = x i t + ( x ∗ − x i t ) f 1  otherwise  (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+(xxit)f1+(xktxit)f2xit+1=xit+(xxit)f1 if F(xkt)<F(xit) otherwise (13)
其中,x*代表当前种群中最优的蝙蝠,xkt表示在k个方向随机选择的蝙蝠,F(.)表示适应度函数。两个脉冲的频率根据式(14)计算得到:
{ f 1 = f min ⁡ + ( f max ⁡ − f min ⁡ ) × rand ⁡ 1 f 2 = f min ⁡ + ( f max ⁡ − f min ⁡ ) × 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+(fmaxfmin)×rand1f2=fmin+(fmaxfmin)×rand2(14)
提出的策略仅在前期的迭代中增强了探索能力,可以避免过早收敛。蝙蝠的位置更新使用式(15)进行更新,式中用到了响度At和单调递减函数wit
x i t + 1 = x i t + < A t > ε w i t (15) x_i^{t + 1} = x_i^t + < {A^t} > \varepsilon w_i^t\tag {15} xit+1=xit+<At>εwit(15)
其中wi是缩放参数,用于调节搜索过程,其计算工时如下:
w i t = ( w i 0 − w i ∞ 1 − t max ⁡ ) × ( t − t max ⁡ ) + w i ∞ (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=(1tmaxwi0wi)×(ttmax)+wi(16)

缩放参数的初值(wi0)和终值(wi∞)分别使用式(17)和(18)进行计算:
w i 0 = ( U b i − L b i ) / 4 (17) {w_{i0}} = \left( {U{b_i} - L{b_i}} \right)/4\tag {17} wi0=(UbiLbi)/4(17)
w i ∞ = w i 0 / 100 (18) {w_{i\infty }} = {w_{i0}}/100\tag {18} wi=wi0/100(18)
Chakri等(2017)[5]提出了脉率和响度的变化,如式(19)和(20)所示。
r t = ( r 0 − r ∞ 1 − t max ⁡ ) × ( t − t max ⁡ ) + 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=(1tmaxr0r)×(ttmax)+r(19)
A t = ( A 0 − A ∞ 1 − t max ⁡ ) × ( t − t max ⁡ ) + 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=(1tmaxA0A)×(ttmax)+A(20)

所提出的两组脉冲发射方向不同,探索和利用都得到了改善,因为它使得移动在最优蝙蝠的方向更加接近有利的搜索空间。此外,提出的脉冲发射速率和响度自适应控制了不同迭代阶段的探索和利用。

10.4.5 自适应蝙蝠算法

Fister, Fong, and Brest(2014)[6]提出了一种自适应BA,期望控制参数在算法运行时能够自动调整,其提出的响度和脉冲率自适应调整如下:
A t + 1 = { A l b ( t ) + rand ⁡ 0 ( A u b ( t ) − A l b ( t ) )  if  rand ⁡ 1 < τ 1 A ( 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})表示学习率,取固定值τi=0.1。使用该自适应策略,每10个候选解就会被重新构造一次,而且Fister等人(2014)将这种自适应技术与一种流行的进化算法—差分进化(DE)杂交。受自然启发的元启发式的最佳特征是它们之间是合作的,而不是竞争的,因此它们可以彼此杂交。杂交BA使用DE策略更新试验解,如下所示:
y n = { D E − S  trategy,   if  rand ⁡ ( 0 , 1 ) ≤ C R ∨ n = D x i n ( 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={DES trategy, xin(t) if rand(0,1)CRn=D otherwise (23)
考虑四种DE策略:
DE/rand/1/bin:
y j = x r 1 , j + F × ( x r 2 , j − x r 3 , j ) (24) {y_j} = {x_{r1,j}} + F \times \left( {{x_{r2,j}} - {x_{r3,j}}} \right)\tag {24} yj=xr1,j+F×(xr2,jxr3,j)(24)
DE/best/1/bin:
y j = x b e s t , j + F × ( x r 1 , j − x r 2 , j ) (25) {y_j} = {x_{best,j}} + F \times \left( {{x_{r1,j}} - {x_{r2,j}}} \right)\tag {25} yj=xbest,j+F×(xr1,jxr2,j)(25)
DE/best/2/bin:
y j = x b e s t , j + F × ( x r 1 , j + x r 2 , j − x r 3 , j − x r 4 , 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,jxr3,jxr4,j)(26)
DE/rand_to_best/1/bin:
y j = x i , j + F × ( b e s t j − x i , j ) − F × ( x r 1 , j − x r 2 , 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×(bestjxi,j)F×(xr1,jxr2,j)(27)

所使用的DE策略是修改操作中的最佳解,即“rand_to_best/1/bin”、“best/2/bin”和“best/1/bin”,通常将模拟蝙蝠引导到当前最佳解的方向。

参考文献

  1. Yang, X.-S., A New Metaheuristic Bat-Inspired Algorithm, in Nature Inspired Cooperative Strategies for Optimization (NICSO 2010), J.R. González, et al., Editors. 2010, Springer Berlin Heidelberg: Berlin, Heidelberg. p. 65-74.
  2. Gandomi, A.H. and X.-S. Yang, Chaotic bat algorithm. Journal of Computational Science, 2014. 5(2): p. 224-232.
  3. Mirjalili, S., S.M. Mirjalili, and X.-S. Yang, Binary bat algorithm. Neural Computing and Applications, 2014. 25(3): p. 663-681.
  4. Tsai, C.-F., et al. Parallelized Bat Algorithm with a Communication Strategy. in Modern Advances in Applied Intelligence. 2014. Cham: Springer International Publishing.
  5. Chakri, A., et al., New directional bat algorithm for continuous optimization problems. Expert Systems with Applications, 2017. 69: p. 159-175.
  6. Fister jr, I., et al., A Novel Hybrid Self-Adaptive Bat Algorithm. TheScientificWorldJournal, 2014. 2014: p. 709738.
Python的群体智能算法库是一套用Python语言编写的,用于实现群体智能算法的开源库。群体智能算法是一种模拟自然界群体行为的计算模型,利用群体成员之间的交互与合作来解决复杂问题的方法。Python的群体智能算法库包括了许多经典的群体智能算法,如粒子群优化算法(PSO)、遗传算法(GA)、蚁群算法(ACO)等。 这些算法库提供了丰富的函数和类,方便用户快速地实现群体智能算法,并进行问题求解、优化和模型训练。用户可以根据自己的需求选择合适的算法,调用库中的函数进行参数设置和调优,并在自己的项目中应用这些算法来解决实际问题。此外,Python的群体智能算法库也提供了丰富的可视化工具,帮助用户直观地了解算法的行为和效果,从而更好地调整参数和优化算法。 Python的群体智能算法库广泛应用于各种领域,如工程优化、模式识别、数据挖掘、人工智能等。它为用户提供了强大的工具和资源,帮助他们快速、高效地实现群体智能算法,并在实际问题中取得更好的效果。同时,作为开源库,Python的群体智能算法库也受到了广泛的社区支持和贡献,用户可以从社区中获得丰富的学习资料和实例代码,更好地掌握和应用这些算法。因此,Python的群体智能算法库是一种非常有用的工具,对于群体智能算法的研究和应用都具有重要的意义。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

松间沙路hba

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值