污水处理智能化系统的Multi-Agent通信技术与实现
扫描二维码
随时随地手机看文章
1 基于Multi-Agent的污水处理分布式智能化系统
基于Multi-Agent的污水处理智能化系统模型结构如图1所示。系统中每个Agent根据环境信息完成各自承担的工作,多个Agent分工协作,形成一个有组织、有秩序的群体,共同完成特定的任务。
执行Agent位于现场层,实现参数采集及现场控制的功能;冲突消解Agent是该智能化系统的核心,其功能是通过对任务规划信息、故障信息、系统状态信息以及其他Agent的协作请求信息等的融合,对 Agent行为所产生的冲突进行消解;数据服务Agent的功能是为其他Agent提供统一、灵活的访问实时数据库的接口;软测量Agent的功能是通过易测变量与难测变量之间的数学关系,实现难测变量的测量;故障诊断Agent是一个专家系统,可对污泥膨胀、污泥解絮、曝气池泡沫等故障现象进行诊断,并提出解决对策。
Agent间相互交换信息、进行协调或合作、解决超出单个Agent能力或知识的问题,并真正具有社会性的关键是Agent间可以通信。因此, Agent通信是Multi-Agent系统研究的重要问题之一。
2 MAS的通信语言
Agent通信语言(Agent Communication Language,ACL)提供了Agent之间交换信息和知识的工具,使Agent之间相互作用达到求解问题的目的。ACL使Agent通信建立在知识级别(Knowledge Level)上,从而使Agent间的通信效率大大高于传统的分布式计算中的通信。
目前主要有两种ACL,一种是1993年美国ARPA的KSE 研究小组提出的KQML(Knowledge Query and Manipulation Language);另一种是1997年欧洲的FIPA(Foundation for Intelligent Physical Agents)协会制定的开放性标准FIPA-ACL。FIPA标准由一系列规范组成,用于规范一个应用程序内部Agent之间和不同应用程序Agent之间的互操作,并对多Agent应用程序互操作中相应的功能模块进行标准化。由于FIPA-ACL在构建新的原语方面具有很强的能力,并且采用SL(Semantic Language)作为它的内容语言来描述Agent的状态,所以,FIPA-ACL有逐渐代替KQML的趋势。
2.1 FIPA-ACL的系统组成
FIPA标准由一系列规范组成,每个规范对多Agent应用程序互操作中相应的功能模块进行标准化。FIPA-ACL规范集合在整个FIPA规范中的位置及其内部的功能规范组成结构如图2所示。
由图2可见,FIPA-ACL规范集合是整个FIPA标准中极其重要的组成部分,它与Agent管理规范集合、Agent消息传输规范集合构成了FIPA标准的主体部分。Interaction Protocols规范集合定义了FIPA-ACL可采用的互操作协议(如请求互操作协议);Communicative Acts规范集合则将Agent在使用FIPA-ACL进行通信过程中的各种语言行为单元(如:request、agree、refuse等)规范为一个CAL(Communicative Acts Library)库规范;Content Languages规范集合定义了应用在FIPA-ACL消息的内容上不同的表示方式(如:SL),它们可提供不同标准的编码形式。
2.2 FIPA-ACL通信机制
Agent之间的通信是通过构造、封装、传输ACL消息进行的,ACL消息的主要结构如表1所示。
Agent A为了和Agent B进行通信,首先应该构建ACL消息。如果B提供的服务应采用请求互操作协议,则ACL的Protocol参数就设为fipa-request。A是此次互操作对话的发起者,它与B的第一次通信应视为请求互操作协议的第一个请求动作,这在CAL库规范中描述为request行为,所以ACL的performative参数应为request。封装好整个ACL消息后,Agent A选用适当的编码方式将其编码,形成有效载荷(Payload),然后再添加信封,信封中包含A和B进行通信所使用协议对应的协议地址。最后,A采用此传输协议将信息传送给Agent B。Agent B收到A发送的消息并根据消息具体的内容加以判断后,按照请求互操作协议所规定的操作流程对A进行回答。
3 系统的通信技术与实现
基于FIPA-ACL的污水处理Multi-Agent智能化系统是在开源Java项目JADE(Java Agent Development Framework)提供的多Agent平台上实现的。JADE完全符合FIPA标准,为多Agent系统的开发者提供了一个功能强大的开发框架,使开发者无需亲自从头实现FIPA的具体规范就能开发出符合FIPA标准的多Agent系统。[!--empirenews.page--]
3.1 通信方式的确定
MAS通信主要有四种连接方式:黑板模式、联邦方式、广播方式、点到点方式。通信传递方式有消息传递、方案传递两种。本系统Agent之间通信前都通过Agent管理平台提供的服务查询机制来定位欲通信的Agent,然后两个Agent进行直接通信;而Agent之间传输的信息是互操作命令、参数和操作结果,没有设计到方案传递。所以本系统采用的是点对点的消息传递通信方式。
3.2 通信策略
本系统中的数据服务Agent、冲突消解Agent、故障诊断Agent分别为整个系统中的其他Agent提供数据查询和写入服务、冲突识别和消解服务、故障诊断服务,请求每种服务的Agent必须要先定位到服务提供者,这就要求一种服务注册和定位机制。FIPA标准中定义了在Agent系统中必须存在的DF(Directory Facilitator)Agent。上述三个服务提供者启动时就会在DF中注册自己提供的服务,如:某个执行Agent需要冲突消解服务时,它会通过查询DF来得到冲突消解Agent的通信地址和服务使用的互操作协议等信息,然后根据互操作协议规定的对话方式与协调Agent通信。
JADE提供了默认的DF Agent,服务提供者(如数据服务Agent)欲注册自己的服务,其主要代码如下:
Service Description sd=new Service Description( );
//创建服务描述对象,描述服务属性
DF Agent Description DFad=new DF Agent Description( );
//创建自身描述对象,描述自身信息
Codec language=new SLCodec( );//采用SL内容语言规范
Ontology ontology=Basic Ontology.getInstance( );
//采用基本本体语言构建服务描述对象
sd.setName(getLocalName( ));
sd.setType(″SwageDisposeDataService″);//为服务命名,其他Agent查询服务时就用此名字
sd.addProtocols(InteractionProtocol.FIPA_REQUEST);
//服务所采用的互操作协议
sd.addLanguages(language.getName( ));
sd.addOntologies(ontology.getName( ));
//构建自身描述对象
DFad.addProtocols(InteractionProtocol.FIPA_REQUEST);
DFad.addLanguages(language.getName( ));
DFad.addOntologies(ontology.getName( ));
DFad.setName(getAID( ));
//使自身具有构建的服务描述对象
DFad.addServices(sd);
try{
DFService.register(this,DFad);//在平台提供的默认DF中注册自己的服务
}catch(FIPAException e){
//处理异常
}
当冲突消解Agent需要此服务时,可通过下面的代码来搜索DF,并定位到此服务的提供者,即数据服务Agent[6]。
…… //部分变量申明与上段代码相同
DFAgentDescription dfd[ ];//用于存储提供此服务的
//Agent描述信息(服务提供者可能不止一个)
//构建服务描述对象
sd.setType(″SwageDisposeDataService″);
sd.addLanguages(language.getName( ));
sd.addOntologies(ontology.getName( ));
sd.addProtocols(InteractionProtocol.FIPA_REQUEST);
DFad.addServices(sd);
try{
dfd=DFService.search(this,DFad);//在默认DF中搜索服务提供者
…… //与服务提供者通信
}catch (FIPAException e){
//处理异常
}
3.3 通信协议
本系统Agent之间通信都采用请求互操作协议,即ACL消息的protocol参数均为fipa-request,用UML表示的该协议流程如图3所示。
Agent提供服务所需的参数和操作结果都包含在ACL消息的content参数中。
3.4 通信内容
在本系统中,Agent之间的通信内容是封装在自定义的CSO(Communication Seriable Object)类中,通过JADE提供的串行化接口,可将CSO对象作为ACL消息的content参数在任意Agent之间传递,能达到很好的可扩展效果。CSO的类结构如下:
public class CSO implements Serializable {
private String[ ] arg;//服务参数
private float[ ] value;//服务结果
private String comment;//注释
……
}
系统中的数据服务Agent提供数据查询和数据写入服务,它根据服务使用者在CSO.arg[ ]中传送的参数进行实时数据库操作,并将查询结果存储在CSO.value[ ]中返回给请求者。冲突消解Agent接收执行Agent的冲突识别请求(此请求不带参数),并根据冲突识别算法的需要请求数据服务Agent的数据查询服务或故障诊断Agent的故障诊断服务,将消解结果命令或无冲突命令存放于CSO.arg[0]中,再向执行Agent传送。故障诊断Agent向冲突消解Agent提供故障诊断服务时也需要从CSO.arg[ ]中获取参数,并将诊断结果存放于CSO.value[ ]中,以表明请求诊断的故障是否出现。
本文基于FIPA-ACL提出了污水处理Multi-Agent智能化系统的通信技术,确定了其通信方式、通信策略与通信协议,并给出了JADE 3.1软件开发平台上的实现方法。