软件学报
JOURNAL OF SOFTWARE
1999年　第10卷　第11期　Vol.10　No.11　1999



软件Agent的继承性研究
樊晓聪 徐殿祥 侯建民 郑国梁
　　摘要　Agent作为一种受限的智能对象,对Agent的继承特性进行深入研究并将继承机制嵌入到AOP(agent-oriented programming)中则具有重要意义.文章基于BDI Agent模型,对软件Agent的继承性和复制行为进行了研究.从单继承和多继承两个方面给出了Agent继承的语义,将Agent实例的动态复制机制形式地划分为功能分割、逻辑分割、择优分割和返祖分割这4类,分析了每类分割方式的作用,并基于电子市场系统应用背景给出了相应的实例.
　　关键词　软件Agent,继承,复制行为,BDI模型,规划.
　　中图法分类号　TP311
Research on Inheritance of Software Agent
FAN Xiao-cong XU Dian-xiang HOU Jian-min ZHENG Guo-liang
(State Key Laboratory for Novel Software Technology Nanjing University Nanjing 210093)
(Department of Computer Science and Technology Nanjing University Nanjing 210093)
　　Abstract　 Being a kind of restricted intelligent objects, agent is a natural way to research the inheritance feature of software agent and integrate inheritance mechanisms into AOP (agent-oriented programming). Based on BDI model of agents, the semantics of inheritance and cloning behavior of agents are addressed in this paper. The semantics of inheritance are discussed from two aspects: single inheritance and multiple inheritance. For cloning behavior, the authors identify and formally classify the dynamic cloning mechanisms of agent instances into four types: function split, logic split, preference split and retrogress split. The principle of each cloning mechanism is presented and the examples are provided based on the electrical commerce systems.
　　Key words　Software agent, inheritance, cloning behavior, BDI model, plan.
　　AOP(agent-oriented programming)是一种特殊的OOP(object-oriented programming)［1～3］.Agent的心智状态、通信机制和能力分别对应于对象的状态、消息收发和操作.Wooldridge［4］认为,利用言语行为协议（speech act theory）进行协作的Agent既是推理系统,又是认知实体,它为AOP提供了自治和认知两层抽象.自治抽象揭示了Agent与主动对象之间的关系.在自治性、并发性和应激性上,两者具有近似对应关系;认知抽象与人们通常利用大众心理学来解释和预测复杂系统行为的方法相耦合.
　　但是,Agent在自治程度上优于主动对象.虽然主动对象可以根据它所处的环境来决定自身行为,从而实现控制的局部化,但其行为集是预先确定的,并且缺乏协商和学习能力;Agent的预动性(proactive)赋予其独有的规划特征,使其可以通过对底层原动作的动态规划控制自身行为,能对不可预知的事件作出合理反应.因而,Agent能更自然、更真实地模拟和解决客观世界中的问题.
　　另一方面,OOP的日益成熟也为AOP的发展提供了契机.AOP能否普及,并像OOP那样焕发强大的生命力,取决于其能否提供OOP目前所具有的特性,并在某些方面（诸如易理解性、易维护性等）能否超越OOP而提供独具的优点.由于继承性是OOP的基石,AOP能否具有继承性很自然地便成为首先要解决的问题.Crnogorac［5］意识到这一点,并初步探讨了AOP中的继承问题,使Agent的对象属性研究作为Agent方法学的一个重要方面重新得到重视,从而在一定程度上缓解了Agent研究领域两极分化的现象［6］.但Crnogorac仅局限于其中的行为保持和继承异常问题,对Agent继承中的许多细节没有充分考虑.
　　本文试图从单继承和多继承两方面对Agent的静态继承进行研究,并深入探讨Agent的动态继承-动态复制行为(cloning).第1节介绍改进的BDI模型.第2和第3节分别讨论Agent的静态继承和动态复制行为.第4节对与Agent继承有关的问题进行分析.最后概括本文的主要工作.
1 BDI模型与规划表示
　　在Agent理论研究领域,BDI模型［7］是最富有成果的Agent模型.处于动态环境中的BDI Agent通过对外界变化的不断感知,基于自身的信念产生目标,对某些目标作出承诺从而产生意念.通常将一个BDI Agent表示为〈 〉,其中和分别表示知识集（为真的信念）、初始信念集、初始目标集和静态规划集,它们由特定的Agent语言描述,用来规范Agent的静态心智特征.
　　在语法上,规划由激发事件集、语境条件集和规划体组成.可将规划p表示为元组〈pE,pC,pG〉,pE和pC分别对应于p的激发事件集和语境条件集,pG 为规划图.规划图的节点表示状态,弧表示状态转换,弧上的标记为一个三元组〈E,C,A〉,分别表示激发转换的事件、转换发生的条件和转换伴随的动作.规划图中有3类节点:1个初始节点,3种叶节点（“成功”、“失败”和“放弃”）和内节点.内节点可以是具体节点（原动作、通信语句、不确定语句等）,也可以是代表子规划体的抽象节点.抽象节点有一指针指向其扩展子图.
　　定义1.1（服务簇）. Agent的一个规划图与其中所有抽象节点的扩展子图共同构成该Agent的一个服务簇.服务簇实例化后得到具体的服务.
　　定义1.2（规划等价类≈）. 规划p和q属于同一规划等价类（记作p≈q）当且仅当pE=qE,pC=qC.
　　属于同一规划等价类的规划可以合并表示为一个类规划图,规定其中最左子规划图的优先级最高,向右依次降低,并且优先级可以动态调整（规划的成功执行使自身的优先级增加,反之则减少）.
2 静态继承
　　当通过静态继承从Agent父类产生子类时,子类可以增加新的或取消父类中已有的信念、目标和规划,也可以修改或重定义父类的规划.但新增加的信念和目标可能与父类的信念和目标存在矛盾,新定义的规划若与父类的规划同属一个等价类,也存在尝试执行的先后次序问题.按照信念修正的观点,由于新知识获取的途径已经过严格审视,从而是可以确信的.因此,当新旧知识存在矛盾时,总是放弃那些旧知识中与新知识矛盾的部分,这与开放逻辑［8］中信息的非单调更新思想也相吻合.据此可以解决父类与子类之间信念和目标的矛盾.而对属于同一等价类的父子规划的优先级问题存在不同观点.Crnogorac认为,父类的行为总能经过严格证明是正确的（规划总能正确执行）,而子类的行为尚未确定,如果优先采用子类规划可能导致失败（在高安全实时系统中不能回溯）.但是,通过继承后,父类中经过验证为可靠的行为在子类的环境中能否可靠运行？文献［9］指出,继承并不能简化验证,反而使验证工作复杂化.因此,对高安全实时系统中能否赋予Agent继承特性存在置疑.而在允许失败重试的应用中,赋予子类规划以高优先级在实现上是可行的,在效率上也是必要的,因为与父类规划相比,实现同一行为的子类规划在算法上可以针对子类的新特性进行优化.为此,我们采用赋予子类规划高优先级的方法.
　　定义2.1（静态单继承的语义）. 设〈 〉是〈 〉的子类,在类B的规范中,若其知识新定义集为;信念取消集和新定义集为和;目标取消集和新定义集为和G;规划取消集和新定义集为和,记(+和-分别表示集合的并、差运算）,则和可根据下列约束,从和得到:
　　(1) 若;
　　(2) 若;
　　(3) 若则（表示规划的优先级关系）.
　　例2.1:在一个电子市场系统中,Bob的计算机上有一个Agent软件aide可为其提供娱乐代理服务.aide接受Bob的指令并进行目标分解,然后进入电子市场与其他Agent（餐饮代理、影视代理等）会晤协商,电子市场则为各Agent提供调度等服务.设在Bob-aide的规范中分别定义了={k1,k2},其中k1表示“工作日不能娱乐”,k2表示“星期一～星期五是工作日”;={b1,b2,b3},其中b1表示“主人喜欢流行乐”,b2表示“主人不爱科幻片”,b3表示S(Master),即“主人喜欢看晚报”;={p1,p2,p3},其中p1进行电影票预订,p2进行餐馆预约,p3进行报纸预购;={g1},g1表示“星期日看一场电影,然后在附近吃顿晚餐”.
　　Alice可以通过继承Bob-aide生成自己的娱乐代理Alice-aide.若Alice不喜欢流行乐,不喜欢看晚报,喜欢摇滚乐（b4）,星期日去听音乐会(g2),并且在Alice-aide的规范中定义信念取消集为{b1}和信念新定义集{～b1,～b3,b4},目标取消集为,目标新定义集为{g2},规划取消集为,规划新定义集为{p4}（p4用来订音乐会门票）,则静态继承后Alice-aide的规范为={g1,g2}.在Alice-aide的信念集和目标集中存在不一致,根据定义进行修正后,
　　在多继承时,为了对信念和目标进行一致化处理,我们采用在子类中记录信念和目标的继承来源的方法.例如,类B的信念b(v)在其子类A中变为b(A,b(B,v)).
　　当父子信念（目标）集不一致时,以满足子类信念（目标）为前提,去除父类信念（目标）集中与其矛盾的部分.主要问题在于两个父类的信念（目标）集存在矛盾时如何处理.我们知道,Agent的多继承是为了实现知识、信念和规划的共享以及功能上的互补.但当一个Agent类具有两个以上父类时,行为性质的增加必然降低其规划调度和执行的效率.由于在实际应用中一个实体通常存在主要功能和辅助功能之分,为了提高Agent解决问题的效率,有必要为其父类划分出优先级,在其能够满足自身新定义的行为性质和优选父类的行为性质的前提下,再考虑满足其他父类的行为性质（在动态继承中,根据不同行为性质具有不同优先级这一特点,可以通过择优分割,产生多个Agent实例,从而有效地提高Agent的快速反应能力）.在静态规范中,用pre(B)表示B是优选父类,我们有如下定义.
　　定义2.2（静态多继承的语义）. 设〈 〉是(1≤i≤k)的子类,其他说明同定义2.1.记,则和可根据下列约束,从和得到:
　　(1) 若,如果有,则有（同级父信念相悖时,取消非优选父类的信念）;
　　(2) 若,如果有,则有（同级父信念相悖时,若均非优选父类,则同时取消）;
　　(3) 若,如果有,则有（父子信念相悖时,取消父信念）;
　　(4) 若,如果有,则有（同级父目标相悖时,取消非优选父类的目标）;
　　(5) 若,如果有,则有（同级父目标相悖时,若均非优选父类,则同时取消）;
　　(6) 若,如果有,则有（子类目标优先）;
　　(7) 若,则;若,并且有pre(Aj),则.
　　例2.2:设Bob的计算机上有另一个Agent软件Bob-meeting可为其提供会议日程安排及代理服务.在Bob-meeting的规范中定义了={k3,k4},其中k3,k4表示有关会议的常识;={b4},b4表示,即“开会时不能看报”;={p4,p5},其中p4表示进行会议室预订,p5与Bob-aide的p2一样,也表示进行餐馆预约,但因为是集体用餐,需要从特殊的帐号上结帐;=.现在Bob要继承Bob-aide和Bob-meeting,生成一个娱乐性会议代理Bob-shedule,设Bob-shedule的初始规范,g3表示“星期日开会”,则通过静态多继承后,Bob-shedule的规范为.由于b4与b3存在矛盾,因此应删除b3,={b1,b2,b4}.由于g1和g3存在时间冲突,根据子类目标优先的约束得到={g3}.由于p5与p2属于同一规划等价类,根据子类规划优先的约束,p5的优先级比p4高,只有p5执行失败后才能尝试执行p2.
3 动态复制行为
　　在多Agent系统中,个体Agent之间存在着功能互补关系,当个体Agent不具有某种能力时,就需要与其他Agent进行协商和协作.如果不进行负载均衡,必然会导致某些Agent负载过重,而有些Agent长时间处于空闲状态.对此通常有两种解决途径,一是在多Agent中设置具有路由、协调功能的Facilitator,在Facilitator中记录各局部Agent的能力信息,由Facilitator动态控制各Agent的任务分配.但Facilititor本身可能成为系统的瓶颈,如果Facilitator出现运行故障,则整个多Agent系统可能无法正常工作.另一种方法就是,当一个Agent负载过重时,允许该Agent进行自我复制,从而生成多个并发运行的Agent实例.我们将Agent的自我复制行为看做Agent的动态继承.这种利用Agent动态继承来进行负载均衡的方法不依赖于外部因素,充分体现了Agent的自治性,是一种较好的解决方案.
　　Agent的自我复制涉及到其信念集、目标集及规划集的处理.我们根据多Agent系统的特点及实际需要将Agent实例的复制机制划归为4种方式.设a为Agent类A的实例,我们有如下定义.
　　定义3.1（功能分割）. 设（pj(1≤j≤k)是Agent实例a的服务簇）,ai(1≤i≤n)是a的功能分割,如果满足(1≤l≤m≤k).当l=m时,每个ai(1≤i≤n)只负责执行一个服务簇中的功能.
　　以服务簇为单位进行分割可以保证规划的完整性,以避免实现1个功能需要多个ai协作的情况.例如,若p1={p1,p2},在规划p1中调用了子规划p2,如果进行功能分割时将p1和p2分别赋予a1和a2,则每次执行p1时都需要与p2协作,反而降低了Agent的反应速度.
　　对a进行功能分割时,为了保证ai之间协作的平滑性,ai应全部继承a的信念集和目标集.当然,视具体情况也可以部分继承,这需要在具体实现时在Agent的个体反应能力和解决问题能力上进行折衷.分解后的操作集越小,该Agent的个体反应能力就越强,但自身解决复杂问题的能力也就越低,对协作的要求则越高.
　　定义3.2（逻辑分割）. 设a的信念集（Bj(1≤j≤k)是具有逻辑封闭性的信念子集）,ai(1≤i≤n)是a的逻辑分割,如果满足(1≤l≤m≤k).当l=m时,每个ai(1≤i≤n)具有最小的协调信念集.
　　以具有逻辑封闭性的信念子集为单位进行逻辑分割,也是为了避免因自身信息不足而需要频繁地向其他Agent询问的情况.例如,若B1={b1,b1→b2},如果进行逻辑分割时将b1和b1→b2分别赋予a1和a2,则当a2需要知道b2是否成立时,必须向a1或a询问b1是否成立,因而增加了不必要的协作.
　　逻辑分割的优点是每个实体的推理集减少,降低了局部推理的复杂性,有利于提高局部的执行效率.由于知识集中包括全域信息（网络拓扑知识等）,是个体Agent之间协作的前提,因此,在对a进行逻辑分割时,ai应当全部继承a的知识集.规划集可以全部继承,也可与功能分割相结合,同时减少Agent的推理集和操作集.
　　定义3.3（择优分割）. ai(1≤i≤n)是a的择优分割,如果满足a1...ai...
