Agent应用系统模板语言研究

时间:2022-10-25 12:32:04

Agent应用系统模板语言研究

摘要:为了有效地构造可靠、便于维护的多Agent系统(MAS),根据Grammarware的工程化思想与产生式编程技术,以基于黑板的单Agent结构为基础,提出一种Agent模板语言(APL)。通过一个企业业务过程管理(BPM,BusinessProcessManagement)场景,说明在应用中如何使用APL描述Agent中针对具体应用的数据类型、知识源组件等,并由解析器将APL转换为JADE上的执行代码,进而实现多Agent系统的快速构建,实现MAS自顶向下的开发,从而提高系统开发的效率,增强系统的灵活性与可复用性。

关键词:Agent模板语言;多Agent系统;产生式编程;Grammarware;黑板;JADE

中图分类号:TP311.52文献标识码:A

文章编号:1001-9081(2007)04-0868-04

0引言

基于Agent的计算被认为是一种新的软件开发的范式,在软件工程、分布式系统开发和智能系统开发上都能够发挥重要的作用。为了构建可靠、有效的基于Agent和多Agent系统的应用,研究人员提出了很多方法学与建模方法。例如在方法学方面的AAII方法学和Gaia方法学等;在结构方面包括慎思、反应以及混合等一系列结构。

尽管研究人员提出了很多Agent的结构和一些方法学来构造面向Agent的系统,但是这些方法多基于传统的面相对象分析/设计(OOA/D),有些采用静态、非分布软件结构的建模,不符合Agent所处的动态分布环境;有些结构较为复杂,且一般集中于对单个系统的设计,缺乏针对不同应用的灵活性,使得在Agent开发中针对不同应用进行了大量重复工作,降低了开发效率。

借鉴Grammarware的工程化[1]与产生式编程[2]思想,基于以黑板系统为基础的单Agent结构,提出了一种称为AgentPatternLanguage(APL)的模板语言[3],用来在较高的层次上抽象描述Agent中针对具体应用的数据类型、知识源组件等,并由Agent解析、转换为执行代码,通过这种方式,实现对于Agent与MAS自顶向下的构建,从而提高系统开发效率,增强系统灵活性与可复用性。

1基于黑板系统的Agent结构

APL语言主要针对基于黑板的Agent结构[3],由黑板存放Agent的运行信息,与知识源相互协作完成特定的功能,整个Agent负责由APL文件生成可执行代码,完成APL说明的目标。根据文献[1]中作者对于Grammarware进行工程化开发的原则,以APL定义的语法作为base―linegrammar,进而通过定制APL文档,描述Agent知识源等组件;同时基于黑板的Agent结构借鉴产生式编程的思想,解析APL文档,最终实现为针对具体应用的系统。同时可根据不同的知识源运行策略来实现反应型或慎思型Agent的特点,从而增强Agent的灵活性和复用性,提高针对不同应用的Agent的开发效率。图1是基于黑板的Agent结构。

1.1Agent结构

1.1.1黑板与知识源

黑板是Agent的全局数据库,主要包括数据对象结构与子句对象结构两部分。

数据对象结构是由一组有限数据对象类型的实例构成的集合。数据对象类型用来描述一类数据对象,包括一个类型名和属性集合,其中属性用来描述数据对象的特征,一个属性定义包括属性名与属性类型。

3)前提条件PreCondition是一个布尔表达式,由条件语句以及关系实例构成;

4)后置条件PostCondition是一个集合,包含在知识源运行完毕后需要更新黑板上的数据对象及子句对象实例。

1.1.2消息相关知识源和规划库

知识源MessageInput负责Agent与其他Agent之间的消息收发,而知识源MessageHandle负责处理接收到的消息。此外还有一些其他的模块支持Agent的运行。

当MessageInput接收到一个外界到达的消息后,将其放在缓冲队列中,并通过事件通知MessageHandle。MessageHandle收到消息后,就等待ControlContext选择。被选中执行后,MessageHandle根据运行中的目标结构与规划从缓冲队列中选择消息,根据消息内容更新黑板变量。各目标结构在运行中所需要发送的消息也放在缓冲队列中。MessageInput监测到缓冲队列中有消息要发送,就等待ControlContext选择,选中后将队列中消息发送出去。

