第1章通用智能_第1页
第1章通用智能_第2页
第1章通用智能_第3页
第1章通用智能_第4页
第1章通用智能_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGE28智能游戏规划精髓PAGE21第1章通用智能游戏的变革第1章通用智能1.1智能游戏的变革PaulTozour–IonStormAustingehn29@游戏中的人工智能(简称“智能游戏”)这一领域是随着20世纪70年代视频游戏的出现而兴起的。这一领域最初并不引人注意,而且人们对它的认识也在很大程度上受到了七、八十年代简单游戏的影响。即便在今天,智能游戏也总让人联想起古老的Pac-Man游戏和其中的四个人物Inky、Pinky、Blinky和Clyde。长期以来,视频游戏工业的发展并没能够改变这种对于智能游戏的认识的局限。但是,一场变革正在酝酿中。在最近几年中,智能游戏得到了长足的进步,从而使当今的智能游戏比以前的游戏更加丰富有趣。由于三维渲染的硬件设备和游戏的图形质量已发展到近乎极致的地步,人工智能已经成为决定每个游戏的成功以及相关的游戏开发工作室的命运的重要因素。因此,如今的智能游戏已经从默默无闻上升到工业界新星的地位。智能游戏的变革正在发生。1.1.1一点历史在电子游戏刚出现的时候,人工智能主要用于投币式的大型游戏机,其目的是吸引用户源源不断地将1/4美元的硬币投入机器。在最初的诸如Pong、Pac-Man、SpaceInvaders和Joust等游戏中使用了大量的简单规则、动作序列的描述以及随机决策等技术来使游戏的发展变得难以预测。国际象棋游戏在很长一段时间内成为学术界对人工智能研究的主流。这使我们不难理解为什么像Chessmaster2000[SofTool86]这样的国际象棋游戏中出现了那么高智能的虚拟对手。这些游戏无一例外地采用了游戏搜索树的策略。策略游戏是最早采用人工智能技术的一类游戏。很显然,这类游戏光靠图形技术是不够的,而必须依赖优秀的人工智能技术来保证游戏的正常运行。策略游戏对人工智能技术提出了新的挑战,因为这种游戏要求对象级(unit-level)的人工智能和具有相当战术策略的虚拟人物。这类游戏中的早期代表是回合制策略游戏,比较有代表性的是MicroProse公司的Civilization[MicroProse91]和Civilization2,尽管它们采用了欺骗的手段来帮助虚拟人物来应对复杂场面。近来出现的一些即时策略(RTS)游戏中所采用的人工智能技术更为先进。WarCraftII[Blizzard95]首先采用了强大而有趣的RTS智能技术,而AgeofEmpire2:TheAgeofKings[Ensemble99]游戏则具有至今为止最强大的RTS智能。这些RTS智能技术的强大之处特别体现在实时运行能力上,比如同时为游戏中数百个对象进行路径搜索(pathfinding)。在第一人称射击游戏中,ValveSoftware公司的Half-Life[Valve98]以它卓越的战术智能而倍受好评,而EpicGames公司开发的Unreal:Tournament[Epic99]则因为其可扩展性和高超策略而闻名。LookingGlass工作室开发的Thief:TheDarkProject[LGS98]是最早的“第一人称偷窃”游戏。它极其逼真地模拟了虚拟角色感知能力,并且采用分级警报技术使玩家能感受到虚拟角色的智能水平。Sierra工作室的SWAT3:CloseQuartersBattle游戏[Sierra99]极好地表现了拟人的动作和交互方式,并且采用随机化的智能行为技术,使得玩家在每次游戏中都得到新的体会。模拟类游戏(比如久负盛名的SimCity[Maxis89])最早成功采用了人工生命(ArtificialLife,或A-Life)技术。其中,游戏TheSims中采用了许多极具个性的智能体(智能体)。这款非常流行的游戏证明了有限状态机和人工生命技术的巨大潜力。另一类较早采用人工生命技术的是1996年以来陆续推出的Creatures系列游戏[CyberLife96]。这款游戏中尽其所能地模拟了游戏中大量出现的Norns精灵的心理和生理状态,甚至引入了“数字DNA”的概念。神话类游戏,比如最早的Populous[Bullfrog89]和后来的DungeonKeeper[Bullfrog97],结合了模拟类游戏、人工生命技术和实时策略技术。这一趋势在神话类游戏的代表作LionheadStudio开发的游戏Black&White[Lionhead01]中更加突出。该游戏采用了至今为止最为先进的智能游戏技术(本书后面会专门介绍)。尽管这款游戏并不是最早采用机器学习技术的范例,它无疑是最早成功运用智能学习(AIlearning)技术的典范。我们还应该注意到游戏Black&White巧妙的设计使得人工智能在游戏中占据了主导地位―事实上,整个游戏都是围绕着教育和训练精灵生物而展开的。这使得玩家的注意力前所未有地集中在智能游戏的发展上。1.1.2变革的背景一个游戏中人工智能的成功与否很大程度上取决于开发人员对它的重视程度。在很多时候,人工智能模块是那些黑眼圈的开发人员依靠咖啡因的刺激在开发期限前的最后两三个月中加班加点赶出来的。此外,硬件水平也严重制约了游戏人工智能的发展。通常情况下,绘制游戏中的图像需要占用大量的CPU时间,这使得能够用于人工智能的内存和计算能力极为有限。不幸的是,解决诸如路径搜索等智能问题恰恰需要大量的处理器资源。在这方面,控制台游戏的问题最为严重,主要是由于控制台硬件有限的内存和较高的性能要求。游戏人工智能领域早期的一些失败和不足还来自于开发团队对这一领域在认识上的欠缺,也就是常说的“魔弹”态度。这种态度要么表现为对开发智能模块的挑战性认识不足(如“我们只是用了一种描述语言”),要么表现为在运用人工智能解决手头问题时对技术的理解不足(如“我们不过用了一个大的神经网络”)。近年来出现了许多专门研究游戏中人工智能技术的开发人员。他们从开发游戏的第一天起就专注于其中的人工智能问题。这是一个巨大的飞跃。在很多情况下,即使是对人工智能毫无经验的程序员也能开发出高水准的智能游戏技术。事实上,开发人工智能技术并不一定需要大量高深的专业知识和对人类认知的深刻洞察力。在更多情况下,开发人员最需要的仅仅是脚踏实地的精神,一点点创造力和充足的时间。1.1.3主流的人工智能学术界的人工智能涵盖了大量不同的领域和分支,它们中的很多在思维方式上还是格格不入的。为了避免对于学术一词的理解偏差,我们把这一领域称为主流的人工智能。为了更好的理解游戏中的人工智能,我们必须首先对人工智能这一更广泛的领域有所了解。尽管本书无法详细描述人工智能的发展历史,我们还是列举了一些与目前或将来的游戏关系密切的主流人工智能技术。另外,在文献[AI95]中可以找到几乎全部的主流人工智能技术的介绍。专家系统:专家系统用于描述和利用某一领域中专家(人)的知识。一个专家系统代表了专家在某一知识库范围内的专业知识和技能,并能够基于该知识库进行自动推理从而回答用户的查询。这样的系统能够提供接近于专家所能给出的专业意见。基于范例的推理:这种技术分析数据库中存放的(历史)输入数据和相应的最优输出结果,然后通过对比现有输入数据和历史数据来推知输出结果。这种技术模拟了人们在处理新的情况时参考以前相似经历的做法。有限状态机:这是一种简单的基于规则的系统。它包含了有限个“状态”和状态之间的“转移”,彼此连成一个有向图。有限状态机在每一时刻都只能处于某一状态。产生式系统:这种系统包含了一个规则数据库。每条规则含有一条具有任意复杂度的条件语句,以及若干满足该条件语句后所需执行的动作。产生式系统在本质上是许多条If-then语句,加上用于处理多个条件同时被满足时的冲突解决机制。决策树:决策树类似于一系列If-then形式的条件判断。在决策过程中,从决策树的根结点输入一组输入数据,在每个分叉处根据某个输入值选择其中的一个子节点,依次类推。ID3或C4.5等算法可以用来从采样数据中自动构造决策树。搜索方法:这指的是在一张图中找到满足某个目标的状态或动作序列。这里的目标可以是达到某个“目标状态”,或者是使得某个(些)目标值最大化。规划(调度)系统:这是搜索方法的一种特例。它研究的是在已知最初状态和每个动作产生的结果的条件下寻找能够达到某一结果的最优(最简单)动作序列。一阶逻辑:这是对命题逻辑的一种扩展,用于在给定环境中推理智能主体的相关情况。在这种理论中,“世界”中包含了许多“对象”,每个对象拥有独立的身份和“特征”,从而把它和其他对象区分开来,同时还存在一些联系着不同对象和特征的“关系”。情景演算:这种技术运用一阶逻辑来计算给定情况下智能主体的应有动作。情景演算技术使用自动推理来决定达到最优状态所需采取的动作序列。多智能体系统:这种方法研究如何通过多个彼此竞争和协作的智能主体之间的交互来自然地产生智能行为。人工生命:这是多智能体(multi-智能体)系统中的一种,研究如何为虚拟环境中的智能主体赋予某些生物体的共性。群聚技术:这是人工生命技术的一个分支,研究如何协调多个智能主体的动作,使它们在整体上看起来像逼真的动物群。机器人技术:研究如何让机器能够在现实世界中与人类交互运行。机器人学是人工智能中历史最久、最知名、也是最成功的一个领域,而且近年来该领域随着计算能力的爆炸式增长而获得新生。机器人技术通常可以分为“控制系统”(输入部分)和“传感系统”(输出部分)。遗传算法:这无疑是人工智能中最具吸引力的一个领域(一个重要原因在于开发遗传算法将给人带来创造的乐趣)。这种技术试图直接模拟生物进化过程,在一系列的程序、算法、和参数之间作出选择、杂交、以及随机的变异和交叉。近年来遗传算法取得了一些令人瞩目的成就[Koza99],这在很大程度上改变了人们认为计算机只能按人类设定的程序运行的普遍误解。神经网络:神经网络是基于生物大脑和神经系统中的神经连接结构的一系列机器学习算法的总和。在具体使用中,通过反复调节神经网络中互连节点之间的参数值(权重)来获得针对不同学习任务的最优和近似最优反馈值。模糊逻辑:该方法采用实数值(而不是传统的布尔值,即“是”或“否”)来表示对象属于集合的程度。与传统逻辑相比,模糊逻辑的表达能力更为丰富和细致,因而能够进行更为强大的推理。置信网络:置信网络(尤其是它的子领域贝叶斯推导)提供了描述不同现象之间内在因果关系的工具。它采用了概率理论来解决现实世界中的不确定性和不完全知识等问题。它还可以用于推导现实世界的状态和预测各种动作的可能结果。智能游戏在不同场合中或多或少地采用了上述的技术,所获得的效果也各不相同。颇具讽刺意味的是,恰恰是有限状态机、决策树、产生式系统这样的简单技术在实用中证明是最有效的。在紧张的开发期限和有限资源的压力下,很多开发人员都倾向于采用基于规则的系统这种最容易编写、理解和调试的智能技术。专家系统与智能游戏在一定程度上具有共同的基础,因为智能游戏的目的就是模拟专业玩家进行游戏。尽管智能游戏的知识库在表达上不像专家系统的知识库那样正式,它们的效果是一致的,也就是模拟专业玩家的行为。许多诸如国际象棋和西洋双陆棋等棋类游戏中成功采用了游戏树和树搜索方法。智能双陆棋游戏已经能够对抗最好的人类玩家[Snowie01],而在巨型机“深蓝”上运行的智能国际象棋游戏更是击败了特级大师加里.卡斯帕罗夫[IBM97]。其他游戏,比如Go,尽管还没有达到人类专家的水准,距离这个阶段也并不遥远了[Go01]。不幸的是,现代视频游戏环境的复杂程度和游戏机制决定了它们无法像“深蓝”那样采用穷搜索游戏树的策略。这些游戏多采用了其他一些路径搜索技术。比如A*搜索算法几乎在所有的游戏类别中都是最优的路径搜索方法(算法的细节请见[Rabin00][Stout00]和本书中的[Matthews02])。游戏人工智能和机器人技术也有许多相通之处。由于游戏中的智能单元可以很容易地获得虚拟世界中的一切信息,而不必像机器人那样通过种种手段去感知和理解真实世界,智能游戏中无需用到机器人学中的传感技术。然而,机器人的控制技术却可用于操纵游戏中的智能主体与玩家、游戏世界、以及其他智能主体进行交互。游戏中智能主体的路径搜索和导航技术与机器人导航技术是非常相似的。人工生命技术、多智能体系统和群聚技术在智能游戏中均得到了广泛应用。游戏TheSims和SimCity的成功证明了人工生命技术的有效性和娱乐价值,而群聚技术也在众多的游戏中被用来控制对象的智能化运动。规划技术在智能游戏中也有采用。尽管主流的人工智能领域所研究的规划系统是用来处理比游戏中的智能主体所面对的问题更为复杂的规划问题,它的作用无疑会随着游戏本身复杂度的增加而逐渐加大。模糊逻辑也是智能游戏中经常采用的一种技术。与之相比,一阶逻辑和情景演算在智能游戏中还没有被广泛采用。这很有可能是因为情景演算不适用于对性能要求很高的实时游戏中,此外用正规的逻辑语言来描述游戏也存在着相当的困难。另外,置信网络也没有在智能游戏中广泛应用。不过,这种技术特别适于解决智能游戏中涉及的许多子问题。1.1.4有关机器学习与学术界对于人工智能的广泛研究相比,智能游戏的研究有时显得有些势单力薄。这一点在机器学习技术方面显得格外突出。尽管这已经是陈词滥调了,但出席“2001游戏开发大会”的游戏开发人员还是认为游戏中的人工智能与学术界的研究(比如神经网络和遗传算法)大相径庭。游戏开发人员还是坚持采用简单的基于规则系统和模糊状态机来处理几乎所有的智能游戏问题[Woodcock01]。我们有很好的理由来解释两者间在表面上的不可调和。机器学习机制在智能游戏领域中有一段曲折的历史。在游戏中应用机器学习技术的早期尝试都不太成功,甚至导致整个游戏无法正常运行。相对于学习技术的潜在优点来说,此技术的不恰当运用也会带来灾难性的负面作用。理由如下:机器学习(MachineLearning,简称ML)系统可能会学习错误的知识。如果它学习人类玩家的游戏手法,则一个无能的玩家可能误导游戏中的学习模块。ML技术很难通过调整来获得所期望的结果。学习系统需要一个“适宜函数”来判断学习结果的好坏。尽管我们可以构造一个强大的虚拟玩家,想要定义一个能反映“趣味度”的函数却有相当的困难。有些机器学习技术(特别是神经网络)是非常难以改进、测试和调试的。对于很多类游戏来说,学习机制是没有意义的。在大多数的动作游戏和打斗游戏中,虚拟敌人的生存时间是如此之短以至于无法学习任何东西。除了上述的因素,机器学习技术在游戏中的失败主要还是因为开发人员没有正确地运用这些技术。开发人员常常用学习技术来完成一些用基于规则的传统方法能更快更容易完成的任务,这使学习机制起到了反作用。学习机制应该被用到那些真正需要学习的场合中。最新的像Black&White这样的游戏已经证明了学习机制能够增加游戏的趣味性,从而使智能游戏显得更为重要。毫无疑问,学习机制是一种强大的工具,特别是当它用在正确的场合中。正如游戏Black&White所表现的那样,关键问题在于要把学习机制作为一个分层系统的某一部分,而该系统除学习机制外还采用了许多其他技术来完成众多的人工智能子问题。1.1.5追求趣味性游戏中的人工智能和主流的人工智能在目标上并不完全相同。学术界人工智能的目的在于解决极端困难的问题,比如模拟人的认知或者理解自然语言。相比之下,在游戏中加入人工智能是为了获得游戏的乐趣。游戏最终还是一种商业。如果有一个顾客愿意花上40美元来购买游戏,那么他或者她必然要求从游戏中得到乐趣。在许多游戏中,特别是动作类游戏中,我们很容易就能做到让人工智能毫不费劲地击败人类玩家。从单纯人工智能的角度来说,这的确代表了很高的智能,但并不是游戏玩家所希望出现的情况。“深蓝”能够击败卡斯帕罗夫,但它却无法让玩家从游戏中得到乐趣。相信这一点卡斯帕罗夫会双手赞同。从这个意义上来说,把智能游戏称为人工智能是不完全恰当的。这种称法在一方面揭示了智能游戏的本质,但在另一方面又起了误导作用。如果可以用别的称法来代替,也许“智能体设计”或者“行为模拟”更为恰当。至于“智能”这个词,由于它的定义非常模糊,我们最好还是避开它。对智能的误解在智能游戏的发展历程中产生了许多的问题。在游戏领域,我们希望所设计的智能体能在特定环境下进行合理的动作。相反,单纯迎合人类定义的“智能”并不一定能产生合理动作,或者产生的动作也是玩家所不希望看到的。

