【优化求解】基于萤火虫算法GSO求解最优目标matlab代码

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代码与数据下载地址

见博客主页

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天天Matlab科研工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值