function[R_best,L_best,L_ave,Shortest_Route,Shortest_Length]=ACATSP(C,NC_max,m,Alpha,Beta,Rho,Q)%%-------------------------------------------------------------------------%%主要符号说明%%Cn个城市的坐标,n×2的矩阵%%NC_max最大迭代次数%%m蚂蚁个数%%Alpha表征信息素重要程度的参数%%Beta表征启发式因子重要程度的参数%%Rho信息素蒸发系数%%Q信息素增加强度系数%%R_best各代最佳路线%%L_best各代最佳路线的长度%%=========================================================================%%第一步:变量初始化C=[4194;3784;5467;2562;764;299;6858;7144;5462;8369;6460;1854;2260;8346;9138;2538;2442;5869;7171;7478;8776;1840;1340;827;6232;5835;4521;4126;4435;450];Alpha=1;Beta=5;Q=100;Rho=;n=size(C,1);%n表示问题的规模(城市个数)D=zeros(n,n);%D表示完全图的赋权邻接矩阵fori=1:nforj=1:nifi~=jD(i,j)=((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2)^;elseD(i,j)=eps;%i=j时不计算,应该为0,但后面的启发因子要取倒数,用eps(浮点相对精度)表示endD(j,i)=D(i,j);%对称矩阵endendm=90;Eta=1./D;%Eta为启发因子,这里设为距离的倒数Tau=ones(n,n);%Tau为信息素矩阵Tabu=zeros(m,n);%存储并记录路径的生成NC=1;NC_max=100;%迭代计数器,记录迭代次数%R_best=zeros(NC_max,n);%各代最佳路线%L_best=inf.*ones(NC_max,1);%各代最佳路线的长度%L_ave=zeros(NC_max,1);%各代路线的平均长度whileNC<=NC_max%停止条件之一:达到最大迭代次数,停止%%第二步:将m只蚂蚁放到n个城市上Randpos=[];%随即存取fori=1:(ceil(m/n))Randpos=[Randpos,randperm(n)];endTabu(:,1)=(Randpos(1,1:m))';%此句不太理解?%%第三步:m只蚂蚁按概率函数选择下一座城市,完成各自的周游visited=[];J=[];forj=2:n%所在城市不计算fori=1:mvisited=Tabu(i,1:(j-1));%记录已访问的城市,避免重复访问J=zeros(1,(n-j+1));%待访问的城市P=J;%待访问城市的选择概率分布Jc=1;fork=1:niflength(find(visited==k))==0%开始时置0J(Jc)=k;Jc=Jc+1;%访问的城市个数自加1endend%下面计算待选城市的概
带精英策略的蚂蚁系统 来自淘豆网m.daumloan.com转载请标明出处.