精华蚂蚁系统(解决旅行商 TSP问题)

精华蚂蚁系统(解决旅行商 TSP问题)

1. 需求分析:
1.1精华蚂蚁系统解决旅行商 TSP问题:
已知n个城市之间的距离,现有m只蚂蚁必须访问这n个城市,并且每个城市只能访问一次,最后必须返回出发城市。如何安排他对这些城市的访问次序,可使其旅行路线的总长最短:
精华蚂蚁系统是对基础ES的第一次改进,它在原AS信息素更新原则的基础上增加了一个对至今最优路径的强化手段。在每轮信息素更新完毕后,搜索到至今最优路径(用Tb表示)的那只蚂蚁将会为这条路径添加额外的信息素。

1.2输入:随机选区cnum个城市的坐标(横纵坐标范围设为1~2000),存放在cnum×2的二维数组citys中。

1.3输出:迭代iter_max次后的最短路径以及最短路线。

2. 概要设计:
2.1 随机选区50、100个城市的坐标(横纵坐标范围设为1~4000),存放在cnum×2的二维数组citys中。

citys=round(rand(100,2)*2000)

2.2 EAS中城市i与城市j的相连边上的信息素量 的更新:
在这里插入图片描述
2.2.1 在EAS中,新增了 ,并定义参数e作为 的权值,一般设置e等于城市规模n:
2.2.2 Cb是算法开始至今最优路径的长度。EAS在每轮迭代中为属于Tb的边增加了额外的e/Cb的信息素量。
Tau = (1-rho) * Tau + Delta_Tau ;
修改为:Tau = (1-rho) * Tau + Delta_Tau +e*Delta_b;
其中Delta_b表示精英蚂蚁留下的信息素。
3. 详细设计(主要代码matlab):

%随机生成城市:
%五十个城市:
citys=round(rand(50,2)*2000)
%一百个城市:
citys=round(rand(100,2)*2000)
%精英蚂蚁的设定:
Delta_Tau = zeros(n,n);
% 逐个蚂蚁计算
      for i = 1:m
          % 逐个城市计算
          for j = 1:(n - 1)
              Delta_Tau(Table(i,j),Table(i,j+1)) Delta_Tau(Table(i,j),Table(i,j+1)) + Q/Length(i);
          end
          Delta_Tau(Table(i,n),Table(i,1)) = Delta_Tau(Table(i,n),Table(i,1)) + Q/Length(i);
      end
     %EAS
     Delta_b = zeros(n,n);
     for i=1:(n-1)
         if iter==1
             Delta_b=0;
         else
          Delta_b(Route_best((iter-1),i),Route_best((iter-1),i+1))=Q/Route_best(iter-1);
