MAT之ACA:利用ACA解决TSP优化最佳路径问题

举报
一个处女座的程序猿 发表于 2021/03/28 03:05:32 2021/03/28
【摘要】 MAT之ACA:利用ACA解决TSP优化最佳路径问题   目录 输出结果 实现代码     输出结果     实现代码 load citys_data.mat n = size(citys,1);D = zeros(n,n); for i = 1:n for j = 1:n if i ~= ...

MAT之ACA:利用ACA解决TSP优化最佳路径问题

 

目录

输出结果

实现代码


 

 

输出结果

 

 

实现代码


  
  1. load citys_data.mat
  2. n = size(citys,1);
  3. D = zeros(n,n);
  4. for i = 1:n
  5. for j = 1:n
  6. if i ~= j
  7. D(i,j) = sqrt(sum((citys(i,:) - citys(j,:)).^2));
  8. else
  9. D(i,j) = 1e-4;
  10. end
  11. end
  12. end
  13. m = 50;
  14. alpha = 1;
  15. beta = 5;
  16. rho = 0.1;
  17. Q = 1;
  18. Eta = 1./D;
  19. Tau = ones(n,n);
  20. Table = zeros(m,n);
  21. iter = 1;
  22. iter_max = 200;
  23. Route_best = zeros(iter_max,n);
  24. Length_best = zeros(iter_max,1);
  25. Length_ave = zeros(iter_max,1);
  26. while iter <= iter_max
  27. start = zeros(m,1);
  28. for i = 1:m
  29. temp = randperm(n);
  30. start(i) = temp(1);
  31. end
  32. Table(:,1) = start;
  33. citys_index = 1:n;
  34. for i = 1:m
  35. for j = 2:n
  36. tabu = Table(i,1:(j - 1));
  37. allow_index = ~ismember(citys_index,tabu);
  38. allow = citys_index(allow_index);
  39. P = allow;
  40. for k = 1:length(allow)
  41. P(k) = Tau(tabu(end),allow(k))^alpha * Eta(tabu(end),allow(k))^beta;
  42. end
  43. P = P/sum(P);
  44. Pc = cumsum(P);
  45. target_index = find(Pc >= rand);
  46. target = allow(target_index(1));
  47. Table(i,j) = target;
  48. end
  49. end
  50. Length = zeros(m,1);
  51. for i = 1:m
  52. Route = Table(i,:);
  53. for j = 1:(n - 1)
  54. Length(i) = Length(i) + D(Route(j),Route(j + 1));
  55. end
  56. Length(i) = Length(i) + D(Route(n),Route(1));
  57. end
  58. if iter == 1
  59. [min_Length,min_index] = min(Length);
  60. Length_best(iter) = min_Length;
  61. Length_ave(iter) = mean(Length);
  62. Route_best(iter,:) = Table(min_index,:);
  63. else
  64. [min_Length,min_index] = min(Length);
  65. Length_best(iter) = min(Length_best(iter - 1),min_Length);
  66. Length_ave(iter) = mean(Length);
  67. if Length_best(iter) == min_Length
  68. Route_best(iter,:) = Table(min_index,:);
  69. else
  70. Route_best(iter,:) = Route_best((iter-1),:);
  71. end
  72. end
  73. Delta_Tau = zeros(n,n);
  74. for i = 1:m
  75. for j = 1:(n - 1)
  76. Delta_Tau(Table(i,j),Table(i,j+1)) = Delta_Tau(Table(i,j),Table(i,j+1)) + Q/Length(i);
  77. end
  78. Delta_Tau(Table(i,n),Table(i,1)) = Delta_Tau(Table(i,n),Table(i,1)) + Q/Length(i);
  79. end
  80. Tau = (1-rho) * Tau + Delta_Tau;
  81. iter = iter + 1;
  82. Table = zeros(m,n);
  83. end
  84. [Shortest_Length,index] = min(Length_best);
  85. Shortest_Route = Route_best(index,:);
  86. disp(['最短距离:' num2str(Shortest_Length)]);
  87. disp(['最短路径:' num2str([Shortest_Route Shortest_Route(1)])]);
  88. subplot(1,2,1);
  89. plot([citys(Shortest_Route,1);citys(Shortest_Route(1),1)],...
  90. [citys(Shortest_Route,2);citys(Shortest_Route(1),2)],'o-');
  91. grid on
  92. for i = 1:size(citys,1)
  93. text(citys(i,1),citys(i,2),[' ' num2str(i)]);
  94. end
  95. text(citys(Shortest_Route(1),1),citys(Shortest_Route(1),2),' 起点');
  96. text(citys(Shortest_Route(end),1),citys(Shortest_Route(end),2),' 终点');
  97. xlabel('城市位置横坐标')
  98. ylabel('城市位置纵坐标')
  99. title(['ACA:利用ACA算法解决TSP优化路径(最短距离:' num2str(Shortest_Length) ')—Jason niu'])
  100. subplot(1,2,2);
  101. plot(1:iter_max,Length_best,'b',1:iter_max,Length_ave,'r:')
  102. legend('最短距离','平均距离')
  103. xlabel('迭代次数')
  104. ylabel('距离')
  105. title('ACA:各代最短距离与平均距离对比—Jason niu')

 



相关文章
ACA:利用ACA解决TSP优化最佳路径问题
 

 

文章来源: yunyaniu.blog.csdn.net,作者:一个处女座的程序猿,版权归原作者所有,如需转载,请联系作者。

原文链接:yunyaniu.blog.csdn.net/article/details/79401641

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。