代码改变世界

人工智能的应用领域

2009-10-24 11:18  宝宝合凤凰  阅读(497)  评论(0)    收藏  举报
此文章摘自《3D游戏开发大全》定价:78元 特价:58.5元 购买>>

  5.2 人工智能的应用领域

 

  今天,AI能力更倾向于应用到人类或其他动物智能的某一或某几方面,并用自动化替代,有时候也用于对其进行模拟。不过在有些情况下,这些在高性能计算机调度之下的智能行为远远比人类的行为更为强大。

  当前,大部分AI能力的研究方向是研究如何完整地模拟一个智能过程,而不是对器官所使用的每一个低级步骤进行再现。一个极端显著的示例就是利用数据库和搜索软件获取信息的专家系统。数据库向大脑提供基本没有任何关联的数据,同时这些数据的传输和其在大脑中的存储形式也毫不相同(科学家们很清楚这一点)。但是很多专家系统还是能够相当好地担当起诸如像内科医生这样的专业角色。当然它们也仅仅被应用于它们非常熟悉的领域。

  对于人类智能底层“硬件”的模拟同样也吸引着研究人员的注意。例如神经网络这一研究课题就着眼于研究为解决某一问题而产生的大脑中各神经原之间的相互作用。还有一些研究着眼于利用我们对视觉器官识别物体、写以及画的研究成果来在成像系统中进行模型识别。

  虽然在开发出真正的智能机器或智能计算机这条征途上,我们还有很长一段路要走,但对于计算机游戏中人工智能应用的研究却为我们带来了许多好处。

 

  大部分人工智能应用的基本准则就是对于解决问题的需求。前面我已经对自我意识作出评断——不存在明确的自我意识定义以判断机器是否具有智能,不过很多人都将问题的处理能力作为对人工智能最好的衡量标准。

  5.2.1 路径查找(searching)和路径规划(routing)

  在最小代价路径规划和路径查找系统中,可以使用专门的技术——它们中有一些非常灵巧微妙,另一些则仅仅是用蛮力解决——来模拟对理解的直觉迅速转换或者对普通人大脑生成过程的识别,结果有时非常令人惊讶!路径查找就是路径规划问题的一种变体。

  不管怎样,当对真实世界中存在的问题应用AI技术的时候,您所遇到和需要克服的挑战有很多,但其中最令人烦恼的一个就是问题的规模和复杂度——即使在人类看来这些问题非常理所当然、简单和幼稚。早些年, AI研究的大部分工作是用于开发快速、高效、充分理解的查找方法。而“早期的计算机计算能力有限”这个限制条件则是这些努力的直接驱动力。

 

  很多AI研究者认为路径查找是问题解决最重要的一个方面,相应地,对于人工智能领域也是这样。

 

  当我们在列表、数据库或者更庞大的陈旧世界中查找一些东西的时候,最后,通常我们都是从开始查找的地方到最后找到的位置之间,创建一张地图或者一条路径。而这条路径就称为一条路线。从一个地方到达另外一个地方可以有很多条不同的路线到达,每一条都有着自己独特的属性设置。设想一下,从您家到您工作的场所之间绘制一条路线,如图5-2所示。其中有一些路线非常有趣,也有一些路线非常繁琐;有一些存在危险,安全通过它靠的是运气;而也有一些非常安全。看起来,它们中的大部分没什么两样,只是有一些细微的变化,不过,还有一些则变化非常大。通常情况下,查找路径的时候,我们都希望找到符合我们自己的某些重要标准的最佳路线。事实上,如果它只是日常生活中一个的普通往返路线的话,我们多数人会选择一条最短的路线以便节省时间。

  为了找到最佳路线,我们需要计算通过每一个往返路线的时间开销。时间就是金钱;所以,我们更倾向于关注最小代价路线。这也适用于飞机航线的制定,它们需要在不同的城市中逗留或更换航班等等。

  5.2.2 规则和专家系统