1.1.6智能是语境(Context)相关的IQ(智商)这个词清楚地阐明了本节的主题。人类大脑是一个由许多通用和专用的“认知工具”所组成的网络,这些工具是人类在与各种艰难环境的斗争中进化而来的。过分强调人工在进化中的作用就会喧宾夺主了。IQ的概念非常接近于西方特有的“自然界的伟大锁链”的理论Descartes1641]。这种理论否认了生命是不同有机物在不同环境和自然选择中得以进化的观点;反之,它把所有的一切解释为线性排列,也即所有的生物都根据它们“距离完美的程度”排成一列,而上帝就在排列的顶端。在《今日心理学》中刊登的一片关于IQ的文章吸引了我的注意力:在1986年,我和一个大学联合开展了一项关于经常参与赌马的人的研究。那些擅长赌马的专家中有些是专业预测人员,但有些则不是。专家和其他人的区别在于他们具有一种根据场边出售的赛马数据来预测比赛结果的复杂推理能力,而这种能力和IQ是没有必然联系的。有些专家只不过是智商不超过80的码头工人,但他们在赛马方面的推理能力比那些智商120以上的人强大得多。事实上,某个领域中的专家的推理能力总是超过其他人,这与他们的IQ高低没有关系。对赛马有强大推理能力的专家在其他方面可能一无是处,比如他的退休金或者社会关系方面。上面的引文清楚阐明了游戏中人工智能的本质-领域的专业知识,而不是通用智能。游戏人工智能可以看作是众多专业子问题的集合,包括路径搜索、操纵、群聚、部署、战术、战略规划、资源分配、武器使用、目标选择、协调、模拟感知、场景分析、空间推理、基于环境的动作等等。每个游戏都有自身独特的“进化环境”,而游戏的人工智能必须在这个环境中进行开发。游戏中最成功的人工智能技术都是建立在开发人员明辨游戏中特有的子问题并且找到针对这些问题的特殊解法的基础上。这并不意味着那些通用认知技术就不再重要了,只是强调必须避免在充分认识问题之前就匆忙寻求答案。我们必须问自己:一个智能角色(主体)在游戏中究竟要表现出怎样的行为?这些行为是产生于怎样的环境下?怎样的游戏机制能够最大程度地取悦玩家?而实现这样的游戏机制需要怎样的人工智能技术?一旦我们确定了智能角色的行为和相应的场合,我们就能够决定采用怎样的人工智能技术来解决问题。为了创造出“语境相关的专业智能”,我们自身必须成为领域专家。如果一个开发人员不擅长于他所开发的游戏,也无法判断玩家的水平,很难想象他能开发出强大的人工智能技术。当你自己掌握了足够的游戏技巧后,你就可以模拟出游戏背后的那些认知机制以及在特定场合下的决策方法。如果我们能够对自身的认知过程进行反向工程,我们就能比较容易地创造出模拟人类决策的智能角色。1.1.7变革本文的题目“游戏人工智能的变革”可以从两方面理解。首先,本文介绍了游戏中的人工智能从最初的视频游戏开始的整个发展变革历程。更为重要的是,它描述了在某个特定游戏的开发过程中人工智能技术(模块)的改进发展。游戏中的人工智能技术总是一点一滴地进步,支持更为复杂的智能行为,并且更加适合于游戏的场景。每个游戏都是不同的,而人工智能的设计与游戏本身有莫大的联系。在很多时候,设计者所做的一个看似微不足道的决定会在很大程度上影响人工智能模块的运行。这也是为什么在游戏人工智能领域没有捷径可走。我们必须找出游戏中所有的人工智能问题并尝试解决它们。我们的注意力要放在那些智能角色的表现上,而不能陶醉于人工智能技术本身。真正的难度在于开发出即具挑战性又能取悦玩家的人工智能。1.1.8人工智能也是语境相关的那么,我们何去何从?游戏人工智能未来的方向又在哪里?有些开发者受到成功的“游戏引擎”(比如Quake和Unreal)的影响,试图开发出可以适用于各种游戏的通用“人工智能引擎”[Soar01][ACE01]。在我看来,这些尝试成功的可能性很小。正如前面所说的那样,游戏中的人工智能和游戏本身的设计是密切相关的,因此忽视游戏的特点就是舍本逐末了。如果一个人工智能引擎通用到能够用于各种游戏,它也必然无法解决特定游戏中的智能难题。相反,我认为游戏人工智能必须分为不同的类型(流派)。也许“类型”这个词的含义过于狭窄,但是它表明了智能游戏技术是按各自道路发展的,也很有可能按各自道路继续发展下去。曲棍球游戏、实时战略游戏、第一人称射击游戏、篮球游戏、回合制战略游戏、以及第一人称偷窃游戏都有各自独特的人工智能问题,这使得在不同类型的游戏之间“共享”某项人工智能技术变得十分困难。迄今为止最成功的方法是让人工智能技术在相应的游戏类别的原有发展道路上继续发展,并且始终和不断进步的游戏设计保持紧密联系。1.1.9高瞻远瞩我们已经看到,学术界对人工智能的广泛和卓有成效的研究为智能游戏提供了坚实的基础。随着时间的推移,这两者间的距离也在不断缩短。但是,人工智能技术的种类繁多和正确运用这些技术的困难导致智能游戏还无法充分利用学术界的研究成果,就像MarvinMinsky[Minsky92]描述的那样:许多学生喜欢问这样的问题“我应该用神经网络、逻辑推理、语义网络、框架、脚本语言、基于规则系统、还是自然语言来表达知识?”而我在教学中则努力改变他们提问的方式。“首先确定在某个特定问题上要进行哪种类型的推理,然后找出最能符合这种需求的知识表达方式(或组合)。”[…]要完成通用的智能系统,我的个人观点是在同一系统种采用多种知识表达机制的组合。这是因为没有一种知识表达方式适用于所有的问题;每种方式都只适用于某一些问题。此外,解决不同的需要采用不同的推理方式。随着游戏人工智能领域的发展,我们无疑会对如何选择主流人工智能技术来对付游戏中千奇百怪的问题有更深的认识和理解。从另一方面来说,由于游戏人工智能在近年来的长足进步,研究人工智能的学术界也可以从智能游戏中学到很多。为了让智能游戏领域进一步发展,我们必须冲破人工智能的领域边界。就我本人而言,尽管我在1994年取得了计算机科学的学位,我在导演和演出舞台剧方面所获得的经验比那些专业知识对游戏设计要有用得多。比如[Laurel93]中记载的那样,许多研究人员都试过将戏剧技术应用于交互娱乐中。进化心理学是一个对游戏人工智能特别重要的学科。其实,游戏人工智能本身就是进化心理学的一个新尝试,它涉及到游戏中角色心理的进化问题。每个玩家对与大量缺乏基本战术素养(比如撤退、闪避、躲藏、伪装、虚张声势、与敌人周旋、协作、接管)的低级对手交手的态度从最初的兴奋而逐渐转为厌恶。造成这种不幸局面的原因并不在于我们无法模拟自然,而是在于我们只是模拟了丰富多彩的行为中最无趣的那部分行为。即便是自然界头脑最简单的生物也会尽可能避免战斗。真实的动物会首先估计对手的实力,并在必要的时候撤退,或者虚张声势企图吓退对手或使它转而攻击较弱的目标。动物常常偷偷接近猎物,并且采用某些手段把它和群体分开,然后采用复杂的小组战术(比如伏击、佯攻)来捕获猎物。我们可以从《探索频道》中学到很多。1.1.10人工智能和游戏设计人工智能对游戏的主要贡献都体现在游戏设计和人工智能的共生关系中。为了促进这种关系,人工智能技术的开发人员必须深入理解游戏设计的技术和原则。同时,我们也必须努力让游戏开发团队明白人工智能技术在改进游戏方面具有的巨大潜力。不断进步的人工智能技术创造了游戏设计上的许多新方法,而游戏设计的进步反过来又促进了人工智能的发展。游戏中的人工智能技术被看作是游戏设计的一个自然的外延部分。为了充分发挥人工智能的潜力,游戏设计必须突破那种以设计者为主的线性叙事方式。游戏不等价于故事,游戏就是游戏。以人工智能为中心的游戏,比如TheSims,Black&White,以及TheThief:TheDarkProject指明了未来游戏的雏形:人机交互和人工思维将成为游戏的主线。

1.1.11智能游戏的未来现在是一个应该乐观的时候。游戏人工智能这一领域拥有了无可比拟的机会,众多的资源和灵感来源,以及前所未有的公众注意力。游戏人工智能处于进化心理学、戏剧艺术、主流人工智能、游戏设计与实现等多个领域的交点。随着游戏工业的发展,我们将处在一个很特殊的位置上,能把上述各领域的成果融合成为全新的理论和技术。我们将致力于把游戏推上21世纪主流艺术形式的地位。本书描述了这个方向上的最初努力。1.1.12参考文献[Ace01]ACE:theAutonomousCharacterEngine,BioGraphicTechnologies.See.[AI95]Russell,StuartJ.andNorvig,Peter,ArtificialIntelligence:AModernApproach,PrenticeHall,1995.[Blizzard95]WarCraftII:TidesofDarkness,BlizzardEntertainment,1995.See.[Bullforg89]Populous,Bullforg/ElectronicArts,1989.See.[Bullfrog97]DungeonKeeper,Bullfrog/ElectronicArts,1997.See.[CyberLife96]Creatures,CyberLifeTechnologies/MillenniumInteractive/WarnerBrothersInteractiveEntertainment,1996.See.[Descartes1641]Descartes,Rene,MeditationsonFirstPhilosophy,1641.Seehttp://philos.wright.

