📄 gmjafsa.asv
字号:
%人工鱼群算法format longVisual=2.5;Step=0.3;N=50;Try_number=50;a1=-10;b1=10;a2=-10;b2=10;d=[];h=1e-7;Friend_number=50;k=0;m=50;X1=rand(N,1)*(b1-a1)+a1;X2=rand(N,1)*(b2-a2)+a2;X=[X1 X2];%人工鱼数量for i=1:Nwwww=[X(i,1),X(i,2)];d(i)=maxf(wwww);end[w,i]=max(d);maxX=[X(i,1),X(i,2)];%初始公告板记录maxY=w;%初始公告板记录figurex=[];figurey=[];figurez=[];figurex(numel(figurex)+1)=maxX(1);figurey(numel(figurey)+1)=maxX(2);figurez(numel(figurez)+1)=maxY;kkk=0;while(~(maxY<h)) for i=1:N XX=[X(i,1),X(i,2)];%人工鱼当前状态Xi nf=0; Xc=0; for j=1:N %聚群行为开始 XXX=[X(j,1),X(j,2)]; if(norm(XXX-XX)<Visual) nf=nf+1; Xc=Xc+XXX; end end Xc=Xc/nf; if((maxf(Xc))>maxf(XX)) XXnext1=XX+rand*Step*(Xc-XX)/norm(Xc-XX); if(XXnext1(1)>b1) XXnext1(1)=b1; end if(XXnext1(1)<a1) XXnext1(1)=a1; end if(XXnext1(2)>b2) XXnext1(2)=b2; end if(XXnext1(2)<a2) XXnext1(2)=a2; end else XXnext1=gmjprey(XX,Try_number,Visual,Step); if(XXnext1(1)>b1) XXnext1(1)=b1; end if(XXnext1(1)<a1) XXnext1(1)=a1; end if(XXnext1(2)>b2) XXnext1(2)=b2; end if(XXnext1(2)<a2) XXnext1(2)=a2; end end%聚群行为结束 %maxX=XX;%追尾行为开始 %maxY=maxf(XX); for j=1:Friend_number XXX=[X(j,1),X(j,2)]; if(norm(XXX-XX)<Visual & maxf(XXX)>maxY) maxX=XXX; maxY=maxf(XXX); end end if((maxY)>maxf(XX)) XXnext2=XX+rand*Step*(maxX-XX)/norm(maxX-XX); if(XXnext2(1)>b1) XXnext2(1)=b1; end if(XXnext2(1)<a1) XXnext2(1)=a1; end if(XXnext2(2)>b2) XXnext2(2)=b2; end if(XXnext2(2)<a2) XXnext2(2)=a2; end else XXnext2 =gmjprey(XX,Try_number,Visual,Step); if(XXnext2(1)>b1) XXnext2(1)=b1; end if(XXnext2(1)<a1) XXnext2(1)=a1; end if(XXnext2(2)>b2) XXnext2(2)=b2; end if(XXnext2(2)<a2) XXnext2(2)=a2; end end%追尾行为结束 if(maxf(XXnext1)>maxf(XXnext2)) X(i,1)=XXnext1(1); X(i,2)=XXnext1(2); else X(i,1)=XXnext2(1); X(i,2)=XXnext2(2); endend %一次迭代结束 for i=1:N XXXX=[X(i,1),X(i,2)]; if maxf(XXXX)>maxY maxY=maxf(XXXX); maxX=XXXX; figurex(numel(figurex)+1)=maxX(1); figurey(numel(figurey)+1)=maxX(2); figurez(numel(figurez)+1)=maxY; endend k=k+1; %进入下一次迭代end maxXmaxYplot3(figurex,figurey,figurez)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -