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

文章目录

  • 第八章 萤火虫算法
    • 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]:

  1. 假设所有萤火虫都是雌雄同体的,因此一只萤火虫可能会被其他任何萤火虫吸引。
  2. 萤火虫的亮度决定其吸引力的大小,较亮的萤火虫吸引较暗的萤火虫。如果没有萤火虫比被考虑的萤火虫更亮,它就会随机移动。
  3. 函数的最优值与萤火虫的亮度成正比。

光强(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​=I0​e−γ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​+β0​e−γr2+αε(4)

其中t表示代数,xt表示个体的当前位置,β0exp(-γr2)是吸引度,αε是随机项。下一步将会计算萤火虫之间的吸引度:
β = β 0 e ( − γ × r 2 ) (5) \beta = {\beta _0}{e^{\left( { - \gamma \times {r^2}} \right)}} \tag 5 β=β0​e(−γ×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​+β0​e−γ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​={β0​e(−γ×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​=⎩⎨⎧​β0​e(rij​f(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−Gmax​t​)×α(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)进行更新。

参考文献

  1. Yang, X.-S. Firefly Algorithms for Multimodal Optimization. in Stochastic Algorithms: Foundations and Applications. 2009. Berlin, Heidelberg: Springer Berlin Heidelberg.
  2. 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.
  3. Wang, H., et al., Firefly algorithm with adaptive control parameters. Soft Computing, 2017. 21(17): p. 5091-5102.
  4. 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.
  5. Wang, H., et al., Firefly algorithm with neighborhood attraction. Information Sciences, 2017. 382-383: p. 374-387.

群体智能优化算法之萤火虫算法(Firefly Algorithm,FA)相关推荐

  1. 优化算法笔记|萤火虫算法理解及实现

    萤火虫算法 一.萤火虫算法背景知识 二.萤火虫算法 三.萤火虫算法实现 四.算法分析 一.萤火虫算法背景知识 萤火虫算法(Firefly Algorithm, FA)是基于萤火虫的闪光行为,它是一种用 ...

  2. matlab智能算法之萤火虫算法

    智能算法之萤火虫算法 1.起源 2.萤火虫发光求偶 2.1 雌雄萤火虫 2.2 求偶过程 3.原理 3.1 闪光强度 3.2 吸引力 3.3 萤火虫移动 4.具体流程 1.起源 萤火虫群优化算法是20 ...

  3. 萤火虫算法_萤火虫算法(二)

    点击上方"蓝字"关注我们吧! 前面已经简单介绍了萤火虫算法,接下来详细介绍萤火虫算法. 天然萤火虫的行为天然萤火虫在寻找猎物.吸引配偶和保护领地时表现出惊人的闪光行为.萤火虫的吸引 ...

  4. 优化算法之萤火虫算法(firefly algorithm)

    智能优化算法有很多是模仿自然界中的生物行为进行的,例如众所周知的粒子群算法.遗传算法等,最近新看到一种算法,萤火虫优化算法(firefly algorithm). FA主要是利用萤火虫发光的特点进行随 ...

  5. 智能优化算法之萤火虫算法(FA)的实现(Python附源码)

    一.萤火虫算法的实现思路 萤火虫算法(Firefly Algorithm,FA)是由Yang于2010年提出的一种群智能优化算法,在自然界中,萤火虫之间通过自身发光来吸引异性前来交配以及吸引猎物进行捕 ...

  6. 【优化求解】基于matlab粒子群算法和帝国殖民算法和萤火虫算法求解最小生成树优化问题【含Matlab源码 2376期】

    ⛄一.粒子群算法简介 1 引言 自然界中的鸟群和鱼群的群体行为一直是科学家的研究兴趣所在.生物学家Craig Reynolds在1987年提出了一个非常有影响的鸟群聚集模型,在他的仿真中,每一个个体都 ...

  7. 【优化算法】萤火虫算法matlab

    萤火虫之间通过闪光来进行信息的交互,同时也能起到危险预警的作用.我们知道从光源到特定距离r处的光强服从平方反比定律,也就是说光强I随着距离 r 的增加会逐渐降低,此外空气也会吸收部分光线,导致光线随着 ...

  8. 【智能优化算法】萤火虫优化算法 (Firefly algorithm,FA),2009

    前言 萤火虫优化算法(Firefly algorithm,FA).由英国剑桥大学的 Yang 等人于 2009 年提出,主要模拟了萤火虫根据个体亮度而相互吸引的行为.作为最新的群智能优化算法之一 , ...

  9. 《Nature-Inspired Metaheuristic Algorithms》——萤火虫算法 FIREFLY ALGORITHM

    萤火虫算法 1.1 萤火虫的生物现象 在热带的夏夜中,萤火虫会聚集在一起产生短暂而有节奏的光,不同种类的萤火虫的闪光模式往往是不同的.这种闪光的基本功能有三个:①是吸引交配的异性伙伴 ②则是吸引潜在的 ...

最新文章

  1. python与excel做数据可视化-python操作Excel、读取CVS与数据可视化
  2. Python学会使用虚拟环境——pipenv
  3. boost::core模块实现分配构造throws
  4. DGbroker故障切换示例
  5. Struts 整合 SpringMVC
  6. Modbus协议栈开发笔记之六:Modbus RTU Master开发
  7. Auto Control 001 自动控制的一般概念
  8. java.util.concurrent包(2)——线程池
  9. MWeb建立静态网站/博客的基础教程
  10. 苍穹影视V20七彩视界免授权开源源码
  11. JavaCV开发详解之27补充篇1:使用javacv把音视频切割成多个音频分片文件,以mp3为例,把视频切割成MP3分片文件
  12. Mac pip confirming SSL certificate
  13. 面包屑效果(element + vue)
  14. Java中BIO,NIO,AIO
  15. 常见蛋白质种类_常见的蛋白质食物有哪些
  16. 用Turtlebot3实现基于深度强化学习的多移动机器人导航避障的仿真训练(附源码)
  17. 用u盘装系统的操作全程图解
  18. 爬虫python可以干嘛_python爬虫可以用来做什么?
  19. 简单Android app之 一键签到 开发日记
  20. python和易语言抓包_抓包能获取到网页源码,用易语言却获取不到,如何解决?...

热门文章

  1. Android Stdio从一个界面跳转到另一个界面
  2. F28335 - bootloader升级相关cmd配置
  3. 支持JavaWeb项目Eclipse版本
  4. IEEE TIE主编——如何发表高水平期刊论文
  5. 50多亿条个人信息泄露,背后竟有“内鬼”作祟
  6. RecyclerView 自带的上拉加载更多
  7. php filereader,FileReader上传文件
  8. ddr3ddr4 lpddr4速率_lpddr3和ddr4哪个快
  9. 原油重回80美元未必好,警惕“原油宝事件”重演
  10. iBatis iterate元素使用方法详解=