随着深度学习等技术的突破性进展,现代的人工智能技术进步神速,已经在自然语言处理、机器翻译和图像识别等众多方面取得了进步,而且已经影响到了现实生活。
如果把围棋也看作游戏,那么大名鼎鼎的AlphaGo系列人工智能,已经体现了人工智能在为围棋项目中的较高水平。另外,也有一些人工智能再经济类电子游戏中取得了良好的成绩。
从概念上讲,游戏AI指的并不是此类AI。
电子游戏在早期就开始包含了计算机控制的敌方角色,但设计精妙的游戏AI再电子游戏早期历史中比较少见。其中一个受到广泛欢迎的作品是著名的《吃豆人》。
在《吃豆人》游戏中,玩家扮演吃豆人在平面迷宫中移动,目标是走过迷宫中所有的位置,吃光所有的豆子。而敌人则会组织玩家,吃豆人被敌人碰到就会失败一次。
在此游戏中,设计师制作了多种类型的AI,每种敌人的行为逻辑都有所不同。例如,有些敌人会随机漫游,有些敌人会沿最短路径追击吃豆人的当前位置,有些敌人会以吃豆人前方为目标,还有一些敌人则以吃豆人的旁边或后方为目标。多个不同行为逻辑的敌人同时行动,迫使玩家不断观察、快速决策并付诸行动。虽然敌人总是遵循某种特定逻辑,但因敌人速度不同、关卡设计不同以及玩家行为不同,局面会时刻发生变化。因此虽然敌人行为模式相同,但每一局游戏都会给玩家新的体验。
从原理上来看,用4个敌人围住吃豆人并不是非常困难的事情。例如,在吃豆人进入某些出口较少的局部区域时,让敌人角色分别把守几个出口,玩家就很难找到突破的方法了。那为什么游戏开发者不从“如何彻底困死玩家”的角度考虑设计呢?显然,如果敌人真的足够聪明,那么这个游戏就不会令人着迷了,就像不太会有人喜欢一直与AlphaGo下围棋一样。
明白了这个例子,再与广义的人工智能对比,就很容易理解游戏AI的主要目标是什么了,以及它与普遍意义上的人工智能之间的区别。
通常人工智能的目标是解决具体问题。无论是语音识别、图像识别,还是机器翻译,这类问题都是有具体目标的。无论AI得到的结果正确与否,但至少有一个确定的答案或者相对确定的答案。
而游戏AI的目标是:让计算机角色与玩家有效交互 ,鼓励玩家积极尝试和探索,表达设计师的想法和理念,最终让玩家经理某种体验并收获了去。换句话说,游戏AI的核心不是“智能”,而是“乐趣”。
如果以乐趣和体验作为主要目的,那么我们对于游戏AI的认识就更清晰了。
由于核心目标不同,设计游戏AI常用的技术也不同。游戏AI 开发最基本也最常用的方法是FSM(Finite State Machine)。
FSM本质上只是机械化的程序逻辑,只需要用最基本的分支语句就可以实现。设计FSM的难点在于针对需求设计状态转移图,并设计精确的从一个状态转移到另一个状态的条件。只有有了清晰的状态转移图,才可能用明确的代码描述规则。
另外,在重度AI游戏中(如足球或现实模拟类型的游戏),行为树(Behaviour Tree)也是一种常用的AI架构方法,而理解行为树的设计思路,依然需要状态机思想作为铺垫。
人们在考虑问题时,思路是“分层”的。例如在《吃豆人》游戏中,玩家在开局时要先观察地图,确认主角和敌人的位置;然后再做整体性决策,如先去哪一个区域,再去哪一个;最后才是具体操作,输入方向指令让主角沿着道路前进,朝预期的方向移动。当敌人和主角的位置发生变化时,需要再重复一次从观察、决策到具体操作的过程。每一次过程可能非常短暂,毕竟游戏高手习惯于这种快速的观察、决策和行动。
游戏AI亦是如此,一般来说稍微有点智能的AI角色,这稍有决策和行动两个层次的“思路”。如果只有一个层次的思路,行为就会变得极为单一。
而思维层次的高低与变成难度往往不成正比。例如,AI角色对当前局势进行判断和切换当前状态的操作,看上去很高级,但实现并不困难。而低级行为,如沿着地图移动到合适的位置,这种基本的寻路行为却涉及多种复杂算法。
通用的自动寻路并移动的算法,设计了搜索算法、三角形剖分(处理场景中的障碍物)、路径优化和动态避障等多种算法,而且在各种具体场景中会有大量细节需要处理。亲自动手实现一套导航系统难度相当大,好在Unity已经提供了较完善的导航系统,设计游戏AI可以从学习导航系统开始。