游戏编程中的人工智能技术:译者序

来源:互联网 发布:淘宝客推广qq空间 编辑:程序博客网 时间:2024/05/21 03:57


游戏编程中的人工智能技术

 

译 者 序

智能和人工智能

       本书介绍游戏编程中的 人工智能(Artificial inteligence for game programming),简称游戏人工智能(game AI)。所谓人工智能,就是由人工建立的硬件或软件系统的智能,是无生命系统的智能。如“一个机器人的智能”、“一个能与人下棋的软件的智能”等。智能是人类(大脑)智力活动的能力。它的表现形式非常广泛,包括:能利用各种知觉系统接受来自环境的各种信息;能形象思维;能逻辑推理;能理解事物之间的内在联系,能作归纳和推广,来发现规律;能辨别真理,能使自己适应环境;能主动学习;能根据以往经验改进提高自己,避免重犯同样错误;能进行创新思维来从事各种创新,等等。智能是一个抽象概念,一个软件或硬件系统是否有智能,只能根据它所表现出来的行为是否和人类上述的某些行为相类似来作判断。

       人工智能也是一门学科名称。这门学科在电子计算机发明后不久即创立,其目的就是要模拟人类的智力活动机制来改进计算机的软件硬件结构,使它们掌握一种或多种人的智能,以便在各种领域内有效替代人的脑力劳动,特别是解决用传统软硬件方法难以解决的问题,如自然语言的翻译、定理证明、模式识别、复杂机器人的控制,...等。 

游戏编程中的人工智能

       现代游戏的制作都是十分庞大的工程,我们还无法期望利用人工智能来创作整个的游戏。我们所说的游戏人工智能,是指用来控制游戏中各种活动对象的行为的逻辑,使它们表现得合情合理,如同人的行为一样。游戏中活动对象分两类,一类是在背景中,如天上飘着的云,飞过的鸟。这类对象的行为连同它们的造型要显得逼真也不容易,需要你掌握2D或3D的图形和动画技术,还需要你头脑有几个艺术细胞。但它们在游戏中无需人工干预,变化不很多,控制的逻辑并不复杂。另一类活动对象是游戏中的各种角色,或称游戏代理,如虚拟的人、兽、怪物、机器人等。这些对象的活动方式必须变化多端才行,否则游戏就不好玩,所以控制逻辑就比较复杂。尤其是玩家对手的代理最困难。比如,要开发一个猫捉老鼠的游戏,假定玩家(不妨就是你)的代理是猫,则猫的行为由你操纵,而老鼠的行为则完全需要由程序来控制。当猫不出现时,老鼠必须到处觅食、打洞,以解决生存必需的食、住问题,而一旦发觉有猫出现,则必须立即躲进洞去。如果附近没有洞,则要立刻逃窜,而逃窜的方向取决于它和猫的相对位置。如果猫在老鼠的西边,老鼠应向东逃跑;如果猫从老鼠东边追来,则老鼠应向西跑;如果途中遇到障碍物挡住了去路,则应改变方向,如向南或向北跑,至少不应该回头跑,除非前面是死胡洞,则又当别论,这时就应向上爬,或回头向猫的身旁冲出去。老鼠能遵循这样的逻辑来行动,就是游戏编程中为老鼠设计的智能,是游戏人工智能。同样,猫也需要人工智能,但很简单,那就是听话,能听从你用按键或鼠标进行的指挥。

       所有角色扮演类游戏都需要有类似的智能。愈是好玩的游戏需要的智能愈复杂。但并不是所有游戏都要有人工智能,例如Windows提供的接龙和挖地雷游戏就没有人工智能问题;网上供两人对弈的象棋、围棋、军棋类游戏也不需要人工智能。如果要由机器当公证人,那也只要很低级的智能。但一旦要求机器与人作象棋、回棋一类的棋类对弈,那就需要很高的智能了。

