Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 基于2d网格的寻路:确定位置是否可到达的最便宜的方法/算法_Algorithm_2d_Path Finding_A Star - Fatal编程技术网

Algorithm 基于2d网格的寻路:确定位置是否可到达的最便宜的方法/算法

Algorithm 基于2d网格的寻路:确定位置是否可到达的最便宜的方法/算法,algorithm,2d,path-finding,a-star,Algorithm,2d,Path Finding,A Star,我的主要寻路是通过aStar算法的实现来完成的。只要有可用的路径,性能就非常好 但是,如果没有,则可能会解析所有可用节点,直到得出没有路径的结论 我能想到的最糟糕的情况是,在目标位置附近,周围几乎没有障碍物 到目前为止,我提出了一些可能提高整体绩效的想法: 查找并执行一个更便宜的寻路算法,运行该算法只是为了确定目标是否可以到达,如果可以,则运行aStar以获取实际路径 将targetnode周围指定半径内的所有不可漫游节点聚集在一起,查看它们是否都已链接。如果是,则目标是“无法达到”且无法达到

我的主要寻路是通过aStar算法的实现来完成的。只要有可用的路径,性能就非常好

但是,如果没有,则可能会解析所有可用节点,直到得出没有路径的结论

我能想到的最糟糕的情况是,在目标位置附近,周围几乎没有障碍物

到目前为止,我提出了一些可能提高整体绩效的想法:

  • 查找并执行一个更便宜的寻路算法,运行该算法只是为了确定目标是否可以到达,如果可以,则运行aStar以获取实际路径

  • 将targetnode周围指定半径内的所有不可漫游节点聚集在一起,查看它们是否都已链接。如果是,则目标是“无法达到”且无法达到的。 没有必要对startnode执行等效操作,因为aStars收集节点的方式基本上就是这样做的


因此,我在这里要求的是,是否有人有一些要点/想法,我可以添加到我的列表中,或者为我指出一个更便宜的寻路算法的方向,我可以利用它来确保是否有路径,第一个想法,应该加以改进

由于你的启发性,A*将在目标周围花费大部分时间, 因此,在其周围创建一个“访问”墙

所以我想你可以检查参观广场的“墙”, 如果您找到一条封闭的、连续的路径,其中包含目标,但不包含源,那么您就没有什么可进一步搜索的了

第二个想法不完整,但可能会减少“损失”的时间,
使用双向A*,源运行到目标,但同时目标查找到源的路径


看看它将如何运行。

您应该删除一些语言标记,只保留相关的标记。“我的主要寻路是通过实现aStar算法来完成的。性能非常好…”它是用哪种语言写的?我用c#然后出于好奇也用c++写的,即使你找到了一种快速确定目标是否可到达的方法,这也无助于你在目标可到达时的速度,但只能通过一个非常长的路径(特别是:O(n)-长度,其中n是顶点数)——例如。,当源和目标在一个长迷宫的两端时。@j_random_hacker是的,我知道。我相信使用双向模式是很好的,因为在大多数可到达的场景中,它根本不会影响执行时间,并且在许多无法到达的情况下会产生积极的影响。哦,我喜欢你的第二个想法!如果任一astar实例没有更多节点,我可以中止这两个实例。我相信这是最坏情况的一半,为什么它不完整呢?因为,在最坏的情况下它根本没有帮助:假设中间有一个墙交叉…你仍然会访问任何地方…我有第三个角度,用于绘制“障碍地图”,并从你的链接中检查包含
Dest XOR Src
的闭合环,如果我不关心绝对最短路径,有什么理由反对首先使用双向最佳搜索而不是astar?在我测试的场景中,它似乎要快得多。测试FS肯定是一个很好的方法,除了一些启发式有误导性的地方,但在大多数情况下,它甚至要快一点。我写了一个*来匹配这个问题。