% Route_best((iter-1)为各代最优路径
         end
     end
          
      Tau = (1-rho) * Tau + Delta_Tau+e*Delta_b;

4.实验结果:
实验结果(左):各代最短距离与平均距离之比,(右)最短路线
4.1城市数n=50时:

  • 4.1.1 AS:
    在这里插入图片描述在这里插入图片描述
    最短距离:11214.4271
    最短路径:21 17 19 11 25 6 48 12 4 28 3 2 22 35 31 36 14 37 50 34 42 32 40 23 49 38 45 18 16 26 8 27 30 41 39 20 24 33 7 44 1 5 47 29 43 46 10 9 15 13 21
    运行时间:66.711 s

  • 4.1.2 EAS
    在这里插入图片描述在这里插入图片描述
    最短距离:11277.7325
    最短路径:42 34 50 37 14 6 25 19 11 32 23 40 49 38 45 18 16 26 8 47 5 1 7 33 44 27 30 41 39 20 24 29 43 46 10 9 15 13 17 21 28 4 12 3 48 2 22 35 31 36 42
    运行时间:65.039 s

4.2 城市数n=100时:

  • 4.2.1 AS
    在这里插入图片描述在这里插入图片描述
    最短距离:16433.6365
    最短路径:75 3 80 13 70 39 90 2 51 41 93 68 55 64 88 99 11 100 63 40 35 45 89 61 71 79 38 57 95 42 67 15 8 87 69 81 6 72 62 46 94 25 16 28 36 97 20 23 77 58 34 78 9 73 52 98 22 66 5 96 50 33 43 83 92 32 10 84 74 27 53 21 7 4 56 91 82 65 14 26 85 31 49 86 24 37 12 30 18 19 60 54 29 44 59 48 17 47 1 76 75 运行时间:94.368 s

  • 4.2.2 EAS:
    在这里插入图片描述在这里插入图片描述
    最短距离: 16223.3569
    最短路径:64 89 61 55 68 8 87 15 42 67 95 57 38 79 71 69 81 6 72 46 94 25 16 28 36 97 62 78 9 34 73 52 66 22 98 5 96 50 33 43 4 56 53 21 7 91 27 74 10 84 14 65 82 26 85 31 49 86 24 37 18 30 12 47 1 76 75 3 13 70 80 41 51 93 2 90 39 17 48 19 54 60 44 29 59 32 92 83 58 23 77 20 45 35 40 63 100 11 99 88 64
    运行时间:100.368 s

  • 4.2.3 把e增大到原来的两倍(e=200)
    在这里插入图片描述在这里插入图片描述
    最短距离:15969.3803
    最短路径:33 43 5 96 50 98 22 66 52 73 34 78 9 62 46 94 25 16 28 36 97 81 6 72 20 77 23 58 63 40 100 11 99 88 64 55 68 61 89 35 45 69 38 57 95 67 42 15 8 87 79 71 93 51 41 80 13 70 3 75 76 1 47 39 2 90 17 48 30 12 18 19 29 44 59 60 54 37 24 86 49 31 85 26 14 65 82 91 53 21 7 4 56 27 74 84 10 32 92 83 33

  • 4.2.4 把e增大继续增加到300
    在这里插入图片描述在这里插入图片描述
    最短距离:16044.4963
    最短路径:44 29 54 60 59 85 26 14 65 82 91 21 7 4 56 53 27 74 84 10 32 92 83 43 33 5 96 50 98 22 66 52 73 34 78 9 62 46 94 25 16 28 36 97 72 6 81 69 35 45 23 77 20 58 63 40 11 100 89 61 71 38 79 57 95 67 42 15 87 8 68 55 64 88 99 17 48 47 39 90 2 93 51 41 80 13 70 75 3 76 1 24 37 31 49 86 12 30 18 19 44
    运行时间:92.143 s

  • 4.2.5 在e=200时,启发函数重要程度因子调整为2
    在这里插入图片描述在这里插入图片描述
    最短距离:18395.5945
    最短路径:5 50 43 33 92 83 59 32 10 4 7 21 53 91 27 74 56 84 14 65 82 26 85 49 31 86 24 12 18 30 19 29 44 54 60 37 64 89 61 55 68 93 51 2 41 80 13 70 3 75 76 1 47 48 17 90 39 99 88 11 100 63 40 45 35 71 79 38 57 95 67 42 15 8 87 69 77 23 58 20 72 6 81 97 36 46 28 16 25 94 62 34 78 9 73 52 98 22 66 96 5
    运行时间:86.035 s

  • 4.2.6 在e=200时,启发函数重要程度因子调整为8
    在这里插入图片描述在这里插入图片描述
    最短距离:16035.1606
    最短路径:92 83 5 96 50 33 43 66 22 98 52 73 34 78 9 62 46 94 25 16 28 36 97 81 6 72 20 77 23 58 63 40 100 11 99 88 64 89 61 35 45 69 71 79 38 57 95 67 42 15 87 8 55 68 93 51 41 80 13 70 75 3 76 1 47 39 90 2 17 48 30 18 19 44 29 60 54 37 24 12 86 49 31 85 26 14 65 82 91 21 7 4 56 53 27 74 84 10 32 59 92
    运行时间:92.093 s

  • 4.2.7 在e=200时,启发函数重要程度因子为8,调整蚁群数量为70
    在这里插入图片描述在这里插入图片描述
    最短距离:16312.5495
    最短路径:11 100 63 40 35 45 61 89 64 55 68 71 79 8 87 15 42 67 95 57 38 69 81 6 72 46 94 25 16 28 36 97 62 20 77 23 58 34 78 9 73 52 98 22 66 5 96 50 33 43 83 92 32 4 56 53 21 7 91 27 74 10 84 14 65 82 26 85 54 60 59 29 44 19 18 30 12 24 37 31 49 86 76 75 3 70 13 80 41 51 93 2 90 39 47 1 48 17 88 99 11
    运行时间:110.673s

5.总结:
蚁群算法(AS)的缺点在于收敛速度慢和易于陷入局部最优。
EAS引入 这种额外的信息素强化手段有助于更好的引导蚂蚁搜索的偏向,使算法更快收敛。
从实验结果来看,采用了EAS算法的群体总体收敛的效果会比AS更快,收敛的时间也更早。但是从最佳路程来看,EAS中的参数e若采用和城市数量相同的值,并不能找到比AS更优的路径。但是把e的值做出一定调整,如实验4.2.3中,把e增加到原本的两倍,得出的最短路径是比AS得出的更短的。但是在这时候就可以看出系统的收敛已经出现了不太正常的波动。所以随着这个值的增大,效果并没有随之变得更好。说明精英蚂蚁的作用在系统中占的比重过大,会使系统早熟,得到的结果不是最佳的。
在实验4.2.5和实验4.2.6中,我修改了启发函数重要程度因子,把其修改成了2和8。发现这个值的减小会对最佳路径造成很负面的影响,收敛效果也会变得很差。当这个值为8的时候,在最短路径上并没有得到更好的结果。我在实验后继续增大这个值,发现随着值的增大,找到的最短路径会有略微的减小,但是这个系统变得不收敛。
50个城市和100个城市在同样的情况下的运行时间,并没有和数量一样呈倍数增长。在实验4.2.7中,增加了蚁群数量,运行时间变长,但是效果并没有变好。

  • 0
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值