人工智能的两种实现方法

       人工智能在计算机上实现时有2种不同的方式。一种是采用传统的编程技术,使系统呈现智能的效果,而不考虑所用方法是否与人或动物机体所用的方法相同。这种方法叫工程学方法(Engineering approach),它已在一些领域内作出了成果,如文字识别、电脑与人下类似于TicTacTo那样简单的棋类游戏,等。另一种是模拟法(Modeling approach),它不仅要看效果,还要求实现方法也和人类或生物机体所用的方法相同或相类似。本书介绍的遗传算法(Generic Algorithm, 简称GA)和人工神经网络(Artificial Neural Network,简称ANN)均属后一类型。遗传算法模拟人类或生物的遗传-进化机制,人工神经网络则是模拟人类或动物大脑中神经细胞的活动方式。为了得到相同智能效果,两种方式通常都可使用。采用前一种方法,需要人工详细规定程序逻辑,如果游戏简单,还是方便的。如果游戏复杂,角色数量和活动空间增加,相应的逻辑就会很复杂(按指数式增长),人工编程就非常繁琐,容易出错。而一旦出错,就必须修改源程序,重新编译、调试,最后为用户提供一个新的版本或提供一个新补丁, 非常麻烦。采用后一种方法时,编程者要为每一角色设计一个智能系统(一个模块)来进行控制,这个智能系统(模块)开始什么也不懂,就像初生婴儿那样,但它能够学习,能渐渐地适应环境,应付各种复杂情况。这种系统开始也常犯错误,但它能吸取教训,下一次运行时就可能改正,至少不会永远错下去,用不到发布新版本或打补钉。利用这种方法来实现人工智能,要求编程者具有生物学的思考方法,入门难度大一点。但一旦入了门,就可得到广泛应用。由于这种方法编程时无须对角色的活动规律做详细规定,应用于复杂问题,通常会比前一种方法更省力。

有关人工智能的书籍

       目前市面上游戏编程的书已出了不少,每一本书都会介绍一点人工智能,但采用的都是传统的方法,没有一本书像本书那样采用GA和ANN技术来实现。另一方面,市面上有关GA和ANN的专著也能找到,但均因偏重理论、大量采用数学公式、缺乏实际应用例子,使缺少相关数学基础的游戏开发人员或其他应用开发人员难于入门,无法实际应用。本书的特色就是抛弃了通常书中所有的抽象数学公式,采用完全平常的语言,以一次教会你一小点的办法,把复杂的概念和实际的应用方法解释得一清二楚,使你阅读起来感到轻松。译者在翻译此书的过程中就深深感觉到了这一点。