为了在实际应用场景中支持MAS的开发与运行,基于黑板的Agent是在JADE[4]平台上实现的。Agent之间利用ACL(AgentCommunicationLanguage)进行通信,MessageInput、MessageHandle知识源负责消息的处理。这里采用集中的消息处理是为了避免GoalStructure知识源各自进行消息收发可能带来的错误,并且可以根据需要用恰当的消息更新黑板。

此外,知识库Knowledge存放Agent运行所需的一些全局知识,而规划库PlanLibrary中存放用于不同目标结构的规划。规划由名称、objective(规划针对的目标结构名)、PreCondition(规划执行所要满足的条件)、优先级以及规划体组成,规划体采用确定有穷状态自动机DFA表示,其中状态之间的转换由一组Transaction(一组完成一定功能的动作)和GoalStructure组成。根据Agent运行的上下文,Plan选择不同的状态转移,最终达到终结状态,完成规划执行。

1.1.3控制机制

根据上面的介绍,ControlContext协调不同的知识源协同工作完成特定的目标,其中由议程表Agenda变量控制知识源的执行。每个目标结构知识源有一个初始的优先级,而MessageHandle和MessageInput的优先级最高。当Agenda打开时,ControlContext选择处于Active的知识源准备运行,选定后关闭Agenda。如果MessageHandle或MessageInput被选中则执行相应的功能。若某个GoalStructure被选中,如果该目标结构是首次执行,那么根据Agent当前的环境上下文,从PlanLibrary选择一个合适的Plan;如果目标结构已经选定了Plan并已经开始执行,那么就根据Plan当前的状态与环境上下文选择状态转换(可能是Transaction或GoalStructure)执行一步(如果选中子目标GoalStructure,则保存当前目标,先执行子目标)。当MessageInput、MessageHandle完成处理,或GoalStructure执行完一步,打开Agenda,开始下一轮选择。控制过程参见图2。

当ControlContext连续选中同一个目标执行的时候,其优先级相应增加。而有时候因为环境的动态变化,一个高优先级的GoalStructure会打断当前正在执行的GoalStructure。可以通过指定不同的策略决定GoalStructure之间的竞争策略,使Agent在对于环境的反应性和对目标的坚持性上做出平衡。

2APL与场景示例

2.1Agent模板语言APL

前面介绍的Agent结构,在针对不同的应用时,需要不同的配置信息,如针对于特定应用的数据类型、规划、不同目标结构的调度策略等,这些信息可以通过APL语言来描述。目前APL主要描述应用场景中的三方面内容:1)表达数据对象类型,子句对象类型以及它们的实例;2)描述目标结构知识源,包括目标名,输入变量集,前提条件,优先级等内容;3)描述针对不同目标结构的规划的相关信息,包括规划名,Objective,规划体,前提条件等。这里采用XML进行表达,因为XML具有较强的适应性,并且可以简化编译/解释器的构造。

从图1可以看出,Agent中有一个APLParser解析器部件。Agent在运行中与具体应用相关的知识,包括各种数据对象实例、子句对象实例、GoalStructure的实例、规划Plan的实例等,都编制在APL文件中,在Agent初始化时由APLParser解析APL文件,并生成各种实例的对象,而后Agent按照上面介绍的Agent各个部件的运行机制,完成指定的目标。

2.2场景描述

这里采用一个企业业务过程管理的场景来说明基于黑板的Agent结构与APL结合如何实现特定的目标。利用MAS进行业务过程管理,将业务过程委托于不同的Agent。Agent通过对环境的观测和与环境的交互,根据环境和业务策略,可以对业务过程管理中动态的变化做出实时、甚至预动的反应,展现出目标导向的特点[5]。

考虑如下场景。某汽车制造商由若干部门组成:几个生产车间(用AD表示);几个市场部门(MD),其中每个市场部门负责处理一个地区的订单;一个调度部门(SD),调度部门主要负责为生产车间制定生产计划。当有新订单到达时,SD要根据到达的订单以及当前已经制定的生产计划生成新的生产计划,并发送给各AD。此外,AD可能因为故障等原因,不能按期完成计划,将这个情况发送给SD后,SD要修改当前生产计划,并将修改后的计划发送回各AD。场景描述以及消息往来示例参见图3。

