人工鱼群算法maab实现.docx
- 文档编号:16476208
- 上传时间:2023-07-13
- 格式:DOCX
- 页数:10
- 大小:16.48KB
人工鱼群算法maab实现.docx
《人工鱼群算法maab实现.docx》由会员分享,可在线阅读,更多相关《人工鱼群算法maab实现.docx(10页珍藏版)》请在冰点文库上搜索。
人工鱼群算法maab实现
functionlhl_AF
clc;clearall;closeall;
formatlong
Visual=;%人工鱼的感知距离
Step=;%人工鱼的移动最大步长
N=10;%人工鱼的数量
Try_number=50;%迭代的最大次数
delta=;%拥挤度因子
a1=-10;b1=10;a2=-10;b2=10;
d=[];%存储50个状态下的目标函数值;
k=0;
m=50;%迭代次数
X1=rand(N,1)*(b1-a1)+a1;%在-10~10之间,随机生成50个数;
X2=rand(N,1)*(b2-a2)+a2;
X=[X1X2];
%X=ones(N,2);
%fori=1:
N
%X(i,1)=-10;
%X(i,2)=10;
%end
%人工鱼数量,两个状态变量X1和X2;
%计算50个初始状态下的;
fori=1:
N
www=[X(i,1),X(i,2)];
d(i)=maxf(www);
end
%公告牌用于记录人工鱼个体的历史最好状态
[w,i]=max(d);%求出初始状态下的最大值w和最大值的位置i;
maxX=[X(i,1),X(i,2)];%初始公告板记录,最大值位置;
maxY=w;%初始化公告板记录,最大值;
figurex=[];figurey=[];figurez=[];
figurex(numel(figurex)+1)=maxX
(1);%将maxX
(1)放入figurex中,
figurey(numel(figurey)+1)=maxX
(2);%numel返回数组或者向量中所含元素的总数,matlab数组下标默认是从1开始的
figurez(numel(figurez)+1)=maxY;
while(k fori=1: N XX=[X(i,1),X(i,2)];%拿出其中一条鱼来看他的四种行为判断 %%%%%%第一种行为: 聚群行为: 伙伴多且不挤,就向伙伴中心位置移动 %群聚行为是伙伴的中心点,凸规划下,中心点一定还在约束内 %群聚行为不是一种maxf(Xc)的比较,就是看伙伴位置 nf1=0; Xc=0; label_swarm=0;%群聚行为发生标志 forj=1: N XX_1=[X(j,1),X(j,2)]; if(norm(XX_1-XX) nf1=nf1+1; Xc=Xc+XX_1; end end Xc=Xc-XX;%需要去除XX本身; nf1=nf1-1; Xc=Xc/nf1;%此时Xc表示XX感知范围其他伙伴的中心位置; if((maxf(Xc)/nf1>delta*maxf(XX))&&(norm(Xc-XX)~=0)) XXR1=rand*Step*(Xc-XX)/norm(Xc-XX); XXnext1=XX+XXR1; if(XXnext1 (1)>b1) XXnext1 (1)=b1; end if(XXnext1 (1) XXnext1 (1)=a1; end if(XXnext1 (2)>b2) XXnext1 (2)=b2; end if(XXnext1 (2) XXnext1 (2)=a2; end label_swarm=1; temp_y_XXnext1=maxf(XXnext1); else label_swarm=0; temp_y_XXnext1=-inf; end %%%%%% %%%%%%第二种行为: 追尾行为: 周围伙伴有最大值且附近不挤,向其伙伴方向移动 %追尾行为追寻伙伴行为,还是在约束内 temp_maxY=-inf;%按照理论来说这块应该初始化为-无穷小, label_follow=0;%追尾行为发生标记 forj=1: N XX_2=[X(j,1),X(j,2)]; if((norm(XX_2-XX) temp_maxX=XX_2; temp_maxY=maxf(XX_2); end end nf2=0; forj=1: N XX_2=[X(j,1),X(j,2)]; if(norm(XX_2-temp_maxX) nf2=nf2+1; end end nf2=nf2-1;%去掉他本身 if((temp_maxY/nf2)>delta*maxf(XX)&&(norm(temp_maxX-XX)~=0))%附近有Yj最大的伙伴,并且不太拥挤 XXR2=rand*Step*(temp_maxX-XX)/norm(temp_maxX-XX);%rand不是随机反向,是随机步长 XXnext2=XX+XXR2; if(XXnext2 (1)>b1) XXnext2 (1)=b1; end if(XXnext2 (1) XXnext2 (1)=a1; end if(XXnext2 (2)>b2) XXnext2 (2)=b2; end if(XXnext2 (2) XXnext2 (2)=a2; end label_follow=1; temp_y_XXnext2=maxf(XXnext2); else label_follow=0; temp_y_XXnext2=-inf; end %%%%%% %%%%%%第三种行为: 觅食行为: 与前两个行为不同,觅食和随机行为都是找附近的状态,而不是找附近的同伴 %觅食和随机行为可能出现超出约束,所以,XX_3和XX_4是不一样的 %觅食行为和群聚行为、追尾行为是不一样的,觅食行为是一种根据状态来判断的行为,群聚和追尾是根据伙伴来判断的行为 label_prey=0;%判断觅食行为是否找到优于当前的状态 forj=1: Try_number R1V=Visual*(-1+2*rand(2,1)'); XX_3=XX+R1V; if(XX_3 (1)>b1)%下面这四个是一套,如果超出约束条件,就选值为边界条件 XX_3 (1)=b1; end if(XX_3 (1) XX_3 (1)=a1; end if(XX_3 (2)>b2) XX_3 (2)=b2; end if(XX_3 (2) XX_3 (2)=a2; end if(maxf(XX) XXR3=rand*Step*(XX_3-XX)/norm(XX_3-XX); XXnext3=XX+XXR3; if(XXnext3 (1)>b1)%下面这四个是一套,如果超出约束条件,就选值为边界条件 XXnext3 (1)=b1; end if(XXnext3 (1) XXnext3 (1)=a1; end if(XXnext3 (2)>b2) XXnext3 (2)=b2; end if(XXnext3 (2) XXnext3 (2)=a2; end label_prey=1; break; end end temp_y_XXnext3=max(XXnext3); if(label_prey==0) temp_y_XXnext3=-inf; end %%%%%% %%%%%%行为选择 if((label_swarm==0)&&(label_follow==0)&&(label_prey==0)) %聚群和追尾鱼太多太拥挤,都不发生;觅食觅不到更好的,造成三种行为都不发生。 %如果前三种行为都没有发生出现,必然是发生随机行为 R2S=Step*(-1+2*rand(2,1)'); temp_XX=XX+R2S; if(XX (1)>b1)%下面这四个是一套,如果超出约束条件,就选值为边界条件 XX (1)=b1; end if(XX (1) XX (1)=a1; end if(XX (2)>b2) XX (2)=b2; end if(XX (2) XX (2)=a2; end else %三种行为找最优 if(temp_y_XXnext1>temp_y_XXnext2) if(temp_y_XXnext1>temp_y_XXnext3) temp_XX=XXnext1; else temp_XX=XXnext3; end else if(temp_y_XXnext2>temp_y_XXnext3) temp_XX=XXnext2; else temp_XX=XXnext3; end end end XX=temp_XX; X(i,1)=XX (1); X(i,2)=XX (2); %%%%%% end %至此,所有人工鱼,完成一次行为判断和移动 %这块是更新公告牌信息 fori=1: N XXX=[X(i,1),X(i,2)]; if(maxf(XXX)>maxY) maxY=maxf(XXX); maxX=XXX; figurex(numel(figurex)+1)=maxX (1); figurey(numel(figurey)+1)=maxX (2); figurez(numel(figurez)+1)=maxY; end end x=X(: 1)'; y=X(: 2)'; plot(x,y,'*r'); axis([-1010-1010]); k=k+1 end maxX maxY plot3(figurex,figurey,figurez,'-g.') functiony=maxf(QQ) %目标函数y=(sinX1/X1)*(sinX2/X2),这块可以指定自己的目标函数 %输入二维向量,输出一个值 y=(sin(QQ (1))/QQ (1))*(sin(QQ (2))/QQ (2));
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 人工 鱼群 算法 maab 实现
![提示](https://static.bingdoc.com/images/bang_tan.gif)