📄 swarm.m
字号:
function [Xi,flag]=swarm(X,FishNum,CityNum,Visual,deta,i,edge)%本程序是第i条人工鱼试图进行聚群行为,假如聚群成功,则flag 为1,X中为i鱼聚群后的状态,否则flag为0
Index=near(X,FishNum,i,Visual);%第i条人工鱼的邻居下标
nf=length(Index);
Xi=[];%默认它聚群失败
flag=0;
if(nf==0)%它视野里看不到伙伴
return;
end
if(nf/FishNum<deta)
neigbor=X(Index,:);
XC=[];
for j=1:CityNum
tJ=neigbor(:,j);%本段程序找出出现最多的城市,从而确定邻域中心
while(length(tJ)>0)
fre=[];
for k=1:length(tJ)
fre(k)=sum(tJ==tJ(k));
end
[p q]=max(fre);
if(j==1)
break;
elseif(sum(XC==tJ(q))==0)
break;
end
tJ(find(tJ==tJ(q)))=[];%本段程序并非多此一举,为的是防止重复走同一个城市
end
if(length(tJ)==0)
while(1)
b=floor(rand*(CityNum+1));
if(b>0&b<=CityNum&sum(XC==b)==0)
XC(j)=b;
break;
end
end
else
XC(j)=tJ(q);
end
end
if(evaluate(X(i,:),edge)>evaluate(XC,edge));%聚群成功
flag=1;
Xi=XC;
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -