path-finding - 如何处理A *寻路中的障碍以达到 'next best'目标?

标签 path-finding a-star

我正在为基于网格的自上而下游戏进行A *寻路。下图中可能最容易理解我遇到的问题。星号是玩家/NPC。黄色星号是当前要转到X的NPC。红色星号是在这种情况下成为障碍的NPC。黄色的单元格是墙壁,白色的单元格是地板。尽管到达目标的整个路径确实无法实现,但我仍然想获得到达下一个最佳位置的路径(在这种情况下,点编号为8)。

我可以轻松地绕过障碍物,但是不确定如何完全按照我的描述进行。如果我在碰到障碍物后将其停止,则它无法停止在3处。如果我将路径重定向到与最终目标距离最小的封闭列表中的图块(如果最终目标位于另一个目标上)以墙的侧面为例,它也可能使事情变得很糟。

有什么建议么?我觉得我缺少其他明显的东西,因此请原谅这里的愚蠢行为。

谢谢,
提姆

最佳答案

这是一个基于problem relaxation的想法:

首先,为没有NPC的图的所有顶点求解最短路径问题。您可以使用从目标节点开始的Dijkstra's algorithm单个应用程序来获取每个顶点上/目标的最短路径。

然后尝试找到完整问题中的最短路径。将A *与通过运行Dijkstra获得的最短路径信息一起使用;这是可以接受的,因为NPC问题中的最短路径总是至少与松弛问题中的最短路径一样长。跟踪到目前为止的最佳路径,并在搜索空间用尽时返回(如我在评论中所述)。

如果您认为这很昂贵,那么请意识到您只需要运行Dijkstra一次。您可以在同一图表上重复使用每次运行A *所获得的信息。

(注意者:我没有尝试任何一种方法。)

关于path-finding - 如何处理A *寻路中的障碍以达到 'next best'目标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13071260/

相关文章:

algorithm - 生成只有 1 个有效哈密顿循环的图

java - 广度优先搜索解决迷宫的时间太长

python - 寻路代码产生意想不到的结果

javascript - 在 JavaScript 中的 Hexmap 上进行 A* 寻路

python - 二维网格中的快速寻路和距离矩阵

c# - 我对 8-Puzzle 的 A* 搜索有什么问题?

java - A星算法java实现详解

java - A* (A Star) 算法输出所有可能的解决方案

algorithm - Depth First-Search 是如何访问一个节点的?

javascript - 通过一组坐标,两个坐标之间的最短路径 - Javascript