✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。
个人主页:Matlab科研工作室
个人信条:格物致知。
更多Matlab仿真内容点击
智能优化算法 神经网络预测 雷达通信 无线传感器
信号处理 图像处理 路径规划 元胞自动机 无人机
为了提高数据分类准确率,提出一种基于萤火虫算法和BP神经网络的分类方法.针对反向传播(BP)神经网络存在全局搜索能力差,萤火虫算法来优化BP神经网络对初始权重敏感的问题,进而实现对数据的分类.实验结果表明,所提算法对数据的分类准确率更高,分类准确率达到94.5%,而且可以加快收敛速度
%==========================================================================
% 算法说明:荧火虫算法(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);%分配荧火虫地址空间
ioti =zeros(n,1); %分配荧光素存放空间
rdi =zeros(n,1); %分配荧火虫决策半径存放空间
% ===============================分配空间结束===============================
figure(1);
sign_first = 1;
step_track = 0;
x = -3:0.1:3;
y = -3:0.1:3;
[xx,yy] = meshgrid(x,y);
j1=3*(1-xx).^2.*exp(-(xx.^2+(yy+1).^2));
j2=10*(xx./5-xx.^3-yy.^5).*exp(-(xx.^2+yy.^2));
j3=(1/3)*exp(-((xx+1).^2+yy));
zz=j1-j2-j3;
figure(1);
surf(xx,yy,zz);
hold on
% ===========================荧火虫常量初始化开始============================
%1.初始化地址
for i=1:m
gaddress(:,i)=domx(i,1)+(domx(i,2)-domx(i,1))*rand(n,1);
end
gvalue = maxfun(gaddress);
gbest_old = max(gvalue);
%
%可视化
plot3(gaddress(:,1),gaddress(:,2),gvalue(:),'b*');
drawnow;
pause(1);
%
%2.初始化荧光素
ioti(:,1)=iot0;
%3.初始化决策半径
rdi(:,1)=r0;
iter_max=500;%最大迭代次数
t=1;%迭代累计
unchange = 0;
% ===========================荧火虫常量初始化结束============================
% =============================iter_max迭代开始=============================
while(t<=iter_max) && (unchange<60)
%1.更新荧光素
ioti=max(0,(1-rho)*ioti+gamma*maxfun(gaddress));
%2.各荧火虫移动过程开始
for i=1:n
%2.1 决策半径内找更优点
Nit=[];%存放荧火虫序号
for j=1:n
if (norm(gaddress(j,:)-gaddress(i,:)) Nit(numel(Nit)+1)=j; end end %2.2 找下一步移动的点开始 if length(Nit)>0 %先判断Nit个数不为0 Nitioti=ioti(Nit,1);%选出Nit荧光素 SumNitioti=sum(Nitioti);%Nit荧光素和 Molecular=Nitioti-ioti(i,1);%分子 Denominator=SumNitioti-ioti(i,1);%分母 Pij=Molecular./Denominator;%计算Nit各元素被选择概率 Pij=cumsum(Pij);%累计 Pij=Pij./Pij(end);%归一化 Pos=find(rand j=Nit(Pos(1));%确定j的位置 %荧火虫i向j移动一小步 gaddress(i,:)=gaddress(i,:)+s*(gaddress(j,:)-gaddress(i,:))/norm(gaddress(j,:)-gaddress(i,:)); gaddress(i,:)=range(gaddress(i,:),domx);%限制范围 % %更新决策半径 rdi(i)=rdi(i)+beta*(nt-length(Nit)); if rdi(i,1)<0 rdi(i,1)=0; end if rdi(i,1)>rs rdi(i,1)=rs; end end %2.2 找下一步移动的点结束 end % %可视化 gvalue = maxfun(gaddress); gbest_new = max(gvalue); if gbest_new > gbest_old unchange = 0; gbest_old = gbest_new; else unchange = unchange + 1; end %plot(gaddress(:,1),gaddress(:,2),'b.','markersize',6);hold on; if mod(t,20) plot3(gaddress(:,1),gaddress(:,2),gvalue(:),'b*'); drawnow; pause(0.01); end %2.各荧火虫移动过程结束 %保存动态图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 t=t+1; end % =============================iter_max迭代结束============================= % =============================输出最优结果开始============================= gvalue=maxfun(gaddress);%求各个荧火虫的值 disp('最大值为:') num=find(gvalue==max(gvalue));%最大值序号 MaxValue=-max(gvalue) disp('最优解为:') BestAddress=gaddress(num,:); % =============================输出最优结果结束============================= [1]彭新建, 翁小雄. 基于萤火虫算法优化BP神经网络的公交行程时间预测[J]. 广西师范大学学报:自然科学版, 2017, 35(1):9. ❤️ 关注我领取海量matlab电子书和数学建模资料 ❤️部分理论引用网络文献,若有侵权联系博主删除 ⛄ 运行结果
⛄ 参考文献