蚁群算法优缺点

优点
  • 蚁群算法是一种本质上的并行算法。每只蚂蚁搜索的过程彼此独立,仅通过信息激素进行通信。不仅增加了算法的可靠性,也使得算法具有较强的全局搜索能力。
  • 蚁群算法是一种自组织的算法。
  • 蚁群算法具有较强的鲁棒性。相对于其他算法,蚁群算法对初始路线的要求不高
  • 此外,蚁群算法的参数较少,设置简单,因而该算法易于应用到组合优化问题的求解。
  • 蚁群算法是一种正反馈算法。正反馈是蚁群算法的重要特征,它使得算法进化过程得以进行。
缺点
  • 收敛速度慢。蚁群算法中信息素初值相同,选择下一个节点时倾向于随机选择。虽然随机选择能探索更大的任务空间,有助于找到潜在的全局最优解,但是需要较长时间才能发挥正反馈的作用,导致算法初期收敛速度较慢。
matlab代码和python代码实例

智能优化算法之蚁群算法代码实现matlab、python

1. 蚁群算法模拟TSP问题

  • 在时刻 ttt,蚂蚁 kkk 从城市 iii 转移到城市 jjj 的概率 pijk(t)为:p^k_{ij}(t)为:pijk​(t)为:

  • 式中, Jk(i)={1,2,…,}−tabukJ_k(i)=\{1,2,…, \}-tabu_kJk​(i)={1,2,…,}−tabuk​ 表示蚂蚁 kkk 下一步允许选择的城市集合。禁忌表 tabuktabu_ktabuk​ 记录了蚂蚁 kkk当前走过的城市。当所有 nnn 座城市都加入到禁忌表 tabuktabu_ktabuk​ 中时,蚂蚁 kkk 便完成了一次周游,此时, 蚂蚁 kkk 所走过的路径便是 TSP 问题的一个可行解。
  • (5.1) 中的 ηijη_{ij}ηij​ 是一个启发式因子,表示蚂蚁从城市 iii 转移到城市 jjj 的期望程度。在蚁群算法中,ηijη_{ij}ηij​ 通常取城市 iii与城市 jjj 之间距离的倒数。
  • α 和 β分别表示信息素和期望启发式因子的相对重要程度。当所有蚂蚁完成一次周游后,各路径上的信息素根据式(5.2)更新:
  • 式中:ρ(0<ρ<1)ρ(0<ρ<1)ρ(0<ρ<1)表示路径上信息素的蒸发系数,1−ρ1-ρ1−ρ 表示
    信息素的持久性系数;ΔτijΔτ_{ij}Δτij​ 表示本次迭代中边 ijijij 上信息素的增量,即
  • 其中ΔτijkΔτ_{ij}^kΔτijk​ 表示第 kkk 只蚂蚁在本次迭代中留在边 ijijij 上的信息素量,如果蚂蚁 kkk 没有经过边 ,则ΔτijkΔτ_{ij}^kΔτijk​ 的值为零。ΔτijkΔτ_{ij}^kΔτijk​可表示为:
  • 其中 QQQ为正常数, 表示第 LkL_kLk​只蚂蚁在本次周游中所走过路径的长度。
其他模型

2. 基本蚁群算法的具体实现

  • (1)参数初始化。令时间 t=0t = 0t=0 和循环次数 Nc=0N_c = 0Nc​=0,设置最大循环次数 GGG,将 mmm 个蚂蚁置于 nnn 个元素(城市)上,令有向图上每条边 (i,j)(i,j)(i,j) 的初始化信息量 τij(t)=cτ_{ij}(t) =cτij​(t)=c ,其中 ccc 表示常数,且初始时刻 Δτij(0)=0Δτ_{ij}(0)=0Δτij​(0)=0
  • (2)循环次数:Nc=Nc+1N_c = N_c+1Nc​=Nc​+1
  • (3)蚂蚁的禁忌表索引号:k=1k=1k=1
  • (4)蚂蚁数目:k=k+1k= k+1k=k+1
  • (5)蚂蚁个体根据状态转移概率公式(5.1)计算的概率选择元素 jjj 并前进, j∈{Jk(i)}j∈\{J_k(i)\}j∈{Jk​(i)}。
  • (6)修改禁忌表指针,即选择好之后将蚂蚁移动到新的元素,并把该元素移动到该蚂蚁个体的禁忌表中
  • (7)若集合 CCC 中元素未遍历完,即 k<mk < mk<m,则跳转到第(4)步;否则执行第(8)步。
  • (8)记录本次最佳路线
  • (9)根据式(5.2)和式(5.3)更新每条路径上的信息量。
  • (10)若满足结束条件,即如果循环次数 Nc≥GN_c≥GNc​≥G ,则循环结束并输出程序优化结果;否则清空禁忌表并跳转到第(2)步。

