资源描述:
《蚁群算法matlab程序代码.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、先新建一个主程序M文件ACATSP.m代码如下: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 蚁群算法MATLAB程序最大迭代次数%% m蚂蚁个数%% Alpha表征信息素重要程度的参数%% Beta表征启
2、发式因子重要程度的参数%% Rho信息素蒸发系数%% Q 表示蚁群算法MATLAB程序信息素增加强度系数%% R_best各代最佳路线%% L_best各代最佳路线的长度%%=========================================================================%% 蚁群算法MATLAB程序第一步:变量初始化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
3、(i,2)-C(j,2))^2)^0.5;elseD(i,j)=eps; %i=j时不计算,应该为0,但后面的启发因子要取倒数,用eps(浮点相对精度)表示endD(j,i)=D(i,j); %对称矩阵endendEta=1./D; %Eta为启发因子,这里设为距离的倒数Tau=ones(n,n);
4、 %Tau为信息素矩阵Tabu=zeros(m,n); %存储并记录路径的生成NC=1; %迭代计数器,记录迭代次数R_best=zeros(NC_max,n); %各代最佳路线L_best=inf.*ones(NC_max,1); %各代最佳路线的长度L_ave=zeros(NC_max,1); %各代路
5、线的平均长度whileNC<=NC_max %停止条件之一:达到最大迭代次数,停止%% 蚁群算法MATLAB程序第二步:将m只蚂蚁放到n个城市上Randpos=[]; %随即存取fori=1:(ceil(m/n))Randpos=[Randpos,randperm(n)];endTabu(:,1)=(Randpos(1,1:m))'; %此句不太理解?%% 蚁群算法MATLAB程序第三步:m只蚂蚁按概率函数选择下一座城市
6、,完成各自的周游forj=2:n %所在城市不计算fori=1:m visited=Tabu(i,1:(j-1)); %记录已访问的城市,避免重复访问J=zeros(1,(n-j+1)); %待访问的城市P=J; %待访问城市的选择概率分布Jc=1;fork=1:n
7、iflength(find(visited==k))==0 %开始时置0J(Jc)=k;Jc=Jc+1; %访问的城市个数自加1endend%%下面计算蚁群算法MATLAB程序待选城市的概率分布fork=1:length(J)P(k)=(Tau(visited(end),J(k))^Alpha)*(Eta(visited(end),J(k))^Beta);endP=P/(sum(P));%%按概率原则选取下一个