1、蚁群算法实例仿真TSPLIB 中的 eil51 问题C=37 5249 4952 6420 2640 3021 4717 6331 6252 3351 2142 4131 325 2512 4236 1652 4127 2317 3313 1357 5862 4242 5716 578 527 3827 6830 4843 6758 4858 2737 6938 4646 1061 3362 6363 6932 2245 3559 155 610 1721 105 6430 1539 1032 3925 3225 5548 2856 3730 40;实际中的最优环游为Tour=12282631
2、2833635202292116503430949103933451544424019411325142443723486275146124718417375381132;设定性价比较优的参数, 对 eil513;40.7;1;m30;NC_ax10;Q问题进行仿真。function R_best,L_best,L_ave,Shortest_Route,Shortest_Length=acatsp(C,NC_max,m,Alpha,Beta,Rho,Q)%-% 主要符号说明% C n 个城市的坐标, n2 的矩阵% NC_max 最大迭代次数% m 蚂蚁个数% Alpha 表征信息素重要程度的
3、参数% Beta 表征启发式因子重要程度的参数% Rho 信息素蒸发系数% Q 信息素增加强度系数% R_best 各代最佳路线% L_best 各代最佳路线的长度%=%第一步:变量初始化n=size(C,1);%*表示问题的规模(城市个数)D=zeros(n,n);%D 表示完全图的赋权邻接矩阵for i=1:nfor j=1:nif i=jD(i,j)=(C(i,1)-C(j,1)2+(C(i,2)-C(j,2)2)0.5;elseD(i,j)=eps;endD(j,i)=D(i,j);endendEta=1./D;%Eta 为启发因子,这里设为距离的倒数Tau=ones(n,n);%Ta
4、u 为信息素矩阵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);%各代路线的平均长度while NC=rand);to_visit=J(Select(1);Tabu(i,j)=to_visit;endendif NC=2Tabu(1,:)=R_best(NC-1,:);end%第四步:记录本次迭代最佳路线L=zeros(m,1);for i=1:mR=Tabu(i,:);for j=1:(n
5、-1)L(i)=L(i)+D(R(j),R(j+1);endL(i)=L(i)+D(R(1),R(n);endL_best(NC)=min(L);pos=find(L=L_best(NC);R_best(NC,:)=Tabu(pos(1),:);L_ave(NC)=mean(L);NC=NC+1%第五步:更新信息素Delta_Tau=zeros(n,n);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);endDelta_Tau(Tabu(i,n),Tabu(
6、i,1)=Delta_Tau(Tabu(i,n),Tabu(i,1)+Q/L(i);endTau=(1-Rho).*Tau+Delta_Tau;%第六步:禁忌表清零Tabu=zeros(m,n);end%第七步:输出结果Pos=find(L_best=min(L_best);Shortest_Route=R_best(Pos(1),:);Shortest_Length=L_best(Pos(1);subplot(1,2,1)DrawRoute(C,Shortest_Route)subplot(1,2,2)plot(L_best)hold onplot(L_ave)function DrawRo
7、ute(C,R)%=% DrawRoute.m% 画路线图的子函数%-% C Coordinate 节点坐标,由一个 N2 的矩阵存储% R Route 路线%=N=length(R);scatter(C(:,1),C(:,2);hold onplot(C(R(1),1),C(R(N),1),C(R(1),2),C(R(N),2)hold onfor ii=2:Nplot(C(R(ii-1),1),C(R(ii),1),C(R(ii-1),2),C(R(ii),2)hold onend结果输出所得的最优环游为:Tourbest=33 45 15 44 42 19 41 13 40 4 17 37 46 51 12 47 18 14 25 24 43 7 23 48 6 27 1 22 28 31 26 8 2 16 21 29 20 35 36 3 32 11 38 5 30 34 50 9 49 10 39最短距离为 489.600988245795。