蚁群优化算法(ACO)详细介绍
今年有幸上岸,导师是做群体智能控制方向的,会涉及到一些算法,所以提前学习
今天早上看到了一个中科院的群体智能视频https://www.bilibili.com/video/BV1KZ4y137sX/?spm_id_from=333.788.recommend_more_video.3
里面讲到了蚁群优化算法,所以趁热打铁写篇博客记录一下学习成果!
1. 蚁群觅食过程
1.1 等长路径觅食
1.2 非等长路径觅食
1.3 觅食过程分析
2. 蚁群优化算法形式化
3. 旅行商问题求解
3.1 旅行商问题介绍
3.2 旅行商问题蚁群优化求解
3.3 matlab伪代码
4. 蚁群优化算法小结
1. 蚁群觅食过程
现实生活中大家应该都见过蚂蚁觅食的场景,蚁群排成一条黑压压的线,成群结队的搬运食物。而有个有趣的现象,一开始蚂蚁们搬运食物的路线不止一条,但最后往往蚂蚁们都会沿着同一条路线搬运食物。
这种群体行为是基于蚂蚁分泌的一种特有的化学物质而产生的,就是信息素。这是蚂蚁在运动过程中留下的,作用就是在协作中进行群体交流。
1.1 等长路径觅食
假设有一群蚂蚁出门从A地寻找食物,食物在B地,而只有两条路C路和D路可以走,而且两条路的长度是相等的,示意图如下图所示:
根据实际情况会发现,最终在两条路上的蚂蚁数量基本相等。
1.2 非等长路径觅食
换个情况,如果两条路的长度不等,同样还是一群蚂蚁出门觅食,也只有C路和D路,而且D路是C路长度的二倍(假设是这种情况,方便分析),示意图如下:
根据实际情况,一开始C路和D路上都有蚂蚁,一段时间后会发现D路上的蚂蚁越来越少,最终几乎所有蚂蚁都沿着C路搬运食物。
1.3 觅食过程分析
以非等长情况作为分析对象,假设一开始蚂蚁们不知道前面的情况,然后分别派两只蚂蚁前去探路,蚂蚁们随机选择一条路开始寻找食物,记好这里是随机!
为了方便分析,现举出以下假设:
- 蚂蚁的速度相等
- L等于4个单位长度,每只蚂蚁一个单位时间爬行一个单位长度
- 蚂蚁每经过一处留下一个单位的“信息素”
过程一:
经过8个单位时间,走C路的蚂蚁已经到达B地,且在C路每处留下了一个单位的信息素,而此时走D路的蚂蚁刚走了一半;再经过8个单位时间,走C路的蚂蚁已经从B地取得食物返回A地,而走D路的蚂蚁刚到B地。再经过16个单位时间后,C路的蚂蚁又往返一趟,D路的蚂蚁也取得食物回到了A地。
由于C路往返了2趟,所以每处的信息素为4个单位,而D路只往返了一趟,则每处信息素为2个单位,最终信息素比例为2:1。
过程二:
寻找食物继续进行,这次会在C路上多派一只蚂蚁(共2只),而D路仍为1只,再经过32个单位时间后C路的2只蚂蚁已经来回两趟,D路的蚂蚁刚好一趟,加上上次的信息素D路每处信息素为4+4*2=12个单位,D路每处的信息素为2+2*1=4个单位,比例为3:1。
过程三:经过上面的过程,这次C路派3只蚂蚁,D路派1只蚂蚁,经过32个单位时间后,C路和D路上的信息素积累分别为24和6,比例为4:1。
此后按照信息素的指导,最终所有的蚂蚁都会选择C路线,而放弃D路线。
2. 蚁群优化算法形式化
以下便是蚁群优化算法形式化的五个点:
- 每只蚂蚁对应一个计算智能体
- 蚂蚁根据概率选择位置进行移动
- 在经过的路径上留下“信息素”
- “信息素”会随时间挥发
- “信息素”浓度大的路径在后序选择中会以更高的概率被选中
3. 旅行商问题求解
一般蚁群优化算法适用于求最短路径问题,比如最常见的旅行商问题,下面便向大家介绍旅行商问题的求解思想以及matlab伪代码实现蚁群优化算法。
3.1 旅行商问题介绍
旅行商问题(TSP:Traveling Salesman Problem)
- n个城市的有向图G=(V,E)
V={1,2,···,n} E={(i,j)|i,jϵ\epsilonϵV} - 城市之间的距离表示为
dijd_{ij}dij 为节点 i 和 j 之间的距离 - 目标函数
f(w)=∑m=0∞dildil+1f(w)=\sum_{m=0}^\infty d_{i_l}d_{i_{l+1}}f(w)=m=0∑∞dildil+1
w=(i1,i2,...,in)w=(i_1,i_2,...,i_n)w=(i1,i2,...,in) 为TSP问题的任意可行解,其中 in+1=i1i_{n+1}=i_1in+1=i1
目标函数是每个城市都经过一次的总路程,求解其最优解,即是的总路程最小。
i1,i2i_1,i_2i1,i2 表示的是第一次和第二次到达的城市,dildil+1d_{i_l}d_{i_{l+1}}dildil+1 即为第l和第l+1个第l和第l+1个第l和第l+1个城市之间的距离
3.2 旅行商问题蚁群优化求解
- 首先呢我们将m只蚂蚁随机放置在n个城市上,我们需要让蚂蚁去移动,那么就要计算蚂蚁选择移动的下一个城市的概率,位于城市 i 的第 k 只蚂蚁选择下一个城市 j 的概率为:
看到这样的公式不要害怕,搞清楚里面单个的变量含义就可以
τi,j(t)\tau_{i,j}(t)τi,j(t) 表示边 (i,j)(i,j)(i,j) 上的信息素浓度
ni,j(t)=1/di,jn_{i,j}(t)=1/d_{i,j}ni,j(t)=1/di,j 是根据距离定义的启发信息
α\alphaα 和 β\betaβ 反映了信息素与启发信息的相对重要性
解释一下这个式子的构成:
首先,初步可以判断出蚂蚁选择下一个城市的概率与信息素是成正比的,因为信息素越浓被选择的几率越大。
其次,是城市之间的距离,距离越近被选择的几率越大,所以和概率和di,jd_{i,j}di,j成反比,即和ni,j(t)n_{i,j}(t)ni,j(t)成正比,因为ni,j(t)=1/di,jn_{i,j}(t)=1/d_{i,j}ni,j(t)=1/di,j
所以分子出现了τi,j(t)\tau_{i,j}(t)τi,j(t) 和 ni,j(t)n_{i,j}(t)ni,j(t)相乘,但是选择因素中总有个权重之分,所以引入了次幂,使用α\alphaα 和 β\betaβ 反映信息素与启发信息的相对重要性。
最后分母是分子的求和,比值即为最终的概率Pi,jK(t)P^K_{i,j}(t)Pi,jK(t)。 - 信息素更新
为什么信息素要更新呢?通过上面的式子可以观察到城市之间的距离事固定的,所以如果信息素也不变,则每只蚂蚁到达同一个城市后的选择都是一样的了,这不是我们目的,所以需要更新概率则只能更新τi,j(t)\tau_{i,j}(t)τi,j(t)(信息素)
当所有的蚂蚁都经过了所有的城市,则开始进行信息素的更新,按照以下公式:
其中:QQQ为常数,wkw_kwk 表示第k只蚂蚁在本轮迭代中走过的路径,LkL_kLk 为路径长度,ρ\rhoρ 为小于1的常数,反映信息素的挥发速度。
信息素更新可以简单理解为:这一刻 iji jij 路径上的信息素浓度等于上一刻的信息素浓度乘以挥发速度 ρ\rhoρ(小于1大于0) ,再加上上一段时间所有蚂蚁在该路径上留下的信息素浓度之和,即Δτi,j\Delta\tau_{i,j}Δτi,j
Q/LkQ/L_kQ/Lk 代表第k只蚂蚁在该路径上留下的平均信息素
3.3 matlab伪代码
明白了蚁群优化算法的原理,下面是matlab的伪代码(摘自视频里的)
蚁群优化算法matlab代码实现,见我的下一个博客
https://blog.csdn.net/HuangChen666/article/details/115913181
一般优化算法都是以迭代次数或者最优解保持一定次数不变为终止条件
- 终止条件
设定迭代次数
设定最优解连续保持不变的迭代次数
4. 蚁群优化算法小结
- 思想
局部随机搜索(以Pi,jK(t)P^K_{i,j}(t)Pi,jK(t)在候选节点中选择)和自增强(信息素的更新)
世上本没有路,走的蚂蚁多了也就有了路 - 缺点
收敛速度慢(因为需要等,但是节奏可以自己控制)
易陷入局部最优(可以通过增加跳转目标的随机性改进)
对于解空间为连续的优化问题不适用(蚁群优化算法适用于离散问题,粒子群算法适合解连续空间问题,粒子群算法下次有机会再写篇博客)
蚁群优化算法(ACO)详细介绍相关推荐
- 【计算智能】——群体智能算法(蚁群优化算法ACO、粒子群优化算法PSO)
群体智能算法 与大多数基于梯度的优化算法不同,群体智能算法依靠的是概率搜索算法. 与梯度算法及传统演化算法相比优点: 没有集中控制约束,不会因为个体的故障影响整个问题的求解. 以非直接信息交流的方式确 ...
- 蚁群优化算法 ACO
群体智能(swarm intelligence) 定义: 由单个复杂个体完成的任务可由大量简单个体组成的群体合作完成,而后者往往更具有健壮性.灵活性等优势.在没有集中控制,不提供全局模型的前提下,为寻 ...
- Python实现ACO蚁群优化算法优化支持向量机回归模型(SVR算法)项目实战
说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 蚁群优化算法(Ant Colony Optimization, ...
- 混合整数分布式蚁群优化算法-MIDACO介绍和试用
混合整数分布式蚁群优化算法-MIDACO MIDACO是数值优化问题的求解器.MIDACO可以应用于连续(NLP非线性规划).离散/整数(IP整数规划)和混合整数规划(MINLP)问题.MIDACO可 ...
- 蚁群优化算法(ACO)
背景知识 蚁群优化算法是Marco Dorigo 受到蚂蚁寻找食物发现路径的行为启发,在博士论文提出的算法,是一种用来寻找优化路径的概率型算法,刚开始是为了解决 TSP(旅行商问题) ,即旅行家要旅行 ...
- Python实现ACO蚁群优化算法优化卷积神经网络回归模型(CNN回归算法)项目实战
说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 蚁群优化算法(Ant Colony Optimization, ...
- 蚁群优化算法的JAVA实现
蚁群算法简介 蚁群算法是群智能算法的一种,所谓的群智能是一种由无智能或简单智能的个体通过任何形式的聚集协同而表现出智能行为,它为在没有集中控制且不提供全局模型的前提下寻找复杂的分布式问题求解方案提供了 ...
- 揽货最短路径解决方案算法 - C# 蚁群优化算法实现
需求为(自己编的,非实际项目): 某配送中心进行揽货,目标客户数为50个客户,配送中心目前的运力资源如下: 现有车辆5台 单台运力最大行驶距离200千米 单台运力最大载重公斤1吨 问:运力怎样走法才能 ...
- 基于蚁群优化算法的特征选择相关文献
Dorigo等人在20世纪90年代初提出了蚁群优化算法(Ant colony optimization ,ACO).ACO是一种元启发式群智能算法,旨在解决组合优化问题.它利用了真实蚂蚁的觅食行为,由 ...
最新文章
- 比目前世界上最快的超级计算机快 4 倍,英伟达这波玩大了!
- oracle 提取当天日志,powershell提取日志内容
- [HDOJ3998] Sequence(DP,最大流)
- Adobe Air 写文件如何换行
- NOIP模拟测试18「引子·可爱宝贝精灵·相互再归的鹅妈妈」
- Java的Constructor(构造器)的理解
- python 浮点数精度丢失_浮点数精度问题透析:小数计算不准确+浮点数精度丢失根源...
- 花书+吴恩达深度学习(十)卷积神经网络 CNN 之卷积层
- C++20 即将于年底发布,C++ 23 提上日程!
- 2个YUV视频 拼接技术
- java 过滤微信昵称_java过滤微信昵称特殊字符
- python求n的阶乘_python计算n的阶乘的方法代码
- 全球及中国缓控释肥行业产能规模与投资盈利能力分析报告2022版
- 如何查看Safari浏览器network里Request的Payload
- 数据库服务:数据库表空间扩容
- 【数据结构 C描述】一个文本串可用事先给定的字母映射表进行加密。
- finalize方法的使用
- 美团王兴的创业三原则
- html5 setdata函数,微信小程序this.setData is not a function错误解决
- JS货币金额大写转换,1.01=壹元零壹分