本书各章内容的概述

       本书正文由三部分组成。第一部分(1,2两章)介绍Windows 编程。这一部分的写作风格也很有特色,仅用80页(中文60页)就把Win32编程的繁琐入门知识以及利用GDI制作图形和动画的原理交待清楚,使你从此见到Windows代码不会生畏,为后面各章的阅读打下基础。同时,只要参照书中的大量例子,也不难自己动手编写许多Windows程序。

       第二部分(3到6章)介绍遗传算法。这一部分需要借用生物遗传进化中的“选择-杂交-变异”等概念,在算法实现时则又需要用到数学、物理和计算机软件方面的许多知识。本书首先以讲故事的形式使你了解生物的遗传进化过程,然后介绍模拟这一过程的遗传算法的进化过程(一种特殊的算法迭代过程),再通过寻找迷宫路径、寻找最短巡回路线、和月球登陆飞船的模拟,等三个有趣例子的多种求解过程,把算法实现所需的详细知识全部串接了起来,使你感到所有内容都很有用也极为有趣。

       第三部分(7到11章)介绍ANN。前面已提到,ANN实际是人类或动物大脑工作机制的一种模拟。在游戏中主要用来控制对手的游戏代理的行为,使它们像真人那样,能通过学习来认识环境、适应环境,或学会与他的对手(玩家)进行周旋和较量的本领。其中第7章介绍了ANN的基本知识和最常用的ANN,并介绍怎样用这种ANN来表示一个扫雷机,即一个用于自动扫雷的虚拟机器人,再结合遗传算法来改进ANN的性能,也就是改进扫雷机的本领;第8章的例子也是扫雷机,但在环境中设置了障碍物,因而要求机器人有知觉,能识别障碍物,避免与它们碰撞。第9章介绍网络的训练,就像我们在从事某些工作前需要预先接受训练一样。该章首先介绍网络训练的基本方法,并以实现异或(XOR)函数的网络为例,详细介绍了利用最通用的反向传播法的训练过程。接着介绍的几个例子是训练网络来识别玩家通过鼠标所作的手势。手势用来指挥玩家自己一方的游戏代理的行动,如指挥猫怎样来追赶老鼠。在团队式的游戏中,不同的手势可用来代表指挥诸如一群战士如何冲锋陷阵、如何包围对方、或如何撤退的各种命令。本章最后又介绍了改进网络训练的一些有用技巧。第10章介绍网络的实时演化,它允许一群由ANN所代表的个体经常性地有诞生和死亡发生,如同人类那样(此前介绍的演化,个体只能成批地进行更新)。采用的例子是外星人工程。一群外星人想来入侵,要遭到对手(你)的射击。为避免被你杀死,他们在入侵前先要接受训练,学会躲避被你所发的子弹打中。最后一章介绍一种非常特殊的神经网络,它的结构不是固定的,而是能根据目标需要,由小到大自动形成。只要提出不同的要求,就能形成不同的网络结构,是一种生成网络的网络,一种通用的网络。

       值得注意,本书所介绍的所有人工神经网络程序都是结合遗传算法实现的。这样,人工神经网络不但可以模拟单个的大脑功能,同时也能模拟人类或生物群体借助于自然选择和遗传进化机制而形成的、具有个体差异的许多大脑的功能。反映到游戏中,就是一群具有不同性能和不同行为方式的个体,而不是一群行为清一色的个体。

       除上述三个部分外,本书还有3个附录组成了第四部分。其中前2个附录分别介绍和游戏开发所需的web资源和参考文献。第3个附录则介绍随书所带光盘的内容。但此介绍很不完全。要了解光盘上究竟有些什么,最好是用资源管理器直接打开光盘来看,或者查看根目录下由译者加入的readme.htm或index.htm文件,它们完整列出光盘内容,还介绍了它们的用法以及使用中可能出现的问题和解决方法。

本书办不到的事情

       需要说明,本书不是游戏编程的万宝全书。为了构建AI完整的应用程序,书上确实介绍了不少必要的编程知识,但重点仍然只是教会你在程序中应用AI,并未详细介绍与此主题无关的各种游戏编程知识。后者应由成套的游戏开发丛书完成。同时,书上介绍的例子虽然都是完整的程序,但并不是完整的游戏程序。在一个实际可玩的完整游戏程序中,不仅需要有人工智能来控制角色,还需要考虑角色本身的造型,考虑丰富的背景、声响、脚本情节等。人工智能只是整个程序中的一些组成部分、一些不可缺少的模块。

       其次,本书也不是人工智能的万宝全书。游戏人工智能除了用GA和ANN之外,还可用诸如有限状态机、模糊逻辑、甚至更简单地直接利用大量if-else或switch语句来实现。即使是GA、ANN领域,本书也不可能像有关专著那样讲很多。为了提供足够的篇幅来介绍实际的程序代码,对其他的内容必须有所取舍。但总的说来,本书收集的内容是丰富的。它收集了既有基本的,也有深入的,甚至也有其他书上还见不到的很先进的材料。如最后一章介绍的NEAT网就是一个例子。这种类似于胚胎发育那样、能由小到大自动形成拓扑结构的新型人工神经网络无论在理论上或实际应用上都有很明显的价值,本书化了大量篇幅介绍了它,而在其他书中或者完全不谈,或者只是泛泛谈一下,没有任何程序。

