资源描述
先新建一个主程序M文件 ACATSP .m代码如下:function R_best,best,L_ave,Shortest_Route,Shortest_Length=ACATSP(C,NC_max,m,Alpha,Beta,Rho,Q)%=%主要符号说明% C n个城市的坐标,nX2的矩阵% NC_max蚁群算法MATLA程序最大迭代次数% m蚂蚁个数% Alpha表征信息素重要程度的参数% Beta表征启发式因子重要程度的参数% Rho信息素蒸发系数% Q表示蚁群算法MATLA程序信息素增加强度系数% R_best各代最佳路线% L_best各代最佳路线的长度%=%蚁群算法MATLA程序第一步:变量初始化n=size(C,1);% n表示问题的规模(城市个数)D=zeros( n,n );%D 表示完全图的赋权邻接矩阵for i=1: nfor j=1: nif i=jD(i,j)=(C(i,1)-C(j,1)A2+(C(i,2)-C(j,2)A2)A0.5;elseD(i,j)=eps;% i = j时不计算,应该为 0,但后面的启发因子要取倒数,用eps (浮点相对精度)表示%对称矩阵endD(j,i)=D(i,j);endendEta=1./D;%Eta为启发因子,这里设为距离的倒数Tau=on es( n,n);%Tau为信息素矩阵Tabu=zeros( m,n);%存储并记录路径的生成P=J;%待访问城市的选择概率分布NC=1;%迭代计数器,记录迭代次数R_best=zeros(NC_max ,n);%各代最佳路线%各代最佳路线的长度L_best=i nf.*o nes(NC_max,1);L_ave=zeros(NC_max,1);%各代路线的平均长度while NC=ra nd);%若计算的概率大于原来的就选择这条路线to_visit=J(Select(1);Tabu(i,j)=to_visit;endendif NC=2Tabu(1,:)=R_best(NC-1,:);end%蚁群算法MATLA程序第四步:记录本次迭代最佳路线L=zeros(m,1);%开始距离为0, m*1的列向量for i=1:mR=Tabu(i,:);for j=1:( n-1)endL(i)=L(i)+D(R(1),R( n);endL_best(NC)=mi n(L); pos=fi nd(L=L_best(NC);R_best(NC,:)=Tabu(pos(1),:);L_ave(NC)=mea n(L);NC=NC+1%一轮下来后走过的距离%最佳距离取最小%此轮迭代后的最佳路线%此轮迭代后的平均距离%迭代继续%蚁群算法MATLABS序第五步:更新信息素Delta_Tau=zeros(n,n);%开始时信息素为 n*n的0矩阵for i=1:mfor j=1:( n-1)Delta_Tau(Tabu(i,j),Tabu(i,j+1)=Delta_Tau(Tabu(i,j),Tabu(i,j+1)+Q/L(i);%此次循环在路径(i, j) 上的信息素增量endDelta_Tau(Tabu(i, n),Tabu(i,1)=Delta_Tau(Tabu(i, n),Tabu(i,1)+Q/L(i);%此次循环在整个路径上的信息素增量endTau=(1-Rho).*Tau+Delta_Tau;%考虑信息素挥发,更新后的信息素%蚁群算法MATLA程序第六步:禁忌表清零Tabu=zeros(m,n);%直到最大迭代次数end%蚁群算法 MATLABS序第七步:输出结果Pos=fi nd(L_best=mi n( L_best);Shortest_Route=R_best(Pos(1),:)Shortest_Le ngth=L_best(Pos(1)%找到最佳路径(非 0为真)%最大迭代次数后最佳路径%最大迭代次数后最短距离绘制第一个子图形subplot(1,2,1)%画路线图的子函数DrawRoute(C,Shortest_Route)%绘制第二个子图形subplot(1,2,2)plot(L_best)hold on%保持图形plot(L_ave,r)title(平均距离和最短距离)%标题建立一个子程序DrawRoute .m代码如下:fun ctio n DrawRoute(C,R)%=% DrawRoute.m%画路线图的子函数% C Coordinate 节点坐标,由一个 NX2的矩阵存储% R Route 路线%=N=le ngth(R);scatter(C(:,1),C(:,2);hold onplot(C(R(1),1),C(R(N),1),C(R(1),2),C(R(N),2),g)hold on for ii=2:Nplot(C(R(ii-1),1),C(R(ii),1),C(R(ii-1),2),C(R(ii),2),g)hold onendtitle(旅行商问题优化结果 )需要输入的参数数据有:C: n个城市的坐标,n x 2的矩阵NC_max:蚁群算法MATLAB程序最大迭代次数M:蚂蚁个数Alpha:表征信息素重要程度的参数Beta:表征启发式因子重要程度的参数Rho:信息素蒸发系数Q:表示蚁群算法MATLAB程序信息素 增加强度系数运行时打开ACATSP.m 点击运行或输入 ACATSP(C,NC_max,m,Alpha,Beta,Rho,Q)一个运行实例:m=31;Alpha=1;Beta=5;Rho=0.1;NC_max=200;Q=100;31都市坐标为:1304 23123639 13154177 22443712 13993488 15353326 15563238 12294196 10044312 790 4386 5703007 19702562 17562788 14912381 16761332 6953715 16783918 21794061 23703780 22123676 25784029 28384263 29313429 19083507 23673394 26433439 32012935 32403140 35502545 23572778 28262370 2975
展开阅读全文