edu/DesCartes/MedE.html.[Ensemble99]AgeofEmpiresII:TheAgeofKings,EnsembleStudios/Microsoft,1999.See/aoeii/index.shtml.[Gems00]Ed.DeLoura,Mark.GameProgrammingGems,CharlesRiverMedia,2000.[Go01]HomepageofTheIntelligentGoFoundation,.[IBM97]DeepBlue,/deepblue/home/html/b.html[Koza97]Koza,JohnR.;Bennett,ForrestH.III;Keane,Martin;Andre,David.GeneticProgrammingIII:DarwinianInventionandProblemSolving,MorganKaufmann,1999.[Laurel93]Laurel,Brenda,ComputersasTheatre,Addison-Wesley,1993.[Lionhead01]Black&White,LionheadStudios/ElectronicArts,2001.See.[LGS98]Thief:TheDarkProject,LookingGlassStudios/EidosInteractive,1998.See.[Matthews02]Matthews,James,“BasicA*PathfindingMadeSimple,”AIGameProgrammingWisdom,CharlesRiverMedia,2002.[Maxis89]SimCity,Maxis/Broderbund,1989.See.[Maxis00]TheSims,Maxis/ElectronicArts,2000.See.[MicroProse91]SidMeier’sCivilization,MicroProse,1991.[Minsky92]Minksy,Martin,FutureofAITechnology.See/people/minksy/papes/CausalDiversity.html.[PT01]PsychologyToday.SussexPublishersInc.August2001.[Rabin00]Rabin,Steve,“A*AestheticOptimizations,”and“A*SpeedOptimizations,”See[Gems00].[Sierra99]SWAT3:CloseQuartersBattle.SierraStudios,1999.See/games/swat3.[Snowie01]Snowie,OasyaSA.See.[Soar01]Soar,/soar.[SofTool86]Chessmaster2000,SoftwareToolworks,1986.[Stout00]Stout,Bryan,“TheBasicsofA*forPathPlanning,”See[Gems00].[Svarovsky00]Svarovsky,Jan,“GameTress,”See[Gems00].[Tozour02]Tozour,Paul,“AnIntroductiontoBayesianNetworksandReasoningUnderUncertainty,”fromAIGameProgrammingWisdom,CharlesRiverMedia,2002.[Valve98]Half-Life,ValveSoftware,Inc./Sierra,1998.See/games/half-life.[Woodcock01]Woodcock,Steven,“GameAI:TheStateoftheIndustry2000-2001:It’sNotJustArt,It’sEngineering,”GameDevelopermagazine,August2001.

