【matlab】人工智能的仿生优化算法之萤火虫算法讲解(Firefly Algorithm)
算法PPT另附
目录
- 一、 天然萤火虫的行为
- 二、算法原则
- 1、无性别
- 2、最优解
- 3、吸引力法则
- 4、距离反比
- 三、伪代码
- 四、萤火虫算法详解
- 1、算法公式
- 2、算法代码
- 参考文献
一、 天然萤火虫的行为
天然萤火虫在寻找猎物、吸引配偶和保护领地时表现出惊人的闪光行为。萤火虫的吸引力取决于它的光照强度,对于任何一对萤火虫来说,较亮的萤火虫会吸引另一只萤火虫。所以,亮度较低的个体移向较亮的个体,同时光的亮度随着距离的增加而降低。
有些萤火虫在一大群萤火虫中表现出同步闪光的行为来吸引猎物,雌萤火虫从静止的位置观察雄萤火虫发出的闪光,在发现一个感兴趣的闪光后,雌性萤火虫会做出反应,发出闪光,求偶仪式就这样开始了。一些雌性萤火虫会产生其他种类萤火虫的闪光模式,来诱捕雄性萤火虫并吃掉它们。
二、算法原则
根据以上天然萤火虫的行为,我们不难得出以下几个算法原则。
1、无性别
无论是求偶还是捕食,都依赖于萤火虫自身通过发光实现吸引的目的。无性别即要求将所有的萤火虫视作无性别,且可吸引别的萤火虫。
2、最优解
萤火虫的亮度由它周围的环境所决定。对于最优解问题,亮度可以简单地被看做最优解的值。当它处在一个最合适的位置上时,亮度最亮,可视为找到了最优解。
3、吸引力法则
亮度高的萤火虫会吸引亮度低的萤火虫。吸引力与亮度成正比,同时会随着两者距离的增加而减少。如果一只萤火虫发现没有比它更亮的萤火虫,那么它将会随机移动。
4、距离反比
由于空气的吸收,光的强度I随着与光源距离r的增加而减小
三、伪代码
在看公式的推导之前,知道了前面的算法原则之后,我们可以先来看一下萤火虫算法的流程走向。
Begin初始化算法基本参数:设置萤火虫数目n,最大吸引度β0,光强吸收系数γ,步长因子α,最大迭代次数MaxGeneration或搜索精度ε;初始化:随机初始化萤火虫的位置,计算萤火虫的目标函数值作为各自最大荧光亮度I0;t=1while(t<=MaxGeneration || 精度>ε)计算群体中萤火虫的相对亮度I和吸引度β,根据相对亮度决定萤火虫的移动方向;更新萤火虫的空间位置,对处在最佳位置的萤火虫进行随机移动;根据更新后萤火虫的位置,重新计算萤火虫的亮度I0;t=t+1end while输出全局极值点和最优个体值。
end
四、萤火虫算法详解
1、算法公式
光强(I)与光源距离(r)服从平方反比定律,因此由于空气的吸收,光的强度(I)随着与光源距离的增加而减小,这种现象将萤火虫的可见性限定在了非常有限的半径内:
I∝1r2I ∝\frac{1}{r^2} I∝r21
这里查了一下为什么光强是跟距离的平方成反比而不是普通的距离反比。
光强和光亮度成正比,光亮度是发光表面在指定方向的发光强度与垂直且指定方向的发光面的面积之比,所以这里写是跟r²成反比。
论文中给出了两个计算光强的公式
I(r)=Isr2(1)I(r) =\frac{ I_s}{r^2} \tag{1} I(r)=r2Is(1)
I=I0e(−γr)(2)I = I_0e^{(-γr)}\tag{2} I=I0e(−γr)(2)
由于当r=0 时,公式(1)数值上极大,与实际不符,故而综合(1)(2)得出公式(3)
I=I0e(−γr2)(3)I = I_0e^{(-γr^2)} \tag{3} I=I0e(−γr2)(3)
其中I0为距离r=0时的光强(最亮),即自身亮度,与目标函数值有关,目标值越优,亮度越亮;γ为吸收系数,因为荧光会随着距离的增加和传播媒介的吸收逐渐减弱,所以设置光强吸收系数以体现此特性,可设置为常数;r表示两个萤火虫之间的距离。
请注意,这里的距离不一定是欧氏距离,可以根据实际情况选用任何距离算法.
有时我们想选用别的递减速度没有那么快的函数去替代公式(3)
I=I01+γr2(4)I = \frac{ I_0}{1+γr^2}\tag{4} I=1+γr2I0(4)
让我们来看一下(3)(4)的函数走向
可知(4)确实比(3)递减的更慢一些。
那么为什么可以用(4)去替代(3)呢?
这两个公式展开后长这样↓
可以看出,在O(r³)级别以内二者是相等的,r→0,这两个公式近似相等。
第二步为种群初始化:
xt+1=xt+β0e−γr2+αε(5)x_{t+1} = x_t+β_0e^{−γr^2}+αε \tag {5} xt+1=xt+β0e−γr2+αε(5)
其中t表示代数,xt表示个体的当前位置,β0e−γr2β_0e^{-γr2}β0e−γr2是吸引度,αε是随机项。
因为吸引度与亮度成正比,亮度和光强成正比,那么计算萤火虫之间的吸引度:
β=β0e−γr2(6)β=β_0e^{−γr^2} \tag 6 β=β0e−γr2(6)
其中β0β_0β0表示r=0时的最大吸引度。
理论上,γ∈[0,∞)
实际上,γ是由实际的特征长度决定的
因此,在大多数应用中,γ取[0.01,100]
下一步,低亮度萤火虫向较亮萤火虫运动:
xit+1=xit+β0e−γrij2(xjt−xit)+αεit(6)x_i^{t+1} =x_i^t +β_0e^ {−γr_ {ij} ^2} (x_j^t −x_ i ^t )+αε _i ^t\tag6 xit+1=xit+β0e−γrij2(xjt−xit)+αεit(6)
一般而言,β0β_0β0取1,α∈[0,1]\alpha∈[0,1]α∈[0,1],ε取N(0,1)或其他。若是每个维度的α相差较大,可另设SkS_kSk取代,k∈(1,2,3……)k∈(1,2,3……)k∈(1,2,3……)
2、算法代码
以下是个不成熟的小代码,理论上是这么写,实际上的参数并没有调好
clc,clear
% 构造目标函数
x = linspace(-5,5,10000);
y = 2*sin(3*x)+3*cos(x);
% 原始点位置-光强图
plot(x,y)
hold on;
n=3; % 种群个体数目
x_i = -5 + (5+5) * rand(n,1); % 随机产生n个个体
y_i = 2*sin(3*x_i)+3*cos(x_i);
plot(x_i,y_i,'o')globe_ans = max(y); % 存储函数内最大光强
gama = 0.01; % 光强吸收系数
beta = 1; % 最大吸引度
alpha = 0.01; % 步长
maxGeneration = 1000000;% 迭代总次数
t = 1; % 目前的迭代次数
globe_I = max(y_i); % 初始种群的最大光强
temp_I = 0;while (t<=maxGeneration)for i = 1:nfor j = 1:i% 若j位置的光强大于i位置的,则i位置向j位置发生移动if y_i(j)>y_i(i) if x_i(i)>5x_i(i)=x_i(i)+beta*exp(-gama*(x_i(j)-x_i(i))^2)*(x_i(j)-x_i(i))-alpha* rand(1);elseif x_i(i)<-5x_i(i)=x_i(i)+beta*exp(-gama*(x_i(j)-x_i(i))^2)*(x_i(j)-x_i(i))+alpha* rand(1);elsex_i(i)=x_i(i)+beta*exp(-gama*(x_i(j)-x_i(i))^2)*(x_i(j)-x_i(i))+alpha*(-1 + (1 +1 )) * rand(1);endendend% 若i位置的光强为最大光强,则进行随机移动。if y_i(i) == max(y_i) x_i(i)=x_i(i)+alpha*(-1 + (1 +1 )) * rand(1);endend% 更新光强y_i = 2*sin(3*x_i)+3*cos(x_i);temp_I = max(y_i); % 最优个体值% 如果个体最优值大于全局最优值,则进行更新。if(temp_I>globe_I)globe_I = temp_I;x_iendt=t+1;
endglobe_I
globe_ans
勉强看个效果图
- 初始化种群数量为3
- 函数为2sin(3x)+3cos(x)
- 红色小圆点代表个体所在位置
- 最高峰值点代表最大光强,其数值约为4.6528
最后全局最优解和理论上的最优解数值相同,意味着找到了光强最亮的那个点
参考文献
1、X.-S. Yang, “Firefly algorithms for multimodal optimization”, in: Stochastic Algorithms: Foundations and Applications, SAGA 2009,
Lecture Notes in Computer Sciences, Vol. 5792, pp. 169-178 (2009).
2、群体智能优化算法之萤火虫算法
【matlab】人工智能的仿生优化算法之萤火虫算法讲解(Firefly Algorithm)相关推荐
- matlab智能算法之萤火虫算法
智能算法之萤火虫算法 1.起源 2.萤火虫发光求偶 2.1 雌雄萤火虫 2.2 求偶过程 3.原理 3.1 闪光强度 3.2 吸引力 3.3 萤火虫移动 4.具体流程 1.起源 萤火虫群优化算法是20 ...
- 群体智能优化算法之萤火虫算法(Firefly Algorithm,FA)
获取更多资讯,赶快关注上面的公众号吧! 文章目录 第八章 萤火虫算法 8.1 介绍 8.2 天然萤火虫的行为 8.3 萤火虫算法 8.4 萤火虫算法改进 参考文献 第八章 萤火虫算法 8.1 介绍 萤 ...
- 萤火虫算法_萤火虫算法(二)
点击上方"蓝字"关注我们吧! 前面已经简单介绍了萤火虫算法,接下来详细介绍萤火虫算法. 天然萤火虫的行为天然萤火虫在寻找猎物.吸引配偶和保护领地时表现出惊人的闪光行为.萤火虫的吸引 ...
- 【优化求解】基于matlab粒子群算法和帝国殖民算法和萤火虫算法求解最小生成树优化问题【含Matlab源码 2376期】
⛄一.粒子群算法简介 1 引言 自然界中的鸟群和鱼群的群体行为一直是科学家的研究兴趣所在.生物学家Craig Reynolds在1987年提出了一个非常有影响的鸟群聚集模型,在他的仿真中,每一个个体都 ...
- 【优化算法】萤火虫算法matlab
萤火虫之间通过闪光来进行信息的交互,同时也能起到危险预警的作用.我们知道从光源到特定距离r处的光强服从平方反比定律,也就是说光强I随着距离 r 的增加会逐渐降低,此外空气也会吸收部分光线,导致光线随着 ...
- 人工智能自动组方实习笔记2—萤火虫算法
本文记录的是在实习人工智能自动组方时有关聚类分类时阅读过的一篇相关论文,虽然在最后没有使用该算法思想,但我觉得这种随机搜索最优解的方法对于很多场景都有应用,则将其整理记录下来. 如果有哪位小伙伴在做相 ...
- 智能优化算法之萤火虫算法(FA)的实现(Python附源码)
一.萤火虫算法的实现思路 萤火虫算法(Firefly Algorithm,FA)是由Yang于2010年提出的一种群智能优化算法,在自然界中,萤火虫之间通过自身发光来吸引异性前来交配以及吸引猎物进行捕 ...
- 优化算法之萤火虫算法(firefly algorithm)
智能优化算法有很多是模仿自然界中的生物行为进行的,例如众所周知的粒子群算法.遗传算法等,最近新看到一种算法,萤火虫优化算法(firefly algorithm). FA主要是利用萤火虫发光的特点进行随 ...
- 优化算法笔记|萤火虫算法理解及实现
萤火虫算法 一.萤火虫算法背景知识 二.萤火虫算法 三.萤火虫算法实现 四.算法分析 一.萤火虫算法背景知识 萤火虫算法(Firefly Algorithm, FA)是基于萤火虫的闪光行为,它是一种用 ...
- 电力系统优化调度matlab,[转载]水电站中长期优化调度的粒子群算法MATLAB源码
水电站中长期优化调度主要是在满足电力系统出力要求以及下游综合用水要求等的前提下,合理地安排水库各个月份的发电流量,使得调度期内的总发电量最大.即在给定预报入库流量过程线.下游综合用水流量过程线.调度期 ...
最新文章
- php 正则匹配反向引用,php正则表达式子模式的反向引用学习笔记
- P1131 [ZJOI2007] 时态同步
- React简单聊聊【面试】
- AcWing 875. 快速幂
- 应届毕业生软件测试面试流程、面试问题总结
- 计算机组成原理4位快速加法器
- 糗事百科成人版段子爬虫实战
- linux防护勒索病毒的补丁,抵御Petya勒索病毒的最新办法
- ubuntu命令行查看dns_Dog-用于DNS查询的命令行工具
- 视频教程-微信公众号实战(Java版本,带前后台)-微信开发
- js:数组转链表,链表转数组
- 什么是nuget?nuget包是如何管理
- Go语言学习之打印九九乘法表
- 三角函数π/2转化_人工智能数学基础1:三角函数的定义、公式及固定角三角函数值...
- 【已解决】在Overleaf/latex环境编辑Elsevier -> JVCI模板,参考文献显示为问号/不显示参考文献的问题
- 【玩计算机才是最好的出路】
- 2021年中国工业和商业LED照明市场趋势报告、技术动态创新及2027年市场预测
- 微信开放平台创建android应用时怎么获取应用签名
- 【毕业设计】Stm32家庭有害气体检测系统 - 物联网 嵌入式 单片机
- 【Unity技术积累】鼠标控制人物移动 导航系统 动画
热门文章
- 湖北省小学生计算机大赛,2019年湖北省中小学电脑制作活动机器人竞赛类暨创客竞赛类项目选拔赛圆满落幕...
- AlphaGo的深度学习系统Tensorflow详细安装入门
- 手机上最好用的五笔输入法_手机输入法之争:九宫格和全键盘到底哪个更好用...
- 第四章 政策过程及其理论模型
- C++代码示例2 ~ 求立方体的面积和体积并求出两个立方体是否相等
- Storm 实时分析系统详解
- 计算机组成原理期末考试题库(超级多的那种)
- 服务器网赚项目,草根站长的一个网赚项目的分析和总结
- linux中c 网络编程,Linux下C网络编程(socket)
- 数据挖掘导论 笔记3