首页 > 编程语言 >基于蚁群的二维路径规划算法(附MATLAB代码)

基于蚁群的二维路径规划算法(附MATLAB代码)

时间:2022-09-29 17:03:11浏览次数:79  
标签:MAKLINK 小伙伴 蚁群 路径 二维 算法 MATLAB 蚂蚁

基于蚁群的二维路径规划算法(附MATLAB代码)_路径规划


本文参考《MATLAB智能算法30个案例分析》一书,文末的源代码也来自本书


前一段时间有小伙伴问能否出一个机器人路径规划的推文,小编最近努力查资料,然后学习一些新知识,然后才动笔写这篇推文,不知道能不能达到那位小伙伴的期待。

查阅了许多论文发现,机器人路径规划算法有太多太多,这里小编参考了上面提到的这本书,然后结合书中的代码,逐渐体会出二维路径规划的一些思想。废话不多说,接下来开始学习吧!


路径规划算法就是指在有障碍物的工作环境中寻找一条从起点到终点无碰撞绕过所有障碍物的运动路径。简单来说,就是如何避障并找出一条最佳路径

基于蚁群的二维路径规划算法(附MATLAB代码)_二维_02

上图中S代表起点,T代表终点,问题是如何找出一条从S出发到T结束并且不穿过障碍物的最短路径?

基于蚁群的二维路径规划算法(附MATLAB代码)_路径规划_03

蓝色、黄色和绿色哪条路径最短呢,恐怕我们无法观察得出。这三条路径都是小编凭感觉画出来的,但是在实际计算过程中,我们不可能只凭着感觉找最短路径,因此这里引出一个图论的基本理论——MAKLINK图论理论

MAKLINK图论可以建立二维路径规划的空间模型,其通过生成大量的MAKLINK线构造的二维路径规划可行空间。说白了,就是咱们使用人家定义好的一堆线,然后以此为基准,再找可行路径。那么什么是MAKLINK线呢?

MAKLINK线定义为两个障碍物之间不与障碍物相交顶点之间的连线,以及障碍物顶点与边界相交的连线

下图将所有MAKLINK线全部连出,v代表MAKLINK线的中点

基于蚁群的二维路径规划算法(附MATLAB代码)_路径规划_04

连接图中所有MAKLINK线的中点加上始点S和终点T构成用于初始路径规划无向网络图,如下图所示。

基于蚁群的二维路径规划算法(附MATLAB代码)_二维_05

在这张无向图的基础上,我们使用dijkstra算法找出一条初始可行路径。

基于蚁群的二维路径规划算法(附MATLAB代码)_二维_06

我们可以数出从S到T,一共经过8个点,S-v8-v7-v6-v12-v13-v11-T,一共经过6条MAKLINK线。可能细心的小伙伴会看出这个dijkstra算法获得的初始路径会有很大提升空间。

因为v是MAKLINK线的中点,那么能不能够从这6条MAKLINK线中,每条都找到一个最合适的点,然后恰好从S出发经过这6个待找到的点,最后到终点T,所经过的路径恰好最短呢?

假设一条MAKLINK线两端的点为P1和P2,那么表示这条线段上任意一点的公式为:P(h)=P1+(P2-P1)*h   其中h取值范围为[0,1]

看到这里小伙伴也许会恍然大明白了,这不就是找出6个合适的h值吗!!!

那么如何找出这6个h值呢,书中采用蚁群算法进行求解。对蚁群算法陌生的小伙伴可以参考之前的推文​​蚁群算法通俗讲解(附MATLAB代码)​​。下面给出蚁群算法求解该问题的流程图。

基于蚁群的二维路径规划算法(附MATLAB代码)_二维_07

蚁群算法优化寻找的路径参数集合为(h1,h2,h3,...,h6)。假设共有m只蚂蚁从S出发到终点T,经过的路径为S-n1j-n2j-n3j-n4j-n5j-n6j-T,其中ndj表示路径点在第d条MAKLINK线的第j个等分点上。蚂蚁在移动的过程中,不可能完全随机地从一个点移动到下一个点。因此设定一个规则:当蚂蚁在MAKLINK线Li时,选择下一个MAKLINK线Li+1上节点j的方法为

基于蚁群的二维路径规划算法(附MATLAB代码)_二维_08

其中基于蚁群的二维路径规划算法(附MATLAB代码)_蚁群算法_09为所有蚂蚁在MAKLINK线Li上时点的集合,基于蚁群的二维路径规划算法(附MATLAB代码)_路径规划_10信息素基于蚁群的二维路径规划算法(附MATLAB代码)_蚁群算法_11启发值,q为(0,1)直接的随机数,q0为[0,1]之间的可调参数。

