【问题标题】:Pathfinding to escaping target (chase or pursuit pathfinding)逃逸目标的寻路(追逐或追踪寻路)
【发布时间】:2014-09-29 19:30:07
【问题描述】:

我正在努力实现一个好的追逐者。我有一个需要追逐冰球的曲棍球运动员。我可以预测下一个球员和冰球的位置。我试图使用转向行为,但未能找到一个好的预测器来预测冰球靠近时的情况(例如,想象一下冰球以高速几乎朝向球员。当冰球有点远离时球员只做了一个小角度转弯. 然而,当冰球靠近并错过了玩家时,最后两到三个滴答声,玩家需要转动更大的角度才能仍然看到冰球。当转动角度受到限制时,冰球逃脱并且球员不能做任何事情。如果它开始早转,那会很好,但当我预测更多步数时,球员往往会开始转向他身后很远的冰球位置......)。然后我打算使用 * 搜索。当冰球在前面并且冰球速度低于球员的速度时效果很好。但是当冰球速度较大时,它就会成为逃跑的目标。所以每次 a* 扩展一个新状态时,它往往会回顾并发现在之前的状态中 puck 离玩家更近(puck 逃脱了!),所以它更喜欢之前的状态并成为 bfs。 所以我想有一个众所周知的解决方案,但我没有在谷歌上搜索任何东西,所以也许社区会帮助我。提前致谢!

更新:所以基本上我重新发明了我猜的轮子。我现在正在做的是遍历冰球位置。当我以相同的滴答数击中第一个可以到达的位置时,我宣布胜利。这是非常昂贵的资源,但我想不出更好的办法。

【问题讨论】:

  • 如果您正在寻找比 A*/steering 更高级的东西,您可以查看列出的“移动目标”算法here
  • 我无法理解“不断重新计算”。在我看来,这就像跟踪一个离目标太远的点。这与只是前往现在的目标有什么不同?相反,我想找到一种识别拦截路径的方法——即,当我到达那里时,目标将在正确的时间出现。不早不晚。为了能够拦截它。

标签: search real-time path-finding a-star


【解决方案1】:

关于行为的部分目前很难理解,但关于A* 问题我认为你的问题是,由于你的代理(玩家)在动态环境中运行,你必须重新计算启发式的每个扩展步骤当然,因为冰球正在移动,前沿状态的h 值现在已经过时。我是否接近了解您的问题是什么?

好奇,你用的是什么启发式方法?

【讨论】:

  • 我认为你是正确的。启发式是什么 - 大多数时候我只是尝试空中距离或空中距离加上方向差异。所以基本上我应该在我从边缘弹出任何东西时更新重量?所以我会弹出状态,检查启发式,如果它被更新,我会用新的权重把这个状态放回边缘而不是扩展它?
  • 如果您正在执行实时 A*,您必须在每次进入边缘状态(您的实际状态)之前执行此操作。然后才选择最便宜的g + h。顺便说一句,这个领域的 A* 并非易事,并且有更好的解决方案恕我直言
猜你喜欢
  • 2013-01-09
  • 2011-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-09
  • 2012-10-23
  • 1970-01-01
相关资源
最近更新 更多