【发布时间】:2016-09-24 19:19:32
【问题描述】:
我正在创建一个具有 10,000 x 10,000 地图的游戏。
我希望用户能够设置位置并让计算机立即找到最佳路径。
但是,由于地图是 10,000 x 10,000,因此有 100,000,000 个节点,通过 A* 或 Dijkstra 等常规方法找到该路径需要大量内存和较长时间。
所以我的问题是:如何找到最佳路径?
我正在考虑的算法会将世界划分为 100 个部分,每个部分有 1,000,000 个节点。然后将每个部分分为 100 个子部分。这将重复,直到每个小节包含 100 个节点。然后,该算法将找到部分的最佳路径,然后是子部分,然后是子子部分,直到找到最佳节点集。这行得通吗?还有更好的方法吗?
我也在考虑跳点搜索,但我不知道,学习发现它做不到会很痛苦。
编辑:我已尝试添加 A*。但是,运行大约需要 5 秒,比理想情况多出大约 4 秒。
【问题讨论】:
-
像使用我们的普通街道地图一样,用 10,000 x 10,000 的地图构建图表。我敢肯定,你最终得到的图表比这 100,000,000 小得多....
-
您是否尝试过在这张地图上实现 A*?如果它不是一个迷宫,那么 A* 绝不应该真正扩展所有这 100m 个节点。我不明白为什么它不应该工作。
-
为什么不使用网格图 A* 而不是图 A* ?是的,分辨率相当大,但是您可以做一些事情来真正加快速度,例如:仅扫描使用区域的边界框,从两端投射路径,屏蔽不可通过的封闭区域等......另外,如果你空间更开放,然后你可以忽略离直线路径太远的地图......见map A*它可以被编码,所以它不需要遍历点列表只是你已经在内存中拥有的地图(虽然不是二进制)
-
您仍然可以提供更多信息。你的地图看起来怎么样?障碍物有多密集或稀疏?地图有多像迷宫?地图的大部分区域是否完全无法到达?所有这些都可能对算法的最佳选择产生影响。也许您可以提供一个示例作为图像(按比例缩小或只是摘录)。
-
既然是游戏,是否真的有必要一直使用最短路径,还是可以放宽,这样走的路径可能比最短路径多出10%的成本路径?
标签: java algorithm path-finding a-star