1.2智能的幻觉BobScott–StainlessSteelStudiosbob@由计算机所控制的虚拟游戏角色给单人游戏增加了许多深度和可玩性。事实上,绝大多数的玩家并没有选择在网络上和其他玩家进行对战。因此,为了增添这些玩家的乐趣,游戏开发者就必须创造出一些逼真的虚拟对手。这方面的成功尝试将极大促进游戏的受欢迎程度和销量。就目前而言,我们还无法在游戏中创造出真正的智能;我们所创造的至多不过是“智能的幻觉”。本文中我们将介绍如何做到这一点,并在同时避免产生“愚蠢的幻觉”。1.2.1范围本文着重介绍在游戏中控制一个虚拟玩家的高层决策。例如实时战略(RTS)游戏中的虚拟玩家可能决定采用弓箭手和围攻策略来进行战斗,而第一人称射击(FPS)游戏中的虚拟玩家则可能决定采用火箭筒来增加他的作战能力。当然,游戏中还有更为复杂的行为,比如那个采用弓箭手或围攻策略的RTS玩家可能选择在城镇的四周筑墙、快速进入到下一个时代、与邻邦联盟等具体手段来实现其策略。作为游戏开发人员,我们必须尝试着模拟这些具体行为。在很多游戏中,我们所做的完全就是在创造一种智能的幻觉。1.2.2人类玩家的特点既然虚拟玩家可以被认为是人类玩家的一种替身,我们首先讨论人类玩家是如何动作和决策的。1.可预测性和不可预测性人类玩家总是常常做出出人意料的举动,比如在RTS游戏中有些玩家会选择进攻一个强大得多的对手来迷惑敌人。在体育比赛类游戏中,有些玩家可能做出一些毫无意义的举动,比如在橄榄球比赛的1/2码线处选择传球。在另一方面,许多人类玩家的行为在很多方面都是可以预测的。FPS游戏的玩家在某张特定地图上有自己喜欢的走法,而RTS游戏的玩家则喜欢按照一定的顺序来建造不同的建筑物。橄榄球模拟游戏的玩家则倾向于投掷球。请注意人类玩家行为的可预测性和不可预测性之间的冲突。在有些场合下,它们可能会出现在同一场游戏中。在其他场合中,玩家在某一次游戏中的行为是可以预测的,但是他每一次玩这个游戏的行为又不尽相同。在玩一个RTS游戏的时候,你可能倾向于从开始就采用某一策略,并基于该策略做出所有的相关决定,比如你选择采用飞机来发动所有的进攻。如果你选择的策略被对手识破了,那么你就很有可能会输。用人工智能来模拟人类玩家的上述特点是很困难的。游戏中的智能必须具有足够的随机性,使人们每次玩这个游戏都能获得乐趣。同时,这种智能又必须是可以预测的,这样人类玩家就能偶尔猜出对手的策略并找到破解的办法。反过来,这种智能还要能识别出人类玩家所采用的策略并找到有效的对策,从而使游戏本身更具挑战性。2.支援人类玩家常常会选择和一个虚拟玩家结盟,共同对付其他的人类或者虚拟玩家。这种合作策略一般不难实现,无非是保护同盟方的城镇和参加大规模的联合进攻等。合作中最困难的事情莫过于与同盟之间的交流。采用由按钮实现的简单命令来进行交流是一种相对简单的做法。3.出乎意料当做到了上述的一切之后,我们还可以锦上添花地加入少许“意外”。游戏开发者应该创造出尽可能多的惊喜。游戏玩家通常会留意到那些对游戏本身驾轻就熟的虚拟玩家,但他们对那些带给他们惊喜和意外的人工智能技术则会留下更深的印象。这些“意外”有许多不同的表现形式,并且和具体游戏的类别也有关系。在RTS游戏中,意外可以来自于夹击、伏击、假情报、扰敌,而在FPS游戏中意外包含了伏击、火力压制、侧翼运动、还有火力支援等。最后,还有一种意外是非常难以模拟的,被人们称为“可信的愚蠢”。这指的是那些看起来有害,但却是人类玩家愿意尝试的行为。比如在角色扮演游戏(PRG)中,玩家可能会采用那些极度强大的魔法,而这些魔法强大到会在无意中伤害到玩家自身。这些行为在游戏中会产生一种喜剧化的调剂作用。但由于这些行为难以准确模拟,而且很容易做得过分,所以还是尽量少用为妙。1.2.3胜负之间关于游戏,很关键的一点是认识到人类玩家是在“玩”游戏,而恰恰是这一点经常被游戏开发人员所忽略。想象一下当你坐下来准备玩游戏的时候的心情—你一定想要获得乐趣,也有可能你想从游戏中体验一些你在现实生活中无法体验的角色。在一个有胜负之分的游戏中,你总是想要获得胜利。让我们深入讨论下去。通常情况下有两类玩家,第一种玩家希望很容易地取胜,而另一种则希望胜负各半。后一种玩家常常希望在几乎要输的情况下实现大翻盘,从而来显示他们的实力。要开发一个总能赢(或输)的游戏人工智能模块是非常容易的。许多游戏有允许调整(虚拟)对手的数量和质量来影响游戏的结局。举个例子,在RTS游戏中,军队的规模可以决定到游戏的胜负。在FPS游戏或体育模拟游戏中,对手的准确性和速度也是可以调节的。真正的问题在于这些虚拟对手的真实性,比如在RTS游戏的初期是不可能出现大规模的军队的(除非作弊),而在FPS游戏中出现源源不断的敌人也不太真实。我们意识到上述所需的效果可以通过调整虚拟对手的行为来达到。在一场战争游戏中不断变化应对策略是一种影响玩家的胜负的手段。在RTS游戏中,差劲的目标选择和缓慢的装弹速度可以用来调节游戏的难度。问题的关键在于密切注意战斗和整个游戏的状态,使虚拟对手的水平和真实玩家保持在相近的水平,从而保证实力上的均衡。游戏中的难度设置决定了人工智能模块是否给人类玩家取胜设置很多障碍。在某些游戏中,虚拟玩家会根据胜负的比例来决定自己的反应。这些游戏总是力求做到胜负平衡,但常常会偏向某个极端。不管采用那种策略,你必须确保虚拟玩家的行为是真实可信的。可信度可以通过游戏的参数来确定。在RTS游戏中,智能地选取进攻目标的行为是可信的;而在FPS游戏中,极准的枪法和预知对方未来方位的能力则是不可信的。在橄榄球游戏中,100码开外的触地得分和传球则应该完全避免。1.2.4自发行为自发行为只能通过对整个系统加以分析来预测。从定义上说,所谓自发行为就是那些无法被解释的行为[Dyson97]。我们常常通过自发行为(emergentbehavior,EB)在智能游戏中制造一些智能的幻象。事实上,EB常常给游戏开发人员造成幻觉,使他们以为游戏中真的有智能。在测试EmpireEarth这款游戏中,一个虚拟玩家试图从敌方城镇的一侧扩张到另外一侧。当它的城民试图突破敌人封锁线的时候,它的部队正好也在猛烈进攻敌人的军队,这使得自己的城民安全地通过了封锁。令人惊奇的是,这种策略并不是开发者编制的,它只是两种战术(扩张和进攻)同时发生时的巧合。想要人为制造出EB的效果很难,但我们可以构造一种促进EB发生的体系结构。支持高层命令、基于目标的决策、基于定时器的决策等技术的体系结构常常能促使EB的出现[Scott02],而采用基于脚本的智能技术则往往不能产生EB[Tozour02]。一般来说,开发人员可以通过带有随机性的决策来促进EB的产生。1.2.5欺骗手段所有的智能技术开发人员在开发中都会面临使用欺骗技术的问题。有些人坚持人工智能模块中不能采用欺骗技术-这等于说虚拟玩家的所获取的信息应该人类玩家是完全相同的。绝大多数的玩家也不希望在游戏中有欺骗的行为,但他们同时又希望游戏中的人工智能具有挑战性。更有趣的是,许多游戏允许玩家参与调整人工智能,而大部分玩家都会选择采用欺骗手段,在表面上延长了游戏生命。大多数反对欺骗手段的意见都归结到这样一种观点,即人工智能在与人类玩家的较量中通过欺骗这种不正当手段占据了上风。而事实上,由于无法即兴思考(而只能够预先设定),电脑本身就处于非常不利的局面。最好的可能性是开发人员教给电脑玩家(虚拟玩家)尽可能多的游戏策略。如果人类玩家熟悉所有这些策略,那么电脑玩家就很难给人类玩家制造挑战了。在未来,我们也许最终能开发出可以像人类一样思考的人工智能体,但就目前而言,人类玩家总是处于上风。值得注意的是,如果让玩家在一个死脑筋的人工智能和运用欺骗手段的人工智能之间做出选择,大部分玩家都会选择后者,只要这种欺骗并不明显。许多欺骗手段对于玩家来说都是透明的,甚至不能被称为欺骗。比如在游戏开始前预先分析地形也可以算作是一种欺骗,但如果这样能够提高游戏效率的话,那么大部分玩家还是愿意接受的。开发人员还必须牢记他们所定义的欺骗和玩家定义的欺骗是完全不同的。如果智能角色完成了一些人类该做的行为,而且完成得更快更好,那么人类玩家就会觉得是欺骗。在游戏EmpireEarth的开发过程中,我们规定如果玩家发现了任何一处他们认为是欺骗的地方,他们就要向开发人员汇报。这样我们就可以深入讨论这些问题,并试着解决它们来提高游戏的质量。1.2.6结论游戏人工智能成功的关键在于它必须具有趣味性和挑战性。趣味性可以通过一些突发行为和创造出乎意料的惊喜来做到。你必须时刻牢记你是在开发游戏,而游戏的目的就是取乐。同时,我们必须能够使尽可能多的玩家感受到挑战性,无论是新手还是那些常胜将军。1.2.7参考文献[Dyson97]Dyson,GeorgeB.,DarwinAmongtheMachines:TheEvolutionofGlobalIntelligence,PerseusBookGroup,p9,1997.[Scott02]Scott,Bob,“ArchitectingaGameAI,”AIGameProgrammingWisdom,CharlesRiverMedia,2002.[Tozour02]Tozour,Paul,“ThePerilsofAIScripting,”AIGameProgrammingWisdom,CharlesRiverMedia,2002.

