首页 > 编程语言 >蚁群算法通俗讲解(附MATLAB代码)

蚁群算法通俗讲解(附MATLAB代码)

时间:2022-09-29 17:01:17浏览次数:47  
标签:蚂蚁 城市 路径 信息 MATLAB 讲解 小编 浓度 蚁群

蚁群算法通俗讲解(附MATLAB代码)_最佳路径


本文依然参考《MATLAB智能算法30个案例分析》一书,文末的源代码也来自本书

今天小编与大家聊聊蚁群算法,蚁群算法一个显著的特点是蚂蚁在经过路径后会释放信息素,蚂蚁之间能够相互感知彼此的信息素,如果某一段路径的信息素浓度高,则说明有大量的蚂蚁经过此路径,也就说明该条路径可能是“较好的”正在纠结选择哪条路走的蚂蚁,会以大概率参照以前蚂蚁所走的路径而走那条“较好的”路径(既然是大概率,就说明还有小概率选择不走“较好的”路径,小编认为这里的思想和“轮盘赌”的思想差不多),按照此种逻辑走下去,信息素浓度最高的那条路径就可能是“最优”路径。生物学家发现,路径上的信息素浓度会随着时间推进而逐渐衰减。

下面是书中的一段话,我把它摘抄下来,小编觉得这段话把蚁群算法的思想讲得很透彻。

蚁群算法应用于解决优化问题的基本思路为:用蚂蚁的行走路径表示待优化问题的可行解,整个蚂蚁群体的所有路径构成优化问题的解空间。路径较短的蚂蚁释放的信息素量较多,随着时间的推进,较短的路径上累积的信息素浓度逐渐增高,选择该路径的蚂蚁个数也愈来愈多。最终,整个蚂蚁会在正反馈的作用下集中到最佳路径上,此时对应的便是待优化问题的最优解。


因为蚁群算法的核心思想是“信息素”,所以用蚁群算法求解TSP问题有两个关键步骤:

步骤一:根据信息素浓度计算出选择转移到下一个城市的概率

步骤二:更新信息素浓度

首先设置一些基本参数:设整个蚂蚁群体数量为m,城市数量为n,城市i与城市j之间的距离为dijt时刻城市i与城市j连接路径上的信息素浓度为蚁群算法通俗讲解(附MATLAB代码)_最佳路径_02。初始时刻,各个城市连接路径上的信息素浓度相同(因为蚂蚁们都还没开始走),设蚁群算法通俗讲解(附MATLAB代码)_最佳路径_03

步骤一详解前文我们说到,蚂蚁能够感知某条路径上的信息素浓度,并根据信息素浓度选择继续沿着那条路走,小编前面也说到这里的思想和“轮盘赌”的思想差不多,不过还有一点小小的差异。

蚁群算法通俗讲解(附MATLAB代码)_最佳路径_04

这个式子表明t时刻蚂蚁k从城市i移动到城市j的概率,其中蚁群算法通俗讲解(附MATLAB代码)_最佳路径_05蚁群算法通俗讲解(附MATLAB代码)_最佳路径_06为蚂蚁k待访问城市的集合,开始时蚁群算法通俗讲解(附MATLAB代码)_最佳路径_06中有(n-1)个元素,即包括除了蚂蚁k出发城市的其他城市,随着时间的推进,蚁群算法通俗讲解(附MATLAB代码)_最佳路径_06中的元素不断减少,直至为空,即表示所有的城市均访问完毕;蚁群算法通俗讲解(附MATLAB代码)_优化问题_09为信息素重要程度因子,其值越大,表示信息素的浓度在转移中起到的作用越大;蚁群算法通俗讲解(附MATLAB代码)_最佳路径_10蚁群算法通俗讲解(附MATLAB代码)_优化问题_11的重要程度影响因子,其值越大,表示蚁群算法通俗讲解(附MATLAB代码)_优化问题_11在转移中的作用越大,即蚂蚁会以较大的概率转移到距离最短的城市。

步骤二详解:在计算完转移概率之后,蚂蚁一定会移动到下一个城市,这时不同路径上的信息素浓度一定会发生变化,因为刚才蚂蚁已经经过这条路线。如前文所述,在蚂蚁释放信息素的同时,各个城市连接路径上的信息素也在逐渐消失,设参数蚁群算法通俗讲解(附MATLAB代码)_优化问题_13蚁群算法通俗讲解(附MATLAB代码)_蚁群算法_14)表示信息素的挥发程度。因此当所有蚂蚁完成一次循环后(这里的意思是所有的蚂蚁全部找到自己的路径后,这些蚂蚁会更新完各连接路径上的信息素浓度之后进行新一轮的“寻找最优路径活动”,这其实属于一个迭代的过程),各个城市间连接路径上的信息素浓度需要进行实时更新。

