蚁群算法TSP问题matlab源代码

上传人:pu****.1 文档编号:551649057 上传时间:2023-07-22 格式:DOCX 页数:5 大小:11.69KB
返回 下载 相关 举报
蚁群算法TSP问题matlab源代码_第1页
第1页 / 共5页
蚁群算法TSP问题matlab源代码_第2页
第2页 / 共5页
蚁群算法TSP问题matlab源代码_第3页
第3页 / 共5页
蚁群算法TSP问题matlab源代码_第4页
第4页 / 共5页
蚁群算法TSP问题matlab源代码_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《蚁群算法TSP问题matlab源代码》由会员分享,可在线阅读,更多相关《蚁群算法TSP问题matlab源代码(5页珍藏版)》请在金锄头文库上搜索。

1、functionR_best,L_best,L_ave,Shortest_Route,Shortest_Length=ACATSP(C,NC_max,m,Alpha,Beta ,Rho,Q)%= % ACATSP.m% Ant Colony Algorithm for Traveling Salesman Problem% ChengAihua,PLA Information Engineering University,ZhengZhou,China% Email:% All rights reserved% 主要符号说明% C n个城市的坐标,nx4的矩阵% NC_max 最大迭代次数%

2、m 蚂蚁个数% Alpha 表征信息素重要程度的参数% Beta 表征启发式因子重要程度的参数% Rho 信息素蒸发系数% Q 信息素增加强度系数% R_best 各代最佳路线% L_best 各代最佳路线的长度%=%第一步:变量初始化n=size(C,1);%n 表示问题的规模(城市个数)D=zeros(n,n);%D 表示完全图的赋权邻接矩阵for i=1:nfor j=1:nif i=jD(i,j) = max( (C(i,1)-C(j,1)人2+(C(i,2)-C(j,2)人2)人0.5,min(abs(C(i,3)-C(j,3),144- abs(C(i,3)-C(j,3) );%计

3、算城市间距离elseD(i,j)=eps;endD(j,i)=D(i,j);endendEta = 1./D;%Eta为启发因子,这里设为距离的倒数Tau=ones(n,n);%Tau为信息素矩阵Tabu=ze ros(m,n);%存储并记录路径的生成NC=1;%迭代计数器R_best=ze ros(NC_max,n);% 各代最佳路线L_best=inf.*ones(NC_max,1);% 各代最佳路线的长度L_ave=ze ros(NC_max,1);%各代路线的平均长度while NC=rand);to_visit=J(Select(1); %把大于rand的第一个数的序号作为下一个城市

4、在J中的序号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-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=

5、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(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_b

6、est);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 DrawRoute(C,R)%= % DrawRoute.m% 画路线图的子函数% C Coordinate节点坐标,由一个Nx2的矩阵存储% R Route 路线%= N=length(R); scatter(C(:,1),C(:,2); %画出所有点 hold onplot(C

7、(R(1),1),C(R(N),1),C(R(1),2),C(R(N),2) hold onfor ii=2:N plot(C(R(ii-1),1),C(R(ii),1),C(R(ii-1),2),C(R(ii),2) hold onend设置初始参数如下:m=31;Alpha=1;Beta=5;Rho=0.1;NC_max=200;Q=100; 31 城市坐标为:1304 23123639 13154177 22443712 13993488 15353326 15563238 12294196 10044312 7904386 5703007 19702562 17562788 14912

8、381 16761332 6953715 16783918 21794061 23703780 22123676 25784029 28384263 29313429 19083507 23673394 26433439 32012935 32403140 35502545 23572778 28262370 2975运行后得到15602 的巡游路径,路线图和收敛曲线如下:87, 791, 83)(83, 46)(71, 44)(64, 60)(68, 58)(83, 69)(87, 76)(74, 78)(71, 71)(58, 69)(54, 62)(51, 67)(37, 84)(41, 94)(2, 99)(7, 64)(22, 60)(25, 62)(18, 54)(4, 50)(13, 40)(18, 40)(24, 42)(25, 38)(41, 26)(45, 21)(44, 35)(58, 35)(62, 32)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号