PersonalCorpus 版 (精华区)

                     面向智能代理的设计方法
                                         --从"OO"到"AO"

                           零    序言
    
     本文涉及到了"面向代理(Agent)"的初级思想。在本文中,笔者不象以往的文章
那样,直接阐释什么是"AO",给人以满头雾水的感觉。为此,笔者另辟蹊径,尝试着从
大家都熟悉的"对象"一步步过渡到"代理",由浅入深阐述了"面向代理"的思想。


                           一    本源

    近些年来,无论是在计算机科学领域,还是在人工智能领域中,一种软件设计方法
已经被越来越的研究者所关注,并成为各相关领域瞩目的热点。这就是"AOD"(Agent 
Oriented Design)--"面向智能代理的设计方法"。有许多研究者认为:这种方法将是
今后计算机科学领域和人工智能领域相交汇的重要结果。

    对于"Agent"一词,中文译法甚多。如"主体"、"代理"、"智能体"、"智体"等等,本
文暂且将之称为"智能代理",简称为"代理"。笔者这样翻译的原因将在后文讨论。

    在此给刚刚从我这里第一次听到"代理"这个词的人一个小小的建议:不要以为"代理"
是多么难以理解的东西。你只要把它想象成一个"对象"(Object)就可以了。其实,从本
质上说,"代理"的确是一个对象;而且从编码的角度来讲,"AOP"与"OOP"简直就是一个
模子里刻出来的!

    好了,现在我们已经迈出了从"OO"到"AO"的第一步:一切从对象出发!


                            二    超越

    那么"代理"基于"对象"而又脱离于"对象"的原因何在呢?换句话说,到底"代理"与"对
象"之间有什么异同呢?概括来讲,它们之间最主要的区别就是:"对象"是被动的,而"代
理"则是主动的。"代理"超越"对象"的主要方面在于:

    ·自治(autonomy)--"代理"具有对象做不具备的一些"智能",如"意图
(intention)、情感(emotion)、愿望(desire)、信念(belief)"等。基于这些"智
能","代理"可以在没有外界控制的环境下,在一定程度上自行决策,采取主动的行为,
完成"自治"的功能。

    ·反应(reactivity)--"代理"感知(perception)外界环境的变化,接受刺激,然
后对这种变化或刺激做出一定的动作(action)。基于这种特性,"代理"可以做出代理业
务、接受委托、遵循承诺等各种反应。这就是本文把"Agent"译作"智能代理"的原因。

    ·主动(pro-activeness)--"代理"根据内部状态和外部环境,产生面向预定目标的
主动行为,称为 "主动性"或"预见性"。

    ·社会行为(social ability)--"代理"之间互相通讯,分工合作,协同解题,并行
计算。这是仅仅能够互相传递消息的对象所不具备的功能。这种行为被称为"社会性"或者
"群体性"。这是"面向代理"应用于分布式系统的重要特性。

    到此为止,我们已经知道了"代理"与"对象"的许多区别。这是我们从"OO"过渡到"AO"
的第二步。恭喜你!
  

                                 三    实现

    这句话说在最前面:"代理"更多的应用是在分布式系统。所以建议读者不应该用单机
、单进程的观点思考它。

    既然"面向代理"是"面向对象"的一种超越,那么理所当然的,"面向代理"的设计方法
是"面向对象"的设计方法的发展。

    回顾一下从"PO"到"OO"的过程,我们把过程(procedure)封装到了对象(object)
中;现在我们也是如此转换:我们要把软件体系结构、设计模式、组件以及面向对象全部
都归结为基于主体的计算。

    由此,"AO"不仅要继承"OO"的通用性、模块性、重用性、扩展性、移植性,而且更应
该发展提高软件系统智能性、互操作性、灵活、编程效率和程序自动化水平、智能化水平
。概括来说,"代理"是深刻的,"对象"是普遍的。

    从本体的方面看。"对象"是被动的,"面向对象"的设计包含的是数据(data)以及定
义在这些数据上的操作(operation);"代理"是主动的,"面向代理"的设计包含的是目标
(goal)、状态(state)和行为(action)。

    从交互的方面看。"面向对象"的设计方法是基于句法(syntactic)的,而"面向代理"
的设计方法是构建在语义(semantic)之上的;前者单机工作(off-line)而后者联机工
作(on-line);前者侧重静态编译(design-time)而后者侧重动态连接(run-time)。

    从与其它同类的联系来看。"对象"是偏向继承(inherited)的,"代理"是偏向组合
(organizational)的。

    综上所述,"面向代理"是从"面向对象"发展演化而来的。因此,初学者要从"面向对
象"的思想出发,来理解"面向代理"的概念,这也是笔者的一个初衷。本文只是从演化的角
度来揭开"面向代理"的面纱。对"面向代理"有兴趣的读者,如果想进一步研究的话,可
以参阅以下文献:

[1] 史忠植等,智能主体研究现状与发展趋势,计算机世界报,98.1.26专题版
[2] 沈达阳等,Internet 上的软件 Agent,计算机科学,1997 Vol.24
[3]M.Wooldridge , Intelligent Agents: Theory and Practice, Knowledge  Engine
   ering Review, 10(2)1995
[4]Mihai Barbuceanu, The Architecture of an Agent Buildings Shell,  Proceedi
   ngs of IJCAI'95
[5]Michael Wooldridge, Time-Knowledge and Choice, Proceedings of IJCAI'95
   Jorg P. Muller, The Design of Intelligent Agents    A Layered Approach,
   1996
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.374毫秒