1.3解决正确的问题NeilKirby–LucentTechnologiesnak@在游戏开发者大会(GDC)上,关于人工智能的讨论中最有趣的现象是人们在解决什么问题能显著提高游戏质量这一话题上意见相左[Kirby00]。本文中详细描述了这方面的两个例子。我们讨论的重点是开发人员怎么做才能发现“另一个更好的问题”。这些做法中有一部分可能来自于你的编程经历中(比如一些众所周知的好的编程技巧),而另一些则可能与编程毫无关系。后者可以看作是对你的头脑的一种“交叉训练”,是可以通过不断学习和练习得到的。1.3.1解决另一个问题也许更有效1.GDC2000上的一个例子人工智能讨论组的一个与会者举了这样一个例子。他所在的公司想在开发的探险游戏中加入语音识别的功能。如果所有的NPC(非玩家角色,也即由电脑控制的虚拟角色)都能开口和玩家说话,那么玩家也会自然而然与NPC说话。这样一来,所有NPC就必须能够理解玩家的话,推测出玩家的意图,并且做出合适的反应。然而,语音识别是一个非常困难的问题。尽管语音识别是可行的,它要占用大量的资源,并且效果总是不尽人意。在语音识别的背后还隐藏着一个更为艰巨的问题-自然语言处理(NLP)。语音识别可以看作是听写,而NLP则是要理解所记录的内容。两者都存在大量问题。对于语音识别,我们来看下面这个例子:“LittleRedRidingHood”“LadleRatRottenHut”这是美国的一种类似于绕口令的东西:第一句话的发音听起来会很像第二句。请注意两句话使用的都是真实世界中的单词。由于两者很相近,一个简单的语音识别引擎很有可能将两者混淆。对于NLP问题,我们来比较pissed和plowed这两个单词。在美国的俚语中,这两者的具有相同的含义(“愤怒的”和“醉的”含义),而在英国英语中它们的含义却不相同(分别是“醉的”和隐含地提到性)。如果是人犯了这样的错误,他会被认为是滑稽的。但如果是电脑犯了这样的错误,则会被认为是愚蠢的。这两个领域在技术上都取得了很大进展。在PC上运行的语音识别产品已经出现了好几年了(这些产品的名目和价格可以从这样的网站上查到[Amazon01])。基于文字的探险类游戏和像AskJeeves这样的网站则体现了NLP技术的突飞猛进。但是,想要在上述那个游戏中同时解决这两个问题是非常困难的。即便两个问题都能得以解决,多语种支持的问题也够麻烦的了。因此,那个人所在的公司选择去解决另一个问题。他们发现人类的大幅度动作所代表的含义在不同的文化背景下都是一致的,比如表示“我不知道”的耸肩动作就是一个典型例子。相比之下,小幅度的动作所代表的含义是有差别的。有的时候这种差别是比较小的(但还是可察觉的),比如人们数数时首先用到的手指,但有的时候这种差别是惊人的。尽管小动作的含义在不同文化之间千差万别,好在大动作的含义是比较一致的。通过赋予NPC大幅度动作的能力,游戏变得更为吸引人了,达到了与用语音识别技术同样的效果。通过这件事,他们发现采用大幅度动作比采用语音输入更好地解决了问题。2.另一个例子:TheSims游戏赋予自主对象智能的行为是困扰许多游戏开发人员的一个难题。让自主对象识别和定位那些有助于达到其目标的物体也是一件困难的事情。请注意这两个问题是有所区别的,而且第二句话也不是第一句话的扩展和深入。这些问题可以归结为如何让这些对象和真实世界进行交互。首先,这些自主对象要确定所要找的目标,然后在内存中搜索它们。“哪里可以找到吃的东西?在哪个位置埋伏最好?”这些问题的答案有助于解决上述的问题。WillWright在设计游戏TheSims中通过解决第二个问题(识别和定位)来解决第一个问题(也即智能行为)。他通过“智能地区”的技术来使那些虚拟角色(也即自主对象)很容易地达成它们的目标。在智能地区上的物体能够向那些可能经过的虚拟角色“广播”它们自身的信息[Doornbos01]。因此,这些虚拟角色就无须主动去识别地上的物体,而是被动接受物体所发出的信息。如果某个物体的信息满足了某个虚拟角色的需要,这个角色就会像那个物体所在的位置运动。比如,“冰箱”可以通过广播自己能够解决“饥饿”这一信息,这样周围的虚拟角色就会通过冰箱来解决饥饿问题。1.3.2首要原则:哪个是根本问题?最根本的问题在于我们要给那些花了几十美元来购买游戏的人们带来乐趣。因此,当面对游戏中的一个人工智能难题的时候,我们就应该考虑是否可以通过解决另一个问题来达到同样甚至更好的趣味性。在上述的那个语音交流的例子中,这个根本问题就是“我们是否能让游戏变得更加吸引人?”。开发人员避开了语音识别,而把注意力放在这个根本问题上,并且找到了很好的解决方法。在TheSims游戏中,解决对象智能行为这个问题的方法不是使这些对象更有智能,而是使地形本身更有智能。在逻辑上,让我们用A来表示使游戏更有趣味性这个问题。很显然,问题A很宽泛,因此我们会找一个具体问题B并尝试解决它。这个看似完美的方法的漏洞在于我们从没想到还有问题C(或者问题D,E…)同样能解决问题A。这里的关系可以表达为:A (根本问题)B (一个比较容易想到的问题)B->A (通过B解决了A;许多开发人员到这里就停下了)C (另一个比较容易想到的问题)C->A (通过C也可以解决A)1.3.3开发人员其实一直在这样做人工智能中常提到的“欺骗”从一个侧面证明了智能游戏的开发人员总在尝试变换需要解决的问题。在1996年度游戏开发者大会上,SteveMeretzky举了探险游戏中的一个例子[Meretzky96]。在游戏环境中由两个面对面放着的箱子,其中一个箱子里放了打开另一只箱子的钥匙。在因果世界中,一个玩家先打开错误的箱子的概率有五成。但是在游戏世界中,开发人员可以让玩家首先打开的箱子里总是放着另一只箱子的钥匙。尽管这听着不合情理,但却比常规做法更能给游戏带来趣味性。1.3.4如何发现一个更好的问题?发现一个更好的问题的前提是你必须愿意去尝试不同的方法。这当然也要求你有创造力,因为你必须突破常规地思考。这种技巧需要通过花时间练习才能掌握。1.及早开始,始终留意开始得早并不能保证你一定能找到一个更好的问题,但是很迟开始却几乎注定你无法找到。你的时间,尤其是花在动手做之前考虑解决方法上的时间,是非常关键的。而更为关键的是你花在考虑的其他可能的解决方法上的时间。请注意“理想时间”是在“情景观点问卷”(SituationalOutlookQuestionnaire)和之前的“创造气氛问卷”(CreativeClimateQuestionnaire)中提出的十个评价手段之一。这两个问卷给出了有效判别促进或者阻碍创造力和求变能力的一些标准。即便是在设计阶段之后,尝试去发现手头的小问题的各种不同解法也是有益的。很好地解决这些小问题有助于积累经验来对付那些大问题[Kirby91]。2.早借东风在GDC上,人工智能讨论组谈到了一个普遍的问题:开发人员经常由于正处于开发中的游戏引擎还无法提供某些关键信息而不能开发出最优的智能模块。假设智能模块由于软件结构上的限制而无法获得某些关键信息,那么很多智能技术都将无法采用。因此,开发人员要在游戏设计的初期阶段就预料到这个问题,并且保证这些关键信息都是很容易得到的。

