当前位置: 华文问答 > 数码

即时战略游戏(比如 WAR3)的 AI 是怎样实现的?

2013-12-31数码

赞同楼上所有答案。

传统即时战略 [1] 的AI其实可以分为两个部分,一个是资源管理AI,一个是战争AI。

资源管理AI 就是决定建筑、科技树、建兵的AI。

资源管理AI一般采用的是规则式AI。

规则式AI简单来说,就是一大堆if-else语句。

它有两个主要的部分,一个是工作记忆,另一个是规则记忆。[2]

工作记忆储存已知的游戏世界信息,这部分是动态的。

规则记忆储存设游戏计师设计的的规则。

正如

@五八

所说,规则都是pre-scripted的。

而当工作记忆符合规则记忆的某一条规则时,相应的行动就会被触发。

这样做的好处是,游戏设计师拥有完全的掌控权。

而它的坏处也是十分明显的——因为是pre-scripted,所以整个规则是静止的。

但是毕竟在即时战略中,「正确合理」的发展方式就那么几套方案,所以规则式AI带来的好处多于坏处。

当然,规则式AI也有一些手段来动态学习。

例如给规则的触发条件并不是一些具体的「钱多少、兵多少」,而是权重。

每次分析时,根据上一次触发的结果的好坏来调整所有规则的权重,然后选出权重最高的规则,触发相应行为。[3]

然而动态有时会带来不确定性,所以采取与否,需要看游戏的设计来决定。


战争AI 其实可以分为两层 [4],一层是将军AI,一层是士兵AI。

将军AI的工作是分析游戏世界,然后告诉所有士兵AI 「去哪里,做什么」。

士兵AI的工作是分析自己附近的游戏世界,然后决定相应的行为。

将军AI 分析游戏世界时,有可能会采用Planner[8]、Utility-Based AI或者Neural Network[11]等能够带来不确定性的AI算法。

我对Planner不熟悉,就不多说了,大家可以看看[8]链接。

Utility-Based AI是指一套打分系统,根据游戏世界的信息对行为库[5]打分,然后选出或者组合出[6]一套行为[12]。

Neural Network是指几层神经元,例如经典的三层网络——输入层、隐藏层、输出层,世界信息通过输入层输入Neural Network系统,然后输出层输出一个结果[7]。

上面提到的这些算法有一个共同的好处,能够根据游戏世界的变化带来不确定性。

因为即时战略中的战争部分是最难预测的,玩家可以有无穷无尽的战术变化,所以将军AI需要更加动态来产生更加动态的战术。

然而,这些算法,特别是Nerual Network,它们产生的结果的过程是「黑箱的」——即使是我设计的将军AI,我也不知道它是怎么工作的...游戏设计师可以说失去了掌控权。

不过,有研究表明,神经质AI在即时战略中表现最好[9]....或许,这也是算是 「出其不意」吧...

相反地, 士兵AI 需要比将军AI更加静态。

如果你把士兵拉到敌人旁边,他却在那边Idle的话...

所以楼上都有提到的有限状态机、行为树等更加静态的算法[10]会更合适,因为游戏设计师可以设计好士兵的行动规则。

例如弓箭手在距离敌人大于XX米的情况下射箭,距离小于X米的时候肉搏,士气低于XX的时候走佬。

如果用Neural Network来实现这些设计的话就会哭笑不得...对的,我就用过Neural Network设计过士兵AI,是我们大学的神经网络的作业...


除了上面的提到的算法,还有另外一些提高游戏性的算法可以采用。

模糊逻辑 ,Fuzzy Logic,让游戏世界的信息模糊化,带来合理的不确定性。

势力图 ,Influence Map,让游戏世界的信息可视化或者是规范化,有助于将军AI分析。

随机,Randomization,在适当的时候做出适当的随机选择[13]。


注释或资料来源:

[1]我个人喜欢划分【星际】【红警】【帝国】等游戏为「传统即时战略」,通常都有资源管理和战争两部分组成。区别于塔防、即时战术等即时的策略游戏。

[2][3]资料来源:【游戏开发中的人工智能】第十一章,规则式AI。

[4]也可以是多层,视乎需求而定。

[5]行为库指的是一个很多单元行为的集合。一个例子就是行为树里面的「行为」。

[6]单元行为如果设计得好、相互没有依赖关系得话,它们之间可以相互组合。

[7]「结果」可以是一个行为的代号,也可以是一个权重。

[8]Planner资料来源:

http:// intrinsicalgorithm.com/ IAonAI/2012/11/ai-architectures-a-culinary-guide-gdmag-article/

[9]资料来源:

Solidot | "神经质"AI在即时战略游戏中表现最突出

[10]如

@Freelancer

所说,称之为框架会更加合适。

[11]

Flanking Total War’s AI: 11 Tricks to Conquer for Your Game

提到【全面战争】有用到Neural Network,但是我对文章的说的 「Neural Network用在士兵AI上」 表示怀疑,我猜测是用在将军AI上的。

[12]一个利用Utility-Based AI的成功例子

http:// christophermpark.blogspot.sg /2009/06/designing-emergent-ai-part-1.html

[13]感谢

@HARDCOREGAME

提醒 :)