基于搜索的路径规划算法总结

基于搜索的路径规划算法总结

一般而言,全局路径规划都是假设全局地图是完全已知的,然后就可以根据已知的全局信息进行全局规划。当然,也存在假设全局地图是部分未知的或完全未知的规划算法,如D*算法,这部分在本文中暂且不涉及。本文涉及的全局规划算法包括:

  • 广度优先算法(Breadth-first Searching,bfs)
  • 深度优先算法(Depth-first Searching,dfs)
  • Dijkstra算法
  • 最佳优先搜索算法(Best-first Searching,BFS)
  • A*算法

程序参考于:PathPlanning

1.概述

为什么要对上述算法做总结呢?因为我在用MATLAB对上述算法做编程实现时,发现它们的程序绝大部分是完全相同的,仅在于部分程序有所区别。

首先,上述规划算法都依赖于两张表格,即OPENCLOSED。前者表示算法即将检查的节点,后者表示算法已经完成检查的节点。依赖于这两张表格,算法可以实现对地图上部分节点或全部节点的代价检查,然后搜索到一条代价最小的路径。

所谓代价,即cost,表示起点到检查节点的距离(距离的表示多种多样,可根据实际情况选择),常常用字母g表示;除此之外,常常还会涉及另外一个代价,被称为启发代价,一般表示为检查节点到终点的距离,常常用字母h表示。

以上都是上文提到的所有算法都需要的部分,那么它们的区别在哪里呢?根据OPEN,算法可以知道应该对哪些节点进行检查,但问题是该优先检查OPEN中的哪个节点呢?

  • bfs算法认为应该优先检查OPEN中最先放入的节点(first-in-first-out),即应该先检查所有的父节点,然后再去检查以这些父节点延伸出来的子节点。也就是所谓的广度优先,这个广度可以看作是从起点开始到被检查节点所经过的节点的个数,若个数越少,则优先度越高;
  • dfs算法认为应该优先检查OPEN中最后放入的节点(last-in-first-out),即应该先检查以一个父节点延伸出来的一条可能的路径,若这条路径不行,再去检查另一个父节点。也就是所谓的深度优先,这个深度可以看作是从起点开始到被检查节点所经过的节点的个数,若个数越多,则优先度越高;
  • Dijkstra算法认为应该优先检查OPEN中代价(g)最小的节点;
  • BFS算法认为应该优先检查OPEN中启发代价(h)最小的节点;
  • A*算法认为应该优先检查OPEN中总代价(f=g+h)最小的节点;

虽然上述算法的优先搜索顺序的标准各不相同,但需要注意的一点是,在进行节点检查时,它们都是以g值为标准的,总体g值小的路径被认为是最优路径。也就是说,不考虑那些未被检查的节点,至少在被检查过的所有节点(即在CLOSED中的节点)中,这个标准可以让算法在最后得到的路径代价最小。

换句话说,如果可以遍历所有节点,那么基于g值的检查可以保证算法得到一条最优路径;如果只能遍历部分节点,那么基于g值的检查可以保证算法至少在这些已被检查的节点中得到一条最优路径。

2.算法对比

本文实现的所有算法都是在MATLAB R2019b上运行的。基本设置如下:

  • 地图大小设置为20*20,起点为[1,1],终点为[20,20],地图上会随机生成80个障碍物

2.1.广度优先搜索算法

在这里插入图片描述

2.2.深度优先搜索算法

在这里插入图片描述

2.3.Dijkstra算法

在这里插入图片描述

2.4.最佳优先搜索算法

在这里插入图片描述

2.5.A*算法

在这里插入图片描述
以上都是基于我的个人理解,若是哪里有问题,还请各位不吝赐教。

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值