无人车路径规划算法---(4)基于搜索的路径规划算法 II(贪心/Astar)

本文详细介绍了无人车路径规划中的贪心最佳优先搜索算法(GBFS)和A*算法。GBFS通过调整Dijkstra算法,以终点为导向提高搜索效率,但存在“短视”问题。A*算法结合实际成本和启发式成本,既能减少无效搜索,又能找到更优路径。当启发式函数为欧几里得距离时,A*确保搜索出最短路径,但在曼哈顿距离下可能不适用。代码已开源在GitHub。
摘要由CSDN通过智能技术生成

上篇博客中介绍了一些基本的图搜索算法,其中也重点介绍了基于势场来实现的Dijkstra算法。本篇博客将介绍关于Heuristic Function的图搜索算法


开源了一个结合Dijkstra,Greedy,以及Astar算法的代码,更新在了博主的github主页上,链接见文末


1. Greedy Best First Search Algorithm(贪心算法)

如上篇博客所介绍,BFS与Dijstra算法在搜索目标时是向所有方向进行节点拓展的。如果任务中是需要向多个目标点进行搜索,那么此类方法显然是合适的。但是如果仅仅只是需要向一个目标点进行搜索,那么这样的搜索会增加很多不必要的耗时。
那么此时我们可以尝试,将Dijkstra中的计算距离起点的cost修改为距离终点的cost。将节点的扩展导向终点。这种方法就可以称为贪心算法。
在贪心算法中,首先我们需要定义一个heuristic function来表述当前点距离终点的远近,通常我们会采用曼哈顿距离或者欧拉距离来实现此需求

1.1 算法伪代码

frontier = PriorityQueue()
frontier.put(start, 0)
came_from = dict()
came_from[start] = None

while not frontier.empty():
   current = frontier.get()

   if current == goal:
      break
   
   for next in graph.neighbors(current):
      if next not in came_from:
         priority = heuristic(goal, next)
         frontier.put(next, priority)
         came_from[next] = current

1.2 效果对比

在这里插入图片描述在这里插入图片描述

上图对比了Dijkstra与Greedy算法之间的效果区别,可以看出,

  • 当地图中没有障碍物遮挡时,Greedy算法的搜索范围以及效率是高于Dijkstra的,因为它让搜索更加具有目的性
  • 当地图中存在障碍物特别是凹形障碍物遮挡时,由于Greedy算法仅考虑与终点的距离,常常会造成"短视"的现象即距离障碍物特别近时才会改变方向重新搜索路径去往终点

2. Astar Algorithm(A* 算法)

上部分Greedy算法展示了引入终点因素后对于搜索算法的影响,其优点与缺点通过效果对比图可以清楚的看出。为了解决单纯考虑终点因素而导致的"短视"问题,我们引入了一个更加均衡的算法&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值