logo资料库

萤火虫算法matlab实现.doc

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
初 始 ================================ %% 算法说明:荧火虫算法(GSO:Glowworm swarm optimisation:a new method for optimising mutlti-modal functions) %% 算法特征:只适用于求极大值(极小值可转化为求极大值) %% =============================================================== clc;%清屏 clear all;%清除变量 format long;%确定精度 % ================================ %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.03;%步长 iot0=5;%荧光素浓度 rs=2.048;%3;%感知半径 r0=2.048;%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 %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
分享到:
收藏