面向Agent的软件设计模式
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CN 43 1258/T P ISSN 1007 130X
计算机工程与科学
COM P U T ER EN GIN EERIN G &SCIEN CE
2011年第33卷第6期 Vo l 33,N o 6,2011
文章编号:1007 130X (2011)06 0072 07
面向Agent 的软件设计模式
*
Agent Oriented Softw are Design Patterns
毛新军,常志明
MAO Xin jun,CHANG Zhi ming
(国防科学技术大学计算机学院,湖南长沙410073)
(School of Computer Science,National University of Defense Technology,Changsha 410073,China)摘 要:设计模式针对一类在特定上下文中反复出现的问题给出了通用解决方案,模式的提取和重用有助于提高软件开发的效率和质量,其思想和方法已在面向对象软件工程中得到广泛应用和验证。
我们认为同一问题采用不同的实现技术往往具有不同的设计形态,不同软件开发范型也有其各自不同的设计模式。
作为一种新颖的软件开发范型,近年来面向A gent 软件工程的研究取得了长足进展,如何提高软件Agent 技术实用性,发挥其技术潜力,扩大其应用范围成为当前人们关注的焦点。
本文将模式思想引入到面向Ag ent 软件工程,针对软件Ag ent 技术的特点,从组织结构、交互协作和个体Agent 体系结构三个视点提出了一组面向Agent 的软件设计模式,以支持多A gent 系统的设计;并进一步给出了面向Agent 设计模式的描述框架,进行了典型设计模式和应用案例的分析。
Abstract:Design pattern g iv es g eneral solutio ns to the repeatedly occuring problems on certain co n tex ts.It has been w idely used in object oriented softw are eng ineering and pro ved to be helpful to im prov e the quality and efficiency o f softw are dev elo pment.We believe,the same design pattern w ill hav e various design details w hen ado pting differ ent implementation techniques,and different softw ar e devel o pm ent paradigm s have their design patterns.As a novel paradig m,ag ent o riented so ftw are engineering has made great progr ess.N ow adays,many focuses have been put on how to improve its practices and to ex tend its applications.In this paper,pattern appro ach is integrated w ith ag ent o riented softw are engi neer ing.Based o n the characteristics of the agent techno logy,a number o f agent oriented design patterns have been pr esented from m ultiple view points such as structure,collaboration and ag ent architecture.A description framewo rk fo r agent oriented design pattern is presented.An analysis of the typical agent o r iented design pattern and its applicatio n case is conducted.
关键词:Ag ent;设计模式;多Ag ent 系统;面向Ag ent 软件工程
Key words:ag ent;desig n pattern;multi ag ent system;agent oriented softw are engineering doi:10.3969/j.issn.1007 130X.2011.06.015中图分类号:T P311
文献标识码:A
72
*
收稿日期:2009 05 20;修订日期:2009 10 26
基金项目:国家自然科学基金资助项目(60773018)
通讯地址:410073湖南省长沙市国防科学技术大学计算机学院
Address:School of Computer Science,Nation al Un iversity of Defens e Techn ology,Ch angs ha,Hun an 410073,P.R.Chin a
1 引言
近年来,面向Agent软件工程的研究取得了长足的进展,人们提出一系列面向Ag ent建模语言、开发方法学、程序设计语言和支撑软件环境[1]。
然而,软件Ag ent技术并没有像人们所期望的那样为软件工程实践人员所接受并在工业范围内得到广泛应用。
究其原因,就是面向Ag ent软件工程的研究未能将软件工程中有效的技术手段与软件Agent技术相结合,从而在发挥软件A gent技术潜力的同时,使得软件开发人员能够继承以往的软件工程实践经验。
因此,如何将传统软件工程的有效技术手段(如MDA、模式、重用等)引入到面向Agent软件工程领域成为当前面向Ag ent软件工程研究的关注焦点之一。
文献[1]认为:对设计模式及软件重用的研究对面向A gent软件工程走向大规模的工业应用非常关键。
设计模式针对一类在特定上下文中反复出现的问题,给出了良好的、经过充分考验的设计实践。
模式思想和方法已经在面向对象软件工程中得到广泛的应用。
大量的软件工程实践表明,显式地定义和有效地使用设计模式可以显著提高软件开发的效率和质量。
文献[2]指出,在现有的各种收集和表述软件工程实践经验的技术中,模式是最为有效的技术之一。
因此,将模式思想与软件A gent 技术相结合将有助于丰富面向A gent软件工程的研究,促进软件A gent技术的工业化应用;发现和寻求软件Ag ent技术所特有的设计模式将有助于更好地挖掘软件Ag ent技术的潜力,促进面向A g ent软件工程的发展和进步。
随着Agent应用范围的不断扩大,人们希望能够借鉴面向对象软件工程中设计模式[3]的思想,对该领域反复出现的问题进行归纳总结,并给出实现方案,从而形成一组设计模式来指导多A gent 系统的设计和开发。
问题是模式产生的基础,同一问题采用不同的实现技术往往具有不同的设计形态,不同软件开发范型也有其各自不同的设计模式。
本文研究设计模式的问题来源有两类:
(1)面向对象软件设计所归纳和总结的问题。
尽管Gof等人提出的23种设计模式基于面向对象技术,但是其中一些问题在设计多Ag ent系统时同样存在,而且这些模式具有广泛的影响力,已被广大开发者普遍接受和熟知,应用模式产生的效果
也被大量开发实践所证实。
开发者对这些模式的学习、理解和使用积累了丰富的经验,对如何系统地使用模式来解决实际问题,也有深入的研究。
在此基础上开展面向Agent软件设计模式的研究具有一定的优势。
(2)面向Ag ent软件工程领域特有的问题及其设计实践。
作为一种新颖的软件开发范型,同面向对象相比,其中必然遇到许多新问题,本文对这类问题中的常见问题进行总结,从而形成了一组设计模式。
本文介绍了面向Ag ent软件设计模式的概念和思想,提出一组设计模式并对模式进行了分类,给出了面向Ag ent软件设计模式的描述模板,深入分析了典型的面向Ag ent设计模式,进行了应用案例分析。
2 面向Agent软件设计模式的基本
概念和思想
Agent是指驻留在某一环境下能够自主(A u tono mous)、灵活(Flex ible)地执行动作以满足设计目标的行为实体[4]。
与对象对数据和行为进行封装相比,Agent还封装了对自身行为的控制机制。
因此,它更加贴近人们对现实世界中行为实体的直观理解和认识,有助于对应用系统和软件系统中的行为实体进行自然建模。
面向Ag ent的软件开发将Ag ent作为软件系统的基本运行单元,每个Ag ent都是一个自主的行为实体,Agent之间通过结构相关性和行为相关性组成多A gent系统。
多Ag ent系统运行在特定的环境中,环境的变化引起系统执行动作,动作的执行又会进一步影响环境的状态。
表1对比了对象技术和A gent技术之间的差别。
表1 面向对象软件工程与面向Ag ent软件工程的对比分析
Agent技术对象技术系统构成自主的计算实体Agent
不具自主性的计算
实体对象
环境感知主动感知环境变化被动感知环境变化
结构关系社会性关系关联、继承等
协作实质基于知识和语义的交互基于语法的交互
协作结果不确定、不可预测确定、可预测
模式思想最早来自建筑学领域。
Alex ander 针对建筑学指出: 每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。
这样,你就能一次又一次地使用该方案而
73
不必做重复劳动 [3]。
软件领域借鉴了这一思想,通过对设计软件系统存在的常见问题及其解决方案进行记录,产生了软件设计模式。
面向Ag ent的软件设计模式针对软件开发中存在的常见问题,使用基于面向Ag ent软件开发范型的技术手段给出问题的解决方案,并对模式解决的问题,问题上下文、解决方案等元素进行详细规范的记录。
通过与面向对象设计模式进行对比,能够帮助理解面向Ag ent软件设计模式的特点:
(1)针对问题:面向对象设计模式解决设计面向对象系统时经常遇到的问题。
面向Agent软件设计模式解决的问题有两类:
其他软件技术存在的设计问题,这类问题独立于实现方法。
对这类问题给出基于Agent技术的解决方案并与使用传统技术的解决方案进行对比,能够帮助我们认识Agent技术的优点和不足。
该领域特有的问题,作为一种新颖的软件开发范型,面向Ag ent软件开发必然会遇到许多新的问题需要解决,例如A gent如何感知环境,A g ent之间如何交互,如何通过协作实现问题合作求解等等。
(2)解决方案:根据表1的对比分析,面向A
g ent软件开发技术与面向对象软件开发技术在计算模型的抽象、运行实体、交互本质和环境感知等方面都有本质性的差别,因而在问题解决方案上,两类系统具有不同的设计结构和细节。
表现在以下方面:
解决方案的基本成分不同:前者使用A g ent、角色等一组概念描述解决方案,后者使用类和对象等一组概念。
文献[4,5]对Ag ent特性进行了详细介绍。
实体间存在的结构关系不同:同对象技术之间存在的继承、关联和依赖等结构关系相比,A g ent之间存在着更为复杂的结构关系,根据主体扮演的角色以及不同角色之间的相互关联性,主体之间存在各种宏观性结构关系,如管理、合作、对等、竞争等。
交互方式不同:对象之间通过发送消息进行的交互本质上是语法层次上的方法调用;Ag ent之间的消息是在语义和知识层面上进行的交互。
从交互的结果来看,对象间的消息引起方法的执行, Agent则可以自主地对消息做出不同的回应(如接受、拒绝、不理解消息内容等)。
职责分配不同:在对象技术中,消息发送方对消息的格式、内容、消息接收方地址和动作的执行等负责;在Ag ent技术中,则是由接收方负责消息内容的理解和相应动作的执行,因此两种技术在实体职责分配上存在不同。
(3)模式研究的成熟程度:面向对象设计模式的研究已经比较成熟;面向Ag ent的软件设计模式研究还处在发展中,对模式的分类方法、描述模板等还没有统一的认识,部分常见问题的解决方案也还在研究中。
(4)应用范围和接受程度:面向对象模式已经被开发者普遍接受和熟知,模式基础上开发的应用框架已在工业界得到广泛应用。
面向Ag ent软件模式还没有得到广泛应用,也没有应用框架供开发者使用。
3 一组面向Agent的软件设计模式
及其分类
本节提出一组面向Agent的软件设计模式,并对这些模式进行了分类归并(如表2所示),以方便开发者选择需要的模式,同时也为发现新的模式提供了框架:
(1)组织结构型模式:该类型模式旨在解决构建多A gent系统组织结构方面存在的常见问题。
在组织中,每个Agent扮演着特定角色、起着特定的作用、实施着相应行为[1]。
角色之间通过各种社会性关系进行连接,Agent根据扮演角色的差异以及不同角色之间存在的关系形成组织拓扑结构。
该类型模式解决的典型问题有:组织的拓扑结构对解决问题的影响;如何实现不同类型系统的互联;如何连接Ag ent个体或Agent子系统以形成更大的组织结构等。
(2)交互协作型模式:该类型模式旨在解决如何实现、保持或方便Ag ent之间的交互,如何通过协调不同Ag ent之间的行为从而达到消除冲突,提高系统运行性能和实现复杂问题合作求解的目的。
由于Ag ent技术本身的特点,导致它们的交互协作要比传统的面向对象复杂,由此也产生了许多新的问题。
例如,Agent由于移动改变了自身位置后,如何保持交互;如何避免Agent之间协作时的欺诈行为等。
(3)个体Ag ent模式:该类型模式关注个体A gent内部体系结构设计中存在的常见问题。
例如,Agent如何感知外部环境;如何根据自身状态执行不同的动作;Ag ent与角色之间的对应关系
74
等。
表2 面向Ag ent设计模式的组织分类关注点
问题来源
Agen t领域面向对象领域
组织结构型共享资源计数器适配器模式门面模式
交互协作型竞争模式
目录模式
主从模式
协调者模式
合同网模式
环境媒介模式
个体Agent模式环境感知模式状态模式单件模式
3.1 组织结构型模式
(1)共享资源计数器:该模式旨在解决如何使多Agent系统及时释放不再使用的共享资源的问题。
一方面,共享资源被多个Ag ent使用,只有当所有Ag ent都不再使用该资源时,才能够释放,过早释放资源会导致部分Ag ent的任务无法完成;另一方面,资源释放要及时,一旦确定不再有A g ent使用资源时,需要及时地释放,这对于提高系统运行性能和稳定性起着重要作用。
解决这一问题的基本思路是给资源设置一个计数器,用来记录当前使用该资源的Agent数目,当有新的A gent 使用资源时,计数器加一,反之则减一。
当计数为零时,表示不再有Ag ent使用该资源,此时可将资源释放。
对于频繁使用的共享资源,可以将其释放到资源池中,方便下次使用。
(2)适配器模式:该模式旨在解决由于消息格式不匹配导致的Agent之间无法交互的问题。
A g ent之间通过消息实现交互,消息的格式和内容必须符合特定的规范,如FIPA ACL或KQML,才能保证消息被接收方理解。
适配器模式将一个不符合消息规范的Agent进行包装,从而使其能够与其他Agent进行通信。
另外,还可以使用该模式将对象系统包装为Ag ent来实现对象系统跟A
g ent系统之间的交互。
(3)门面模式:该模式旨在降低客户Agent与子系统之间的耦合度。
模式将Ag ent子系统提供的服务抽象为一个高层接口,从而使得客户能够以简单一致的方式请求子系统提供的服务,实现客户与子系统的解耦,方便客户对子系统的使用。
该模式包括门面Agent和Agent子系统。
门面A gent 记录子系统能够对外提供的服务,当客户需要请求子系统完成某项任务时,首先将请求发送给门面Agent,再由门面Agent将请求转发给子系统中对应的Ag ent。
3.2 交互协作型模式
(1)竞争模式:该模式旨在防止A gent之间进行协作时,某一A gent出于自身利益的考虑欺骗其他A gent。
例如,商品交易中,卖方Ag ent通过抬高商品价格来增加收益。
解决方案是借助经济学中的竞争机制。
仍以商品交易为例,当有多个卖方Ag ent时,它们之间由于存在竞争关系,卖方会采取降低商品价格的方法提高竞争力。
(2)目录模式:该模式旨在实现A gent之间交互的位置独立性。
具体细节见5.1节。
(3)主从模式[6]:该模式旨在解决如何将复杂任务分解为一组子任务,并交给相应的Agent去完成。
模式由一个主Agent和若干从Ag ent组成,主Agent将任务进行分解后分配给一组从A gent,并对各个从Ag ent执行任务时存在的约束进行定义。
从A gent执行完任务后,将结果通知给主Ag ent,主Agent通过对执行结果进行汇总形成问题的解决方案。
(4)协调者模式:多个参与者通过合作实现复杂任务的求解是多Agent系统中一种常见的现象,每个参与者根据自己的能力、权限等因素完成部分任务。
在有些情况下,由于子任务之间存在的相关性或其他因素,要求参与者或者全部成功执行子任务,或者一项子任务都不执行,即以事务方式对复杂任务进行求解。
这种合作求解模式在数据库系统等领域有着广泛应用。
协调者模式针对上述问题给出了解决方案,该模式存在一个协调者Agent和一组参与者A gent,它们之间以如下方式进行交互:
协调者发送执行任务的请求给所有参与者;
参与者自主地决定是否同意执行任务;
当所有参与者都同意执行任务时,协调者将任务提交给各个参与者,否则交互结束;
参与者首先保存当前状态,从而可以使参与者恢复到原先保存的状态,而后开始执行任务;
参与者执行完任务后将任务执行是否成功的消息发送给协调者;
如果所有参与者全部成功执行自己所属的任务,则任务求解完成,协调者发送任务求解成功的消息给参与者,参与者修改自身状态并将结果发送给协调者;
只要有一个参与者任务执行失败,则整个任务求解失败,此时协调者发送失败消息给参与者,参与者收到该消息后恢复到任务执行前保存的状态。
75
(5)合同网模式[4,7]:该模式将任务交由一组
任务执行者来完成,并汇总和形成任务求解的结果。
模式包括一个负责发布任务的管理者A gent 和若干负责执行任务的Ag ent。
管理者在将任务交给执行者之前,对所有执行者执行任务的性质(如所需资源、执行速度和代价等)进行评估,从而选择将任务交给最为合适的执行者。
这确保了任务的成功执行并使管理者能够获得尽可能高的利益。
(6)环境媒介模式:该模式描述了如何让一组Agent通过与环境进行交互来实现彼此间的协作。
问题产生的上下文是当系统中存在大量Agent需要频繁协作时,如果让A gent之间通过直接的两两交互进行协作会增加系统通信量和个体A gent 结构的复杂度,相应地降低了软件的可复用性和可扩展性。
环境媒介模式将环境作为Ag ent之间进行协作的中介,通过Ag ent改变环境和其他A gent 感知环境的变化来实现它们之间的协作。
该模式的基本思想来自Gof提出的中介者模式。
环境实体在该模式中充当中介者角色。
3.3 个体Agent的模式
(1)环境感知模式:该模式旨在解决Agent如何感知环境的问题。
问题产生的上下文是A gent 需要根据获取的环境信息来决定执行何种动作。
问题的解决方法是:应用Agent负责处理业务逻辑,它与环境Agent进行交互来获取环境信息;环境Agent的信息来自传感器Agent,传感器A gent 负责与物理环境打交道,收集环境信息,响应环境Agent查询信息的请求。
(2)状态模式[3]:该模式旨在解决如何使A
g ent在其内部状态发生变化时改变自己的行为方式的问题。
解决这一问题的基本思路是在A gent 内部设置一个动作决策部件,该部件描述了内部状态和执行行为的对应关系。
Agent根据当前所处状态,查找动作决策部件中对应的条目获知需要执行的动作。
(3)单件模式[3]:该模式旨在确保一个多A
g ent系统中,某角色只能由一个Agent扮演。
例如,在公司系统中,只能有一个A gent扮演总裁角色。
这个模式反映了角色和A gent在数量对应关系上存在的约束。
除了该模式描述的一对一映射外,还有其他反映角色与Agent在数量关系上的约束,例如某个角色只能被特定数量的A gent扮演等等。
4 面向Agent软件设计模式的描述
模板
设计模式描述模板从多个侧面捕捉一个模式的特征。
规范适当的模板对于促进开发者之间的交流,方便开发者在实际应用中选择合适模式来解决自己的问题起着重要作用。
模板除了记录问题和问题的解决方案外,还应该对问题产生的上下文,促使模式产生的驱动力以及使用模式达到的效果等因素进行分析和记录,这样才能够方便开发者理解和选择需要的模式。
综合以上考虑,本文采用表3给出的模板描述面向Ag ent的软件设计模式。
表3 设计模式描述模板
域解释
模式名称
别名
问题
上下文
驱动力
解决方案
效果
对该模式本质思想的概括
该模式其它可能用到的名字(可选)
模式解决的问题
问题和解决方案产生的前提和背景
问题的哪些方面推动了该模式的开发和使用
对如何解决设计问题的描述,不同类型模式的解
决方案存在不同
使用该模式的效果以及该模式对系统其它部分
设计的影响
5 典型模式及其应用分析
本节针对第3节提出的设计模式,以目录模式为例,对其进行了详细描述。
给出一个应用案例,分析了如何使用设计模式解决实际问题。
5.1 典型模式分析
名称:目录模式[7,8]。
别名:无。
问题:如何实现Agent之间交互的位置独立性。
上下文:当Agent交互时,消息接收者Agent 的位置发生变化后,发送者Ag ent需要定位消息接收者新的位置,从而保证交互的进行。
驱动力:(1)解决方案应该是高效的,采用广播的方式虽然可以解决问题,但是会占用大量通信资源,比较低效;(2)应用程序开发者不需要关注A gent位置变化对程序的影响。
解决方案:设计一个目录Ag ent和一个负责管理系统中所有Agent的IDM anager Ag ent。
ID Manager Ag ent向加入系统的Ag ent分配一个唯
76
一的ID 号,目录Agent 记录Ag ent 的ID 号和地址。
当一个Agen 发送消息给另一个Ag ent 时,根据ID 向目录Agent 发送查询请求获得相应的地址。
(1)结构:如图1
所示。
图1 目录模式的结构示意图
(2)参与者:
ID 管理者Agent:为加入系统的A gent 分配唯一ID 号;
目录Agent:记录ID 与地址的对应关系,当Agent 地址改变后需要将新的地址发送给目录A g ent;
消息发送者Ag ent:发送消息给接收者; 消息接收者Ag ent:接收消息。
(3)交互协作(如图2所示):
参与目录模式的Ag ent 按照以下方式进行协作:
消息接收者向IDM anag er Ag ent 注册获得唯一的ID 号;
接收者将ID 和地址发送给目录Agent; 消息发送者根据接收者的ID 号向目录模式查询消息接收者地址;
发送者根据获得的地址发送消息给接收者。
图2 目录模式的交互示意图
效果:
(1)高效性:同使用广播的方式相比,目录模式能够降低发送消息的数量,节约通信资源。
(2)透明性:通过将查找Agent 位置的过程封装为系统提供的基础服务,开发者只需指定进行交互的Ag ent 的ID,不需要关注Agent 的具体位置
以及位置是否发生变化。
(3)该模式存在的不足是,目录A gent 可能成为系统的瓶颈,一旦出现故障会导致整个系统无法正常工作。
应设法提高目录Ag ent 的可靠性。
5.2 典型应用分析
本节通过一个综合案例来说明模式如何指导多Ag ent 系统的设计。
案例模拟机器人清理垃圾。
案例描述:有多个负责清理垃圾的机器人在某区域内随机移动;区域内会随机产生垃圾;垃圾管理者监视区域内的垃圾状况,当有垃圾产生后,管理者挑选距离垃圾最近的机器人去清理垃圾;机器
人移动到垃圾处进行清理;移动时,要避免机器人之间发生碰撞。
该案例存在两个问题:(1)如何避免机器人移动时发生碰撞;(2)垃圾管理者如何选择合适的机器人清理垃圾。
对于问题(1),一种解决方案是让每个机器人将其他机器人作为自己的环境,感知它们的位置信息。
这会导致如下问题:某机器人移动后,或者有机器人加入或退出该区域后,其它机器人都要感知新的状态并更新环境信息,当机器人的数量较大或移动频繁时,这会带来较大的计算开销和通信开销。
使用协作型模式中的环境媒介模式能够有效解决上述问题:将机器人所处的区域作为系统的环境,环境记录所有机器人的位置信息,当某个机器人需要移动时,通过感知环境即可获得其他机器人的位置信息,进而对运动路径作出选择并进行移动,移动后修改环境信息。
对于问题(2),可以使用合同网模式。
垃圾管理者扮演合同网中的管理者角色,机器人扮演执行者角色。
当发现有垃圾后,管理者发送CFP 消息和垃圾的位置信息给所有机器人,机器人收到该消息后,计算清理垃圾的代价(这里可以认为代价是机器人与垃圾之间的距离),并将该消息发送给管理者。
管理者选择最合适的机器人对垃圾进行清理。
6 相关工作对比分析
在面向Ag ent 软件工程领域,已有许多研究者从不同角度对设计模式进行了研究。
由于关注问题的角度不同,这些模式在应用目的、分类准则和描述模板等方面都不相同。
代表性的工作有:
77。