基于搜索的路径规划算法(Dijkstra and A*)

总结课程《深蓝学院移动机器人路径规划》

深度优先遍历:栈
广度优先遍历:队列

1.Dijkstra

Dijkstra = 广度优先遍历 + 权重

在Dijkstra 算法中,相当于在每条路径上添加了权重。在每次弹出扩展点的时候,需要计算代价函数g(n)最小的节点。如果通过该节点所扩展得到的邻居节点并不在容器中,则需要直接添加进去。如果已经存在在容器中,则需要对比从该节点出发所得到的代价是否比其原有代价更小。

代价函数:f(n)=g(n)

2. A*

A*= Dijkstra + 启发式

Dijkstra算法仅仅考虑了从起始点出发的累计代价g(n),当考虑从路标点到目标点之间的代价h(n),即类似贪心算法,则为A*算法。
此时与Dijkstra算法考虑的代价则不同,其他则一样。

代价函数:f(n)=g(n)+h(n)

如何保证A*算法的最优质:
估计的启发式函数cost < 真实cost
即对于任何一个节点,h(n)<h*(n)。例如使用欧式距离作为启发式函数!

3.Weighted A*

如果h(n)>=h*(n),可以理解为A*算法在往贪心算法演变,即尽可能的往目标点移动。

代价函数:f(n)=g(n)+ ε \varepsilon εh(n)
ε > 1 \varepsilon>1 ε>1,则朝着目标点更近的方向规划
ε = 0 \varepsilon=0 ε=0, Dijkstra 算法
ε = 1 \varepsilon=1 ε=1, A*算法
并且存在:当前cost <= ε \varepsilon ε最优cost

4.最佳启发函数

启发式函数代价需要小于真实的代价,那么当其相等的时候,就是最佳的启发式函数。例如在一个二维的栅格地图中:
在这里插入图片描述
在这里插入图片描述
如果用两者的最小距离,即对角的启发式函数,此时所遍历的节点明显减少,三维同理。
d x = a b s ( n o d e . x − g o a l . x ) dx=abs(node.x −goal.x) dx=abs(node.xgoal.x) d y = a b s ( n o d e . y − g o a l . y ) dy=abs(node.y −goal.y) dy=abs(node.ygoal.y) h = ( d x + d y ) + ( √ 2 − 2 ) ∗ m i n ( d x , d y ) h=(dx+dy)+(√2−2)∗min(dx,dy) h=(dx+dy)+(22)min(dx,dy)

5.打破平衡 Tie Breaker

在一次规划中,存在很多代价一样但结果不一样的最优路径。因此会沿着多条路径同时进行扩展。
在这里插入图片描述
当打破对称性之后(右图),可以明显看到所便利的节点减少。
打破对称性的方法,对相等的cost进行极小的放大。
h = h × 1.0 + p h = h × 1.0 + p h=h×1.0+p p < m i n i m u m c o s t o f o n e s t e p e x p e c t e d m a x i m u m p a t h c o s p <{minimum cost of one step \over expected maximum path cos} p<expectedmaximumpathcosminimumcostofonestep
虽然此时启发式函数稍微大于真实的代价,但是并不影响实际的规划效果。

6.Jump Point Search

系统性的消灭对称性问题!
在这里插入图片描述
JSP = A* + 消灭对称性问题


Look Ahead Rule
在这里插入图片描述
如果从该节点出发,到达其父节点可到达的节点的代价,大于等于从其父节点出发的代价,则该目标节点不需要考虑。
即上图中白色节点,则需要被考虑。红色节点因为存在障碍物需要被强制考虑。

Jumping Rules
在这里插入图片描述
直线跳跃优先级大于对角线跳跃

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秃头队长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值