在上一篇中,介绍了利用RRT算法进行路径规划的过程,本篇主要介绍蚁群算法的实现以及在二位避障路径规划问题中的应用。




1. 理论基础:


蚂蚁在寻找食物时,会在路径上释放一种信息素,并能感知其他蚂蚁释放的信息素。信息素浓度越高,表明对应的路径距离越短。一般情况下,后来的蚂蚁会以较大的概率选择信息素浓度较高的路径,同时释放一定量的信息素,这样便形成一个正反馈。最终,蚂蚁能够找到一条从巢穴到食物源的最佳路径,即最短距离。同时,路径上的信息素浓度会随着时间的推移而逐渐衰减。距离食物源最短的路径具有最高浓度的信息素,蚂蚁慢慢向这条路线靠拢,最终这条路线成为最优路线,路线上形成了蚁群。


2. 算法实现流程


这里以TSP问题为例,来介绍算法的实现流程。问题可以描述为:在地图中有若干个点,每个点的位置不同,需要找到一条连接所有点的最短路径
用蚁群算法解决这个问题的思路为,设置一定规模的蚁群,其中的蚂蚁从不同的点出发,以一定的方式选择下一个目标点,从而遍历所有点,最终回到原点。计算各个蚂蚁所经过的路径长度,进行迭代,最终找到最短路径。


(1)参数初始化


包括蚁群数量m,地图上点的个数n,信息素影响因子α,启发函数影响因子β,启发函数γ,启发函数和信息素两者共同作用,影响蚂蚁对下一个目标点的选择;信息素矩阵M,用于记录两点之间的信息素,初始可将每个元素置为1;距离矩阵D,记录两点之间的距离,如D(2,3)代表点2与点3的距离,易知,对焦元素为0,如下图所示:
在这里插入图片描述
由于整个算法是通过迭代实现寻找最短路径的,所以还需要设置最大迭代次数。以下将介绍一次迭代过程的基本流程。


(2)确定起始点


循环m次,采用随机生成的方式,确定种群中m只蚂蚁的出发点。


(3)确定路径


循环m次,对每只蚂蚁分别进行路径的确定。
对其中一只,需要选择n-1次,每次进行选择时,不能将已经经过的点作为路径的下一点。确定下一点时,需要计算出每个待选点的选择概率,可通过下式确定:
在这里插入图片描述


上式很容易理解,待选点与当前点之间的信息素浓度越高,距离越短,其被选择的概率越大。
确定好各备选点的概率之后,采用轮盘赌的方法进行选择。


这里顺便介绍一下轮盘赌法:
假设备选点的个数为x,则用一个x维向量X表示其被选择的概率,接着对X进行归一化处理,即X(i) = X(i) / sum(X(i)),再分别计算出向量前i项的和,作为新的X(i),Matlab里可以用


X= cumsum(X)
  • 1

实现,最后生成一个0到1之间的随机数r,找到向量X中第一个大于r的元素,将其所代表的备选点作为下一个点。


在生成路径的过程中,需要一个m×n的矩阵Path,用于记录每只蚂蚁的路径。


(4)计算路径长度,确定路径长度最小值


将m只蚂蚁的路径全部确定完成后,就需要计算出每条路径的长度,并找出最短路径l,最后与历史最短路径L(初始可设置为一个较大的值)对比,决定是否更新最短路径。


(5)信息素更新


由路径长度不同导致的信息素改变量为:
在这里插入图片描述


式中,∆M表示信息素改变量矩阵,初始置为0,S为常数,L(i)代表本次迭代过程中,第i只蚂蚁走过的路径长度。
考虑到信息素的衰减,则信息素更新式为:
在这里插入图片描述


式中,weak代表信息素的衰减因子。
至此,一次迭代过程完成。


3. 二维路径规划问题应用


将蚁群算法应用到二维路径规划问题中时,只需将上述算法实现过程稍作改变即可。
在算法进行前,首先将二维地图根据精度要求进行网格划分,如划分为10×10。接着确定起始点与目标点,如起始点为(2,2),目标点为(8,8),这时,以(2,2)点为起点,计算出第三行10个备选点的选择概率,同样以轮盘赌的方式进行选择,以此类推,直到第8行,通过这种方式,确定一只蚂蚁在一次迭代过程中的路径,当然,上述过程也可以从第2列开始,依次进行。
需要注意的是,此时除起点与终点所在行之外,其余每两行之间,都需要建立一个二维的信息素M_i以及二维的距离矩阵D_i。


4 考虑避障的二维路径规划问题


在3中所述基础上,考虑避障问题。此时,只需要增添一个二维障碍物矩阵O,地图中存在障碍物的点,O中对应元素设置为0,否则设置为1,同时将备选点的选则概率计算公式改为:
在这里插入图片描述


即,障碍物所在点的选择概率为0。


5 总结


本篇介绍了蚁群算法的实现过程,以及其在二维避障路径规划过程中的应用,大家可以进行合理外推,将其应用于三维场景中。