swarm.m

来自「人工鱼群算法解决旅行商问题,这是在当前互联网上唯一的一个,这个是我自己编的,保证」· M 代码 · 共 45 行

M
45 行
字号
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 + =
减小字号Ctrl + -
显示快捷键?