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博客