Algorithm 查找路径通常是一个空的加权网格

Algorithm 查找路径通常是一个空的加权网格,algorithm,sorting,path-finding,heuristics,Algorithm,Sorting,Path Finding,Heuristics,我需要在一个8连接的电网(上/下左/右和对角线)中找到从a到B的路径。问题是,该网格大部分(25-60%)是空的,但某些具有高权重值(约为空瓷砖重量的20倍)的点可能必须通过。我用RSR和JP研究过类似A*的东西,但这些似乎只适用于未加权的网格。现在我已经推出了一个A*实现,但它比我想要的要慢。我甚至不需要一个完全优化的算法,只需要一个接近的算法。是针对带有障碍物的均匀网格制定和分析的。我认为,如果你像对待障碍物一样对待任何“不寻常”的瓷砖,JPS将起作用(即,让你快速通过统一区域)。《太平绅士

我需要在一个8连接的电网(上/下左/右和对角线)中找到从a到B的路径。问题是,该网格大部分(25-60%)是空的,但某些具有高权重值(约为空瓷砖重量的20倍)的点可能必须通过。我用RSR和JP研究过类似A*的东西,但这些似乎只适用于未加权的网格。现在我已经推出了一个A*实现,但它比我想要的要慢。我甚至不需要一个完全优化的算法,只需要一个接近的算法。

是针对带有障碍物的均匀网格制定和分析的。我认为,如果你像对待障碍物一样对待任何“不寻常”的瓷砖,JPS将起作用(即,让你快速通过统一区域)。《太平绅士》的作者甚至在对他的评论中也做出了同样的推测(这似乎相当明显):

只需简单地处理与该区域不同地形类型的任何邻居 当前节点,如强制的。这将使您能够快速搜索整个数据库 一个统一的成本区域,当交叉到一个 不同区域,继续在另一侧跳跃


然而,您似乎暗示您的网格不仅是非均匀的,而且除了惩罚牌之外还有奖励牌。您也需要处理这些(例如,将所有网格权重偏置以避免负权重)。

< P>如果速度是一个问题,考虑使用图形硬件(例如CUDA或OpenCL)。讨论了一种三维网格上的“刷火”算法,用于为旋转的二维机器人寻找路径。这与您的问题几乎完全相同,尽管您处于2d中。

首先,将未加权网格转换为加权网格相对简单,如果网格大部分为空(只需在中间推20个节点),成本也不会太高。我可能会试试d*lite,它可能会很好。A*通常很快,你可能会有一个坏习惯implementation@BenjaminGruenbaum:D*lite是一种(相当复杂的)算法,它扩展了a*,以便在对同一图形进行微小更改后重新搜索时重用信息。我不知道这在这里会如何应用。不幸的是,我不能将加权分片视为障碍,因为在某些情况下我需要通过它们。在JPS意义上,“作为障碍”,即生成跳转点。更具体地说,“将与当前节点不同地形类型的任何邻居视为强制”,正如Harabor本人在其博客文章(我在上面链接)的评论9中所说。我改写了答案。不幸的是我不能,这是在有限的设备上进行的计算。我甚至会考虑非最佳路径寻找解决方案,如果他们更快。只要它从A到B的距离合适,你就应该看看brushfire算法。它用到目标的最短距离标记who网格。在此之后,您可以在恒定时间内找到从任意起点a到目标B的路径。如果A四处移动时B点保持在空间中的同一位置(如机器人运动问题),这是一个好情况。我已经在具有优先级队列的常规处理器上实现了这一点,而且速度仍然非常快。