萤火虫算法,matlab代码

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

%%算法说明:荧火虫算法clc;%清屏clearall;%清除变量formatlong;%确定精度%%各参数初始化开始domx=[-5.12,5.12;-5.12,5.12];%domx=[-2.048,2.048;-2.048,2.048];%解空间rho=0.4;%荧光素挥发因子gamma=0.6;%适应度提取比例beta=0.08;%邻域变化率nt=5;%邻域阀值(邻域荧火虫数)s=0.03;%步长lo=5;%荧光素浓度rs=5.12;%感知半径r0=5.12;%rs=2.048;%感知半径%r0=2.048;%决策半径%各参数初始化结束iter_max=200;%最大迭代次数%%分配空间开始m=size(domx,1);%函数空间维数globaln;n=50;%种群规模address=zeros(n,m);%分配荧火虫地址空间value=zeros(n,1);%分配适应度存放空间li=zeros(n,1);%分配荧光素存放空间rdi=zeros(n,1);%分配荧火虫决策半径存放空间uu=zeros(1,iter_max);%%荧火虫常量初始化开始fori=1:maddress(:,i)=(domx(i,1)+(domx(i,2)-domx(i,1))*rand(n,1));%初始化地址%address(i,:)=5*rands(n,1);%随机产生初萤火虫所在位置endf=fun(address);x=-5.12:.1:5.12;%x=-2.048:.05:2.048;[x,y]=meshgrid(x);figure(1);plot3(address(:,1),address(:,2),f,'k*')holdon;gridon;z=-(x.^2-10*cos(2*pi.*x)+10+y.^2-10*cos(2*pi.*y)+10);%Rastrigin'函数%z=-(x.^2+y.^2);%目标函数J2%z=-(20+x.^2-10*cos(2*pi.*x)+y.^2-10*cos(2*pi.*y));%目标函数J1%z=-(-20*exp(-0.2*sqrt((x.^2+y.^2)/2))-exp((cos(2*pi*x)+cos(2*pi*y))/2)+20+exp(1));%%目标函数%z=-(0.5+sin(sqrt(x.^2+y.^2).^2-0.5)./(1+0.001*(x.^2+y.^2)).^2);%目标函数J3mesh(x,y,z)xlabel('x轴');ylabel('y轴');zlabel('z轴');title('萤火虫初始分布图');li(:,1)=lo;%荧光素初始值rdi(:,1)=r0;%决策半径初始值t=1;%迭代累计量%荧火虫常量初始化结束%%迭代开始while(t=iter_max)li=(1-rho)*li+gamma*fun(address);%.更新荧光素值li%各荧火虫移动过程开始fori=1:nOrd_number=[];%存放荧火虫序号forj=1:nif(norm(address(j,:)-address(i,:))rdi(i))&&(li(i,1)li(j,1))%决策半径内找更优点Ord_number(numel(Ord_number)+1)=j;endend%计算Ord_number各元素被选择概率,确定j位置if~isempty(Ord_number)%先判断Ord_number个数不为空Ord_num_li=li(Ord_number,1);%选出Ord_number荧光素Sum_Ord_li=sum(Ord_num_li);%Ord_number荧光素和Mol=Ord_num_li-li(i,1);%分子(lj-li)Den=Sum_Ord_li-li(i,1);%分母Pij=Mol./Den;%计算各元素被选择概率Pij=cumsum(Pij);%累计Pij=Pij./Pij(end);%归一化Pos=find(randPij);%确定位置j=Ord_number(Pos(1));%确定j的位置%荧火虫i向位置j移动address(i,:)=address(i,:)+s*(address(j,:)-address(i,:))/norm(address(j,:)-address(i,:));address(i,:)=range1(address(i,:),domx);%限制范围end%更新决策半径rdi(i)=rdi(i)+beta*(nt-length(Ord_number));rdi(i)=min(rs,max(0,rdi(i)));uu(t)=-max(fun(address));endt=t+1;%iter_max迭代结束g=[];g=fun(address);x=-5.12:.1:5.12;%x=-2.048:.05:2.048;[x,y]=meshgrid(x);figure(2);plot3(address(:,1),address(:,2),g,'k*');holdon;z=-(x.^2-10*cos(2*pi.*x)+10+y.^2-10*cos(2*pi.*y)+10);%Rastrigin'函数%z=-(x.^2+y.^2);%目标函数J2%z=-(20+x.^2-10*cos(2*pi*x)+y.^2-10*cos(2*pi*y));%目标函数J1%z=-(-20*exp(-0.2*sqrt((x.^2+y.^2)/2))-exp((cos(2*pi*x)+cos(2*pi*y))/2)+20+exp(1));%%目标函数%z=-(0.5+sin(sqrt(x.^2+y.^2).^2-0.5)./(1+0.001*(x.^2+y.^2)).^2);%目标函数J3gridon;mesh(x,y,z);title('萤火虫运动轨迹');xlabel('x轴');ylabel('y轴');zlabel('z轴');holdoff;endfigure('name','收敛曲线');plot(uu)title(['萤火虫最优值曲线''终止次数='num2str(iter_max)]);xlabel('迭代次数');ylabel('最优值');%%输出最优结果value=fun(address);disp('最优值为:')num=find(value==max(value));%最大值序号MaxValue=-max(value)disp('最优解为:')BestAddress=address(num,:)%目标函数functiony=fun(x)%y=x(:,1).^2+x(:,2).^2;%y=0.5+sin(sqrt(x(:,1).^2+x(:,2).^2).^2-0.5)./(1+0.001*(x(:,1).^2+x(:,2).^2)).^2;%目标函数J3%y=20+x(:,1).^2-10*cos(2*pi*x(:,1))+x(:,2).^2-10*cos(2*pi*x(:,2));%目标函数J1%y=-20*exp(-0.2*sqrt((x(:,1).^2+x(:,2).^2)/2))...%-exp((cos(2*pi*x(:,1))+cos(2*pi*x(:,2)))/2)+20+exp(1);%%目标函数y=x(:,1).^2-10*cos(2*pi.*x(:,1))+10+x(:,2).^2-10*cos(2*pi.*x(:,2))+10;%Rastrigin'函数y=-y;

1 / 4
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功