3. 关键参数说明

信息素启发因子:α\alphaα
  • 其值越大,蚂蚁在选择以前走过的路径的可能性就越大,搜索的随机性就会减弱;
  • 而当启发式因子 α 的值过小时,则易使蚁群的搜索过早陷于局部最优。
  • 根据经验,信息素启发式因子 α 取值范围一般为[1,4][1,4][1,4]时,蚁群算法的综合求解性能较好。
启发式因子: β\betaβ
  • 期望启发因子 β 表示在搜索时路径上的信息素在指导蚂蚁选择路径时的向导性。
  • 期望启发因子 β 的值越大,蚂蚁在某个局部点上选择局部最短路径的可能性就越大,虽然这个时候算法的收敛速度得以加快,但蚁群搜索最优路径的随机性减弱,而此时搜索易于陷入局部最优解。
  • 根据经验,期望启发因子 β 取值范围一般为[3,5][3, 5][3,5],此时蚁群算法的综合求解性能更好。
信息素蒸发系数: ρ\rhoρ
  • 信息素蒸发系数 ρ 大小的选择将直接影响到整个蚁群算法的收敛速度和全局搜索性能。
  • ρ 表示信息素蒸发系数,1-ρ 则表示信息素持久性系数。因此,ρ的取值范围应该是0~1之间的一个数
  • ρ 过小时,则表示以前搜索过的路径被再次选择的可能性过大,会影响到算法的随机性能和全局搜索能力;
  • ρ 过大时,说明路径上的信息素挥发的相对变多,虽然可以提高算法的随机搜索性能和全局搜索能力,但过多无用搜索操作势必会降低算法的收敛速度。
蚂蚁数目:mmm
  • 蚂蚁数目增大后,会使大量的曾被搜索过的解(路径)上的信息素变得趋于平均,信息正反馈的作用不明显。虽然搜索的随机性得到了加强,但收敛速度减慢。
  • 反之,(蚂蚁数量少),特别是当要处理的问题规模比较大时,会使那些从来未被搜索到的解(路径)上的信息素减小到接近于0,搜索的随机性减弱,虽然收敛速度加快了,但会使算法的全局性能降低,算法的稳定性差,容易出现过早停滞现象。
  • mmm 一般取10~5010~5010~50
信息素强度:QQQ
  • 参数 QQQ 不必作特别的考虑,可以任意选取。
最大进化代数:GGG
  • 一般 GGG 取100∼500取100\sim500取100∼500

笔记参考

《智能优化算法及其MTALAB算法实例》第二版