下面给出信息素浓度更新公式。

蚁群算法通俗讲解(附MATLAB代码)_优化问题_15

其中,蚁群算法通俗讲解(附MATLAB代码)_蚁群算法_16表示第k只蚂蚁在城市i与城市j连接路径上释放的信息素浓度;蚁群算法通俗讲解(附MATLAB代码)_蚁群算法_17表示所有蚂蚁在城市i与城市j连接路径上释放的信息素浓度之和。

蚁群算法通俗讲解(附MATLAB代码)_优化问题_18

其中,Q为常数,表示蚂蚁循环一次所释放的信息素总量;Lk为第k只蚂蚁经过路径的长度。



综上所述,蚁群算法求解TSP问题的流程图如下所示

蚁群算法通俗讲解(附MATLAB代码)_优化问题_19


最后老规矩,附上蚁群算法求解TSP问题MATLAB代码(后台回复“蚁群TSP”提取代码)

链接:https://pan.baidu.com/s/1SQxcB7mmCbUZT6J2DXOIbQ 

提取码:l0l2 

小编分享的百度网盘链接保存期限一般为7天,有期限的原因是为了让大家真正学习算法,而不是保存到网盘里然后就放在里面不看了,如果各位小伙伴需要前几篇推文的代码,可以在后台留言给我,我会把链接重新分享给您,多谢各位理解。

如果各位觉得小编的推文写得还可以的话,请分享给身边的人,关注的人数越多,小编更新就越有动力。

最后因为小编能力有限,如果推文中哪里写得有问题,欢迎大家积极指正,小编会虚心采纳各位的意见。

标签:蚂蚁,城市,路径,信息,MATLAB,讲解,小编,浓度,蚁群
From: https://blog.51cto.com/u_15810430/5723543

相关文章

  • 模拟退火算法通俗讲解
    编辑:连吃十三碗校正:随心目录1. 模拟退火算法基本概念2. 模拟退火算法基本流程3. 遗传模拟退火算法matlab代码1.模拟退火算法基本概念自然凝结的、不受外界干扰而形成的......
  • CH573F蓝牙从机(peripheral)例程讲解(二)
    在上一篇外设例程讲解中讲述了蓝牙从机的收发接口,这样可以快速的上手,那么接下来就讲解另一个重要设置,从机的广播。在peripheral例程中,一直是以50ms的周期进行广播,使用手机......
  • python 使用HOG进行目标检测 + 非极大值抑制代码讲解(HOG(Histogram of Oriented Gradi
    最近在看《深度学习全书公式+推导+代码+TensorFlow》——清华大学出版社这本书,看到第8章——目标检测,其中有使用HOG进行目标检测的代码,觉得写的通俗易懂,就分享给大家......
  • 分支结构实战讲解
    分支结构实战讲解:#1.根据用户输入内容打印其权限'''jason-->超级管理员tom-->普通管理员jack,rain-->业务主管其他-->普通用户''......
  • 详细讲解三维动画与二维动画的优缺点有哪些?
    二维动画和三维动画是动画制作中两种重要的表现方式。它们有很多相似之处。三维动画制作是以二维动画为基础的。同时,立体动画制作具有更多的独立差异和优势。动画形象策划不......
  • 基础知识(5) --Matlab中特殊符号使用总结
    前言:上篇文章分享了Matlab经常会遇到(),[],与{}三种符号,下面接着捋一捋其他的特殊符号使用方法,主要有:冒号'分号&  &&与|   || 或~非.点1、:冒号冒号的主要用途是用......
  • Matlab爬虫获取王者荣耀英雄皮肤
    前言:周末闲来无事,玩了几局王者荣耀,突发奇想怎么获取到王者荣耀里面的英雄皮肤,本期分享一下如何通过matlab爬虫批量提取王者荣耀的英雄皮肤关键字:王者荣耀、爬虫、Matlab首先......
  • 在Linux上运行matlab
    1.首先在集群上把matlab这个模块加载上。moduleloadmatlabXXX2.接下来运行。matlab-nodesktop-nosplash-rmatlabfilename(不加.m,可执行文件)也可以进入matlab环......
  • 基于SSM家庭健康食谱管理系统Java美食食谱管理系统的设计与实现(源码调试+讲解+文档)
    ......
  • Matlab绘制特殊的图形
    1、指定坐标轴刻度值和标签自定义沿坐标轴的刻度值和标签有助于突出显示数据的特定方面。以下示例说明一些常见的自定义,例如修改刻度值的放置位置、更改刻度标签的文本和格......