污水處理智能化系統(tǒng)的Multi-Agent通信技術(shù)與實現(xiàn)
3.1 通信方式的確定
MAS通信主要有四種連接方式:黑板模式、聯(lián)邦方式、廣播方式、點到點方式。通信傳遞方式有消息傳遞、方案傳遞兩種。本系統(tǒng)Agent之間通信前都通過Agent管理平臺提供的服務查詢機制來定位欲通信的Agent,然后兩個Agent進行直接通信;而Agent之間傳輸?shù)男畔⑹腔ゲ僮髅?、參?shù)和操作結(jié)果,沒有設(shè)計到方案傳遞。所以本系統(tǒng)采用的是點對點的消息傳遞通信方式。
3.2 通信策略
本系統(tǒng)中的數(shù)據(jù)服務Agent、沖突消解Agent、故障診斷Agent分別為整個系統(tǒng)中的其他Agent提供數(shù)據(jù)查詢和寫入服務、沖突識別和消解服務、故障診斷服務,請求每種服務的Agent必須要先定位到服務提供者,這就要求一種服務注冊和定位機制。FIPA標準中定義了在Agent系統(tǒng)中必須存在的DF(Directory Facilitator)Agent。上述三個服務提供者啟動時就會在DF中注冊自己提供的服務,如:某個執(zhí)行Agent需要沖突消解服務時,它會通過查詢DF來得到?jīng)_突消解Agent的通信地址和服務使用的互操作協(xié)議等信息,然后根據(jù)互操作協(xié)議規(guī)定的對話方式與協(xié)調(diào)Agent通信。
JADE提供了默認的DF Agent,服務提供者(如數(shù)據(jù)服務Agent)欲注冊自己的服務,其主要代碼如下:
Service Description sd=new Service Description( );
//創(chuàng)建服務描述對象,描述服務屬性
DF Agent Description DFad=new DF Agent Description( );
//創(chuàng)建自身描述對象,描述自身信息
Codec language=new SLCodec( );//采用SL內(nèi)容語言規(guī)范
Ontology ontology=Basic Ontology.getInstance( );
//采用基本本體語言構(gòu)建服務描述對象
sd.setName(getLocalName( ));
sd.setType(″SwageDisposeDataService″);//為服務命名,其他Agent查詢服務時就用此名字
sd.addProtocols(InteractionProtocol.FIPA_REQUEST);
//服務所采用的互操作協(xié)議
sd.addLanguages(language.getName( ));
sd.addOntologies(ontology.getName( ));
//構(gòu)建自身描述對象
DFad.addProtocols(InteractionProtocol.FIPA_REQUEST);
DFad.addLanguages(language.getName( ));
DFad.addOntologies(ontology.getName( ));
DFad.setName(getAID( ));
//使自身具有構(gòu)建的服務描述對象
DFad.addServices(sd);
try{
DFService.register(this,DFad);//在平臺提供的默認DF中注冊自己的服務
}catch(FIPAException e){
//處理異常
}
當沖突消解Agent需要此服務時,可通過下面的代碼來搜索DF,并定位到此服務的提供者,即數(shù)據(jù)服務Agent[6]。
…… //部分變量申明與上段代碼相同
DFAgentDescription dfd[ ];//用于存儲提供此服務的
//Agent描述信息(服務提供者可能不止一個)
//構(gòu)建服務描述對象
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 通信協(xié)議
本系統(tǒng)Agent之間通信都采用請求互操作協(xié)議,即ACL消息的protocol參數(shù)均為fipa-request,用UML表示的該協(xié)議流程如圖3所示。本文引用地址:http://m.butianyuan.cn/article/157574.htm
Agent提供服務所需的參數(shù)和操作結(jié)果都包含在ACL消息的content參數(shù)中。
3.4 通信內(nèi)容
在本系統(tǒng)中,Agent之間的通信內(nèi)容是封裝在自定義的CSO(Communication Seriable Object)類中,通過JADE提供的串行化接口,可將CSO對象作為ACL消息的content參數(shù)在任意Agent之間傳遞,能達到很好的可擴展效果。CSO的類結(jié)構(gòu)如下:
public class CSO implements Serializable {
private String[ ] arg;//服務參數(shù)
private float[ ] value;//服務結(jié)果
private String comment;//注釋
……
}
系統(tǒng)中的數(shù)據(jù)服務Agent提供數(shù)據(jù)查詢和數(shù)據(jù)寫入服務,它根據(jù)服務使用者在CSO.arg[ ]中傳送的參數(shù)進行實時數(shù)據(jù)庫操作,并將查詢結(jié)果存儲在CSO.value[ ]中返回給請求者。沖突消解Agent接收執(zhí)行Agent的沖突識別請求(此請求不帶參數(shù)),并根據(jù)沖突識別算法的需要請求數(shù)據(jù)服務Agent的數(shù)據(jù)查詢服務或故障診斷Agent的故障診斷服務,將消解結(jié)果命令或無沖突命令存放于CSO.arg[0]中,再向執(zhí)行Agent傳送。故障診斷Agent向沖突消解Agent提供故障診斷服務時也需要從CSO.arg[ ]中獲取參數(shù),并將診斷結(jié)果存放于CSO.value[ ]中,以表明請求診斷的故障是否出現(xiàn)。
本文基于FIPA-ACL提出了污水處理Multi-Agent智能化系統(tǒng)的通信技術(shù),確定了其通信方式、通信策略與通信協(xié)議,并給出了JADE 3.1軟件開發(fā)平臺上的實現(xiàn)方法。
評論