logo资料库

GSO萤火虫智能优化算法MATLAB代码.doc

第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
资料共4页,全文预览结束
(GSO:Glowworm swarm optimisation:a new method for optimising mutlti- 荧火虫算法 MATLAB 代码 modal functions) % 算法特征:只适用于求极大值(极小值可转化为求极大值) =============================================================== clc; %清屏 clear all; %清除变量 format long; %确定精度 =============初始化开始======================== domx=[-2.048,2.048;-2.048,2.048]; %domx=[-3,3;-3,3];定义域,解空间 rho=0.4; %荧光素挥发因子 gamma=0.6; %适应度提取比例 beta=0.08; %邻域变化率 nt=5; s=0.03; iot0=5; rs=2.048; r0=2.048; %邻域阀值(邻域荧火虫数) %步长 %荧光素浓度 %感知半径 %决策半径 (各参数初始化结束) ==============================初始化结束========= =======================分配空间开始=============================== m=size(domx,1); %函数空间维数 global n; 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 %2.初始化荧光素 ioti(:,1)=iot0; %3.初始化决策半径 rdi(:,1)=r0; iter_max=500; %最大迭代次数 t=1; %迭代累计 ========================荧火虫常量初始化结束=========================== ========================iter_max 迭代开始============================= while(t<=iter_max) %1.更新荧光素 ioti=(1-rho)*ioti+gamma*maxfun(gaddress); %2.各荧火虫移动过程开始 for i=1:n %2.1 决策半径内找更优点 Nit=[]; for j=1:n %存放荧火虫序号 if (norm(gaddress(j,:)- gaddress(i,:))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(randrs rdi(i,1)=rs; end end %2.2 找下一步移动的点结束 end %2.各荧火虫移动过程结束 t=t+1; end ==========================iter_max 迭代结束============================= ===========================输出最优结果开始=========================== gvalue=maxfun(gaddress); %求各个荧火虫的值 disp('最大值为:') num=find(gvalue==max(gvalue)); %最大值序号 MaxValue=-max(gvalue) disp('最优解为:') BestAddress=gaddress(num,:)
==========================输出最优结果结束============================ function y=maxfun(x) %P104 函数 J1 % j1=3*(1-x(:,1)).^2.*exp(-(x(:,1).^2+(x(:,2)+1).^2)); % j2=10*(x(:,1)./5-x(:,1).^3-x(:,2).^5).*exp(-(x(:,1).^2+x(:,2).^2)); % j3=(1/3)*exp(-((x(:,1)+1).^2+x(:,2))); % y=j1-j2-j3; %================= dom=[-2.048,2.048;-2.048,2.048];%定义域范围 z=100.*(x(:,1).^2-x(:,2)).^2+(1-x(:,1)).^2;%目标函数 y=-z; function X=range(X,dom)%输入向量 X,定义域 dom n=size(X,2);%求列数即 dom 的行数 n=size(dom,1) for i=1:n t=X(:,i); t(tdom(i,2))=dom(i,2);%限定右边范围 X(:,i)=t; End
分享到:
收藏