• 基于ACO蚁群算法的tsp优化问题matlab仿真


    目录

    1.算法描述

    2.仿真效果预览

    3.MATLAB核心程序

    4.完整MATLAB


    1.算法描述

         “基本原理 蚁群算法(Ant Colony Optimization,ACO)是一种基于种群寻优的启发式搜索算法,有意大利学者M.Dorigo等人于1991年首先提出。该算 法受到自然界真实蚁群集体在觅食过程中行为的启发,利用真实蚁群通过个体间的信息传递、搜索从蚁穴到食物间的最短路径等集体寻优特 征,来解决一些离散系统优化中的困难问题。

           算法基本思想:

    (1)根据具体问题设置多只蚂蚁,分头并行搜索。

    (2)每只蚂蚁完成一次周游后,在行进的路上释放信息素,信息素量与解的质量成正比。

    (3)蚂蚁路径的选择根据信息素强度大小(初始信息素量设为相等),同时考虑两点之间的距离,采用随机的局部搜索策略。这使得距离较短的边,其上的信息素量较大,后来的蚂蚁选择该边的概率也较大。

    (4)每只蚂蚁只能走合法路线(经过每个城市1次且仅1次),为此设置禁忌表来控制。

    (5)所有蚂蚁都搜索完一次就是迭代一次,每迭代一次就对所有的边做一次信息素更新,原来的蚂蚁死掉,新的蚂蚁进行新一轮搜索。

    (6)更新信息素包括原有信息素的蒸发和经过的路径上信息素的增加。

    (7)达到预定的迭代步数,或出现停滞现象(所有蚂蚁都选择同样的路径,解不再变化),则算法结束,以当前最优解作为问题的最优解。

          将各个蚂蚁随机地置于不同的出发地,对每个蚂蚁k ( k = 1 , 2 , ⋯  , m ) ,按照轮盘赌法得到下面的转移概率公式计算其下一个待访问的城市,直到所有蚂蚁访问完所有的城市。

    2.仿真效果预览

    matlab2022a仿真结果如下:

     

    3.MATLAB核心程序

    1. tic
    2. CityNum=30;
    3. [dislist,Clist]=tsp(CityNum);
    4. Tlist=zeros(CityNum);%禁忌表(tabu list)
    5. cl=100;%保留前cl个最好候选解
    6. bsf=Inf;
    7. tl=50; %禁忌长度(tabu length)
    8. l1=200;%候选解(candidate),不大于n*(n-1)/2(全部领域解个数)
    9. S0=randperm(CityNum);
    10. S=S0;
    11. BSF=S0;
    12. Si=zeros(l1,CityNum);
    13. StopL=200; %终止步数
    14. p=1;
    15. clf;
    16. figure(1);
    17. while (p<StopL+1)
    18. if l1>CityNum*(CityNum)/2
    19. disp('候选解个数,不大于n*(n-1)/2(全部领域解个数)! 系统自动退出!');
    20. l1=(CityNum*(CityNum)/2)^.5;
    21. break;
    22. end
    23. ArrS(p)=CalDist(dislist,S);
    24. i=1;
    25. A=zeros(l1,2);
    26. while i<=l1
    27. M=CityNum*rand(1,2);
    28. M=ceil(M);
    29. if M(1)~=M(2)
    30. m1=max(M(1),M(2));m2=min(M(1),M(2));
    31. A(i,1)=m1;A(i,2)=m2;
    32. if i==1
    33. isdel=0;
    34. else
    35. for j=1:i-1
    36. if A(i,1)==A(j,1)&&A(i,2)==A(j,2)
    37. isdel=1;
    38. break;
    39. else
    40. isdel=0;
    41. end
    42. end
    43. end
    44. if ~isdel
    45. i=i+1;
    46. else
    47. i=i;
    48. end
    49. else
    50. i=i;
    51. end
    52. end
    53. for i=1:l1
    54. Si(i,:)=S;
    55. Si(i,[A(i,1),A(i,2)])=S([A(i,2),A(i,1)]);
    56. CCL(i,1)=i;
    57. CCL(i,2)=CalDist(dislist,Si(i,:));
    58. CCL(i,3)=S(A(i,1));
    59. CCL(i,4)=S(A(i,2));
    60. end
    61. [fs fin]=sort(CCL(:,2));
    62. for i=1:cl
    63. CL(i,:)=CCL(fin(i),:);
    64. end
    65. if CL(1,2)<bsf %藐视准则(aspiration criterion)
    66. bsf=CL(1,2);
    67. S=Si(CL(1,1),:);
    68. BSF=S;
    69. for m=1:CityNum
    70. for n=1:CityNum
    71. if Tlist(m,n)~=0
    72. Tlist(m,n)=Tlist(m,n)-1;
    73. end
    74. end
    75. end
    76. Tlist(CL(1,3),CL(1,4))=tl;
    77. else
    78. for i=1:cl
    79. if Tlist(CL(i,3),CL(i,4))==0
    80. S=Si(CL(i,1),:);
    81. for m=1:CityNum
    82. for n=1:CityNum
    83. if Tlist(m,n)~=0
    84. Tlist(m,n)=Tlist(m,n)-1;
    85. end
    86. end
    87. end
    88. Tlist(CL(i,3),CL(i,4))=tl;
    89. break;
    90. end
    91. end
    92. end
    93. Arrbsf(p)=bsf;
    94. drawTSP(Clist,BSF,bsf,p,0);
    95. p=p+1;
    96. end
    97. BestShortcut=BSF
    98. theMinDistance=bsf
    99. figure(2);
    100. plot(Arrbsf,'r'); hold on;
    101. plot(ArrS,'b');grid;
    102. title('搜索过程');
    103. legend('最优解','当前解');
    104. A_073

    4.完整MATLAB

    matlab源码说明_我爱C编程的博客-CSDN博客

    V

  • 相关阅读:
    java计算机毕业设计高校科研信息管理系统源码+mysql数据库+系统+lw文档+部署
    ssm垃圾分类管理系统
    【考研】串的模式匹配算法——KMP算法(含真题)
    CrossOver22试用期到了如何免费使用?
    【应用统计学】参数统计-抽样分布
    ConfigurationProperties配置绑定
    计算机毕业设计Java作品测评网站(源码+系统+mysql数据库+lw文档)
    聊一聊JDK21-虚拟线程
    思腾云计算
    Elasticsearch快速入门及结合Next.js案例使用
  • 原文地址:https://blog.csdn.net/hlayumi1234567/article/details/128083359