3.一题多解正如单个数据无法显示趋势一样,仅仅依靠一种方法是无法很好地解决问题的。如果你肯花时间思考的话,你会发现找到第二种解法比找到第一种更为容易,因为你没有了至少找到一种解法的压力。当然,你还有另外一种更重要的压力:如果你找不到其他方法,你就被迫要用第一种方法,而这种方法可能是非常麻烦的。即便你对每个问题只能找到两种或三种解法,这种习惯也是非常可贵的。“想快的念头会使你因为不愿探索而丧失创造力”[Edwards01]。MichaelAbrash在1996年CGDC上的发言中提到,idSoftware公司的开发团队花了一年的时间才最终确定了游戏QuakeI的图形引擎所采用的方法[Abrash96]。他还提到编码实现这种方法的时间大约只有一个月。这也就是说,他们把大部分时间花在寻找一种更好的解法上。尽管上述的时间比例有些夸张(可以作为寻找其他方法所需时间的上限),它告诉我们这样一个事实:这是一家在业界领先的公司所推崇的做法。Abrash在一年后对此做了更为详细的解释:“我为什么要提及这些时间?其中的一个目的是告诉人们有趣的想法不一定能成功。我通常喜欢谈论那些获得成功的想法,但是谈论那些不成功的想法也是有益的。当然,这不是说你不应该去尝试那些有趣的主意了。首先,你必须去尝试这些想法才能知道它们是否行得通;其次,如果一种方法不适用于某个场合,它可能会适用于另一个场合你尝试得越多,你掌握的工具也越多,你对下一个项目中出现的问题理解也越深。”[Abrash97]一题多解可以当作是对付疏漏的一种安全措施,但是多种解法其实解决的都是同一个问题。不过这种习惯可以使我们认识到每个问题都有多种方法。这与发现不同的问题既有联系又有区别。4.跳出思维定势想要发现一个更好的问题需要你跳出原有的思维定势。那些没有固定思路的人会怎么考虑问题?孩子们会怎么考虑问题?年幼的孩子们会尝试采用现实中一些稀奇古怪的办法去解决问题。同样地,一个机智的外行会采用试着用一些看起来不那么可行的方法,因为他的头脑中没有固定的规则和限制。这就是思维定势的形成过程。因为我们开发的是用于娱乐的软件,而不是为联邦飞行管理局编写的空中交通管理软件,我们可以采用一些稀奇古怪却行之有效的非常规方法,不必担心这样会歪曲现实世界。你也许无法找到一个合适的局外人来帮助你跳出自己的框框。跳出原有框架的一个好办法是进入到另一个框架中。这样一来,你的思维就会逐渐抛弃那些原有的条条框框,因为你已经忘记或者没有必要遵守它们了。主动学习一些和创造性思维有关的事情。在研究生的教学中有一个常见的现象[Brank87]:某个领域的学生常常会被另一个领域中的有趣问题所吸引,他们会尝试用自己领域的知识技能(包括对新领域的不了解)来解决这些问题。当你在探索其他人的领域时,留意他们所采用的那些超常规的解决办法。除此之外,还有许多其他的东西需要学习。在《DesignPlunder》一书中,WillWright列举了一些需要学习的东西:“建筑、椅子的设计、日本式花园、生物学、玩具、心理学、喜剧、社会学、流行病学等等”[Wright01]。可以毫不夸张地说,即使随便从图书馆中捧一些书出来,其中也会有许多值得学习的东西。无论建筑、椅子、摩托车、甚至中世纪的围城工具,只要它是新颖而发人深思的,我们都可以从中学到东西。当你开始考虑“怎么做的?如果是我,我会怎么做?还有更好的做法吗?”这些问题的时候,你的思维就走上了正轨。5.训练你的创造力跳出思维定势的能力和创造力就像一对孪生姐妹。一般来说,运动员的训练要多过比赛,而且两者之间是有巨大差别的。同样,发现更好的方法需要创造力,而这种创造力在日常编写代码的过程中是很难培养的。这并不是说编程就不需要创造力了,只不过编程中的创造力一般发挥在一个项目漫长的编程过程的开端。你的创造力有多“好”并不是关键问题。在开始动手前,你并不需要具有高超的创造力。但是你必须通过实践来加强在创新方面的能力,这也就是所谓的创造性活动:你必须通过不断练习来锻炼你的头脑。这些创造性的活动最好能够和你的日常生活有机结合在一起,因为临时抱佛脚的作用总是有限的,这一点在体育比赛中早已得到证明了。因为你是为了解决问题才去训练你的创造力,对你来说最好的创造性活动是需要通过创新来克服某些挑战。如果你选择的方式不具有挑战性,或者过于困难,那你的创造力就很难得到锻炼。假设你是某个训练方式所在领域中的博士,那么这样的训练对你来说也没有任何的挑战性。而如果你手头只有一些残羹冷菜,那么要做出一桌可口的饭菜就太难了。正如你可以尝试许多不同的思维方式一样,你可以尝试去做许多有创造性的事情:摄影、油画、素描、谱曲、用冰箱里的剩菜做出可口的饭菜、用火柴编制出图腾的花样、把垃圾桶里的废金属焊成雕塑、甚至写一首俳句诗。这些事情都会帮助你养成创新的习惯。在互联网上有许多和你一样有着各种创新想法的人。你在G上可以找到6690条关于“焊接雕塑艺术”的链接,325,000条关于“俳句诗”的链接和2760条关于“编织艺术”的链接。你在其中一定可以找到适合你的创新活动。“创新是转瞬即逝的,但却是必不可少的”上面所说的俳句诗可以在30秒内(写俳句诗的经典时间)匆忙完成,快到“连你的笔尖上的墨水还是湿的”。当然,这样的诗不是完美的,但它也严格符合了每行中音节数量的限制(分别是5、7和5个音节)。这个例子说明了即便在极其有限的时间内创造性活动也能有所作为。这些创造的成果也无须伟大,而只要有效就可以了。事实上,如果创造性活动简单到能够很好地融于日常生活中,人们就比较容易坚持下来。上述的俳句诗并不是故意不完美的,但是有缺陷的俳句诗却更能说明问题。我们创造的结果无须具有很高的内在价值,而且我们甚至希望他们没有很高的价值。我们推荐以上的创造性活动的原因是它们的产物(结果)都是转瞬即逝的。用火柴拼成的图腾比制造火柴的木材燃烧起来一样快;回收金属制成的雕塑最后还要被回收;你的数码相机中的那些大胆尝试也只需要按几个按钮就可以抹去;用剩菜做出的精美事物最多不过是美好的回忆罢了;你的硬盘上存放的昨天写的俳句诗又会被今天写的诗所取代,这个磁盘操作还用不了10微秒。因为没有人能看到你的创造成果,你可以随心所欲地尝试-过程永远比结果更重要。通过创造活动锻炼你的创造力,不但使你能从容面对下个项目中的挑战,也能够让你应付你手头项目中的问题。只要你时刻牢记创新,你可以完成那些难以置信的任务。1.3.5结论发现更好的问题的能力部分来自于良好的编程和项目管理习惯。这种好习惯包括寻找多种解法,以及在设计阶段对问题的充分思考。除此之外还有那些特意用来训练头脑的、与编程无关的活动。找到思维定势之外的方法的能力是可以通过学习和训练得到的。CorporateAmerica公司要求它的所有职员掌握这一能力,特别是那些培训人员和顾问[Epstein96]。同样,纯粹的创造性活动也可以通过学习和锻炼得到,能否创新全在于你自己。要相信一定有一个更好的问题正在等着你去解决。1.3.6参考文献[Abrash96]Abrash,Michael,“TheQuakeGraphicsEngine,”inlecture,ComputerGameDevelopersConference,1996.[Abrash97]Abrash,Michael,“Quake:APost-MortemandaGlimpseintotheFuture,”1997ComputerGameDevelopersConferenceProceedings,CGDC,1997.[Amazon01],,Software>Categories>Utilities>VoiceRecognition,accessedAugust2001.[Brand87]Brand,Stewart,TheMediaLab:InventingtheFutureatM.I.T.,VikingPenguin,1987.[Doornbos01]Doornbos,Jamie,“ThoseDarnSims:WhatMakesThemTick?”inlecture,GameDevelopersConference,2001.[Edwards01]Edwards,Steven,“TheTechnologyParadox:EfficiencyversusCreativity,”CreativityResearchJournal,Volume:13Number:2,LawrenceErlbaumAssociates,Inc.,2001.[Isaksen99]Isaksen,ScottG.;Lauer,KennethJ.;Ekvall,Goran;“SituationalOutlookQuestionnaire:Ameasureoftheclimateforcreativityandchange.”PsychologicalReports,No.85,1999.[Kirby00]Kirby,Neil,“GDC2000AIRoundTableModeratorsReport,”GameDevelopersConference,,2000.[Kirby91]Kirby,Neil,“IntelligentBehaviorWithoutAI:AnEvolutionaryApproach,”Proceedingsofthe1991ComputerGameDevelopersConference,CGDC,1991.[Meretzky96]Meretzky,Steve,“AStoryWrappedInsideaPuzzleWrappedInsideanEnigma:DesigningAdventureGames,”inlecture,ComputerGameDevelopersConference,1996.[Wright01]Wright,Will,“DesignPlunder,”inlecture,GameDevelopersConference,CMP,2001.

