在萤火虫优化算法中,萤火虫发出光亮的主要目的是作为一个信号系统,以吸引其他萤火虫个体。其种群更新基于以下策略:

1)萤火虫会被吸引到比他更亮的萤火虫那里。

                      (1)

为萤火虫的最大亮度,与目标值函数相关,目标值函数越大,其自身亮度强度越强;

为光强吸收系数,亮度会随着距离的增大和传播媒介的吸收而逐渐减弱;

为萤火虫i与萤火虫j的空间距离。

                (2)

2)萤火虫的吸引力与其自身亮度成正比,对于任何两只萤火虫,其中一只会向着亮度比他更高的移动,亮度随距离的增大而减弱。萤火虫的吸引度为:

                    (3)

为最大吸引度;

3)若没有找到一个比给定的萤火虫亮度更亮的萤火虫,则该萤火虫随机移动。萤火虫的位置更新公式为:

  (4)

分别为萤火虫i和萤火虫j所在的空间位置;

为步长因子,取值范围为[0,1];

rand为[0,1]间的随机数;

Fig1.萤火虫算法流程图

萤火虫算法完整matlab程序如下:

 %pop——种群数量
%dim——问题维度
%ub——变量上界,[1,dim]矩阵
%lb——变量下界,[1,dim]矩阵
%fobj——适应度函数(指针)
%MaxIter——最大迭代次数
%Best_Pos——x的最佳值
%Best_Score——最优适应度值
clc;
clear all;
close all;
pop=50;
dim=2;
ub=[10,10];
lb=[-10,-10];
MaxIter=100;
fobj=@(x)fitness(x);%设置适应度函数
[Best_Pos,Best_Score,IterCurve]=FA(pop,dim,ub,lb,fobj,MaxIter);
%…………………………………………绘图…………………………………………
figure(1);
plot(IterCurve,'r-','linewidth',2);
grid on;
title('萤火虫算法迭代曲线');
xlabel('迭代次数');
ylabel('适应度值');
%…………………………………… 结果显示……………………………………
disp(['求解得到的x1,x2是:',num2str(Best_Pos(1)),' ',num2str(Best_Pos(2))]);
disp(['最优解对应的函数:',num2str(Best_Score)]);%种群初始化函数
function x=initialization(pop,ub,lb,dim)
for i=1:popfor j=1:dimx(i,j)=(ub(j)-lb(j))*rand()+lb(j);end
end
end
%种群越界调整函数
function x=BoundrayCheck(x,ub,lb,dim)
for i=1:size(x,1)for j=1:dimif x(i,j)>ub(j)x(i,j)=ub(j);endif x(i,j)<lb(j)x(i,j)=lb(j);endend
end
end%适应度函数,可根据自身需要调整
function [Fitness]=fitness(x)Fitness=sum(x.^2);
end%…………………………………………萤火虫算法主体………………………………………
function [Best_Pos,Best_Score,IterCurve]=FA(pop,dim,ub,lb,fobj,MaxIter)beta0=2;%最大吸引度β0gamma=1;%光吸收强度系数γalpha=0.2;%步长因子dmax=norm(ub-lb);%返回上下界的2范数,用于后面的距离归一化计算x=initialization(pop,ub,lb,dim);%种群初始化Fitness=zeros(1,pop);%适应度值初始化for i=1:popFitness(i)=fobj(x(i,:));%计算适应度值end[~,Index]=min(Fitness);%寻找适应度值最小的位置Global_Best_Pos=x(Index,:);Global_Best_Score=Fitness(Index);x_new=x;%用于记录新位置for t=1:MaxIterfor i=1:popfor j=1:dimif Fitness(j)<Fitness(i)r_ij=norm(x(i,:)-x(j,:))./dmax;%计算2范数,即距离beta=beta0*exp(-gamma*r_ij^2);Pos_new=x(i,:)+beta*(x(j,:)-x(i,:))+alpha.*rand(1,dim);Pos_new=BoundrayCheck(Pos_new,ub,lb,dim);Fitness_new=fobj(Pos_new);if Fitness_new<Fitness(i)x_new(i,:)=Pos_new;Fitness(i)=Fitness_new;if Fitness_new<Global_Best_ScoreGlobal_Best_Score=Fitness_new;Global_Best_Pos=Pos_new;endendendend%结束j循环end%结束i循环x_double=[x;x_new];%将更新后的x_new和历史的x合并组成2*pop只萤火虫for i=1:2*popFitness_double(i)=fobj(x_double(i,:));end[~,SortIndex]=sort(Fitness_double);%适应度重新排序for k=1:pop  %选取适应度靠前的pop只萤火虫,作为下次循环的种群x(k,:)=x_double(SortIndex(k),:);end%结束k循环IterCurve(t)=Global_Best_Score;end%结束t循环Best_Pos=Global_Best_Pos;Best_Score=Global_Best_Score;
end

Fig2.萤火虫算法迭代过程

相关阅读:

1、粒子群(PSO)优化算法(附完整Matlab代码,可直接复制)

2、灰狼(GWO)优化算法(附完整Matlab代码,可直接复制)

3、正余弦(SCA)优化算法(附完整Matlab代码,可直接复制)

4、萤火虫(FA)优化算法(附完整Matlab代码,可直接复制)

