白话面向智能体编程(Agent Oriented Programmig, AOP)之三

进入Agent世界-什么是Agent?

在前面的讨论中,说道了一下Object让俺们感觉不是很爽的地方。总结下来:OO并不是对现实世界最贴切的模拟。那么什么东东可以比OO更加贴近地来模拟现实世界呢?就目前看来,还是Agent可以担当起Object接班人的这个角色。

这里多插一段话。俺们可以注意到,不论是Object还是Agent,他们都有比较深的理论渊源,同时以指导实际软件开发为其价值导向。目前在软件开发过程中,俺们大量地使用着Object的概念,所以前面讨论凡是涉及到Object的,俺们都尽量使用开发人员熟悉的语境来描述,比如同步方法,异步方法,.Net平台中特有的delegate等等。而目前围绕Agent的工作大部分还停留在理论研究或者实验室原型的阶段,所以在下面关于Agent的讨论中,理论学术(白话:纸上谈兵)的味道会略为浓一些。俺会尽量结合同志们熟悉的生活中的例子来解释这些理论上的东东。

俺们遇到的第一个问题是Agent的定义是什么?这其实是一个蛮无聊的问题,能够在纸上默写出Agent的定义并不代表这位同志已经深刻地理解了Agent的含义。但这里还是罗列一下前辈们给出的若干关于Agent的定义。从五花八门的定义中俺们也可以体会一下Agent这个概念所包含的内涵的丰富性。

1. The MuBot Agent "The term agent is used to represent two orthogonal concepts. The first is the agent's ability for autonomous execution. The second is the agent's ability to perform domain oriented reasoning." 这个定义强调了Agent的自动执行能力和推理能力。

2. The AIMA Agent "An agent is anything that can be viewed as perceiving its environment through sensors and acting upon that environment through effectors." 不知道给出这个定义的前辈是不是搞生物学的,怎么看Agent都像是由细胞核和一堆毛须组装成的原始生命体。

3. The Maes Agent "Autonomous agents are computational systems that inhabit some complex dynamic environment, sense and act autonomously in this environment, and by doing so realize a set of goals or tasks for which they are designed." 这个定义比较复杂一点,他强调了Agent与外界环境的关系,也就是说Agent的存在是为了某个目的/目标而感知并且改变环境。在后面会介绍到,这是区分Agent和普通程序的一个重要依据。

4. The IBM Agent "Intelligent agents are software entities that carry out some set of operations on behalf of a user or another program with some degree of independence or autonomy, and in so doing, employ some knowledge or representation of the user's goals or desires." IBM给出的定义就少了一些学究味,多了些实用至上的气息。认为能够自动完成某种指定任务的软件体,都可以当做Agent。

5. The FAQ Agent [http://www.ee.mcgill.ca:80/~belmarc/agent_faq.html] "This FAQ will not attempt to provide an authoritative definition ..." 老外搞笑起来,也是一流。

6. The Favorite Agent “An autonomous agent is a system situated within and a part of an environment that senses that environment and acts on it, over time, in pursuit of its own agenda and so as to effect what it senses in the future.” 个人比较欣赏这个定义,纯理论的东西没功夫去搞,纯实践的东西没兴趣去搞,而这个定义试图在理论和实践之间找到一个平衡。

。。。

沿着探究Agent本源这个话题继续聊下去,眼前会出现好几条不同的脉络/线索。比较有意思的是那些搞人工智能的同志们,他们热衷于使用Agent的概念来拟合人的行为和思想,他们更愿意从生物/生命的角度来描绘软件世界中的Agent。所以他们使用了很多心理学上的术语/符号来刻画Agent,比如信仰(Belief),Intention(意图),义务(Obligation)等。这些同志的精神和境界是值得俺们尊敬和向往的,但作为大规模商业软件开发流水线上一枚微不足道的齿轮,俺更关心的是将Object替换为Agent后,代码量会节约多少行,项目工期会缩短多少天,这类和薪水/年终奖挂钩的实际问题。基于此考虑,俺决定选择一种相对比较practical的方式继续向同志们介绍Agent的概念。

Michael在他的论文Intelligent Agents:Theory and Practice中给出了一个Agent的弱定义(这还只是个弱的!强的就免了)。他说满足下面四个条件的东东,就可以称为是Agent:

l autonomy: agents operate without the direct intervention of humans or others, and have some kind of control over their actions and internal state; 自治性,也就是下面俺们将要谈到的独立心智。

l social ability: agents interact with other agents (and possibly humans) via some kind of agent-communication language; 社会性,这点俺并不认为是Agent的本质特性,一个独立存在的Agent难道就不是Agent了吗。一位生活在孤岛上的同志难道就不是Human了吗。之所以拎出这点来,俺估计Michael的考虑是:单个的Agent的存在是无意义的,只有处于群体中的Agent才能体现它的价值。

l reactivity: agents perceive their environment, (which may be the physical world, a user via a graphical user interface, a collection of other agents, the INTERNET, or perhaps all of these combined), and respond in a timely fashion to changes that occur in it; 反应性,能够接受外界的输入信号,并且做出相应的反应。

l pro-activeness: agents do not simply act in response to their environment, they are able to exhibit goal-directed behaviour by taking the initiative. 主动性,或称目标驱动,这是Agent很重要的一个特点。依据当前的环境和自身的心智,Agent 可以主动地执行某种操作或者任务。举例来说,大家都熟悉的Web Service,不论Web Service能够提供多少服务,计算能力多么强,它都不是一个Agent,因为它是被动地,而非主动地提供服务。

上面罗列了一堆Agent的定义。俺们除了敬仰前辈大师之外,还可以尝试着归纳一下Agent的本质。定义可以传递给俺们的信息是:什么是Agent;而本质可以传递给俺们的信息是:什么不是Agent。从这两个角度来把握一个概念,基本也就八九不离十了。

Agent的本质是什么?个人观点:拥有可以与外界交互的独立心智

解释一下这句话的含义。这句话包含了两个层面的内容。

一)独立心智。心智是什么?心智就是逻辑,由百万个判断语句组成的复杂逻辑是心智,一个if语句,甚至一个顺序执行语句,本质上来说也是心智。说到这里有同志会觉得不对劲了,如果心智就是逻辑的话,那么MIS系统中的发票类也是具有心智的啦,发票类里面也包含有逻辑代码嘛,而且还蛮复杂的呢。对的,发票类是具有逻辑,或者称为心智,但是他不具有独立的心智,什么意思呢?发票类中的逻辑是否执行,何时执行,不是由发票类自己决定或者控制的,这点很重要。比如,发票类有个逻辑(Method)可以将自己序列化为一段XML,当外界调用发票的这个Method的时候,发票是不可以说,“俺正烦着呢,待会再给你序列化”,发票的序列化操作会被立即执行,而且是无条件的。所以说发票类并没有独立心智,因此发票类是不可以视为Agent的。