人工智能的发展到今天开始使用知识库来代替器官或机构记忆,多年来专家系统以及基于规则的决策系统在人类诊断和经验分析上一直处于主导地位(有时甚至在政府系统中使用)。它用于在知识库中挖掘出问题的答案、寻找关联性、模式提取等等相关工作。

 

  每当考虑如何在计算机游戏中应用专家系统的时候,第一个浮现在脑海中的就是角色扮演类游戏(RGP)流派。 http://www.mscto.com

  大家普遍认为,在角色扮演类游戏中使用计算机控制的智能角色,必须要有专门的技术(至少在游戏中应用它们的这个方面)。很多RGP的 AI角色会根据玩家的不同需要来帮助玩家。如果游戏世界足够大、场景足够丰富,专家系统将是一个非常强大的从游戏世界中分析相关信息的有效工具。对如何将信息添加到它们的知识库中这个问题,大部分专家系统都拥有几类不同的学习能力。这样,它们就可以对玩家的游戏风格、处理问题习惯已经行为移动模式创建一个系统的认识。基于这种学习,游戏中的专家系统可以用于修改它的响应表现、让游戏更加具有难度——更具有挑战性、更有趣——对于玩家来说,太容易玩的游戏没有挑战性,会让玩家失去乐趣。这一方式还可以用于暂时让玩家放松,避免让玩家陷于挫败感之中。

  事实上,专家系统甚至可以用作游戏的一个可玩性特色。想象在一个实时战略游戏当中,您训练一个罗马士兵军团,让其攻击、抵御某种特定类型的敌人。然后,您又训练了敌人军队,让它再次抵御罗马军团的进攻,依次反复。 软件开发网

  每一个历史军队所有的进攻和防御能力都包含在一个具有代表性的数据库中。当某一特定环境设置出现时,这些军队就需要找出一种策略来进行防御,这种需要由某种软件来提供,其中封装了这些环境作为一组参数,用于在专家系统中进行查找操作,从而寻找出抵御敌人的最佳方法。

 

  5.2.3 逻辑和不确定性

  计算机编程就像是使用逻辑砖块建造一栋房子一样。事实上,人工智能编程通常被认为有两种逻辑形式—— 命题逻辑和形式逻辑—— 的一种特殊混合应用,也被认为是一种谓词演算。更进一步说,编程语言中,我们更是采用了一个命题逻辑更加专门化的形式:布尔逻辑或者布尔代数。

 

  命题逻辑应用于具有真和假两种状态的断言以及命题领域之中。古典命题逻辑或者布尔逻辑处理的都只有两种状态:或者为真,或者为假。

 

  谓词演算(和中学学的数学计算毫无关系)是包括对象之间联系以及这些联系的真假值(布尔形式)在内的命题逻辑的一种强化延伸。

 

  而当我们在逻辑中使用这些谓词的时候,即使是最复杂的逻辑语句,我们最终获得的也只是一个黑白分明的世界:一个事物不是真的就是假的。如果一个事物不是真的也不是假的,那么它一定是不存在的事物。否则,它必然两者居其一。

  可是在现实生活中,虽然大部分时间都不会出现这样的情况,但是仍然有很多问题是不能仅仅通过“是”或者“否”这样的形式得到满意地解决。请大家注意一下,我说的是“满意”,我们依然可以使用逻辑来解决问题,我们也经常针对于具体问题使用经典逻辑而得到可使用的结果或者决定。当我们试图将各式各样的问题强行使用某一种逻辑进行描述的时候,我们就需要简化问题的声明。

  但是有时候,我们需要的不仅仅只是一个恰当的答案;有时,我们需要的是最佳答案。通常,我们无法明确地指出哪一个是最佳答案,这是因为我们经常对问题的某些方面了解并不充分。有时,我们是在使用问题的不充分信息来解决问题。甚至有时候,我们根本没有具体的数据信息,只是拥有该数据的一种描述而已。

 

  例如,踩油门的时候,我们怎么知道踩得刚刚适量:可以让我们的汽车尽可能快地加速又不会让汽车发出尖叫声呢?好,先看一下问题声明:“刚刚适量”,“不发出尖叫声”和“尽可能地快”。这里根本没有任何数据!那我们怎么解决这种问题呢?我们可以使用这样的声明“踩油门足够大,但是不要过分大!”好,非常清晰,是吧?不,其实,这样的描述还是相当的模糊。

 

