蚁群算法解TSP(3)-效果验证

作者: 阿堃堃堃堃 | 来源:发表于2017-10-30 19:44 被阅读137次

引言

蚁群算法差不多已经水落石出了,本章作为该系列的最后一章,再提一些小细节供大家参考。一方面是蚁群算法涉及的一些参数,比如:挥发速率、能见度与信息素的控制因子、信息素增量的控制因子等;另一方面给出蚁群算法分别在10个城市、20个城市和31个城市的TSP问题中找到的最短环游路径结果,并与前面的遗传算法进行纵向比较。

参数配置

把所有可配置的参数归到Constant类,在其他类里通过静态变量的形式获取。当然更优雅的办法是写入一个properties.xml的文本文件中,规定好固定的key-value格式,然后调用java.util.Properties相关类读取,这样把静态或不易改变的数据从动态的程序中解耦出来,让数据由文本文件决定,从而完全不用再次编译程序,为后续维护、测试与调试带来极大便利(当然这个程序很小,所以基本或完全不需要这些考虑)。

class Constant 
{
    static int CITY_NUM; //城市数
    static Road[][] roads; //道路
    static final float C = 10.0f; //信息素初值
    static final int NC = 10; //环游总轮数
    static final int ANT_NUM = 10; //蚂蚁数
    static final int alpha = 2; //信息素控制因子
    static final int beta = 3; //能见度控制因子
    static final float p = 0.3f; //挥发速率
    static final float Q = 300.0f; //信息素增量控制因子
    
    static
    {
        //城市坐标
        int[][] cityPoint={
                {0,0},{12,32},{5,25},{8,45},{33,17},
                {25,7},{15,15},{15,25},{25,15},{41,12}};
        
        
        //确定城市数、构建道路
        CITY_NUM=cityPoint.length;
        roads = new Road[CITY_NUM][CITY_NUM];
        for(int i=0;i<CITY_NUM;i++)
            for(int j=0;j<CITY_NUM;j++)
                roads[i][j]=new Road();
        for(int i=0;i<CITY_NUM;i++)
        {
            for(int j=i;j<CITY_NUM;j++)
            {
                //计算长度
                float dis=(float)Math.sqrt(Math.pow((cityPoint[i][0] - cityPoint[j][0]),2) + Math.pow((cityPoint[i][1] - cityPoint[j][1]),2));
                //装入距离
                roads[i][j].distance=dis;
                roads[j][i].distance=dis;
            }
        }
    }
}

实验结果

我们分别选取网上一些公认的10个城市、20个城市和31个城市的坐标数据,及它们的最优解,来与本文的蚁群算法得到的解进行对比。下面是公认的地图数据:


本文的蚁群算法与遗传算法解TSP(3)-效果验证的对比结果如下表所示:

结语

仅依据上表显示结果的结果来看,我们不难得出以下一些结论:

  • 蚁群算法在城市较少时(10-20个城市)的性能相比遗传算法更好,但随着问题的规模增大(城市数目增加),蚁群算法容易陷入局部最优,很难发现全局最优解。
  • 遗传算法特有的选择算子、交叉算子、变异算子带来的随机性较大,导致收敛性不如蚁群算法。
  • 时间效率方面(本文未给出时间方面的结果),如果要找出长度大致相同的解,蚁群算法的速度更快。但遗传算法在问题规模、时间效率、解的质量三方面的平均效果更优。
    以上是本系列全部内容。若需要完整代码,可在我的GitHub上找到,对于代码和算法本身肯定都还有很多可以优化的地方,本文仅是给出了此算法的一个基本示例,更多深层次问题就等待大家去查阅、比较和实践了。

相关文章

  • 蚁群算法解TSP(3)-效果验证

    引言 蚁群算法差不多已经水落石出了,本章作为该系列的最后一章,再提一些小细节供大家参考。一方面是蚁群算法涉及的一些...

  • awesome 蚁群算法

    蚁群算法介绍(以TSP问题为例)

  • TSP解决之道——蚁群算法

    参考 蚁群算法java实现以及TSP问题蚁群算法求解 蚁群算法原理与应用讲解 蚁群算法原理与应用1-自然计算与群体...

  • 遗传算法解TSP(3)-效果验证

    引言 本章是遗传算法求解TSP问题的最后一章,主要做一些收尾的工作。介绍一下如何用GeneticAlgorithm...

  • TSP问题—蚁群算法(ACO)

    TSP问题—蚁群算法(ACO) 蚁群算法(AG)是一种模拟蚂蚁觅食行为的模拟优化算法,它是由意大利学者Dorigo...

  • 蚁群算法解TSP(1)-概述

    引言 遗传算法通过借鉴大自然物种的进化规律取得了难以想象的效果,同样地,马上要介绍的蚁群算法也通过效仿蚂蚁嗅取信息...

  • 蚁群算法解TSP(2)-核心代码

    引言 按照上一章的算法流程,本章给出一个自己用Java代码及面向对象思路实现的蚁群算法。尽量追求代码的质量、可读性...

  • 【原】蚁群算法优化

    前言 最近初学蚁群算法,用eil51.tsp数据集做训练。从一开始的44x,经过各种优化后,终于基本稳定在最优解4...

  • 几种蚁群算法介绍

    蚂蚁系统 最早的蚁群算法,其在小规模TSP中性能尚可,再大规模TSP问题中性能下降,容易停滞。其解决旅行商问题(T...

  • 蚁群算法解决旅行商(TSP)问题

    使用蚁群算法解决旅行商问题步骤如下: 初始化参数。 将蚂蚁随机的放在城市上。 蚂蚁各自按概率选择下一座城市。 蚂蚁...

网友评论

    本文标题:蚁群算法解TSP(3)-效果验证

    本文链接:https://www.haomeiwen.com/subject/jmympxtx.html