其实这里就是给蚂蚁选择下一个点时设定一个规则,各位小伙伴不用太纠结这个规则是如何设定的,针对不同的问题规则的设定也会不同。

蚁群算法的一大特点就是信息素,因为有了信息素,所以其它蚂蚁选择信息素浓度高的路径概率就大。这里的信息素更新体现在两部分。

一部分是实时信息素更新,另一部分是路径信息素更新

实施信息素更新是指每一只蚂蚁在选择某个节点后必须对该节点的信息素进行更新,即

基于蚁群的二维路径规划算法(附MATLAB代码)_路径规划_12

基于蚁群的二维路径规划算法(附MATLAB代码)_蚁群算法_13为信息素初始值,基于蚁群的二维路径规划算法(附MATLAB代码)_路径规划_14为[0,1]区间的可调参数。

当所有蚂蚁从初始点走到终点,完成依次迭代搜索时,选择所有蚂蚁经过路径中长度最短的一条,更新该条路径上每一个点的信息素,即

基于蚁群的二维路径规划算法(附MATLAB代码)_路径规划_15

基于蚁群的二维路径规划算法(附MATLAB代码)_路径规划_16为最短路径长度。



小编建议边看代码边理解,效果会更好。

蚁群算法优化后的路径如下图蓝线所示:

基于蚁群的二维路径规划算法(附MATLAB代码)_蚁群算法_17


​MATLAB代码链接(后台回复“蚁群二维路径”提取代码)

链接:https://pan.baidu.com/s/1rK72iSAM-ktHOsvQThCJaQ 

提取码:4fys 

代码有效期只有7天,如发现链接过期,可通过公众号后台联系小编,小编会尽快给您新的链接。


标签:MAKLINK,小伙伴,蚁群,路径,二维,算法,MATLAB,蚂蚁
From: https://blog.51cto.com/u_15810430/5723537

相关文章

  • 大规模邻域搜索(LNS)求解带时间窗的车辆路径问题(VRPTW)(附MATLAB代码)
    祝大家元宵节快乐本文引用ShawP.UsingConstraintProgrammingandLocalSearchMethodstoSolveVehicleRoutingProblems[M]//PrinciplesandPracticeofConstrai......
  • 基于粒子群算法的多目标搜索算法讲解(附MATLAB代码)
    本文依然参考《MATLAB智能算法30个案例分析》一书,文末的源代码也来自本书​上周有小伙伴后台问小编能否讲解一下关于多目标优化问题的算法,本周小编做足了功课,为大家更新这篇......
  • 混合粒子群算法通俗讲解(附MATLAB代码)
    还是先声明本文参考《MATLAB智能算法30个案例分析》今天小编为大家讲解粒子群算法(PSO),还是和往常一样,我的目的是为了带领大家快速入门,是为了让大家在最短的时间内上手粒子群......
  • 遗传算法求解车间调度问题(附MATLAB代码)
    首先声明本文参考数据魔术师公众号的《遗传算法求解混合流水车间调度问题(附C++代码)》和《MATLAB智能算法30个案例分析》今天小编为大家讲解遗传算法求解车间调度问题。小编......
  • 蚁群算法通俗讲解(附MATLAB代码)
    本文依然参考《MATLAB智能算法30个案例分析》一书,文末的源代码也来自本书今天小编与大家聊聊蚁群算法,蚁群算法一个显著的特点是蚂蚁在经过路径后会释放信息素,蚂蚁之间能够相......
  • VNS(变邻域搜索算法)求解CVRP问题
    最近小编在学(xiao)习(xi)CVRP问题,相信小伙伴们CVRP问题并不陌生,没错CVRP问题就是容量受限制的车辆路径问题,容量受限指的是每辆车的容量都有限制,我们对问题的目标进行设定,本......
  • Latex 如何写算法?推荐模板
    之前我已经在这篇文章总结了现有的算法包的区别。如果有选择苦难症的朋友可以考虑无脑使用以下模板来写算法。\usepackage[noend]{algpseudocode}#noend表示算法不显......
  • 模拟退火算法通俗讲解
    编辑:连吃十三碗校正:随心目录1. 模拟退火算法基本概念2. 模拟退火算法基本流程3. 遗传模拟退火算法matlab代码1.模拟退火算法基本概念自然凝结的、不受外界干扰而形成的......
  • 数组的使用、二维数组
    数组使用For-Each循环数组作方法入参数组作返回值多维数组多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一堆数组,其每一个元素都是一个一维数组。二......
  • 通关基本算法 day_09 -- 离散化
    离散化原理假如我们有一对数值范围是0-109但是个数比较少,只有比如105的数字,我们需要以这些值位下标来做所以我们需要这个序列映射到从0开始的连续的自然数比......