群体智能优化算法之萤火虫算法(Firefly Algorithm,FA)
获取更多资讯,赶快关注上面的公众号吧!
文章目录
- 第八章 萤火虫算法
- 8.1 介绍
- 8.2 天然萤火虫的行为
- 8.3 萤火虫算法
- 8.4 萤火虫算法改进
- 参考文献
第八章 萤火虫算法
8.1 介绍
萤火虫(firefly)种类繁多,主要分布在热带地区。大多数萤火虫在短时间内产生有节奏的闪光。这种闪光是由于生物发光的一种化学反应,萤火虫的闪光模式因种类而异。萤火虫算法(FA)是基于萤火虫的闪光行为,它是一种用于全局优化问题的智能随机算法,由Yang Xin-She(2009)[1]提出。萤火虫通过下腹的一种化学反应-生物发光(bioluminescence)发光。这种生物发光是萤火虫求偶仪式的重要组成部分,也是雄性萤火虫和雌性萤火虫交流的主要媒介,发出光也可用来引诱配偶或猎物,同时这种闪光也有助于保护萤火虫的领地,并警告捕食者远离栖息地。在FA中,认为所有的萤火虫都是雌雄同体的,无论性别如何,它们都互相吸引。该算法的建立基于两个关键的概念:发出的光的强度和两个萤火虫之间产生的吸引力的程度。
8.2 天然萤火虫的行为
天然萤火虫在寻找猎物、吸引配偶和保护领地时表现出惊人的闪光行为,萤火虫大多生活在热带环境中。一般来说,它们产生冷光,如绿色、黄色或淡红色。萤火虫的吸引力取决于它的光照强度,对于任何一对萤火虫来说,较亮的萤火虫会吸引另一只萤火虫。所以,亮度较低的个体移向较亮的个体,同时光的亮度随着距离的增加而降低。萤火虫的闪光模式可能因物种而异,在一些萤火虫物种中,雌性会利用这种现象猎食其他物种;有些萤火虫在一大群萤火虫中表现出同步闪光的行为来吸引猎物,雌萤火虫从静止的位置观察雄萤火虫发出的闪光,在发现一个感兴趣趣的闪光后,雌性萤火虫会做出反应,发出闪光,求偶仪式就这样开始了。一些雌性萤火虫会产生其他种类萤火虫的闪光模式,来诱捕雄性萤火虫并吃掉它们。
8.3 萤火虫算法
萤火虫算法模拟了萤火虫的自然现象。真实的萤火虫自然地呈现出一种离散的闪烁模式,而萤火虫算法假设它们总是在发光。为了模拟萤火虫的这种闪烁行为,Yang Xin-She提出了了三条规则(Yang,2009)[1]:
- 假设所有萤火虫都是雌雄同体的,因此一只萤火虫可能会被其他任何萤火虫吸引。
- 萤火虫的亮度决定其吸引力的大小,较亮的萤火虫吸引较暗的萤火虫。如果没有萤火虫比被考虑的萤火虫更亮,它就会随机移动。
- 函数的最优值与萤火虫的亮度成正比。
光强(I)与光源距离(r)服从平方反比定律,因此由于空气的吸收,光的强度(I)随着与光源距离的增加而减小,这种现象将萤火虫的可见性限定在了非常有限的半径内:
I ∝ 1 r 2 (1) I \propto \frac{1}{{{r^2}}}\tag 1 I∝r21(1)
萤火虫算法的主要实现步骤如下:
I r = I 0 e − γ r 2 (2) {I_r} = {I_0}{e^{ - \gamma {r^2}}}\tag 2 Ir=I0e−γr2(2)
其中I0为距离r=0时的光强(最亮),即自身亮度,与目标函数值有关,目标值越优,亮度越亮;γ为吸收系数,因为荧光会随着距离的增加和传播媒介的吸收逐渐减弱,所以设置光强吸收系数以体现此特性,可设置为常数;r表示两个萤火虫之间的距离。有时也使用单调递减函数,如下式所示。
I r = I 0 1 + γ r 2 (3) {I_r} = \frac{{{I_0}}}{{1 + \gamma {r^2}}}\tag 3 Ir=1+γr2I0(3)
第二步为种群初始化:
x t + 1 = x t + β 0 e − γ r 2 + α ε (4) {x_{t + 1}} = {x_t} + {\beta _0}{e^{ - \gamma {r^2}}} + \alpha \varepsilon \tag 4 xt+1=xt+β0e−γr2+αε(4)
其中t表示代数,xt表示个体的当前位置,β0exp(-γr2)是吸引度,αε是随机项。下一步将会计算萤火虫之间的吸引度:
β = β 0 e ( − γ × r 2 ) (5) \beta = {\beta _0}{e^{\left( { - \gamma \times {r^2}} \right)}} \tag 5 β=β0e(−γ×r2)(5)
其中β0表示r=0时的最大吸引度。
下一步,低亮度萤火虫向较亮萤火虫运动:
x i t + 1 = x i t + β 0 e − γ r i j 2 ( x j t − x i t ) + α ε i t (6) x_i^{t + 1} = x_i^t + {\beta _0}{e^{ - \gamma r_{ij}^2}}\left( {x_j^t - x_i^t} \right) + \alpha \varepsilon _i^t\tag 6 xit+1=xit+β0e−γrij2(xjt−xit)+αεit(6)
最后一个阶段,更新光照强度,并对所有萤火虫进行排序,以确定当前的最佳解决方案。萤火虫算法的主要步骤如下所示。
Begin初始化算法基本参数:设置萤火虫数目n,最大吸引度β0,光强吸收系数γ,步长因子α,最大迭代次数MaxGeneration或搜索精度ε;初始化:随机初始化萤火虫的位置,计算萤火虫的目标函数值作为各自最大荧光亮度I0;t=1while(t<=MaxGeneration || 精度>ε)计算群体中萤火虫的相对亮度I(式2)和吸引度β(式5),根据相对亮度决定萤火虫的移动方向;更新萤火虫的空间位置,对处在最佳位置的萤火虫进行随机移动(式6);根据更新后萤火虫的位置,重新计算萤火虫的亮度I0;t=t+1end while输出全局极值点和最优个体值。
end
萤火虫算法与粒子群算法(PSO)和细菌觅食算法(BFA)有相似之处。在位置更新方程中,FA和PSO都有两个主要分量:一个是确定性的,另一个是随机性的。在FA中,吸引力由两个组成部分决定:目标函数和距离,而在BFA中,细菌之间的吸引力也有两个组成部分:适应度和距离。萤火虫算法实现时,整个种群(如n)需要两个内循环,特定迭代需要一个外循环(如I),因此最坏情况下FA的计算复杂度为O(n2I)。
8.4 萤火虫算法改进
萤火虫算法只有10年(2009-2019)的历史,但由于其简单和易于实现,受到优化领域的研究人员和科学家越来越多的欢迎。Francisco,Costa和Rocha(2014)[2]对萤火虫算法进行了一些实验,使用了数学函数范数。范数是一个严格分配非负长度的函数。(Francisco et al.,2014)[2]提出了两种计算吸引力函数的新方法。首先,利用p-范数计算两个萤火虫之间的距离。第二种方法提出了两个新的吸引力函数β1和β2,如下所示。
β i j 1 = { β 0 e ( − γ × r i j 2 ) if r i j ≤ d 0.5 if r i j > d (7) \beta_{i j}^{1}=\left\{\begin{array}{ll}{\beta_{0} e^{\left(-\gamma \times r_{i j}^{2}\right)}} & {\text { if } r_{i j} \leq d} \\ {0.5} & {\text { if } r_{i j}>d}\end{array}\right.\tag 7 βij1={β0e(−γ×rij2)0.5 if rij≤d if rij>d(7)
β i j 2 = { β 0 e ( f ( x i ) − f ( x j ) r i j ) if f ( x i ) > f ( x j ) 0 otherwise (8) \beta_{i j}^{2}=\left\{\begin{array}{cc}\beta_{0} e^{\left(\frac{f\left(x_{i}\right)-f\left(x_{j}\right)}{r_{i j}}\right)} & {\text { if } f\left(x_{i}\right)>f\left(x_{j}\right)} \\ {0} & {\text { otherwise }}\end{array}\right.\tag 8 βij2=⎩⎨⎧β0e(rijf(xi)−f(xj))0 if f(xi)>f(xj) otherwise (8)
Wang et al.(2017)[3]提出了FA自适应参数,根据迭代次数修改其值:
α ( t + 1 ) = ( 1 − t G max ) × α ( t ) (9) \alpha (t + 1) = \left( {1 - \frac{t}{{{G_{\max }}}}} \right) \times \alpha (t)\tag 9 α(t+1)=(1−Gmaxt)×α(t)(9)
α ( t + 1 ) = ( 1 − F e v a l M a x − F e v a l ) × α ( t ) (10) \alpha (t + 1) = \left( {1 - \frac{{Feval}}{{Max - Feval}}} \right) \times \alpha (t)\tag {10} α(t+1)=(1−Max−FevalFeval)×α(t)(10)
其中t表示当前迭代次数,α的初始值为0.5。第一个等式停止于Gmax,第二个等式停止于最大评估次数。Wang等也建议按照下式改变吸引度系数β:
β 0 ( t + 1 ) = { rand 1 , if rand 2 < 0.5 β 0 ( t ) else (11) \beta_{0}(t+1)=\left\{\begin{array}{ll}{\operatorname{rand}_{1},} & {\text { if } \operatorname{rand}_{2}<0.5} \\ {\beta_{0}(t)} & {\text { else }}\end{array}\right.\tag {11} β0(t+1)={rand1,β0(t) if rand2<0.5 else (11)
其中rand1和rand2均为均匀分布产生的随机数。
Chuah, Wong, and Hassan(2017)[4]在萤火虫算法中混合了三种不同的策略,开发了一种新的FA变体,并将其命名为基于swap的离散FA(SDFA),用于解决旅行商问题。该新的策略将萤火虫算法与重置策略、最近邻初始化和固定半径最近邻相结合。这里,使用交换距离策略计算两个萤火虫之间的距离,如下所示:
r i j = d s w a p N − 1 × 10 (12) {r_{ij}} = \frac{{{d_{swap}}}}{{N - 1}} \times 10\tag {12} rij=N−1dswap×10(12)
其中dswap表示在[0,N]之间的交换距离(swap distance),N代表城市数量。这意味着城市间距离的增加会导致吸引力βij的逐渐下降。在这个新版本中加入了最近邻策略,该策略随机从一个城市开始,一直选择邻近的城市,直到循环完成。此外,重置方法用于跳过局部最优。
Wang等人(2017)[5]利用FA中的交叉策略开发了一个多目标的FA版本。所提出的算法按照如下生成新的解:
x i d ∗ ( t + 1 ) = { x i d ( t + 1 ) if rand d ( 0 , 1 ) ≤ C R ∨ d = d rand x i d ( t ) otherwise (13) x_{i d}^{*}(t+1)=\left\{\begin{array}{ll}{x_{i d}(t+1)} & {\text { if } \operatorname{rand}_{d}(0,1) \leq C R \vee d=d_{\text {rand }}} \\ {x_{i d}(t)} & {\text { otherwise }}\end{array}\right.\tag {13} xid∗(t+1)={xid(t+1)xid(t) if randd(0,1)≤CR∨d=drand otherwise (13)
其中t是当前迭代次数,CR表示交叉率,randd(0,1)是[0,1]之间的任意数,对于D维问题,drand是[0,D]之间的任意数,参数α通过式(9)和式(10)进行更新。
参考文献
- Yang, X.-S. Firefly Algorithms for Multimodal Optimization. in Stochastic Algorithms: Foundations and Applications. 2009. Berlin, Heidelberg: Springer Berlin Heidelberg.
- Francisco, R.B., M.F.P. Costa, and A.M.A.C. Rocha. Experiments with Firefly Algorithm. in Computational Science and Its Applications – ICCSA 2014. 2014. Cham: Springer International Publishing.
- Wang, H., et al., Firefly algorithm with adaptive control parameters. Soft Computing, 2017. 21(17): p. 5091-5102.
- Chuah, H.S., L.-P. Wong, and F.H. Hassan. Swap-Based Discrete Firefly Algorithm for Traveling Salesman Problem. in Multi-disciplinary Trends in Artificial Intelligence. 2017. Cham: Springer International Publishing.
- Wang, H., et al., Firefly algorithm with neighborhood attraction. Information Sciences, 2017. 382-383: p. 374-387.
群体智能优化算法之萤火虫算法(Firefly Algorithm,FA)相关推荐
- 优化算法笔记|萤火虫算法理解及实现
萤火虫算法 一.萤火虫算法背景知识 二.萤火虫算法 三.萤火虫算法实现 四.算法分析 一.萤火虫算法背景知识 萤火虫算法(Firefly Algorithm, FA)是基于萤火虫的闪光行为,它是一种用 ...
- matlab智能算法之萤火虫算法
智能算法之萤火虫算法 1.起源 2.萤火虫发光求偶 2.1 雌雄萤火虫 2.2 求偶过程 3.原理 3.1 闪光强度 3.2 吸引力 3.3 萤火虫移动 4.具体流程 1.起源 萤火虫群优化算法是20 ...
- 萤火虫算法_萤火虫算法(二)
点击上方"蓝字"关注我们吧! 前面已经简单介绍了萤火虫算法,接下来详细介绍萤火虫算法. 天然萤火虫的行为天然萤火虫在寻找猎物.吸引配偶和保护领地时表现出惊人的闪光行为.萤火虫的吸引 ...
- 优化算法之萤火虫算法(firefly algorithm)
智能优化算法有很多是模仿自然界中的生物行为进行的,例如众所周知的粒子群算法.遗传算法等,最近新看到一种算法,萤火虫优化算法(firefly algorithm). FA主要是利用萤火虫发光的特点进行随 ...
- 智能优化算法之萤火虫算法(FA)的实现(Python附源码)
一.萤火虫算法的实现思路 萤火虫算法(Firefly Algorithm,FA)是由Yang于2010年提出的一种群智能优化算法,在自然界中,萤火虫之间通过自身发光来吸引异性前来交配以及吸引猎物进行捕 ...
- 【优化求解】基于matlab粒子群算法和帝国殖民算法和萤火虫算法求解最小生成树优化问题【含Matlab源码 2376期】
⛄一.粒子群算法简介 1 引言 自然界中的鸟群和鱼群的群体行为一直是科学家的研究兴趣所在.生物学家Craig Reynolds在1987年提出了一个非常有影响的鸟群聚集模型,在他的仿真中,每一个个体都 ...
- 【优化算法】萤火虫算法matlab
萤火虫之间通过闪光来进行信息的交互,同时也能起到危险预警的作用.我们知道从光源到特定距离r处的光强服从平方反比定律,也就是说光强I随着距离 r 的增加会逐渐降低,此外空气也会吸收部分光线,导致光线随着 ...
- 【智能优化算法】萤火虫优化算法 (Firefly algorithm,FA),2009
前言 萤火虫优化算法(Firefly algorithm,FA).由英国剑桥大学的 Yang 等人于 2009 年提出,主要模拟了萤火虫根据个体亮度而相互吸引的行为.作为最新的群智能优化算法之一 , ...
- 《Nature-Inspired Metaheuristic Algorithms》——萤火虫算法 FIREFLY ALGORITHM
萤火虫算法 1.1 萤火虫的生物现象 在热带的夏夜中,萤火虫会聚集在一起产生短暂而有节奏的光,不同种类的萤火虫的闪光模式往往是不同的.这种闪光的基本功能有三个:①是吸引交配的异性伙伴 ②则是吸引潜在的 ...
最新文章
- python与excel做数据可视化-python操作Excel、读取CVS与数据可视化
- Python学会使用虚拟环境——pipenv
- boost::core模块实现分配构造throws
- DGbroker故障切换示例
- Struts 整合 SpringMVC
- Modbus协议栈开发笔记之六:Modbus RTU Master开发
- Auto Control 001 自动控制的一般概念
- java.util.concurrent包(2)——线程池
- MWeb建立静态网站/博客的基础教程
- 苍穹影视V20七彩视界免授权开源源码
- JavaCV开发详解之27补充篇1:使用javacv把音视频切割成多个音频分片文件,以mp3为例,把视频切割成MP3分片文件
- Mac pip confirming SSL certificate
- 面包屑效果(element + vue)
- Java中BIO,NIO,AIO
- 常见蛋白质种类_常见的蛋白质食物有哪些
- 用Turtlebot3实现基于深度强化学习的多移动机器人导航避障的仿真训练(附源码)
- 用u盘装系统的操作全程图解
- 爬虫python可以干嘛_python爬虫可以用来做什么?
- 简单Android app之 一键签到 开发日记
- python和易语言抓包_抓包能获取到网页源码,用易语言却获取不到,如何解决?...
热门文章
- Android Stdio从一个界面跳转到另一个界面
- F28335 - bootloader升级相关cmd配置
- 支持JavaWeb项目Eclipse版本
- IEEE TIE主编——如何发表高水平期刊论文
- 50多亿条个人信息泄露,背后竟有“内鬼”作祟
- RecyclerView 自带的上拉加载更多
- php filereader,FileReader上传文件
- ddr3ddr4 lpddr4速率_lpddr3和ddr4哪个快
- 原油重回80美元未必好,警惕“原油宝事件”重演
- iBatis iterate元素使用方法详解=