今年有幸上岸,导师是做群体智能控制方向的,会涉及到一些算法,所以提前学习
今天早上看到了一个中科院的群体智能视频https://www.bilibili.com/video/BV1KZ4y137sX/?spm_id_from=333.788.recommend_more_video.3
里面讲到了蚁群优化算法,所以趁热打铁写篇博客记录一下学习成果!
1. 蚁群觅食过程
3. 旅行商问题求解
3.1 旅行商问题介绍
3.2 旅行商问题蚁群优化求解
3.3 matlab伪代码
1. 蚁群觅食过程
这种群体行为是基于蚂蚁分泌的一种特有的化学物质而产生的,就是信息素。这是蚂蚁在运动过程中留下的,作用就是在协作中进行群体交流。
1.1 等长路径觅食
根据实际情况会发现,最终在两条路上的蚂蚁数量基本相等。
1.2 非等长路径觅食
根据实际情况,一开始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. 旅行商问题求解
3.1 旅行商问题介绍
- n个城市的有向图G=(V,E)
V={1,2,···,n} E={(i,j)|i,j ϵ \epsilon ϵV} - 城市之间的距离表示为
d i j d_{ij} dij 为节点 i 和 j 之间的距离 - 目标函数
f ( w ) = ∑ m = 0 ∞ d i l d i l + 1 f(w)=\sum_{m=0}^\infty d_{i_l}d_{i_{l+1}} f(w)=m=0∑∞dildil+1
w = ( i 1 , i 2 , . . . , i n ) w=(i_1,i_2,...,i_n) w=(i1,i2,...,in) 为TSP问题的任意可行解,其中 i n + 1 = i 1 i_{n+1}=i_1 in+1=i1
目标函数是每个城市都经过一次的总路程,求解其最优解,即是的总路程最小。
i 1 , i 2 i_1,i_2 i1,i2 表示的是第一次和第二次到达的城市, d i l d i l + 1 d_{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) 上的信息素浓度
n i , j ( t ) = 1 / d i , j n_{i,j}(t)=1/d_{i,j} ni,j(t)=1/di,j 是根据距离定义的启发信息
α \alpha α 和 β \beta β 反映了信息素与启发信息的相对重要性
解释一下这个式子的构成:
首先,初步可以判断出蚂蚁选择下一个城市的概率与信息素是成正比的,因为信息素越浓被选择的几率越大。
其次,是城市之间的距离,距离越近被选择的几率越大,所以和概率和 d i , j d_{i,j} di,j成反比,即和 n i , j ( t ) n_{i,j}(t) ni,j(t)成正比,因为 n i , j ( t ) = 1 / d i , j n_{i,j}(t)=1/d_{i,j} ni,j(t)=1/di,j
所以分子出现了 τ i , j ( t ) \tau_{i,j}(t) τi,j(t) 和 n i , j ( t ) n_{i,j}(t) ni,j(t)相乘,但是选择因素中总有个权重之分,所以引入了次幂,使用 α \alpha α 和 β \beta β 反映信息素与启发信息的相对重要性。
最后分母是分子的求和,比值即为最终的概率 P i , j K ( t ) P^K_{i,j}(t) Pi,jK(t)。 - 信息素更新
为什么信息素要更新呢?通过上面的式子可以观察到城市之间的距离事固定的,所以如果信息素也不变,则每只蚂蚁到达同一个城市后的选择都是一样的了,这不是我们目的,所以需要更新概率则只能更新 τ i , j ( t ) \tau_{i,j}(t) τi,j(t)(信息素)
当所有的蚂蚁都经过了所有的城市,则开始进行信息素的更新,按照以下公式:
其中:
Q
Q
Q为常数,
w
k
w_k
wk 表示第k只蚂蚁在本轮迭代中走过的路径,
L
k
L_k
Lk 为路径长度,
ρ
\rho
ρ 为小于1的常数,反映信息素的挥发速度。
信息素更新可以简单理解为:这一刻
i
j
i j
ij 路径上的信息素浓度等于上一刻的信息素浓度乘以挥发速度
ρ
\rho
ρ(小于1大于0) ,再加上上一段时间所有蚂蚁在该路径上留下的信息素浓度之和,即
Δ
τ
i
,
j
\Delta\tau_{i,j}
Δτi,j
Q
/
L
k
Q/L_k
Q/Lk 代表第k只蚂蚁在该路径上留下的平均信息素
3.3 matlab伪代码
蚁群优化算法matlab代码实现,见我的下一个博客
https://blog.csdn.net/HuangChen666/article/details/115913181
一般优化算法都是以迭代次数或者最优解保持一定次数不变为终止条件
- 终止条件
设定迭代次数
设定最优解连续保持不变的迭代次数
4. 蚁群优化算法小结
- 思想
局部随机搜索(以 P i , j K ( t ) P^K_{i,j}(t) Pi,jK(t)在候选节点中选择)和自增强(信息素的更新)
世上本没有路,走的蚂蚁多了也就有了路 - 缺点
收敛速度慢(因为需要等,但是节奏可以自己控制)
易陷入局部最优(可以通过增加跳转目标的随机性改进)
对于解空间为连续的优化问题不适用(蚁群优化算法适用于离散问题,粒子群算法适合解连续空间问题,粒子群算法下次有机会再写篇博客)