什么是游戏AI

总得来讲,游戏AI(Game AI)就是一种能让开发者为玩家创造引人入胜体验的东西。咱们用的每个技术、每个技巧、每一种算法,都是为了那么一个单一的目标。本文将围绕这一点展开讲解究竟什么是游戏AI。
web

首先须要明白的一点是,游戏AI中的AI(Artificial Intelligence,人工智能)与咱们讨论计算机视觉、天然语言处理等领域时所说的AI实际上是两回事。在本文中,咱们把后者称为学术AI(academic AI)。算法

那么学术AI和游戏AI本质的区别是什么呢?学术AI的目的是创造一个智能体,该智能体根据环境做出动做,以最大化成功率为目的。例如在图像识别任务中,咱们但愿AI可以得到尽可能高的准确率。而游戏AI并非要作到最大化成功率。例如在星际争霸的游戏中,咱们并非以胜利为目的来设计AI的,而是以让玩家有一段美妙的游戏体验而设计的。在这种目的的引导下,咱们有时故意把AI作的不那么强大,甚至经过让AI做弊来获取更多信息。而获取这些信息不是为了击败玩家,而是为玩家提供更好的服务(关于这些,会在后文详细展开)。有时游戏AI也会借助学术AI的方法,但绝大多数时候,他们是不一样的。游戏AI关注的是:AI的外在表现,以及给玩家带来的感受。框架

创造体验

上文已经提到,游戏是要为玩家创造引人入胜的体验。而游戏AI是为了支撑这段体验(游戏的其余部分其实也是)。接下来要讨论的是为了支撑这段体验,设计游戏AI时,有哪些关键因素。svg

(1)搁置怀疑

玩家是自愿地加入到这段咱们为他创造的体验中来的。所以,他们很是愿意搁置本身对咱们所创造的虚假世界的怀疑。而咱们的责任是维持玩家“搁置怀疑”的状态。性能

因为玩家自愿来享受这段体验,也由于人类大脑的工做方式,所以他们是很是宽容的。只要AI的行为基本合乎情理,玩家的大脑就会天然地向本身解释AI的行为,而那种解释每每是复杂的,比实际的AI算法复杂的多。因此,AI设计者能够尽可能设计简单但合理的AI。太过于复杂的AI反而会让玩家摸不着头脑,拔苗助长。学习

有一种要避免的状况,就是人造蠢货(artificial stupidity)。所谓人造蠢货就是指作一些显然错误,或没有意义的事。确实在不少游戏中出现了这样的AI,但也不是故意的设计,而是一些BUG。好比一直朝着墙走,或彻底无视玩家对他的射击。人工智能

有些行为虽然也会在真实人类身上看到,但仍然要避免,由于他们不适合AI。例如,人类老是频繁地改变本身的想法,但若是AI也这么作了,就会给玩家一种出现Bug的印象。debug

解决人造蠢货最简单方法就是加强AI。可是,玩家的品位各不相同,很难同时知足全部玩家。所以还诞生了一些别的方法,解决人造蠢货让玩家没法“搁置怀疑”的问题。例如,在有的僵尸游戏中,僵尸的AI被故意创形成走路缓慢、一摇一晃的样子,但因为他们是长相可怕的僵尸,仍然能够被玩家接受。还有一些游戏中,让游戏的角色喊出一些话。例如,“手榴弹(Grenade!)”,“我发现他了!”。这些并非用做游戏角色间的交流,而是向玩家解释角色的行为。有些游戏直接在角色头顶放一些图标来向玩家解释(例如模拟人生)。设计

(2)反应性,不肯定性和创做者控制

各类各样的结构,那个对于游戏AI来讲才是最好的?这是一个被普遍讨论的问题。xml

首先要讨论的是,“创做者控制(Authorial Control)”和“自我控制(Autonomy)”之间的权衡。所谓“创做者控制”是指AI的创做者对AI的掌控,创做者能根据本身的意愿调整、控制AI,而AI受环境的影响较小。“自我控制“是指AI受创做者的控制力度小,根据环境的不一样作出多变的反应。举例来讲,Alpha Go就是高度自我控制的。由于他经过蒙特卡洛树搜索+深度强化学习训练获得,设计者也不知道最终AI下棋的模式是什么样子,能够说他几乎彻底不受创做者意愿影响。下图给出了不一样算法的“创做者控制”和“自我控制”比例的相对关系。

不一样算法的“创做者控制”和“自我控制”比例的相对关系
“自我控制”不少时候称做强反应性(Reactivity)。反应性指的是AI可以根据环境不一样作出不一样行为的能力。

没有一个肯定的答案说哪种算法更好。这每每是根据需求而定的。例如策略游戏(例如魔兽争霸)就须要较强的反应性。玩家每一局的行为是不一样的,AI以不变应万变显然是不合适的。而在像魔兽世界这样的游戏中,AI的行为每每是高度受“创做者控制”的。同一个副本,刷第一遍和刷第二遍,怪物的AI并不会有什么不一样的行为。

选择AI结构时,另外一个复杂的因素是不肯定性(nondeterminism)。不少时候游戏中的随机性可以带来更多的快乐(例如Roguelike)。和反应性不一样,反应性要求的是对不一样环境做出不一样的行为,而不肯定性是指一样的状况下也能做出不一样的行为。在这一点上,behavior trees 和 utility-based AI 是比较好的。

总得来讲,结构是根据游戏需求选择的。

(3)简单和可扩展

若是熟悉游戏AI经常使用的算法,能够发现他们自己是很是简单的。而已这些算法为框架,在框架之上创建的结构才是复杂的部分。底层算法代码简洁、容易理解、容易debug,这是很是重要的。

有些算法的可扩展性不好,当AI结构愈来愈大,会愈来愈难维护。所以,一个好的游戏AI算法,不光要简单,并且要求扩展性好。

(4)技巧和做弊

首先要讲一个魔兽争霸里的剧情AI的例子。AI会等待固定的一段时间,而后产生一波兵攻击玩家。它会选择在战场迷雾的边缘产生这些单位,也就是在你的可见范围外,AI会不停的生成士兵,直到你的防护力量几乎被毁灭,而后AI就会中止,并让你用剩余的兵力赢得战斗。

在这个例子中,能够说AI是完彻底全的做弊。他不须要任何建造、采集,能够任意的让单位从天而降。但他的结果是好的,他让玩家体验了一场惊心动魄的战争。

可是,这种做弊有一个弱点,它只在玩家不知情的状况下有效。若是玩家发现了AI在作什么,那么设计者精心设计的游戏体验将毫无心义。

还有一种做弊称做“彻底信息”。即AI知道一切。他拥有全部的视野,不须要探索就能知道金矿的位置、敌人的位置。事实上这是必要的。由于目前AI尚未像人类同样的推理能力。例如一个单位出如今AI的视野里,而后消失了,但下一瞬间又出现了。人类可以推断这个单位就是以前小时的单位,可是这对AI来讲是困难的。咱们不能要求AI在玩家的电脑上存储本身的记忆。

可是,彻底信息的AI仍然须要让玩家“搁置怀疑”。即便AI知道金矿的位置,也不能所以而不去探索。让AI有必定的几率去探索一个实际已知,但却不该该知道的地方。这样一来,AI的行为就能更好得被玩家的头脑所解释。

总结

游戏AI只应该关于一件事:如何让开发者为玩家创造一段引人入胜的经历。

本文是对《Game AI PRO》第一章的总结加一点我的想法。有时间会持续更新后续章节。