【问题标题】:Swamp/dead-end pruning in non-grid maps非网格地图中的沼泽/死胡同修剪
【发布时间】:2012-03-09 06:35:10
【问题描述】:

在使用非网格地图时,是否有任何现有算法可以在寻路中查找和避免问题区域(swampsdead-ends)?有很多可用于避开这些区域或通过jump point recursion 等方式伪避开这些区域的网格,但我还没有找到任何对四叉树、导航网格或其他非均匀地图有用的东西。

【问题讨论】:

    标签: algorithm graph-theory path-finding pruning


    【解决方案1】:

    死角检测和沼泽不是特定于网格的。他们只是在网格地图上进行评估。

    【讨论】:

    • 以下文章可能也很有趣:[Thomas Young, Optimizing Points of Visibility, Game Programming Gems II, 2001] 它详细介绍了一种类似于 Jump Points 的可见性图剪枝技术。不过,我现在还不清楚它是否可以适应 Nav Meshes。
    【解决方案2】:

    这样的事情可能确实存在——每年都会发表数百篇寻路和运动规划论文,但我认为你需要问自己一个更大的问题——你为什么要这样做?

    采用导航网格或稀疏网格表示的想法是通过减少图中节点的数量来减少找到解决方案所需的时间。如果您的搜索太慢,只需修剪图中的节点和边数。通过在开始之前从离线搜索中手动删除任何死胡同,您将减少每次搜索的开销。

    如果即使在您修剪了图表之后,搜索仍然会变慢并且您可以容忍搜索问题的近似解决方案,请考虑使用Weighted A*,您重新计划降低通货膨胀因子,直到您确实有最优成本。

    规划算法充满了妥协,只要确保你了解你选择做什么的利弊。

    最后一个建议,确保您已在您正在使用的规划器中正确实现原语 - A* 等算法依赖于正确实现优先级队列,特别是确保 decrease-key是 O(log n) 或 better

    【讨论】:

    • 我正在为我正在开发的游戏使用四叉树;我将它们用于寻路和碰撞测试。我想找到一种避免死胡同和沼泽的算法,因为这可以在线完成以提高在游戏过程中创建的地图的性能;地图是随机生成的,因此我无法手动优化它们以进行寻路。然而,我可以做的是优化地图生成,然后通过避免在执行过程中检测到有问题的区域来加快寻路速度。
    猜你喜欢
    • 2010-09-17
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    • 1970-01-01
    • 2017-09-28
    • 1970-01-01
    相关资源
    最近更新 更多