【问题标题】:Artificial Intelligent patterns in an RTS environmentRTS 环境中的人工智能模式
【发布时间】:2014-04-23 15:52:01
【问题描述】:

这似乎是一个热门话题,但我的问题相当具体。如果之前已经解决过这个问题,请随时向我指出这些文章。

我正在为一款 RTS(实时策略)游戏设计 AI。玩家将对抗 AI,扮演将军,在实时(非回合制)竞技场中指挥各种士兵。现在,我看到的其他 AI 专注于每个拥有自己 AI 的士兵。我正在为将军寻找一个 AI,他可以指导士兵实现各种目标。例如去那里,攻击这个,得到这个,等等

在回合制游戏中,很容易分析场地,然后采取行动,发出命令。但是,在这种实时环境中,情况并非如此。我目前设置了延迟,因此 AI 每 3 秒重新分析一次情况,因为我不希望它每秒发生 60 次(60FPS)。有没有更好的方法来处理这个问题?

我遇到的另一个问题是 AI 可能会看到需要解决的情况,并向部队发出“命令”以“前往 X 地点”。在 AI 的下一个循环/迭代中(3 秒后),如果士兵还没有达到他们的目标,那么跟踪命令并查看其完成状态的最佳方法是什么?例如:“AI:需要将 20 名士兵从位置 X 移动到位置 Z。现在移动,哦等等,我上次已经这样做了,等着他们”。

关键点是: - “分析”该领域的频率 - 跟踪以前的“订单” - AI是监督士兵的将军,而不是士兵本身

有什么想法吗?

非常感谢您提供的任何帮助或指点。

J

【问题讨论】:

  • “跟踪订单并查看其完成状态的最佳方法是什么?”也许是command pattern
  • 可能是的。我认为沟通应该是双向的(士兵->将军和将军->士兵),而且应该是完全异步的。
  • 谢谢,暂时实现了一个基本的命令模式。这是朝着正确方向迈出的一步。必须关注 AI 如何频繁评估情况并据此采取行动

标签: java android design-patterns libgdx artificial-intelligence


【解决方案1】:

这是我的方法:

AI 应该完全独立于每秒帧数,我认为一个好的方法是事件驱动算法。

因此,将军在开始时投入了大量时间来计算其长期战略,并将其转化为对士兵的原子命令(战术)。

现在可能会发生 3 件事:

  • 士兵完成命令(成功完成)。
  • 士兵向将军发送反馈(事件)。 对于给定的命令,事件可以是通用的或特定的。在这一点上,将军更新了它的状态(游戏知识)并重新考虑了它的长期战略。它不必立即取消并向士兵发出另一个命令,但如果长期战略需要,它可以在某个时候这样做。
  • 将军会通过其他因素改变其长期战略,而这些因素并非来自士兵的反馈(时间、难度的动态变化、游戏时间、其他玩家的动作或得分......)。与前一点相同。将军可能会考虑取消/分配新的命令给士兵。

请注意,一般可能会在后台线程中思考和/或在帧与帧之间使用空闲的 CPU 时间。

士兵必须能够在完全不涉及将军的情况下完成其原子命令。 IE:他们知道他们在哪里,他们知道他们必须去哪里,所以他们只是做更适合的下一步。 IE2:他们知道敌人还活着,所以他们一直射击直到敌人死亡,然后向将军报告(目标成功完成)。 IE3:他们继续射击,但他们的生命达到了临界值,所以他们立即向将军报告(并继续射击,直到他们得到进一步的命令)。

【讨论】:

  • 感谢您的回复。事件驱动的系统是有意义的。但是,我们已经有一个正在进行的游戏循环(game.render() 循环),所以它需要以某种方式适应它。目前,一切都在一个线程上。使用这种设置是否仍然可以进行事件驱动?
  • 我会说是的。唯一的问题是,如果有太多事件,您将遇到丢帧。我建议在渲染帧后使用计时器在另一个线程中处理事件 - IA,以便您的应用程序看起来更加流畅。但是,如果要处理的事件太多,IA 在速度较慢的设备上可能看起来响应速度较慢。所以在这种情况下,你可能需要一个旧事件丢弃策略或类似的东西
猜你喜欢
  • 2014-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-25
  • 2011-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多