智能优化算法之蚁群算法(ACO)
蚁群算法优缺点
优点
- 蚁群算法是一种本质上的并行算法。每只蚂蚁搜索的过程彼此独立,仅通过信息激素进行通信。不仅增加了算法的可靠性,也使得算法具有较强的全局搜索能力。
- 蚁群算法是一种自组织的算法。
- 蚁群算法具有较强的鲁棒性。相对于其他算法,蚁群算法对初始路线的要求不高
- 此外,蚁群算法的参数较少,设置简单,因而该算法易于应用到组合优化问题的求解。
- 蚁群算法是一种正反馈算法。正反馈是蚁群算法的重要特征,它使得算法进化过程得以进行。
缺点
- 收敛速度慢。蚁群算法中信息素初值相同,选择下一个节点时倾向于随机选择。虽然随机选择能探索更大的任务空间,有助于找到潜在的全局最优解,但是需要较长时间才能发挥正反馈的作用,导致算法初期收敛速度较慢。
- …
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)相关推荐
- 【智能优化算法】蚁群算法ACO
文章目录 [智能优化算法] 蚁群算法 1. 简介 1.1 简介 1.2 蚁群流程图 1.3 分类(可以不看) 2. 算法 2.1 参数讲解 2.2 计算公式 1) 转移概率公式 2) 启发式因子计算公 ...
- 智能优化算法之蚁群算法(1)
蚁群算法(ant colony algorithm) : 一种模拟进化算法 蚂蚁在觅食过程中能够在其经过的路径留下一种称为信息素的物质,并在觅食的过程中能感知这种物质的强度,并指导自己的行动方向,他们 ...
- 智能优化算法之蚁群算法
1.蚁群算法概述 蚁群算法(Ant Colony Algorithm, ACA) 由Marco Dorigo于1992年在他的博士论文中首次提出, 该算法模拟了自然界中蚂蚁的觅食行为. 蚂蚁在寻找食物 ...
- 路径算法:蚁群算法(ant colony optimization, ACO)
一, 蚁群算法概述 自然界中有一个神奇的现象,即蚂蚁在没有提示的情况下总是能够找到从巢穴到食物的最短路径,这是为什么呢?原因就是蚂蚁在寻找食物时,能在其走过的路径上释放一种特殊的分泌物--信息素,随着 ...
- 最短移臂调度算法_MATLAB优化算法实例——蚁群算法
❝ 欢迎关注「工科男的Maltab学习日志」,采用Mardown文本编辑器编写文章,全新排版升级,内容.代码更简洁,同时开通了视频号,「工科男的日常」欢迎大家关注. --工科男 ❞ 1 蚁群算法基本理 ...
- 【Matlab优化选址】蚁群算法求解电动汽车充电站与换电站选址优化问题【含源码 1182期】
一.代码运行视频(哔哩哔哩) [Matlab优化选址]蚁群算法求解电动汽车充电站与换电站选址优化问题[含源码 1182期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文 ...
- 群体智能算法之蚁群算法初探(一)
一.背景 20世纪90年代,意大利学者M.Dorigo,V.Maniezzo,A.Colorni等从生物进化的机制中受到启发,通过穆尼自然界蚂蚁搜索路径的行为,提出来一种新型的模拟进化算法--蚁群算法 ...
- 蚂蚁算法python_蚁群算法python编程实现
前言 这篇文章主要介绍了Python编程实现蚁群算法详解,涉及蚂蚁算法的简介,主要原理及公式,以及Python中的实现代码,具有一定参考价值,需要的朋友可以了解下. 蚁群算法简介 蚁群算法(ant c ...
- 关于精英蚁群算法matlab,蚁群算法MATLAB解VRP问题
Excel exp12_3_2.xls内容: ANT_VRP函数: function [R_best,L_best,L_ave,Shortest_Route,Shortest_Length]=ANT ...
最新文章
- Oracle ORA-600 [2662] 错误
- linux 防火墙iptables简明教程
- 2021—2022学年面向中小学生的全国性竞赛活动名单
- Java 算法 S01串
- wd my book essential 不显示盘符_江西大规格WD无伸缩短式万向联轴器供应
- JUnit5 @Disabled测试示例
- python基础教程书籍-Python基础教程(第2版)
- 如何在页面显示json数据
- Maven 入门 (2)—— 创建Maven项目
- vsto java,VSTO开发入门,C#基础篇
- Excel 2010高级应用-饼图(四)
- ps里面的css,今天来为大家介绍PS中的图层样式
- 笔记本电脑改光驱加装固态和内存条详细步骤教程
- python读取odb_python - 从.odb文件中提取von mises应力值 - 堆栈内存溢出
- Dubbo源码解析-——服务导出
- 按捺不住,G4首刷成功
- 参数校验(Hibernate-Validation)
- c语言在屏幕上显示字母,C语言在屏幕上的显示内容
- kubeasz 安装K8S 错误解决
- C++ signal和sigaction信号处理