A *跳转点搜索 - 修剪如何真正起作用?

时间:2012-04-15 11:35:58

标签: c++ collision-detection path-finding

我遇到Jump Point Search,对我来说似乎很甜蜜。但是,我不确定他们的修剪规则是如何实际工作的。更具体地说,在图1中,它表明了

  

我们可以立即修剪所有灰色邻居,因为这些邻居可以从x的父级最佳地到达,而无需通过节点x

然而,这似乎有些不一致。在第二个图像中,可以通过首先通过节点7并完全通过对称路径跳过x来到达节点5,即6 -> x -> 5似乎与6 -> 7 -> 5对称。这与在不通过第一张图像中的x的情况下如何到达节点3相同。因此,我不明白这两个图像是如何完全等效的,而不仅仅是彼此的旋转版本。

其次,我想了解这个算法如何推广到三维搜索量。

3 个答案:

答案 0 :(得分:0)

第二张图像显示不正确。如果你看一下附带的文字:“在这两种情况下,我们都可以立即修剪所有灰色邻居,因为这些邻居可以从x的父节点最佳地到达,而不需要通过节点x。”

强调'两种情况'。

在将概念应用于三维空间(或heck,甚至是n维空间)方面,该算法与A *没有区别,因为它只是节点和连接的网格。维度完全由您自行决定。

答案 1 :(得分:0)

我理解这是关于优先事项的。为了枚举每个非对称路径,你必须枚举所有节点 - 但是你选择哪条路径并不重要,因为它们是对称的。因此,作者决定采用对角线优先 - 也就是说,任何对角线运动总是出现在路径中的任何直线运动之前。这就是为什么直道有更多的节点被修剪 - 因为它必须在所有对角线都被考虑之后发生。

答案 2 :(得分:0)

是的,JPS很好但仅限于具有特定限制的地图:

  1. 地图必须代表网格。
  2. 网格中所有可访问的单元格必须具有相同的遍历成本。
  3. 移动剂必须有8个可能的行进方向:4个基本方向和4个对角线。
  4. 算法的关键是这些约束允许一些关键假设:

    1. 两点之间的最短几何路线(没有障碍物)也是成本最低的路线。
    2. 两点之间(在没有障碍物的情况下)成本最低的路径不一定需要改变一个方向。
    3. 这些假设允许算法忽略对称路径选项并按如下方式操作:

      1. 当沿主要方向行驶时,您只需要在纸张中所示的某个位置遇到障碍物时考虑方向的变化。要考虑方向变化的这些点是"跳跃点"。
      2. 当对角线旅行时,只需要考虑跳跃点的方向改变"看到"在两个包围中的一个"前瞻性"主要方向,再次如论文所示。