1 简介
萤火虫算法自2005年 在IEEE 群体智能会议上首次提出以来,因在探测多束 源 定 位、群体机器人应用、有害气体泄漏或核泄漏检测以及多模态优化问题等方面得到较好的应用而很快引起国内外学者的广泛关注,成为智能计算领域一个新的研究热点。
2 部分代码
%% 算法说明:荧火虫算法(GSO:Glowworm swarm optimisation:a new method for optimising mutlti-modal functions)
%% ===============================================================
clc,clear;%清除变量
close all;
% ================================初始化开始================================
domx=[-3,3;-3,3];%定义域
%domx=[-2.048,2.048;-2.048,2.048];
rho=0.4;%荧光素挥发因子
gamma=0.6;%适应度提取比例
beta=0.08;%邻域变化率
nt=5;%邻域阀值(邻域荧火虫数)
s=0.01;%步长
iot0=5;%荧光素浓度
rs=3;%3;%感知半径
r0=1.5;%3;%决策半径
% ================================初始化结束================================
% ===============================分配空间开始===============================
m=size(domx,1);%函数空间维数
n=50;%萤火虫个数
gaddress=zeros(n,m);%分配荧火虫地址空间
gvalue=zeros(n,1);%分配适应度存放空间
ioti=zeros(n,1);%分配荧光素存放空间
rdi=zeros(n,1);%分配荧火虫决策半径存放空间
% ===============================分配空间结束===============================
% ===========================荧火虫常量初始化开始============================
%1.初始化地址
for i=1:m
gaddress(:,i)=domx(i,1)+(domx(i,2)-domx(i,1))*rand(n,1);
end
%%
%可视化
figure(1);
plot(gaddress(:,1),gaddress(:,2),'b.','markersize',15);
axis([-3 3 -3 3]);
title('初始分布');
%%
%2.初始化荧光素
ioti(:,1)=iot0;
%3.初始化决策半径
rdi(:,1)=r0;
iter_max=500;%最大迭代次数
t=1;%迭代累计
% ===========================荧火虫常量初始化结束============================
%%
%可视化
% plot(gaddress(:,1),gaddress(:,2),'b.','markersize',15);
% %hold on;%(要保存历史轨迹,则删除“%”)
% axis([-3 3 -3 3]);
% step_track = step_track +1;
% title(['track >> ' '#iter=' num2str(t) ',step=' num2str(step_track)]);
% pause(0.02);
% %保存动态图gif
% f=getframe(gcf);
% imind=frame2im(f);
% [imind,cm] = rgb2ind(imind,256);
% if(sign_first==1)
% sign_first=0;
% imwrite(imind,cm,'track.gif','gif', 'Loopcount',inf,'DelayTime',0.02);
% else
% imwrite(imind,cm,'track.gif','gif','WriteMode','append','DelayTime',0.02);
% end
%保存动态图gif
%2.各荧火虫移动过程结束
if t==1
y(t)=max(maxfun(gaddress));
else
if y(t-1)<max(maxfun(gaddress))
y(t)=max(maxfun(gaddress));
else
y(t)=y(t-1);
end
end
t=t+1;
end
% =============================iter_max迭代结束=============================
% =============================输出最优结果开始=============================
gvalue=maxfun(gaddress);%求各个荧火虫的值
disp('最大值为:')
num=find(gvalue==max(gvalue));%最大值序号
MaxValue=-max(gvalue)
disp('最优解为:')
BestAddress=gaddress(num,:)
% =============================输出最优结果结束=============================
figure(1)
plot(y)
xlabel('迭代次数')
3 仿真结果
4 参考文献
[1]张荣权. 基于强化萤火虫算法的冷热电联供系统多目标优化调度. Diss. 深圳大学, 2018.
**部分理论引用网络文献,若有侵权联系博主删除。**
5 MATLAB代码与数据下载地址
见博客主页