朱忠旭,劉旭光
(1.安徽工貿(mào)職業(yè)技術(shù)學(xué)院 計(jì)算機(jī)技術(shù)系,安徽 淮南 232007; 2.安徽交通職業(yè)技術(shù)學(xué)院 計(jì)算機(jī)系,合肥 230001)
在當(dāng)今信息爆炸的時(shí)代背景下,傳統(tǒng)的信息管理系統(tǒng)已難以滿足需要,人們希望使用具有高度智能化的信息處理系統(tǒng)。然而,盡管人工智能技術(shù)已取得較大的進(jìn)步,而且也出現(xiàn)了一些有效的開發(fā)工具和開發(fā)方法,但和傳統(tǒng)的軟件開發(fā)相比較,仍存在開發(fā)效率低下、開發(fā)難度大等問題。
在進(jìn)行智能系統(tǒng)的開發(fā)時(shí),將智能系統(tǒng)的開發(fā)平臺(tái)與傳統(tǒng)信息系統(tǒng)開發(fā)平臺(tái)相集成,從而能夠?qū)⑾到y(tǒng)的顯示邏輯、控制邏輯等“低智能”的任務(wù)交由傳統(tǒng)組件完成,將信息的分析、處理、學(xué)習(xí)等“高智能”的任務(wù)交由智能組件來完成,既可以利用傳統(tǒng)軟件的開發(fā)理論完備、方法成熟、工具齊全等優(yōu)點(diǎn),又可以有效地分離關(guān)注點(diǎn),降低開發(fā)的難度,提高軟件生產(chǎn)效率。
智能體(Agent)是當(dāng)前信息技術(shù)與人工智能領(lǐng)域最為活躍的研究?jī)?nèi)容之一,基于Agent的設(shè)計(jì)方法是一系列軟件工程方法的發(fā)展與延伸[1]。Agent擁有領(lǐng)域知識(shí)和社會(huì)知識(shí),可以進(jìn)行邏輯推理,并且具有主動(dòng)性、交互性等特征。JADE是一個(gè)Agent開發(fā)框架,它提供了遵循FIPA規(guī)范的中間件及一系列用于Agent開發(fā)和部署的工具,簡(jiǎn)化了多Agent系統(tǒng)的開發(fā)[2]。JADE為Agent的開發(fā)和運(yùn)行提供分布式的Agent容器、高效的異步消息傳輸、白頁和黃頁實(shí)現(xiàn)、Agent訂閱機(jī)制、支持開發(fā)者調(diào)試和跟蹤的圖形工具、交互協(xié)議庫等機(jī)制。
JADE平臺(tái)運(yùn)行時(shí)環(huán)境由多個(gè)可以分布于網(wǎng)絡(luò)不同位置的Agent容器組成,平臺(tái)中只能有一個(gè)主容器,其它容器必須在主容器中注冊(cè)后才能使用。主容器負(fù)責(zé)管理容器注冊(cè)表(CT)和全局agent描述表(GADT),通過這兩個(gè)表可以發(fā)現(xiàn)和引用其它容器和任意Agent,主容器中的AMS和DF是兩個(gè)特殊的Agent,用于Agent的管理和白頁、黃頁服務(wù)。所有容器都有各自的局部Agent描述表,用于本容器內(nèi)的Agent管理。非主容器各自擁有一個(gè)GADT快照,用于發(fā)現(xiàn)其它容器中的Agent。
系統(tǒng)的總體架構(gòu)采用MVC模式設(shè)計(jì)(見圖1),控制器、視圖和模型的角色分別由Servlet、JSP頁面和智能組件Agent充當(dāng),從而實(shí)現(xiàn)了控制邏輯與業(yè)務(wù)邏輯的分離,顯示與數(shù)據(jù)的分離[3]。從接受瀏覽器來的用戶輸入,傳送到Servlet對(duì)象,再由Servlet傳送給Agent進(jìn)行處理,處理結(jié)果由Servlet傳送到JSP顯示給用戶。
圖1 系統(tǒng)總體架構(gòu)
GatewayAgent組件是Web容器與JADE平臺(tái)之間的接口,由于Agent之間的通信使用ACL格式信息,因此要將用戶端產(chǎn)生的POST格式的信息封裝為ACL格式,再發(fā)送到相應(yīng)的Agent處理;同時(shí),由Agent產(chǎn)生的ACL消息先發(fā)送到GatewayAgent,由GatewayAgent轉(zhuǎn)換為POST消息格式后再傳送到控制器組件Servlet,然后由Servlet傳送給相應(yīng)的JSP頁面。
Servlet與GatewayAgent之間的消息傳遞采用黑板方式[4]。黑板是一個(gè)特殊的Java Bean對(duì)象,Servlet按收到來自網(wǎng)頁的POST消息后,創(chuàng)建一個(gè)黑板對(duì)象blackbord,將要傳送的消息寫入黑板并設(shè)置信息的接收者,GatewayAgent讀取黑板中的信息,提取消息的接收者和消息內(nèi)容,然后把消息發(fā)送給接收Agent。
黑板的定義和使用方式如下:
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws Exception {
BlackBoard blackBord = new BlackBoard(); //創(chuàng)建黑板對(duì)象
blackBord.setReceiver("receiveAgent"); //設(shè)置信息的接收者
blackBord.setMessg("………."); //在黑板中寫入要傳遞的信息
……….
}
Agent與數(shù)據(jù)庫之間的數(shù)據(jù)交換通過TransducerAgent完成[5]。Agent需要從數(shù)據(jù)庫獲取數(shù)據(jù)時(shí),將要獲取或?qū)懭氲臄?shù)據(jù)項(xiàng)名稱、數(shù)據(jù)來源地(或目的地)和交互類型(即讀取或更新)以ACL消息發(fā)送給TransducerAgent,TransducerAgent根據(jù)消息中的數(shù)據(jù)項(xiàng)和操作類型等生成SQL語句,通過數(shù)據(jù)庫訪問接口JDBC進(jìn)行相應(yīng)的數(shù)據(jù)庫操作。獲得相應(yīng)的數(shù)據(jù)后,再以ACL格式發(fā)送給相應(yīng)的Agent。
Agent是一個(gè)具有邏輯推理能力和智能行為的顯式的符號(hào)模型,是一個(gè)基于知識(shí)的系統(tǒng)[6],其一般結(jié)構(gòu)如圖2所示。
圖2 Agent內(nèi)部結(jié)構(gòu)
Agent通過傳感器接收外界環(huán)境的信息,根據(jù)內(nèi)部狀態(tài)進(jìn)行信息融合,產(chǎn)生修改當(dāng)前狀態(tài)的指令。然后,在知識(shí)庫的支持下進(jìn)行推理判斷,形成一系列動(dòng)作,通過效應(yīng)器對(duì)環(huán)境發(fā)生作用。
在JADE中,Agent的動(dòng)作通過Behaviour類實(shí)現(xiàn),動(dòng)作的具體定義寫在Behaviour類的action()方法中。一個(gè)Agent可以有多個(gè)Behaviour,它們可以并發(fā)執(zhí)行。
Agent知識(shí)庫和推理機(jī)使用Jess來實(shí)現(xiàn),Jess是當(dāng)前流行專家系統(tǒng)開發(fā)工具之一,它具有CLIPS的風(fēng)格,小巧快速,而且完全由Java語言開發(fā),因此易于與JADE集成[7]。Agent的知識(shí)庫包含了與應(yīng)用領(lǐng)域相關(guān)的事實(shí)、原理、規(guī)則等,每一條知識(shí)定義為一條Jess規(guī)則,每個(gè)Agent的知識(shí)庫定義為一個(gè)Jess規(guī)則文件。
Agent的推理機(jī)由Jess的推理引擎Jess.Rete充當(dāng),封裝于Agent的行為中,如下所示:
class InferenceEngine extends CyclicBehaviour {
private Jess.Rete engine; //推理機(jī)
//初始化推理機(jī)
InferenceEngine (Agent agent, String ruleFile) { // ruleFile為Jess規(guī)則庫文件
super(agent);
engine = new Jess.Rete(); //創(chuàng)建推理機(jī)
try {
//加載規(guī)則庫
FileReader fr = new FileReader(ruleFile);
Jess.Jesp j = new Jess.Jesp(fr, Jess);
try {
j.parse(false);
} catch (engine.JessException je) { }
}catch(……){……}
public void action() {
try {
engine.run(); //啟動(dòng)推理機(jī)
}
……
}
煤炭是國民經(jīng)濟(jì)和社會(huì)發(fā)展的基礎(chǔ),然而隨著煤炭開采量的不斷擴(kuò)大和煤礦開采深度的逐年增加,煤礦安全問題日益突出。引起煤礦安全事故的因素主要有瓦斯、煤塵、水災(zāi)、火災(zāi)、頂板及沖擊地壓、提升與運(yùn)輸危險(xiǎn)、電氣危險(xiǎn)等。傳統(tǒng)的安全系統(tǒng)只是監(jiān)測(cè)某些環(huán)境參數(shù),并對(duì)其進(jìn)行單一的列表顯示而已,控制功能也比較獨(dú)立,無法做到體系化綜合性的安全評(píng)價(jià)與事故防控[8]。
在智能化的煤炭安全管理平臺(tái)中,要能夠?qū)崿F(xiàn)對(duì)現(xiàn)場(chǎng)采集的各種安全監(jiān)測(cè)數(shù)據(jù)進(jìn)行自動(dòng)的分析和處理,當(dāng)某一安全因素監(jiān)測(cè)值變化異常時(shí),要能夠做出適當(dāng)反應(yīng):如超過安全閾值時(shí),自動(dòng)啟動(dòng)安全設(shè)備進(jìn)行排險(xiǎn);值增加速率超過正常水平時(shí),發(fā)出安全預(yù)警并進(jìn)行原因分析等。另外,還要能夠?qū)Ω鞣N因素之間的相關(guān)性進(jìn)行分析和挖掘,從以往的安全記錄中學(xué)習(xí)經(jīng)驗(yàn)等功能。
系統(tǒng)中的Agent采用樹形結(jié)構(gòu)組織(見圖3)。影響煤礦安全生產(chǎn)的各種因素由專門的Agent進(jìn)行處理,由此設(shè)計(jì)出空氣Agent、水情Agent、地質(zhì)Agent、排水Agent、通風(fēng)Agent、設(shè)備Agent等??諝釧gent負(fù)責(zé)實(shí)時(shí)地對(duì)收集到的井下大氣質(zhì)量數(shù)據(jù),包括瓦斯含量、粉塵含量、CO含量、大氣溫度、大氣濕度等進(jìn)行分析和處理;水情Agent負(fù)責(zé)處理井下水文情況;地質(zhì)Agent負(fù)責(zé)處理井區(qū)地質(zhì)變化情況;排水Agent和通風(fēng)Agent管理通風(fēng)設(shè)備和排水設(shè)備,根據(jù)相關(guān)Agent發(fā)送的消息啟動(dòng)或停止設(shè)備運(yùn)行;設(shè)備Agent監(jiān)控掘進(jìn)、運(yùn)輸?shù)壬a(chǎn)設(shè)備的狀態(tài)。這些Agent首先對(duì)收集到的各類數(shù)據(jù)進(jìn)行初步處理,當(dāng)某種數(shù)據(jù)超出安全閾值時(shí),進(jìn)行緊急處理;然后把數(shù)據(jù)發(fā)送到礦井安全Agent做進(jìn)一步分析。
圖3 煤礦安全系統(tǒng)中Agent組織結(jié)構(gòu)圖
礦井安全Agent對(duì)本礦井各Agent發(fā)送的數(shù)據(jù)進(jìn)行分析,進(jìn)而判斷本礦井的安全狀態(tài)。一個(gè)煤礦往往有多個(gè)礦井,煤礦安全Agent對(duì)各個(gè)礦井的安全數(shù)據(jù)進(jìn)行綜合分析和學(xué)習(xí),獲取安全經(jīng)驗(yàn)。
確定了系統(tǒng)中所包含的Agent后,接著在JADE環(huán)境下進(jìn)行實(shí)現(xiàn)。每個(gè)Agent是一個(gè)由jade.core.Agent派生的特殊的Java類,其行為定義為Behaviour類的子類,知識(shí)庫由Jess定義。系統(tǒng)與用戶的交互由Java EE客戶端組件JSP和Servlet完成,數(shù)據(jù)庫采用Oracle 11g。
系統(tǒng)運(yùn)行時(shí)Agent情況如圖4所示。
圖4 JADE平臺(tái)
JADE是一種開源的Agent開發(fā)和運(yùn)行平臺(tái),它為Agent的運(yùn)行提供了容器支持。由于都是在Java虛擬機(jī)上運(yùn)行,因此JADE平臺(tái)和Java EE平臺(tái)可以較好的集成。在開發(fā)網(wǎng)絡(luò)應(yīng)用系統(tǒng)時(shí),用Java EE的表示層組件實(shí)現(xiàn)系統(tǒng)與用戶的接口,后臺(tái)的數(shù)據(jù)分析與處理等功能由Agent組件來完成,既可以充分利用Agent的主動(dòng)性、智能性強(qiáng)等特點(diǎn),又能夠利用Java EE平臺(tái)的開發(fā)工具豐富、開發(fā)效率高等優(yōu)勢(shì),從而快速高效地開發(fā)智能化的Web應(yīng)用系統(tǒng)。
參考文獻(xiàn):
[1] 高濟(jì).人工智能高級(jí)技術(shù)導(dǎo)論[M].北京:高等教育出版社,2009.
[2] Fabio Bellifemine,Giovanni Caire,Dominic Greenwood.Developing Multi Agent Systems with JADE[M].New Jersey:John Wiley&Sons,2007.
[3] 尹曉霈,黃鵬.MVC模式在JADE系統(tǒng)開發(fā)中的應(yīng)用[J].工業(yè)儀表與自動(dòng)化裝置,2008(4):19-22.
[4] 于衛(wèi)紅.基于JADE平臺(tái)的多Agent系統(tǒng)開發(fā)技術(shù)[M].北京:國防工業(yè)出版社,2011.
[5] M Nikraz,G Caire, PA Bahri.A Methodology for the Analysis and Design of Multi-Agent Systems using JADE[J].International Journal of Computer Systems Science and Engineering,2006(5):22-25.
[6] 倪建軍.復(fù)雜系統(tǒng)多Agent建模與控制的理論及應(yīng)用[M].北京:電子工業(yè)出版社,2011.
[7] Ernest Friedman-Hill.Jess in Action[M].Greenwich:Manning Publications Co,2003.
[8] 許滿貴.煤礦動(dòng)態(tài)綜合安全評(píng)價(jià)模式及應(yīng)用研究[D].西安:西安科技大學(xué),2006.