【问题标题】:Chasing after a moving target?追逐移动的目标?
【发布时间】:2012-01-23 00:12:48
【问题描述】:

假设您的世界中有两个玩家,追逐者和目标。假设追逐者的移动速度略快于目标。如果您是追赶者,并且您知道目标很聪明并且尽量不被抓住,那么追赶并最终抓住目标的好方法是什么? (我对世界的细节很模糊,因为我希望学习一个通用的算法或一系列技术来解决这个问题,而不是对世界的结构进行过多的优化。)

最初,我认为使用 Dijkstra 算法或 A* 之类的方法并在目标移动时不断重新计算路线是个好主意,但实际上可能有更好的解决方案,即采用更迂回的路线以便转弯目标。这也可以建模为一个可以用 minimax 或 UCT 解决的两人游戏,但搜索空间可能非常巨大,以至于完全无法进行任何合理的搜索。

这个问题是否被广泛研究过?如果是这样,是否有一套众所周知的技术可以在这里使用?

谢谢!

(如果这是重复的,我深表歉意;我似乎找不到像这样的另一个问题,但如果有一个我很乐意关闭这个问题)。 p>

【问题讨论】:

  • “好方法”大概是指“最快”吧?如果追赶者速度更快,它所要做的就是向目标的当前位置移动,它最终会到达它。
  • @OliCharlesworth- 执行速度(一件好事)和捕获目标所需的总时间(另一件好事)。我正在寻找一种在两者之间取得良好平衡的方法。不过,在两者上都能完美发挥作用的东西会很棒。 :-)
  • @OliCharlesworth,实际上,使用该方法可能会导致围绕目标运行,请参阅此相关问题:gamedev.stackexchange.com/questions/17313/…
  • 如果不了解运动物体的特性,就很难解决这类问题——例如,如果它们具有不同的加速度曲线,并且它们是否可以精确控制它们的加速度.他们对彼此的信念也很重要。但像 Fezvez 一样,我建议查看卡尔曼滤波器。

标签: algorithm artificial-intelligence


【解决方案1】:

由于您正在寻找各种各样的意见,我将总结一下我从Wikipedia article on the Sidewinder missile 中发现的令人惊讶的事情:早期的热追踪导弹试图引导目标保持在中心 他们的探测器。这意味着,在实践中,导弹试图追逐它们的目标。响尾蛇导弹的一个重要发展是它试图稳定目标在其传感器上的相对位置。 (水手们早就知道constant bearing is actually on a collision course 上的船。)

这种改进的算法倾向于从捕食者到猎物画一条直线,并在猎物试图逃避时提供良好的行为。 (猎物走的每一条曲线都给捕食者提供了另一条捷径。)

【讨论】:

    【解决方案2】:

    免责声明:我对有关该主题的文献没有广泛的了解。但是,我过去做过一些类似的事情(即跟踪声源的来源)

    当你想要追逐一个目标时,最简单的方法就是直接朝它前进。这就是你所做的。但是,目标会在此期间移动。所以算法只有在目标不动时才是最优的。

    我们可以拥有的第一个复杂性元素是目标具有固定的轨迹(追逐者不知道)。我很确定,如果目标的轨迹可以是任何类型的函数,那么没有比之前的简单算法更好的算法了。但是,你总是可以做出一些合理的假设(目标的速度不能变化太快,即它的加速度是有界的),这样你就可以提出更好的算法。

    所以,我首先要做的是实现Kalman filter。这可以让您估计目标的轨迹。您可以进行一些快速计算,它会为您提供追赶者在最短的时间内拦截它应该采取的轨迹。

    现在,如果您想要一些更高级的东西(我暂时不推荐),您可以尝试学习目标的轨迹(但您为什么要这样做?卡尔曼滤波器通常是最佳的)。所以你可以用神经网络、提升算法等来估计它的轨迹……但老实说,我不相信这会有用。

    我说这是第一层复杂性。第二层复杂性是考虑目标根据追逐者的行为调整其轨迹。这将导致一些对抗性搜索。这可能很有趣,但我对这个话题没有足够的信心来谈论它。

    【讨论】:

    • 我完全赞同这一点。在这种情况下需要一个被追逐的模型,而卡尔曼滤波器确实是要走的路,至少作为最终算法的第一阶段。
    【解决方案3】:

    快速搜索“AI 追逐”出现了这个算法:

    http://www.peachpit.com/articles/article.aspx?p=102090&seqNum=4

    看起来不错。根据您想要捕获目标的效率和速度,您可以查看其他算法。

    尝试在谷歌上搜索Flocking algorithms,我很确定我似乎有一些“动态”A* 算法(但我现在似乎找不到它们)也可能有用。

    另外,Neural Networks 在这里也可以正常工作,前提是您的世界没有太多障碍。可能有 2 个输入(到目标的距离,以及到目标的 delta 弧度)和 2 个输出(所需的速度和所需的航向)

    【讨论】:

      【解决方案4】:

      我认为您将 2 个独立的问题混入同一个问题中,而这很可能是孤立的。

      1. 寻路/避碰
      2. 计算预期目的地

      寻路/避碰

      这已被广泛研究,在决定如何实施时,许多特定因素都会发挥作用......

      • 对象的运动有多动态(RTS 风格低分辨率 网格或赛车游戏)?
      • 动态实体的场景会变得多么拥挤 (决定是否需要考虑人群流动 优化路径)?

      这些问题的结果很可能会引导你找到一个特定于它所用情况的 A* 化身,并导致追逐者在世界上有一个目标点,并在最有效的方法。

      计算预定目的地

      既然一个物体可以说“我想去这里,给我最好的路径”,我们就可以独立地看着追逐一个目标了。

      从我实现的寻的火箭算法中,我使用了以下内容:

      • 估计到达目标的时间(使用一些启发式方法,可能只是到对象的路径)
      • 根据追逐者到达目标所需的时间推断目标的位置(沿当前速度/路径)
      • 将估计的目标时间与到达未来位置的实际时间进行比较,如果不在某个容差范围内,则偏移估计并再次迭代过程直到满足
      • 将追逐者目标设置为外推位置

      这开始会很慢,但可以通过调整目标估计的时间容差而不是每帧重新计算整个路径树来进行一些简单的优化。

      您还可以检测目标速度/路径的变化以触发重新计算

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-17
        • 2014-09-11
        • 2019-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多