2.3场景实现

这里从调度部门的角度进行分析。假定每个部门或生产车间都有一个Agent。生产部门的Agent负责接收生产计划与异常情况的发送,市场部门的Agent负责向SD发送订单,并接收对订单的确认。这些Agent构成一个MAS,Agent之间相互通信,通过交换数据与控制信息来协同生产过程。

首先,要用APL表达与生产过程控制相关的关键信息。对于SD,应该在黑板上记录如下信息:MD发送过来的订单信息;为每个AD制定的生产计划信息;AD发送过来的异常信息。根据前面的形式化定义,APL要表达出这些信息涉及的数据对象类型,每个类型的实例,所用到的关系以及关系的实例等。下面的代码展示了订单类型的定义。程序前

注意这个目标结构的输入变量集分为三组,每组的成员分别针对不同地区的订单,当有一个订单到达,按照1.1.1中介绍的方式触发该知识源。在ControlContext允许该目标结构知识源的对象开始执行时,该对象在PlanLibrary中查找可以满足该目标结构的规划。下面的代码是用APL表达的规划Plan的示例:程序前

这个规划有三个状态,通过两个状态转换(< tr >标签)顺序连接起来。第一个状态转换是TransactionprocessOrder,判断到达的订单是否可以接受。第二个状态转换是一个子目标,根据前面的Transaction计算得到的结果,如果接受订单就计算新的生产计划,并放入发送队列;如果是拒绝订单,就生成拒绝订单的消息,并放入发送队列中。

图片图4SD、AD、MD间消息的交换与SDAgent运行控制信息

此外,场景中还需要一个目标结构以及对应规划来实现向AD发送生产计划的目标,和用于处理AD发送过来的异常信息的目标结构及对应规划。根据上面的设计,图4显示了场景的一个实现结果,由JADESnifferAgent显示了SD、AD和MDAgent之间的消息往来,以及SDAgent中GoalStructure与Plan等的执行情况。

2.4与相关研究的比较

上面的场景是一个较典型的模型,显示了在生产过程中存在的协作与竞争关系。整个过程需要各个部门(SD、MD、AD)互相交流,互相协调才能完成。而协作中也存在竞争关系,如不同目标由于优先级的不同而带来的竞争等等。要处理好这些竞争,需要设计比较完善的规划、调度算法,融入到Agent的运行中。

在文献[6]中提出采用基于黑板的Agent结构处理企业中过程计划与生产调度的生成。这里知识源处理生产调度/规划中出现的问题利用,以此提供灵活、用户导向的处理方式。但在面对不同企业不同的业务需求时,其知识源的编制需要根据具体的业务场景来编制,可能带来大量的重复工作,缺乏APL与黑板Agent结构结合带来的灵活性。

在由汉堡大学开发的JADEX中[7],采用了Agent定义语言(AgentDefinitionLanguage,ADL)描述Agent运行时需要的内容,包括所需的对象和变量等。通过这种方式能够给针对不同应用场景的Agent的开发带来一定灵活性。但是其描述文件的抽象层次比较低,文件定制不够方便,而APL可以借助一些工具,使系统设计人员能够方便的生成APL文件,提升开发效率。

3结语

在基于Agent与MAS的系统中,利用模板语言APL从应用场景中抽象出数据类型和组件等的描述,自顶向下完成MAS的开发。一方面,增强了Agent针对不同应用场景的适应性,以及Agent的可维护性与健壮性,另一方面也提高了Agent开发人员的开发效率。在给出的场景中,它使得部门更加适应内部组织以及来自市场的变化,为业务过程管理提供更大的灵活性。在进一步的工作中,可以借鉴WebService研究中的成果,扩充APL的定义,包含更加复杂有效的业务流程描述;在Agent中引入较为复杂的控制机制,提升Agent的性能;也可以采用本体等方式来丰富黑板上所记录信息的语意内涵。

致谢感谢赵飞、王辉、张卓博的协助,特别感谢李铁,他的工作是我们的工作的基础。

本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。

上一篇:关联规则相关性的度量 下一篇:基于自动机模型的构件集成软件测试要素的提取