Jump Point Search(JPS)算法与A*算法

A*

A*算法本质上讲是结合了DFS和BFS,针对当前起点先做一次BFS,再针对搜索的八个点做一次DFS

BFS--广度优先算法(Breadth First Search)

DFS

A*

算法思想
A*的核心思想就是先进行一次BFS搜索,然后从这次BFS中找到距离目标点最近的点(这里就是DFS搜索的思想),然后在对这个点,分别进行一次BFS和DFS搜索,重复此操作直到到达目标点为止。

代价方程
设计代价方程计算公式F = G + H F=G+HF=G+H,
式中,G=起点到目标方格的移动代价,沿着起点到目标方格,这里设定水平或者垂直移动一次的代价是10,对角线移动一次为14.
H=从目标方格到终点的估算成本,计算目标方格到终点的代码,只计算水平和垂直移动的格数然后乘以10.

在一个方格中,将FGH分别标记在左上、左下和右下三个位置,以便每次观察估价结果。

JPS

Jps,Jump Point Search,跳点搜索,也有人称之为“拐点寻路”。Jps可追溯到2011年,由两位澳大利亚的教授提出。

原作者论文,github Harabor, Daniel Damir, and Alban Grastien. “Online Graph Pruning for Pathfinding On Grid Maps.” AAAI. 2011.

相比A*算法,JPS算法的性能更快,内存占用更小,。

JPS算法的关键在于如何判断跳点。

一般是通过当前点的处境进行判断的。

例如:当前点向右下走判断时,右边的点是障碍,但右下点不是障碍,那么就可以判断当前点为跳点,右下点为强迫邻居。

代码后续再补

本算法的实现代码很少有人写,但其实优化部分并不多,优化效果也并不好,感觉是一个基于高度概念性的东西。

参考文献:
zerowidth positive lookahead | A Visual Explanation of Jump Point Search

Jump Point Search-跳点搜索法-原理&matlab代码-与A*算法比较(路径规划)_跳点搜索算法-CSDN博客

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
JPSJump Point Search算法和D*Lite算法都是常见的路径规划算法,它们各有优缺点。JPS算法能够快速地搜索出可行的路径,但是在存在多个路径时,可能会忽略掉一些更优的路径;而D*Lite算法能够搜索出最短路径,但是算法的运行速度较慢。 因此,结合JPS算法和D*Lite算法的优点,可以得到更加高效和准确的路径规划算法。具体来说,可以通过以下步骤将两个算法进行融合: 1. 使用JPS算法搜索出一条近似最优的路径。 2. 使用D*Lite算法JPS算法搜索出的路径进行优化,得到最短路径。 3. 在执行路径规划时,先使用JPS算法搜索出一条路径,并将路径的一部分作为D*Lite算法的初始路径。然后,使用D*Lite算法对路径进行优化,得到最终的路径。 以下是一个简单的例程,用于演示JPS算法和D*Lite算法的融合: ```python import numpy as np from jps import JPS from d_star_lite import DStarLite # 定义地图 map = np.zeros((10, 10)) map[2:5, 4] = -1 map[5, 2:7] = -1 # JPS算法搜索路径 jps = JPS(map) path = jps.search((0, 0), (9, 9)) # D*Lite算法优化路径 dsl = DStarLite(map) dsl.plan(path) new_path = dsl.get_path() # 输出最终路径 print(new_path) ``` 在上述例程中,我们首先定义了一个地图,并使用JPS算法搜索出了一条近似最优的路径。然后,我们使用D*Lite算法对路径进行优化,得到最短路径。最后,我们输出最终的路径。 需要注意的是,上述例程只是一个简单的示例,实际应用中可能需要对算法进行优化和调整,以适应不同的场景和需求。同时,JPS算法和D*Lite算法的融合也可以有不同的实现方式,具体实现需要根据具体情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

永远在Debug的小殿下

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

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

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

打赏作者

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

抵扣说明:

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

余额充值