赞同楼上所有答案。
传统即时战略 [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提醒 :)