假设你有一个拥有两个玩家的世界追逐者和目标。假设追踪者的移动速度略快于目标。如果你是追逐者并且你知道目标是聪明的并且试图不被抓住的事实,那么追逐并最终捕捉目标的好方法是什么? (因为我希望学习一种通用算法或一系列技术来解决这个问题,而不是对世界结构进行过多优化,因此我将世界的细节留下了一个模糊的含义。)
最初,我认为使用像Dijkstra算法或A *这样的东西,并在目标移动时不断重新计算路线是一个好主意,但实际上可能有一个更好的解决方案,通过采取更迂回的路线,以便转弯目标。这也可以建模为可以用minimax或UCT解决的双人游戏,但搜索空间可能非常大,以至于进行任何合理的搜索都是不可行的。
这个问题是否已被广泛研究过?如果是这样,是否有一套可以在这里使用的众所周知的技术?
谢谢!
(我很抱歉,如果这是重复的话;我似乎无法找到像这样的另一个问题,但是如果有的话,我很乐意关闭这个问题。)
答案 0 :(得分:6)
由于你正在寻找各种各样的意见,我将总结一些我从Wikipedia article on the Sidewinder missile中发现令人惊讶的东西:早期的寻热导弹试图引导目标留在他们的探测器的中心。这意味着,在实践中,导弹试图<追逐他们的目标。 Sidewinder导弹的一个重要发展是它试图稳定目标在其传感器上的相对位置。 (水手已经知道船只在constant bearing is actually on a collision course上已经很久了。)
这种改进的算法倾向于从捕食者到猎物划出一条直线,并在猎物试图逃避时提供良好的行为。 (猎物所采用的每条曲线都为捕食者提供了另一种捷径。)
答案 1 :(得分:4)
免责声明:我对该主题的文献没有广泛的了解。但是,我过去做了一些类似的事情(即跟踪声源的来源)
当你想要追逐目标时,简单的事情就是直接朝向它。这就是你做的。但是,目标将在此期间移动。因此,只有当目标不移动时,算法才是最优的。
我们可以拥有的第一个复杂因素是目标有一个固定的轨迹(追踪者不知道)。我很确定如果目标的轨迹可以是任何类型的函数,那么没有比之前的简单算法更好的算法。但是,您总是可以做出一些合理的假设(目标的速度不能太快变化,即加速度有限),这样可以让您想出更好的算法。
所以,作为第一步,我要做的是实施Kalman filter。这可以估算目标的轨迹。你可以进行一些快速计算,它会给你追踪者在最短时间内拦截它的轨迹。
现在,如果你想要更高级的东西(我暂时不推荐),你可以尝试学习目标的轨迹(但你为什么要这样?卡尔曼滤波器通常是最优的)。因此,您可以使用神经网络,增强算法等来估计其轨迹......但老实说,我不相信这会有用。
我说这是第一层复杂性。第二层复杂性是考虑目标根据追踪者的行为调整其轨迹。这将导致一些对抗性搜索。这可能很有意思,但我对这个话题没有足够的信心来谈论它。
答案 2 :(得分:2)
快速搜索“AI追逐”出现了这个算法:
http://www.peachpit.com/articles/article.aspx?p=102090&seqNum=4
看起来很不错。根据有效程度,您想要快速捕获目标,您可以查看其他算法。
尝试使用Google搜索Flocking algorithms,我很确定我似乎有一些“动态”A *算法(但我现在似乎无法找到它们),这些算法也可能有用。
此外,假设您的世界没有太多障碍,Neural Networks可能在这里工作正常。可能有2个输入(目标距离,面向目标的delta弧度)和2个输出(所需速度和所需航向)的东西
答案 3 :(得分:2)
我认为你正在将两个不同的问题混合到同一个问题中,这个问题很可能是孤立的。
寻路/避碰
这已被广泛研究,在决定如何实施这个时,许多具体因素起作用......
这些问题的结果很可能会引导你进入一个特定于它将被使用的情况的A *化身,并导致追逐者有能力在世界上有一个目标点,并在最有效的方式。
计算预定目的地
既然一个物体可以说“我想去这里,给我最好的路径”,我们可以独立地看着追逐一个目标。
从我实施的归巢火箭算法,我使用了以下内容:
这开始很慢,但可以通过调整目标估计的时间容差来进行一些简单的优化,而不是每帧重新计算整个路径树。
您还可以检测目标速度/路径的变化以触发重新计算