• 基于Python实现的蚁群算法


    资源下载地址:https://download.csdn.net/download/sheziqiong/85896154
    资源下载地址:https://download.csdn.net/download/sheziqiong/85896154

    1 蚁群算法

    1.1 算法介绍

    蚁群算法(Ant Colony Optimization, ACO),是一种用来在图中寻找优化路径的机率型算法,对蚂蚁行为进行模仿抽象。在求解旅行推销员问题时,蚂蚁随机从某一城市出发,根据城市间距离与残留信息素浓度按概率选择下一城市,蚂蚁走完所有的城市后,在走过的路径上留下信息素,蚂蚁走的总路程越少,留下的信息素就越多。多次循环后,最好的路径就有可能被筛选出。

    其核心原理在于单位时间内通过短距离的路径的次数要多,也就会留下更浓信息素,而蚂蚁会选择信息素浓的路径,这样根据信息素的浓度就能找到最短路径,非常适合解决 TSP 问题。

    1.3 实验结果

    下面是放置 1000 只蚂蚁的结果,计算出最优解是 10967.

    在这里插入图片描述

    为防止实验的偶然性,下面进行 10 次重复实验并求平均值

    在这里插入图片描述

    在这里插入图片描述

    上图横坐标是放出的蚂蚁数,纵坐标是信息素浓度最大的路径的距离。可以看出其收敛得非常快。

    1.4 实验总结

    1、群算法的不难看出其非常适合求解最短距离问题,因此在三个算法中,ACO 无论是算法的稳定性,还是最优解的距离长度都是最好的。不仅如此,它的运行速度也是另外两者无法匹敌的。还有,GA 和 PSO 都要维持一个群体,而 ACO 只需要一只蚂蚁就能完成任务,占用内存更小。可见,ACO 在算法的时间复杂度,空间复杂度,解的质量等各个方面都完胜另外两个算法。

    2、初始状态时每条路的信息素浓度相等,所以蚂蚁的选择会有随机性。随机的选择也需要在每个路口进行判断,而这种判断是无意义,因为并不能选出信息素浓度高的。所以,我在初始时将若干只蚂蚁指定随机的几条路,这样能防止无意义的判断,并在算法正式开始时各条路上已经存在具有指示性的信息素。

    3、蚂蚁选择路线并不是只依靠信息素,还有一个启发信息。启发信息也就是距离下一个城市的距离,蚂蚁会趋向于选择更近的城市。

    在这里插入图片描述

    我在进行信息素和期望启发因子的重要程度参数调优时发现期望启发因子的重要程度会影响解的收敛速度。当启发信息的权重越大,收敛得就会越快,而当启发信息权重很小时,就会收敛得很慢。通过观察公式,不难发现,启发信息权重越大,算法就越趋向于贪婪算法,也就是说一部分城市序列得最优解可以用贪婪算法求。这可以给遗传算法和粒子群寻优的初始群体的确定一定的启发。也就是说贪婪算法求出的位置比随机分布更接近解,从而节省从随机位置到趋近解这一过程所消耗的时间。

    同时,对于蚁群算法的优化,我提出一种猜想。初始阶段较大的启发信息权重有助于解的快速收敛,而到后面时则会影响找到最优解。所以可以在初始阶段设置较大的启发信息权重,让解快速收敛,到了后面再降低其权重,让算法变为以信息素为主要导向的,以此来加快逼近最优解的速度。也就是说在两个阶段动态调整信息素和期望启发因子的重要程度。

    资源下载地址:https://download.csdn.net/download/sheziqiong/85896154
    资源下载地址:https://download.csdn.net/download/sheziqiong/85896154

  • 相关阅读:
    k8s集群搭建(ubuntu 20.04 + k8s 1.28.3 + calico + containerd1.7.8)
    200. 岛屿数量
    数据抓取可以应用到哪些行业
    CocosCreator 面试题(九)什么是异步加载资源
    2023-09-30:用go语言,给你一个整数数组 nums 和一个整数 k 。 nums 仅包含 0 和 1, 每一次移动,你可以选择 相邻 两个数字并将它们交换。 请你返回使 nums 中包含 k
    信钰证券:6G概念强势拉升,通宇通讯、世嘉科技涨停,硕贝德等走高
    Elasticsearch写入原理剖析
    举个栗子~Tableau 技巧(237):用多节点瀑布图分阶段查看数据
    Milvus 2.4 向量库安装部署
    离线 Linux 开发环境搭建
  • 原文地址:https://blog.csdn.net/sheziqiong/article/details/125598636