本书的缺点和不足

       和任何书一样,本书也有缺点和不足。尤其是因为第一版,更少不了差错。其中多数是印刷排版错,也有一些其他类型的差错。但已发现的差错在中译本中均已更正,所以实际已和中译本读者无关。(译者发现的这些差错凡有疑问的,均已向原书作者提出,并是在他的确认或帮助下改正的。)为了节省篇幅,这种类型的差错不再加译注,但将会在我的个人网站www.ggdn.net论坛中公布。此论坛将来也要用来公布今后可能发现的新差错,包括原书新发现的差错或中译本中发现的差错。如果读者阅读中发现了任何差错也请务必到那里去贴出,以便让译者和广大读者都知道。

       其次,译者对本书也有一些不够满意的地方。例如:没有为每个程序提供框图,这不利于读者掌握算法的整体概念;执行程序的使用方法只写在书上,没有写在程序的帮助菜单中,这样不看书就不知道如何操纵程序,很不方便;所有程序的演化结果都没有保存到磁盘,这样每次启动都得从头开始演化,非常费时间,也不够实用;有些例子(如扫雷机或登月器)的人工智能是否足够,也值得研究,等。但所有这些,当你看完书中相应部分后都可以自己解决。建议你把这些作为练习做一下,完成后一定大有收获。

适用对象和需要基础

       本书的对象首先是游戏编程人员和教学人员(本书已被国内外许多游戏学校或培训单位用作指定教材)。同时,凡希望了解和应用GA和ANN的人员,无论属于哪一个领域(自动控制、规划设计、组合优化、图象处理、机器人、人工生命...等),也无论是学生、教师、程序员、工程师,...也都值得一看。此外,作者能把十分难写的题材深入浅出地写的如此通俗易懂,也是值得我们在编写各类图书,特别是自学教材时好好学习的。

  阅读本书需要C/C++的基础知识,但对C++的要求不是很多。另外,如果你想利用本书的源码来编译,需要掌握VC或BCB之类的集成开发环境的基本用法。

本书翻译的曲折经历

       本书原由《Windows游戏编程大师技巧》译者、现旅居加拿大的沙鹰先生翻译。他早在04年7月就已把6章以前所有内容译毕。后因眼疾无法继续,委托我接替他的工作。我从8月下旬由Amazon邮购到原版图书开始动手,到年底也把后面所有内容译完,并用word按出版社提出的要求排了版,也改制了原有的英文光盘文件,使它适合于中文Window操作系统。本以为05春就能和读者见面,但到6月下旬突然收到原编辑高巍先生来电,叫我补译第3章。我奇怪极了,翻好的还要翻,是否弄错了?但高说没错,并说已得到沙鹰确认,这样我就翻译了这一章。应该差不多了吧?但隔了一段时间,出版社许存权先生告诉我,高巍已调离,并寄来沙的全部底稿,要我按照我的格式整理他的底稿。我看了后发现底稿采用xml格式书写,但缺少其中引用到的xsl样式文件和所有图片文件,第6章后半部分的译稿也缺。于是直接和沙鹰联系,希望从他那里获得这些资料(我相信他是有的),但无论用Email或电传,均无回音。不能再等了,我着手重复做了各种工作。当我把他的底稿整理完毕,再次试发Email给他,希望他能把译稿校一遍(因我对他的译文有较多更动,且他原来也曾向我表示希望能负责统校),但仍无回音。没有办法了,我只得再把全书复查一遍,制作了目录和索引,向出版社交了稿。不知道沙鹰现在情况怎样,我很为他的眼睛担心。

       我在翻译、校对和为本书排版的过程中,得到出版社高巍先生和许存权先生的许多指导和帮助,在此表示十分感谢!

                                            吴祖增 2005-9-15 于复旦十舍   


       留下我和沙鹰的Email地址和论坛网站,欢迎各位读者提问和批评指正。

                     沙 鹰:yingsha@hotmail.com或ysha@jamdat.ca

                     吴祖增:zzwu00@163.com或zzwoo@126.com   论坛:www.ggdn.net/bbs

             注:由于译者健康原因,论坛未去续费,现以不再存在。






0 0