用于实时战略战争AI的算法

时间:2010-07-18 10:42:33

标签: algorithm artificial-intelligence

我正在设计一个实时策略战争游戏,AI将负责在大型六边形地图上控制大量单位(可能超过1000个)。

一个单位有许多动作点可以用于移动,攻击敌方单位或各种特殊行动(例如建造新单位)。例如,一个有5个动作点的坦克可以在移动中花费3,然后在范围内向敌人射击2。不同的单位对不同的行为有不同的成本等。

一些补充说明:

  • AI的输出是任何给定单位的“命令”
  • 动作点在一段时间的开始时分配,但可以在该时间段内的任何时间点使用(这是为了允许实时多人游戏)。因此,“不做任何事情并为以后保存行动点”是一种潜在有效的策略(例如无法移动的炮塔等待敌人进入射程范围内)
  • 游戏正在实时更新,但AI可以随时获得游戏状态的一致快照(感谢游戏状态是Clojure的持久性数据结构之一)。
  • 我并不期待“最佳”的行为,只是一些不明显愚蠢的事情,并提供合理的乐趣/挑战与

对于能够在效率和合理智能行为之间取得适当平衡的特定算法/方法,您能推荐什么?

4 个答案:

答案 0 :(得分:11)

如果您阅读Russell and Norvig,您将找到适用于各种用途的丰富算法,并更新至今天的最新技术水平。也就是说,我对使用贝叶斯算法成功接近多少个不同的问题类感到惊讶。

然而,在你的情况下,我认为每个单元都有自己的Petri网或推理引擎是个坏主意......只有那么多的CPU,内存和时间可用。因此,采用不同的方法:

虽然在某些方面可能是一个疯子,Stephen Wolfram表明可以在very simple rules的基础上编写非常复杂的行为。他勇敢地从Game of Life推断到量子物理学和整个宇宙。

同样,很多关于小型机器人的研究都集中在emergent behaviorswarm intelligence上。虽然经典military strategy和实践强烈建立在等级制度之上,但我认为,如果作为自组织集群运作,那么一群完全无私,无所畏惧的战士(可以在你的计算机中行进)可能会非常有效。

对于Erlang或Scala的基于actor的并发模型而言,这种方法可能比使用Clojure的STM更好一些:我认为自组织和演员会很好地融合在一起。尽管如此,我还是可以设想在每个回合中运行一个单元列表,让每个单元只评估一小部分非常简单的规则来确定它的下一个动作。如果你尝试过这种方法,我会非常有兴趣听听它是怎么回事!

修改

在我的脑海中出现了一些其他东西,但在我写作的时候又出现了:我认为如果你将它与genetic或进化编程相结合,你可以从这种方法中获得显着的成果;即让你的虚拟玩具士兵在你睡觉时互相打仗,让他们编码他们的策略,混合,匹配和改变他们的代码用于这些策略;让裁判计划选出更成功的战士。

我已经读过这些技术取得的惊人成功,单位以我们从未想过的方式运作。我听说过工作在这些原则上的认可机构不得不故意愚蠢,以免挫败人类对手。

答案 1 :(得分:8)

这个问题范围很广。你基本上都在问如何编写策略游戏。

这些东西有大量的书籍和在线文章。我强烈推荐 Game Programming Wisdom 系列和 AI Game Programming Wisdom 系列。特别是,第一卷 AI Game Programming Wisdom 的第6节涵盖了一般架构,第7节涵盖了决策架构,第8节涵盖了特定类型的架构(8.2是RTS类型)。 / p>

答案 2 :(得分:8)

首先,你的目标应该是让你的游戏在某种程度上为AI打开(即使你可以以某种方式模拟它转向,即使它可能不完全基于回合,在RTS中你可能能够打破离散的时间间隔轮流。)其次,你应该确定AI应该使用多少信息。也就是说,如果AI被允许作弊并知道其对手的每一步动作(从而使其变得更强),或者它应该知道更少或更多。第三,你应该定义一个州的成本函数。想法是更高的成本意味着计算机处于更糟的状态。第四,你需要一个移动生成器,生成AI可以从给定状态转换到的所有有效状态(这可能是同构的[状态无关的]或异构的[国家依赖]。)