智能优化算法之蚁群算法(ACO)相关推荐

  1. 【智能优化算法】蚁群算法ACO

    文章目录 [智能优化算法] 蚁群算法 1. 简介 1.1 简介 1.2 蚁群流程图 1.3 分类(可以不看) 2. 算法 2.1 参数讲解 2.2 计算公式 1) 转移概率公式 2) 启发式因子计算公 ...

  2. 智能优化算法之蚁群算法(1)

    蚁群算法(ant colony algorithm) : 一种模拟进化算法 蚂蚁在觅食过程中能够在其经过的路径留下一种称为信息素的物质,并在觅食的过程中能感知这种物质的强度,并指导自己的行动方向,他们 ...

  3. 智能优化算法之蚁群算法

    1.蚁群算法概述 蚁群算法(Ant Colony Algorithm, ACA) 由Marco Dorigo于1992年在他的博士论文中首次提出, 该算法模拟了自然界中蚂蚁的觅食行为. 蚂蚁在寻找食物 ...

  4. 路径算法:蚁群算法(ant colony optimization, ACO)

    一, 蚁群算法概述 自然界中有一个神奇的现象,即蚂蚁在没有提示的情况下总是能够找到从巢穴到食物的最短路径,这是为什么呢?原因就是蚂蚁在寻找食物时,能在其走过的路径上释放一种特殊的分泌物--信息素,随着 ...

  5. 最短移臂调度算法_MATLAB优化算法实例——蚁群算法

    ❝ 欢迎关注「工科男的Maltab学习日志」,采用Mardown文本编辑器编写文章,全新排版升级,内容.代码更简洁,同时开通了视频号,「工科男的日常」欢迎大家关注. --工科男 ❞ 1 蚁群算法基本理 ...

  6. 【Matlab优化选址】蚁群算法求解电动汽车充电站与换电站选址优化问题【含源码 1182期】

    一.代码运行视频(哔哩哔哩) [Matlab优化选址]蚁群算法求解电动汽车充电站与换电站选址优化问题[含源码 1182期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文 ...

  7. 群体智能算法之蚁群算法初探(一)

    一.背景 20世纪90年代,意大利学者M.Dorigo,V.Maniezzo,A.Colorni等从生物进化的机制中受到启发,通过穆尼自然界蚂蚁搜索路径的行为,提出来一种新型的模拟进化算法--蚁群算法 ...

  8. 蚂蚁算法python_蚁群算法python编程实现

    前言 这篇文章主要介绍了Python编程实现蚁群算法详解,涉及蚂蚁算法的简介,主要原理及公式,以及Python中的实现代码,具有一定参考价值,需要的朋友可以了解下. 蚁群算法简介 蚁群算法(ant c ...

  9. 关于精英蚁群算法matlab,蚁群算法MATLAB解VRP问题

    Excel  exp12_3_2.xls内容: ANT_VRP函数: function [R_best,L_best,L_ave,Shortest_Route,Shortest_Length]=ANT ...

最新文章

  1. Oracle ORA-600 [2662] 错误
  2. linux 防火墙iptables简明教程
  3. 2021—2022学年面向中小学生的全国性竞赛活动名单
  4. Java 算法 S01串
  5. wd my book essential 不显示盘符_江西大规格WD无伸缩短式万向联轴器供应
  6. JUnit5 @Disabled测试示例
  7. python基础教程书籍-Python基础教程(第2版)
  8. 如何在页面显示json数据
  9. Maven 入门 (2)—— 创建Maven项目
  10. vsto java,VSTO开发入门,C#基础篇
  11. Excel 2010高级应用-饼图(四)
  12. ps里面的css,今天来为大家介绍PS中的图层样式
  13. 笔记本电脑改光驱加装固态和内存条详细步骤教程
  14. python读取odb_python - 从.odb文件中提取von mises应力值 - 堆栈内存溢出
  15. Dubbo源码解析-——服务导出
  16. 按捺不住,G4首刷成功
  17. 参数校验(Hibernate-Validation)
  18. c语言在屏幕上显示字母,C语言在屏幕上的显示内容
  19. kubeasz 安装K8S 错误解决
  20. C++ signal和sigaction信号处理

热门文章

  1. Django框架之美多商城项目
  2. Python_美多商城(用户中心)_5
  3. E-Mobile 后台管理系统漏洞
  4. 英语计算机工程师求职信,计算机工程师英文求职信范文
  5. SpringBoot - OAuth2第三方登录之新浪微博登录
  6. 氨酰胺酶(glutaminase, GLS) 活性测定试剂盒说明书
  7. 手机网页调用手机QQ QQ在线客服
  8. IoT 开发,我们需要学习哪些内容?
  9. 光刻机:半导体工业最耀眼的明珠
  10. TMC7300-LA:微型直流有刷电机驱动