萤火虫(FA)算法(附完整Matlab代码,可直接复制)相关推荐

  1. 果蝇(FOA)优化算法(附完整Matlab代码,可直接复制)

    果蝇优化算法的核心是利用果蝇搜索实物的机制来对问题进行寻优.果蝇根据气味来确定食物的位置,食物腐烂程度越高,气味越大,果蝇对其越敏感.果蝇的觅食行为如下图: Fig1. 果蝇觅食行为示意图 1.果蝇位 ...

  2. 灰狼(GWO)算法(附完整Matlab代码,可直接复制)

    尊重他人劳动成果,请勿转载! 有问题可留言或私信,看到了都会回复解答! 其他算法请参考: 1.粒子群(PSO)优化算法(附完整Matlab代码,可直接复制)https://blog.csdn.net/ ...

  3. 粒子群(PSO)算法(附完整Matlab代码,可直接复制)

    在粒子群优化算法中,每个解可用一只鸟(粒子)表示,目标函数就是鸟群所需要寻找的食物源.寻找最优解的过程中,粒子包含两种行为:个体行为和群体行为. 个体行为:粒子根据自身在寻优过程中的最优解更新自己的位 ...

  4. java 对音频文件降噪_(转)音频降噪算法 附完整C代码

    转:https://www.cnblogs.com/cpuimage/p/8905965.html 降噪是音频图像算法中的必不可少的. 目的肯定是让图片或语音 更加自然平滑,简而言之,美化. 图像算法 ...

  5. 音频降噪算法 附完整C代码

    本文转载自博客:https://cloud.tencent.com/developer/article/1117226 降噪是音频图像算法中的必不可少的. 目的肯定是让图片或语音 更加自然平滑,简而言 ...

  6. wav文件降噪c语言,音频降噪算法 附完整C代码

    降噪是音频图像算法中的必不可少的. 目的肯定是让图片或语音 更加自然平滑,简而言之,美化. 图像算法和音频算法 都有其共通点. 图像是偏向 空间 处理,例如图片中的某个区域. 图像很多时候是以二维数据 ...

  7. 基于傅里叶变换的音频重采样算法 (附完整c代码)

    前面有提到音频采样算法: WebRTC 音频采样算法 附完整C++示例代码 简洁明了的插值音频重采样算法例子 (附完整C代码) 近段时间有不少朋友给我写过邮件,说了一些他们使用的情况和问题. 坦白讲, ...

  8. 自动曝光修复算法附完整C代码

    众所周知, 图像方面的3A算法有: AF自动对焦(Automatic Focus) 自动对焦即调节摄像头焦距自动得到清晰的图像的过程 AE自动曝光(Automatic Exposure) 自动曝光的是 ...

  9. 音频自动增益 与 静音检测 算法 附完整C代码

    前面分享过一个算法<音频增益响度分析 ReplayGain 附完整C代码示例> 主要用于评估一定长度音频的音量强度, 而分析之后,很多类似的需求,肯定是做音频增益,提高音量诸如此类做法. ...

  10. java mp3静音检测,音频自动增益 与 静音检测 算法 附完整C代码

    前面分享过一个算法<音频增益响度分析 ReplayGain 附完整C代码示例> 主要用于评估一定长度音频的音量强度, 而分析之后,很多类似的需求,肯定是做音频增益,提高音量诸如此类做法. ...

最新文章

  1. (66)全局句柄表,遍历全局句柄表
  2. hibernate get() load() 区别
  3. linux双屏播放视频,Ubuntu Linux下双屏显示解决方案
  4. 华为nova 8系列发布日期曝光:售价还卖贵点?
  5. Kotlin实战【二】Kotlin基本要素
  6. 【Mava】一个分布式多智能体强化学习研究框架
  7. C语言字符串中获取数字
  8. Golang - Structs 包的使用
  9. 苹果sf字体_全网首发丨iOS13越狱系统字体分析+iOS13新字体分享
  10. 软件工程 - 个人博客系统 - 可行性分析与需求分析文档
  11. winpe硬盘安装linux,winpe+linux安装到移动硬盘
  12. 普度大学计算机科学博士,Purdue的CS「普渡大学西拉法叶分校计算机科学系」
  13. (FortiGate)飞塔防火墙快速初始化管理员密码
  14. MAXON宣布任命高级领导人员
  15. html中 导航条置顶的代码,一个DIV+CSS代码布局的简单导航条
  16. Pinyin4j的基本用法
  17. [ 李超线段树 ] BZOJ3165
  18. 语义分割丨PSPNet源码解析「训练阶段」
  19. k8s的nfs存储外挂设置过程
  20. 小程序运行报错:“pages/xxx/xxx.js 出现脚本错误或者未正确调用 Page()

热门文章

  1. 8选1的多路选择器c语言代码,八选一数据选择器的VHDL程序
  2. 【Unity3D】GUI控件
  3. java在线答疑系统_网上学习和答疑系统系统
  4. 飞客蠕虫专杀工具_案例-飞客蠕虫攻击
  5. VOSviewer 操作指南 简明
  6. Visio 2003 Professional 安装序列号
  7. 春天樱花飘落flash源文件
  8. 计算机组成原理统一试卷,计算机组成原理试卷(含答案).doc
  9. android框架揭秘!连续四年百度Android岗必问面试题!实战篇
  10. Protel99se基本教程 Protel 99SE从零开始学习教程视频教程