游戏中的AI

发表于2018-11-03
评论5 1.75w浏览
【参加“Unity AI算法”征文活动】
这篇文章就不加具体的项目代码了,毕竟“敲代码是只是在一栋大楼设计好后具体的搬砖工作”,程序猿贵在对这张图纸的设计好坏。再者这个话题我这车开的还不够稳,讲多了就翻车了。所以就跟大家分享一些基础的,抛砖引玉吧。

先来感受一下即将到来的人工智能时代:

仿生蜻蜓:
仿生蜘蛛:


更多动图:仿生机器人

波士顿动力的机器人从跑步跳跃 到 后空翻,跟着节拍跳舞。一次次的给我们以惊艳,一次次的感叹。《西部世界》中的场景马上就要成为现实:
波士顿动力机器人的进化史:

游戏是人工智能研究上一个广受欢迎的场景,但在传统上,人工智能研究者更关注于棋类游戏,因为棋类游戏有着高度形式化和受限的规则,同时又是很复杂的决策问题。而现在更多样性的视频游戏(video games)也吸引了人工智能研究者的目光。在这些游戏中怎么用AI来控制NPC,生成游戏内容和适应玩家行为也是游戏开发者想要解决的问题。这也和人工智能研究的发展有关。早期的人工智能研究更关注形式化的智能,希望让机器可以达到人类水平的解题和决策能力。因此主要的工作是由人类去把问题拆解成形式化的符号(Symbol),然后让AI去解这些形式化的问题。而近些年,研究者的兴趣转移到如何让AI去学会那些对于人类来说很简单但又很难去描述的能力,例如记住人脸,识别朋友的声音,判断出情感等等。
视频游戏是历史上最重要的艺术种类之一

先来用我的理解来解释一下这个司空见惯的名词:AI(Artificial Intelligence)

到底什么是人工智能,什么是游戏中的AI?

什么是人工智能,其实这个领域已经默默打怪升级了几十年。这两年突然爆发,取得,尤其是现在发展的神经网络、深度学习都是人工智能的一个重要的领域,而且取得了重大的突破。尤其是2016年,AlphoGo在围棋领域打败李世石后,人工智能变的家喻户晓,随后的由人工智能在图像处理上取得的重大突破,现在的人工智能在自动驾驶、3D重建等领域都炙手可热。大街小巷都在学习人工智能,游戏领域自然也是一个非常重要的战场。

我们这一辈人小时候玩“红警”,打“War3”,现在玩“DOTA”或者“王者荣耀”都会玩人机对战。相信大家都会发现,电脑的AI都比较死板。但不可否认,这就是我们游戏领域的人工智能,甚至在未来的很长一段时间大部分游戏的AI也不会变的跟人一样智能。为什么这么说呢?以前是技术问题,以后是游戏性要求没必要那么高的AI个人观点,欢迎留言拍砖

1997年,IBM的深蓝战胜了当时的国际象棋特级大师 Garry Kasparov。深蓝是基于一个经过大量的国际象棋规则修正和棋盘评估修正后的极大极小算法来下棋的,并且是运行在一台定制的超级计算机上。然后到了2016年,Google的DeepMind开发的Alphago在5番棋中战胜了韩国的李世石,这也标记着,围棋也从代表着人类独有的智慧的荣光的神坛上走了下来。之后有报道称Google将AlphaGo应用到著名RTS游戏《星际争霸》中。相信在不远的将来,电子竞技中就有出现超过人类玩家的智能机器人。玩家在大部分游戏中的AI将会无比强大,具备学习能力,能够更好的和玩家进行交流互动。以后玩游戏再也不怕遇到“小学生”那样的坑队友了。

现在游戏中的AI主要做的事情:

  • AI玩游戏:棋牌类游戏的AI,竞技类游戏AI,游戏中的NPC行为控制,甚至是创造一个robot来和人来玩游戏等。
  • AI生成游戏内容:地图关卡的自动生成,游戏场景剧情的自动生成、推演。
  • AI对玩家建模:对玩家游戏内行为建模。试图去理解游戏内玩家的行为,情感等信息,从而更好的对玩家进行用户画像,而这些信息也能够进一步的改善游戏的沉浸感。

讲了这一大堆,回归一下现实,我们大部分游戏开发主要使用哪些AI相关的算法逻辑呢?

  • 寻路:这个是游戏中很普遍的一种AI,网格地图(Tiled)、导航图(NavMesh)等,用到的图的最短路径算法:使用最多的应该是A星(A-Star)算法。
  • 有限状态机:这个是游戏的基础,可以应对大部分的简单逻辑流程控制,复杂的逻辑可能会扩展到分层状态机。
  • 行为树,这个目前大型游戏中NPC应用最多,尤其是一些大型Boss,其行为树已经相当复杂。
  • 模糊状态机:这个有点上升到只能的层面,已经不再是绝对的是非,而是存在了一定的权重和不确定性,不过感觉用的还不多。
  • 集群控制:这种在RTS游戏中应用很多,多个单位的集群AI,追随、分离、规避等。
对应这些具体的代码实现,本文就不进一步深入展开了。有兴趣的同学可以在网上找到很多的资料。这有一篇很早以前写的一个行为树的应用示例文章:基于行为树的新手引导设计

推荐三本经典的游戏开发书籍,其中我参与制作的第一款RTS类游戏《指上谈兵》就是从《游戏人工智能编程》中借鉴了很多。


最后来分享一个经典的游戏人工智能bug来结束本文:

疯狂的甘地

文明2有一个有趣的bug:疯狂的甘地。

早期玩家都知道,印度文明一出现在视野里,必须立刻毫不迟疑地卧薪尝胆跟其他文明媾合、集中全部力量无论多么遥远,也要把印度早早摁死。无论怎样诱人的和平条约,都不要和印度签署,一定要跟甘地(印度的领袖)死磕到底。

否则,一旦印度发展出核武器,就会疯狂地四处乱炸,把全地球彻底搞当。相比之下,鑫十五天简直是个乖宝宝。

原因很简单。游戏设定里甘地是非常和平的,其野蛮度极低。文明发展,野蛮度越来越低,等到原子弹出现的时代,就差不多降到零。降到零是小事,一旦降为负数,程序无法处理负号,于是变成255,极大值。这是比希特勒还疯狂好多倍的数值。于是一个极端和平的甘地,眨眼成了核弹狂魔。


回答来源自知乎用户:齐遨


如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引