二)与外界交互。交互这个词用得涩了点,其实白话就是输入输出,能够捕获/感知到外界环境的变化(输入),并且做出相应的反应(输出),就OK了。从这个角度来理解,如果一个东东,它慧根再怎么发达,再怎么我行我素,但自我封闭起来,不接收外界的任何信号,也不对外输出任何信号,那它也不可以称为是Agent。这里有同志也许会说:“同学,这个定义条件未免太弱智了点吧,你倒是找一个完全封闭的软件出来俺我看看啊”。俺还真能给你找一个出来。注意到的是“交互的”,这个相应的意思是根据外界的条件,输出是可以变化的。写一个简单到只包含一行语句的程序:Console.WriteLine(“Hello Agent”);。不管外界是刮风下雨,不管机器是386还是X86,不管内存是256M还是2G,只要这个程序执行,它的输出就是”Hello Agent’。这个程序的确是有输出,但不是根据输入而得到的“相应的”输出。所以这个只包含一行代码的程序并不是Agent,它只是一个Program。

关于Agent的本源,其实是仁者见仁,智者见智的一个概念。俺在这里白话一番,基本上是起个抛砖引玉的功效,并不是讲这就是绝对正确的。针对不同的背景,环境或者应用场合,俺们可以将Agent的本质理解为不同的东西。最重要的是,理解深刻了,领悟透彻了,一定要能解决实际问题,一定要在实际开发中派上用场,否则就不是白话,而是白谈。

提供几个有意思的Topic供同志们消遣。

l 计算机病毒是Agent吗。

l 在以往设计的软件系统中,有没有见到过Agent的影子。

l 什么样的软件系统,Agent最能派上用场。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏企鹅号快讯

6条小干货,提升视频类H5可用性

【设计日记】是腾讯FiT designer的短平快设计思考。在这里你可以看到设计师的一些日常活动,对工作、对设计的一些个人感悟或者小思考,还能发现FiT des...

1938
来自专栏PHP技术

为什么谷歌要执行严格的代码编写规范

原文出处: Mark CC 译文出处:外刊IT评论 本文是《Google是如何做代码审查的?》的续篇 我们在谷歌所做事情中另外一个让我感到异常有效、有用...

3006
来自专栏Sign

pktball游戏解析

之前的『好玩的小游戏推荐』,只是罗列了一下图,感觉没啥意思,所以改成简单的游戏解析了。 首先有个观点要了解一下: 有部分非程序员的同学认为,在程序员眼里,大部分...

3418
来自专栏java一日一条

Java程序员的错

这些年来,在我见过的各种 Java 代码中,我发现这最大的问题是,写代码的人痴迷于把自己当作架构师。他们很喜欢这样,在我阅读他们的代码时,经常会发现这些代码与其...

452
来自专栏北京马哥教育

快速掌握一个语言最常用的50%

现在的开发工作要求我们能够快速掌握一门语言。一般来说应对这种挑战有两种态度:其一,粗粗看看语法,就撸起袖子开干,边查Google边学习;其二是花很多时间完整地把...

2659
来自专栏web前端教室

新人提问 | 一个自学前端四个月的新人来信

先上截图, ? 这是他向我提问的截图,我回复他说今晚的公众号文章来回复他。 为什么要单独写一篇文章呢?因为他这个问题在我个人看来,不是几句话能说清楚的。 先审...

1865
来自专栏知晓程序

爱猫的人看过来!快用这个小程序,一起「云吸猫」

作为一个尽职尽责,又对喵星人宠爱无限的猫奴,手机里怎么能少了「猫来了的喵星球」这个小程序?

855
来自专栏大前端开发

《大前端开发》培训2周小结

经过两周的培训,以及大家的努力,每个人的成长都非常的快。零基础的同学也已开始对HTML、CSS以及JavaScript有了比较形象的认识,开始建立起了编程思维,...

772
来自专栏JavaQ

如何有效的阅读源代码?

无论是JDK中常用类的源码,还是常用框架的源码,都是经过开发者深思熟虑、不断完善才形成的,所以想要理解当时作者的设计意图和思想不是很轻松。 看源码首先需要找到入...

2656
来自专栏企鹅号快讯

浅谈python,c,java,优劣,语言高低与效率相反的不变规律

[菜鸟普及]浅谈c,java,python优劣,语言高低与效率相反的不变规律 此文于2011年04月16日,在我的微博原创发布。 很少写关于学习计算机语言的普及...

3359

扫描关注云+社区