1.4实战中的12个诀窍JeffOrkin–MonolithProductionsjorkin@以下所述的诀窍都是人工智能的开发人员从实际经验中总结出来的。也许富有经验的开发人员对其中大多数诀窍早已是耳熟能详了,但那些初学者可以从中学到很多。尽管有些诀窍适用于通用的软件开发,它们特别适用于开发人工智能系统,因为这些精巧的系统在游戏开发中需要不断加以改进。1.4.1周密计划首先要明白世界上没有万能的人工智能系统。不同的技术适用于不同的场合。我们可以通过考虑以下的因素来选择合适的解决方法:游戏中人工智能的重点:比如,我们要清楚是路径搜索重要,还是学习或是表达感情更重要?编写智能模块的时间和预算:我们准备为开发人工智能技术花费多少时间和人力资源?开发团队的组成:开发团队中有多少程序员和设计员?这些成员是不是都很有经验?事先确定游戏的需要和开发团队的能力是必不可少的。然后,以这些信息为准则来决定人工智能技术的重点。一旦重点确定以后,我们可以展开一系列的调研工作,比如确定合适的智能方法,甚至在时间允许的条件下编写代码。在调研中,开发人员可以参考包括本书在内的许多资料,比如《GameProgrammingGems》系列丛书,游戏开发者大会,还有类似于计算机协会ACM这样的学术组织。1.4.2简单至上游戏中的人工智能开发人员要时刻牢记KISS原则,这就是“简单至上”(KeepItSimpleStupid)。一般的来说,人工智能系统的程序中有大量参数和大量分支跳转,它们会使程序变得极为复杂和难以控制。在理想状态下,一个人工智能系统应该允许设计者和程序员通过编写一些简单模块来完成复杂的任务。由于简单模块比较容易理解、重用、调试和维护,它们更能适应游戏改进过程中不断的代码变化。此外,简单模块也便于由其他人员来维护,或者被用于其他的系统中。假设你要在一个动作游戏中编写一个有限状态机来控制智能体(智能体)的动作。这些智能体在玩家还没进入视野之前处于被动等待状态,而当玩家靠近之后它们进入战斗状态。这可以很容易地通过(在有限状态机中)加入“等待”和“战斗”两个状态来实现。但如果要使智能体做出更多的动作,那么状态机中状态的数量将大大增加,相应的代码也要复杂得多。这中情况下比较好的办法是建立许多简单、通用、并且可重用的状态。例如,我们可以创建“追逐”、“开火”、“撤退”以及“要求增援”等状态来代替“战斗”状态。这些状态都十分简单,便于在出现问题的时候调试诊断。比如盟军应该采用“追逐”状态去追随玩家的军队。“追逐”状态还可以由更为通用的“移动”状态来实现控制智能体向某一位置的走动或跑动。我们在第六条诀窍中将详细介绍通过层次化来实现状态重用。1.4.3纸上谈兵在设计好一个人工智能系统后,紧接着要做的事情并不是马上去实现它!我们应该首先在纸上写下代码的框架,数据文件的草案,以及一些智能体所可能遇到的场景的描述,然后把这些东西给游戏设计者来检查。经过这个检查过程,许多疏漏就能在编码之前被发现,使游戏开发阶段更为顺利,游戏系统更为鲁棒。同时,保留所有这些纸稿作为系统文档,便于在系统改进的时候查阅。设计者也可以通过这些纸稿来更高效地利用人工智能系统。1.4.4预设道路在学术上,编写一个控制智能体在三维环境中进行漫游的程序是非常困难的。但是由于可以“作弊”,游戏开发人员可以很容易地解决这个问题。尽管从数学角度来说计算几何空间中的路径是可行的,这样计算的复杂性也是惊人的。更好的解决办法是采用预先计算好的路径搜索数据(当然,玩家并不知道这些数据),让智能体沿着预先设定的路径到它们所要去的地方。在一个物理系统的底层,我们通过检查线、立方体或者球体与世界中其他几何体的相交情况来检测碰撞。要检测与玩家之间的碰撞也需要大量的计算,此外我们还要计算智能体之间的碰撞情况,并为它们搜索路径。实际上,我们无需检测智能体在两点之间运动时的可能碰撞。一种更好的方法是利用一些玩家所不知道的导航提示信息。这种提示信息可以用一种工具自动产生,也可以由设计人员手工编写。编写这些提示信息的技术包括:设计人员可以将地块隐式地标上不同的颜色和纹理,从而表示死路或者使用该地块的优先级别。设计人员可以在两地之间设置短线来表示可供智能体使用的预设路径。设计人员可以把地形分块,保证在每一地块上都可以直接看到另一地块。设计人员可以定义一些地块,使该地块中的智能体无需检测碰撞情况。有一个工具可以通过分析高度信息和一些其他标准来决定“走”哪个多边形。这些多边形可以组成一条路径[Tozour02a]。毫无疑问,除了上述之外还有许多技术可以用于创造提示信息。这里的关键在于要尽可能少地使用路径搜索算法或者物理系统的计算。关于如何加入导航提示信息的细节,有兴趣的读者可以参考4.5节“有关门、升降机、暗礁、和其他障碍物的导航问题”[Hancock02]。1.4.5智能化的游戏世界很显然,一个智能系统是难以适用于各种场合的,更何况新的任务总是随着游戏的开发而不断出现。比较好的做法是编写一个简单的智能系统,它只需要使智能体有能力选择并且移动到目的地就足够了。一旦它们到了目的地之后,游戏世界中的其他物体或场所会以消息或者脚本的形式告诉智能体应该如何行动。比如,一个智能体可能知道自己饿了,它可以寻找游戏世界中那些“自称”可以被食用的物体,然后移动到最近的那个物体边上。等智能体来到这个物体旁边的时候,这个物体可以通过运行一段脚本来告诉智能体做出从树上摘苹果、打开冰箱、或是使用自动食品机等动作。尽管这个智能体本身知之甚少,它可以通过接受这些指令而做出智能化的动作。创造智能化的游戏环境还有另外一个好处:无限的扩展能力。开发人员无需改变智能系统的底层代码就可以使智能体掌握一些新的动作或技能。这种技术在游戏TheSims中得以广泛使用。该游戏提供下载的数百个虚拟角色就是对这种技术的最好证明。1.4.6动作要有时限和退路游戏中最糟糕的事情莫过于智能体不停的重复相同的错误。没有人会注意到一个智能体在应该左转的时候向右转,但所有人都会注意到一个不停往墙上撞的智能体。因此,智能系统必须在合理的时限内检测智能体是否已经成功完成了动作。如果没有,我们就应该让智能体尝试做另外一个动作。至少,我们可以让智能体在原地做出一个表示迷惑和沮丧的滑稽动作。如有计算资源允许,这个智能体可以重新评估它的状况并选择下一步动作。1.4.7层次化的状态有限状态机(FSM)是游戏中常用来控制智能体行为的一种机制。如果FSM中的状态都被设计成简单、通用的、可重用的状态,那么每个状态都

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论