问题是,成本函数将受到您确定状态的确切影响。您在状态中编码的信息越多,您的AI就越平衡,但执行起来就越困难,因为它必须以指数方式搜索您包含的每个其他状态变量(在详尽的搜索中)。 / p>

如果您提供状态和成本函数的定义,您的问题将转换为AI中的一般问题,可以使用您选择的任何算法进行处理。

以下是我认为可以正常运作的摘要:

  1. 如果你付出足够的努力,进化算法可能效果很好,但它们会增加一层复杂性,为其他可能出错的东西创造漏洞。他们还需要对健身功能等进行大量调整。我没有太多使用这些经验的经验,但如果它们像神经网络(我相信它们都是生物学模型启发的启发式),你会很快发现他们变幻无常,远非一致。最重要的是,我怀疑他们是否比我在3中描述的选项增加了任何好处。

  2. 在定义成本函数和状态的情况下,技术上可以应用渐变体面(假设状态函数是可微的,状态变量的域是连续的)但是这可能会产生劣质结果,因为梯度下降的最大弱点是陷入局部最小值。举一个例子,这种方法很容易像是一直在尽快攻击敌人,因为消灭它们的可能性非零。显然,对于游戏来说,这可能不是理想的行为,但是,渐变体面是一种贪婪的方法而且不知道更好。

  3. 此选项是我推荐的最高选项:模拟退火。模拟退火(IMHO)具有1的所有优点,没有增加的复杂性,同时比2更健壮。本质上,SA只是各州之间的随机游走。因此,除了成本和状态之外,您还必须定义一种在状态之间随机转换的方法。 SA也不容易陷入局部最小值,同时产生非常好的结果。 SA所需的唯一调整就是制冷时间表 - 这决定了SA的收敛速度。我发现SA的最大优点是它在概念上很简单,并且在我尝试的大多数其他方法中凭经验产生出色的结果。有关SA的信息可以在here找到,底部有一长串通用实现。

  4. 3B。 (编辑后来添加了很多)SA和我上面列出的技术是一般的人工智能技术,而不是专门用于游戏的AI。一般来说,算法越专业化,它就越有可能表现得更好。见无免费午餐定理2。 3的另一个扩展是称为并行回火的东西,它通过帮助它避免局部最优来显着改善SA的性能。关于平行回火的一些原始论文已过时3,但其他论文已更新4

    无论您最终选择何种方法,如前所述,将问题分解为状态和成本函数非常重要。根据经验,我将从20-50个状态变量开始,因为您的状态搜索空间是这些变量数量的指数。

答案 3 :(得分:6)

这是一个很大的问题,其他答案指出了值得研究的惊人资源。

我过去曾经处理过这个问题,并发现简单行为 - 表现 - 复杂/紧急的行为方法对于人类设计来说有点过于笨拙,除非在遗传/进化上接近。

我最终使用了抽象的人工智能层,类似于现实生活中军队的工作方式。单位将与同一时间的附近单位分组成小队,与附近的小队分组以创建一个小型营。这里可以使用更多层(区域内的集团营等),但最终还是有高层战略人工智能。

每个图层只能向其正下方的图层发出命令。然后,它下面的层将尝试使用手头的资源(即该层下面的层)执行命令。

发给单个单位的命令的一个例子是“Go here”和“shoot at this target”。发给更高级别的更高级别命令将是“安全此位置”,该级别将处理并向较低级别发出适当的命令。

最高级别的人工智能负责董事会的战略决策,例如“我们需要更多的____单位”,或“我们应该致力于走向这个位置”。

军队的比喻在这里起作用;指挥官和副官以及指挥系统。