机器人导航中,A星算法的原理及与Dijkstra的比较

A星算法是游戏中常用的最短路规划算法,在室内机器人导航路径的规划也有着非常优秀的表现,其实现原理如下:

  1. 首先我们要有一张简化的地图(二维数组),障碍物为1,自由空间为0,有在地图中源点和目标点的坐标;
  2. 第二步,我们要理解几个概念:
    2.1 Open 列表,用来记录所有需要被用来寻找最短路径的点
    2.2 Close列表,用来记录经过算法评估不会再用来评估路径的点
    2.3 针对每一个点我们需要计算他的两个值:G和H。G代表从源点到达当前点的移动量,通常我们从它的前继(上一个点)获取,然后加1。H代表从当前点到终点的移动量估算值,估算值离真实值越接近,最终的路径会更加精确。如果估算值停止作用,很可能生成出来的路径不会是最短的(但是它可能是接近的)。H的计算方法决定了算法的聪明程度及收敛的快慢。通常我们使用曼哈顿距离 (计算出从当前点经过的剩下的水平和垂直的点数量,略去了障碍物或者不同陆地类型的数量。)或者欧几里得距离来作为估算函数。最终F=G+H来代表当前点的综合评估值。
  3. 第三步,算法的具体计算伪代码:
    将源点添加到Open列表中;
    while(Open列表不为空) {
       查找Open列表中F值最小的点,将该点移动到Close列表中,我们把这个点称作当前评估点;(第一次肯定是源点放入Close列表中);
       找到与当前评估点相邻的每一个可通行的点P(地图值为0);
           如果P在Closed列表中:不管它;
           如果P不在Open列表中:添加它到Open列表中,然后计算出它的综合评估值,并且把当前评估点作为该点的父节点;
           如果P已经在Open列表中:当我们使用当前生成的路径到达那里时,检查F 和值是否更小。如果是,更新它的和值和它的前继;
        如果P是终点,则退出循环(break),按照P的父节点逆向搜索即可得到最终的路径;
    }

在实际的机器人导航中,地图并不是简单的0或1,那我们只需要改变我们计算G和H的方式,将地图的代价值或者地形的影响因素都考虑进去而不是简单的点与点之间的距离就可以得到理想的路径。

最后,A星和Dijkstra都是寻找最短路径的算法,我总结的两者区别是:

  1. Dijkstra算法计算源点到其他所有点的最短路径长度,A*关注点到点的最短路径。
  2. Dijkstra算法建立在较为抽象的图论层面,实质是广度优先搜索,是一种发散式的搜索,其空间复杂度和时间复杂度都比较高。而A*算法不但记录其到源点的代价,还计算当前点到目标点的期望代价,是一种启发式算法,也可以认为是一种深度优先的算法,并且是一种快速的朝着目标深度遍历的搜索算法。
  3. Dijkstra可以认为是A星算法的特例,是启发度为0的搜索。
  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值