【问题标题】:Algorithm(s) for finding moving entities in a maze算法)在迷宫中寻找移动的实体
【发布时间】:2012-01-19 15:35:11
【问题描述】:

一个迷宫和一个由玩家控制的角色和一个必须找到他的无人机(自己)。有谁知道一个(有效的)人工智能算法来做这样的事情? 附:我知道有几种寻路算法(例如 A*),但据我所知,这些仅适用于查找“不移动”的两个节点之间的路径(如果我的角色静止不动,这将起作用,但那是显然不是这样)。

【问题讨论】:

  • 无人机是否知道迷宫布局,还是必须在运行过程中发现它?此外,它是否知道玩家在移动时在迷宫中的位置?
  • A* 还要求您事先知道起点和终点的位置。无人机是否知道玩家在哪里并且只需要到达它?我们的无人机是否也需要定位玩家?
  • @cdeszaq 是的,它知道迷宫的布局(虽然我不介意假设它不知道的算法),是的,它确实知道玩家在迷宫中的位置.
  • @JackEdmonds 是的,它只需要联系到他。但要考虑到玩家不断移动的事实。
  • 如果迷宫不是太大,您可以使用 Floyd-Warshall 获得所有最短路径。然后,您可以查找所有可能的玩家 无人机位置的最短路径。如果您的迷宫太大,请尝试搜索路口之间的最短路径。然后您可以查找所有可能的玩家(下一个路口)无人机(下一个路口)位置的最短路径。

标签: algorithm path-finding maze


【解决方案1】:

如果“起点”是无人机所在的位置,而“终点”是撞上玩家,那么仅使用“标准”算法所能做的最好的事情就是定期使用 A*确定无人机需要移动的位置。

随着您离玩家越来越近,您的计算速度会越来越快,因为理论上搜索空间会更小。

使用这个,玩家有可能找到一组位置,当它们在它们之间移动时会导致无人机“卡住”只是来回移动,但是那些类型的优化是针对特定情况的,一般算法不会包含它们。

基本上,您确实在每个“帧”都有一个固定的搜索空间,但您只需要在每个帧运行它来决定要做什么。

可能对 A* 进行了一些调整,涵盖了运行之间的微小扰动,但我不知道有任何意外。

【讨论】:

  • 这实际上是我想到的第一件事。这个解决方案的一个问题是计算路径可能会花费无人机很多时间,然后它的运动可能看起来像这样:移动一点,然后停止并计算,然后再次移动,然后再次计算等等。我会喜欢它不断移动(有点像 pacman 中鬼魂移动的方式)。
  • 我同意,A* 可能是您最好的选择。当人类移动时,您需要能够在计算过程中停止 A*。每次人类或无人机移动时,您还需要更新开始和结束目标。我想你也可以使用约翰逊算法之类的东西来找到所有可能位置之间的所有最短路径,然后将其用作查找表。如果迷宫不是动态的,那应该可以工作。 en.wikipedia.org/wiki/Johnson%27s_algorithm
  • @Justin - 我喜欢查找的想法..._Much_ 比连续执行 A* 快。您可以使用相同的记忆想法 with A* 并缓存结果。然后,您将根据玩家和无人机的位置慢慢构建查找表,忽略迷宫中“未访问”的部分,直到需要它们为止。
  • @Justin 确实,这个解决方案听起来更好。如果我没有找到更好的东西,我想我会试试这个。
  • 我想的越多。从效率的角度来看,您最好在初始化时从每个顶点使用普通的旧 Dijkstra 算法并将其用作您的查找表。像约翰逊的算法一样,没有最初的贝尔曼-福特步骤,因为你的图中不能有负权重。本质上,你所有的权重都应该是 1。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多