群体智能优化算法之蝙蝠算法(Bat Algorithm,BA)
获取更多资讯,赶快关注上面的公众号吧!
文章目录
- 第十章 蝙蝠算法
- 10.1 介绍
- 10.2 蝙蝠的自然行为概述
- 10.3 蝙蝠算法的数学表达
- 10.4 蝙蝠算法变种
- 10.4.1 混沌蝙蝠算法
- 10.4.2 二进制蝙蝠算法
- 10.4.3 并行蝙蝠算法
- 10.4.4 定向蝙蝠算法
- 10.4.5 自适应蝙蝠算法
- 参考文献
第十章 蝙蝠算法
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]建立了一系列规则来更新蝙蝠寻找猎物时的速度、位置和响度。蝙蝠算法的数学公式如下:
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]内均匀分布的随机数,x*表示当前种群中的全局最优解,r为脉冲发射率,α和γ为常数且0<α<1,γ>0。
选择全局最优解后,当前种群中每一个局部解(xold)使用式(6)更新其位置:
xnew=xold+εAt(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进行改变。
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 二进制蝙蝠算法
Mirjalili, Mirjalili和Yang(2014)[3]在修改了速度和位置的一些基本概念后,使程序现代化,产生了BA的二进制版本。在离散二进制搜索空间中,由于现有方法无法对位置进行更新,因此引入传递函数对位置进行更新,所使用的传递函数为:
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个个体在第k维上速度。使用传递函数的位置更新如下:
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)
在这个过程中,每个个体被分配0或1,因此,随着速度的增加,个体的位置保持不变。为了克服这个问题,提出了一种新的v形传递函数,并利用该函数设计了新的位置更新过程,分别如式(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))=∣∣∣∣π2arctan(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中,群体被分割成了一些子群体,然后这些子群体独立地进行工作。在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)给出:
{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)f2xit+1=xit+(x∗−xit)f1 if F(xkt)<F(xit) otherwise (13)
其中,x*代表当前种群中最优的蝙蝠,xkt表示在k个方向随机选择的蝙蝠,F(.)表示适应度函数。两个脉冲的频率根据式(14)计算得到:
{f1=fmin+(fmax−fmin)×rand1f2=fmin+(fmax−fmin)×rand2(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)×rand1f2=fmin+(fmax−fmin)×rand2(14)
提出的策略仅在前期的迭代中增强了探索能力,可以避免过早收敛。蝙蝠的位置更新使用式(15)进行更新,式中用到了响度At和单调递减函数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是缩放参数,用于调节搜索过程,其计算工时如下:
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−tmaxwi0−wi∞)×(t−tmax)+wi∞(16)
缩放参数的初值(wi0)和终值(wi∞)分别使用式(17)和(18)进行计算:
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−tmaxr0−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−tmaxA0−A∞)×(t−tmax)+A∞(20)
所提出的两组脉冲发射方向不同,探索和利用都得到了改善,因为它使得移动在最优蝙蝠的方向更加接近有利的搜索空间。此外,提出的脉冲发射速率和响度自适应控制了不同迭代阶段的探索和利用。
10.4.5 自适应蝙蝠算法
Fister, Fong, and Brest(2014)[6]提出了一种自适应BA,期望控制参数在算法运行时能够自动调整,其提出的响度和脉冲率自适应调整如下:
At+1={Alb(t)+rand0(Aub(t)−Alb(t))if rand1<τ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})表示学习率,取固定值τi=0.1。使用该自适应策略,每10个候选解就会被重新构造一次,而且Fister等人(2014)将这种自适应技术与一种流行的进化算法—差分进化(DE)杂交。受自然启发的元启发式的最佳特征是它们之间是合作的,而不是竞争的,因此它们可以彼此杂交。杂交BA使用DE策略更新试验解,如下所示:
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”,通常将模拟蝙蝠引导到当前最佳解的方向。
参考文献
- 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.
- Gandomi, A.H. and X.-S. Yang, Chaotic bat algorithm. Journal of Computational Science, 2014. 5(2): p. 224-232.
- Mirjalili, S., S.M. Mirjalili, and X.-S. Yang, Binary bat algorithm. Neural Computing and Applications, 2014. 25(3): p. 663-681.
- Tsai, C.-F., et al. Parallelized Bat Algorithm with a Communication Strategy. in Modern Advances in Applied Intelligence. 2014. Cham: Springer International Publishing.
- Chakri, A., et al., New directional bat algorithm for continuous optimization problems. Expert Systems with Applications, 2017. 69: p. 159-175.
- Fister jr, I., et al., A Novel Hybrid Self-Adaptive Bat Algorithm. TheScientificWorldJournal, 2014. 2014: p. 709738.
群体智能优化算法之蝙蝠算法(Bat Algorithm,BA)相关推荐
- 期货股票量化软件:种群优化算法:蝙蝠算法(BA)
1. 概述 蝙蝠是种神奇的动物. 科学家认为,最早的蝙蝠出现在 65-100 亿年前,曾与恐龙并肩生活. 蝙蝠是唯一有翅膀的哺乳动物. 蝙蝠的种类拥有 1300 多种. 除了极地高寒地区之外,它们几乎 ...
- 基于蝙蝠算法优化BP神经网络的数据分类算法及其MATLAB实现-附代码
基于蝙蝠算法优化BP神经网络的数据分类算法及其MATLAB实现-附代码 文章目录 基于蝙蝠算法优化BP神经网络的数据分类算法及其MATLAB实现-附代码 1 蝙蝠算法与BP神经网络分类模型 1.1 蝙 ...
- 【路径规划】基于蝙蝠算法的无人机三维路径规划matlab源码
10.1 介绍 蝙蝠算法(Bat Algorithm,BA)是一种基于群体智能的算法,是受微型蝙蝠的回声定位的启发,由Xin-She Yang(Yang, 2010a)[1]于2010年提出的.大多数 ...
- 蝙蝠算法(Bat Algorithm,BA)算法
生物学基理 蝙蝠算法(Bat Algorithm,BA)算法是模拟自然界中蝙蝠利用一种声呐来探测猎物.避免障碍物的随机搜索算法即模拟蝙蝠利用超声波对障碍物或猎物进行最基本的探测.定位能力并将其和优化目 ...
- 群体智能优化算法之鲸鱼优化算法(Whale Optimization Algorithm,WOA)
获取更多资讯,赶快关注上面的公众号吧! 文章目录 鲸鱼优化算法(Whale Optimization Algorithm,WOA) 1.1 灵感 1.2 数学建模和优化算法 1.2.1 包围捕食(En ...
- 群体智能优化算法之萤火虫算法(Firefly Algorithm,FA)
获取更多资讯,赶快关注上面的公众号吧! 文章目录 第八章 萤火虫算法 8.1 介绍 8.2 天然萤火虫的行为 8.3 萤火虫算法 8.4 萤火虫算法改进 参考文献 第八章 萤火虫算法 8.1 介绍 萤 ...
- 【回归预测-FNN预测】基于蝙蝠算法优化前馈网络实现数据回归预测附Matlab代码
1 内容介绍 强大的非线性映射能力使得人工神经网络越来越多地应用于数值预测.工程控制中,但神经网络在学习过程中,不可避免的存在着全局搜索能力差.容易跳入局部最优等不足,因而用神经网络技术预测的数据并不 ...
- 蝙蝠算法c语言,一种新颖的群智能算法:飞蛾扑火优化算法
李志明+莫愿斌+张森 摘要 飞蛾扑火优化(MFO)算法是一种新颖的群智能优化算法,该算法的主要灵感来源于飞蛾在自然界中被称为横向定位的飞行方式.作为一种新提出的仿生群智能优化算法,分析了飞蛾扑火优化算 ...
- 智能优化算法之松鼠算法(Squirrel search algorithm)
文章目录 背景 Squirrel search algorithm(SSA) SSA Random initialization(随机初始化) Fitness evaluation(适应值评价) So ...
- 小嘿嘿之群体智能优化算法
常见群体智能优化算法 遗传算法 定义 基本知识点 编码 适应度函数 算法流程 选择 交叉 变异 粒子群算法(Particle Swarm Optimization,PSO) 背景思想 位置和速度迭代公 ...
最新文章
- CentOs登陆输入root作为用户名
- Arrays.asList详解
- 2021湖北孝感高考成绩查询时间,2021年4月孝感自考成绩查询时间网址入口
- python中da_python学习 da4
- java框架ssm整合_SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)
- 银行产生的烂账是如何处理的?
- Judy Beta 第三天
- 海云健康:上云为10万家药店带去了什么价值?
- python外星人入侵怎么发给别人_python_外星人入侵(1-1)
- 上交AI研究院副院长马利庄:基于大数据的人脸识别技术进展与展望
- dart基础之异步编程
- matlab2c使用c++实现matlab函数系列教程-disp函数
- python︱apple开源机器学习框架turicreate中的SFrame——新形态pd.DataFrame
- 南开大学c语言100题,计算机二级C语言上机(南开大学)100题.doc
- 区块链开发入门到精通
- 网易云课堂资源合集百度云分享 下载
- Maven Helper插件下载
- JavaScript 每日一题 #11
- 微分几何笔记(1):概念与定义
- arduino与801s振动传感器读取振动频率