模糊逻辑是一种使用不精确数值和近似值来控制过程的一种方式。这种方式适用于我们通常只拥有数据描述或者有效范围描述的情况之下。它通过数学方式来表示诸如“几乎足够”,“快”和“经常”这样的概念,然后将它们应用于模拟人类控制过程的计算之中。
软件开发网

 

  模糊逻辑利用一种简单的、基于规则的IF A AND B THEN DO C方法来解决控制问题,而不是创建该系统的一个数学模型来解决此类问题(过去很流行的一种做法)。模糊逻辑依赖于使用者的经验而不是对于系统任何细节级的技术上的理解。当然,我们没有使用下面的形式来描述对轮胎的控制:“V=10”,“S<200”,或者“150

  IF (还不足够快)AND(轮胎也不发出尖叫声)

 

  THEN(加大油门)

  或者,就像另外一个示例所说,淋浴的时候,使用如下的描述形式:

  IF (水不是太热)AND(皮肤很快变热) http://www.mscto.com

  THEN(迅速调低水温)

  虽然这些术语都不精确,但是却描述出了即将发生的事件以及需要采取的相应措施。如果淋浴的水温非常低,您可以简单、快速地调整它。我们使用这些术语来描述控制解决的方法,然后使用模糊逻辑构造来将这些表述转换为可以计算的解决方法。

 

  5.2.4 自然语言处理

 

  自然语言处理通常被认为是AI应用中最重要的一部分。如果我们可以让计算机明确地理解人类语言的含义,那么,我们将不再需要大量的软件开发。然后,我们这些软件工程师就可以退休去坎昆的海滩,在以后的日子里啜饮香蕉鸡尾酒。好啊,这就是我希望过的生活。

  然而,现实却是,自然语言处理系统并不能像人类那样能很好地分析这些并没有太强逻辑结构地说出的以及写出的词语的含义。不过这样有限的功能对于残障人士、翻译系统、词语处理拼写和语法检查器来说仍然是非常有用的。

软件开发网

 

  对于实现理想的自然语言处理系统最大的障碍就是人类语言的复杂性以及由于词语之间的细微差别、含义的引申、混淆和相互冲突的语法所导致的信息的海量性(这里并不涉及语法书上写的拼写和语法规则)。

  我们需要实现的目标并不仅仅只是听见别人所说的话并能将词一个个识别或者说分解出来,这只是非常简单的一部分工作。真正的神圣工作应该是分析语义的能力。而完成这个工作的前提就是语义必须符合上下文——这是个很高的条件啊。

http://www.mscto.com

 

  可喜的是,在对词汇量进行了限制并对语法进行了充分定义和简化后形成限制性语言系统的上研究我们已经取得了非常可观的成果。

软件开发网

 

  5.2.5 神经网络

  神经网络是一种信息处理结构,它的原理就是尝试模仿诸如大脑之类的生物学神经系统来转换单纯数据成为信息。神经网络由很多相互联系的处理小元素:神经节点(neurode,功能相当于一个大脑神经细胞)和神经元(synapse)组成,它们相互交互,共同解决具体问题(参见图5-3)。神经网络上的元素将输入模式转换成为输出模式,而这些输出模式又同时可以成为其他神经网络的输入模式。神经网络通过实例学习,这一点和人类的做法一样。神经网络需要设置为适用于某些具体应用中,比如通过学习过程识别图像。而对于生命系统本身,我们对学习的过程涉及到神经细胞之间的突触联系的调整这一说法保留质疑。

 

  神经网络可以从复杂和不精确的数据中分析出含义。它们可以用于识别模式,并且被主要用于处理那些复杂的不能被人或者其他AI方法所注意的信息。训练之后的神经网络通常被认为是使用它们进行数据和信息分析的领域的“专家”。后来,它们被设计用来处理新情况和解决如“what if”这样的场合。

  神经网络展现了自适应学习的理念——根据在训练过程中或者初始经验中所遇到的数据来进行学习以完成任务的能力。它们可以在学习过程根据接收到数据和信息来创建相对应的反应。

 

图5-3 一个神经网络交互联系的示例

 

  基于独特的数据存储模式,神经网络同时具备一定的容错性。如果您破坏了神经网络中某一部分,网络的整体效能在某种程度上来说会有所下降,但是这并不妨碍它完成工作,神经网络依然起作用。即使最主要的网络部分受到破坏也不会造成整个网络的整体功能的彻底丧失。

 

  神经网络采取了一种不同于传统计算的问题解决方式。传统的软件所采用的算法方式是让计算机按照一组指示流程来解决某一个问题。在创建解决问题的软件之前,编程人员需要知道解决该问题的具体步骤。这也就意味着,使用传统的软件只能解决那些我们知道并且彻底理解的问题。这种方法称之为认知法。

  神经网络处理信息的方式和人类大脑的工作方式类似。神经网络通过对示例进行学习,而不是通过编程用于完成某一具体任务。示例必须经过挑选,否则,会浪费宝贵的时间甚至有可能引起网络不能正常地发挥作用。而这样做的缺点就是因为网络完全依靠自己的能力来寻找解决该问题的方法,那么也就是说它的运行时间是不可预测的。

 

  我相信在使用软件解决问题时神经网络永远都不会取代认知法,但是它们确实提供了一种更为完善的方法。

  实现一个神经网络并不是什么微不足道的事情,可是,我不准备在本书中实现这样一个神经网络。如果您认为神经网络可以满足您的需要,网上有大量的相关理论和实践信息可供使用,您可以自己创建一个神经网络。

http://www.mscto.com