蚁群算法matlab程序代码.doc

上传人:scccc 文档编号:12502660 上传时间:2021-12-04 格式:DOC 页数:13 大小:58KB
返回 下载 相关 举报
蚁群算法matlab程序代码.doc_第1页
第1页 / 共13页
蚁群算法matlab程序代码.doc_第2页
第2页 / 共13页
蚁群算法matlab程序代码.doc_第3页
第3页 / 共13页
蚁群算法matlab程序代码.doc_第4页
第4页 / 共13页
蚁群算法matlab程序代码.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《蚁群算法matlab程序代码.doc》由会员分享,可在线阅读,更多相关《蚁群算法matlab程序代码.doc(13页珍藏版)》请在三一文库上搜索。

1、先新建一个主程序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程序第

2、一步:变量初始化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);%存

3、储并记录路径的生成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<=NC max%停止条件之一:达到最大迭代次数,停止%蚁群算法 MATLA程序第二步:将m只蚂蚁放到n个城市上Ran dpos=;%随即存取for i=1:(ceil(m/n)Ran dpos=Ra ndpos,ra ndperm (n);endTabu(:,1)=(Ra ndpos

4、(1,1:m)'%此句不太理解?%蚁群算法 MATLA程序第三步:m只蚂蚁按概率函数选择下一座城市,完成各自的周游for j=2:n%所在城市不计算for i=1:mvisited=Tabu(i,1:(j-1);%记录已访问的城市,避免重复访问%待访问的城市J=zeros(1,( n-j+1);Jc=1;for k=1: nif length(find(visited=k)=O%开始时置 0J(Jc)=k;Jc=Jc+1;%访问的城市个数自加1endend%下面计算 蚁群算法 MATLA程序待选城市的概率分布for k=1:le ngth(J)P(k)=(Tau(visited(e n

5、d),J(k)AAIpha)*(Eta(visited(e nd),J(k)ABeta);endP=P/(sum(P);%按概率原则选取下一个城市Pcum=cumsum(P);%cumsum,元素累加即求和Select=fi nd(Pcum>=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:m

6、R=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),

7、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

8、( 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

9、 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('旅行商问题优化结果 &#

10、39;)需要输入的参数数据有: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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1