云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 蚁群算法TSP问题matlab源代码

蚁群算法TSP问题matlab源代码

  • 62 次阅读
  • 3 次下载
  • 2025/6/18 15:36:10

function

[R_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:aihuacheng@gmail.com %% All rights reserved

%%------------------------------------------------------------------------- %% 主要符号说明

%% C n个城市的坐标,n×4的矩阵 %% NC_max 最大迭代次数 %% m 蚂蚁个数

%% Alpha 表征信息素重要程度的参数 %% Beta 表征启发式因子重要程度的参数 %% Rho 信息素蒸发系数 %% Q 信息素增加强度系数 %% R_best 各代最佳路线 %% L_best 各代最佳路线的长度

%%========================================================================= %%第一步:变量初始化

n=size(C,1);%n表示问题的规模(城市个数) D=zeros(n,n);%D表示完全图的赋权邻接矩阵 for i=1:n for j=1:n if i~=j

D(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))) );%计算城市间距离 else D(i,j)=eps; end

D(j,i)=D(i,j); end end

Eta=1./D;%Eta为启发因子,这里设为距离的倒数 Tau=ones(n,n);%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);%各代路线的平均长度 while NC<=NC_max%停止条件之一:达到最大迭代次数 %%第二步:将m只蚂蚁放到n个城市上 Randpos=[];

for i=1:(ceil(m/n)) ?il(A)生成大于等于A的最小整数

Randpos=[Randpos,randperm(n)]; %randperm(n)生成1到n的随机排列 end

Tabu(:,1)=(Randpos(1,1:m))';

%%第三步:m只蚂蚁按概率函数选择下一座城市,完成各自的周游 for j=2:n for i=1:m

visited=Tabu(i,1:(j-1));%已访问的城市

J=zeros(1,(n-j+1));%待访问的城市,应该可以省 P=J;%待访问城市的选择概率分布 Jc=1; for k=1:n

if length(find(visited==k))==0 %如果visited里没有k J(Jc)=k; Jc=Jc+1; end end

%下面计算待选城市的概率分布 for k=1:length(J)

P(k)=(Tau(visited(end),J(k))^Alpha)*(Eta(visited(end),J(k))^Beta);%需要修改 end

P=P/(sum(P));

%按概率原则选取下一个城市

Pcum=cumsum(P); %这样做是为了使Pcum能取到1 Select=find(Pcum>=rand);

to_visit=J(Select(1)); %把大于rand的第一个数的序号作为下一个城市在J中的序号 Tabu(i,j)=to_visit; end end if NC>=2

Tabu(1,:)=R_best(NC-1,:); %上一次的最佳路线作为本次的第一只蚂蚁的路线 end

%%第四步:记录本次迭代最佳路线 L=zeros(m,1); for i=1:m R=Tabu(i,:); for j=1:(n-1)

L(i)=L(i)+D(R(j),R(j+1)); end

L(i)=L(i)+D(R(1),R(n)); %从终点回到起点 end

L_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:m for 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); end

Delta_Tau(Tabu(i,n),Tabu(i,1))=Delta_Tau(Tabu(i,n),Tabu(i,1))+Q/L(i); end

Tau=(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 on plot(L_ave)

function DrawRoute(C,R)

%%========================================================================= %% DrawRoute.m %% 画路线图的子函数

%%------------------------------------------------------------------------- %% C Coordinate 节点坐标,由一个N×2的矩阵存储 %% R Route 路线

%%=========================================================================

N=length(R);

scatter(C(:,1),C(:,2)); %画出所有点 hold on

plot([C(R(1),1),C(R(N),1)],[C(R(1),2),C(R(N),2)]) hold on for ii=2:N

plot([C(R(ii-1),1),C(R(ii),1)],[C(R(ii-1),2),C(R(ii),2)]) hold on end

设置初始参数如下:

m=31;Alpha=1;Beta=5;Rho=0.1;NC_max=200;Q=100; 31城市坐标为: 1304 2312 3639 1315 4177 2244 3712 1399 3488 1535 3326 1556 3238 1229 4196 1004 4312 790 4386 570 3007 1970 2562 1756 2788 1491 2381 1676 1332 695 3715 1678 3918 2179 4061 2370 3780 2212 3676 2578 4029 2838 4263 2931 3429 1908 3507 2367 3394 2643 3439 3201 2935 3240 3140 3550 2545 2357 2778 2826 2370 2975

运行后得到15602的巡游路径,路线图和收敛曲线如下:

87,7 91,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)

搜索更多关于: 蚁群算法TSP问题matlab源代码 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

function [R_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:aihuacheng@gmail.com %% All rights reserve

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com