張冉 林杰
摘要:多agent技術(shù)在復(fù)雜建模領(lǐng)域具有優(yōu)勢,是當(dāng)前研究的一個熱點。但對于普通研究者來說,從底層開發(fā)多agent系統(tǒng)具有復(fù)雜性。因此,該文分析了多agent系統(tǒng)的分析和設(shè)計過程,討論了以JADE為開發(fā)工具的多agent系統(tǒng)開發(fā)步驟,并設(shè)計了基于Jess的知識推理流程,增強了agent智能性。對基于JADE和Jess的智能agent系統(tǒng)的開發(fā)過程進行了研究。
關(guān)鍵詞:智能agent; 多agent系統(tǒng); JADE; Jess
中圖分類號: TP391 文獻標(biāo)識碼:A 文章編號:1009-3044(2014)25-5955-03
Developing Intelligent Agent System with JADE and Jess
ZHANG Ran1,2, LIN Jie1
(1.School of Economic and Management, Tongji University, Shanghai 201804, China; 2.School of Statistics and Information, Xinjiang University of Finance and Economics, Urumqi 830012, China)
Abstract: Due to developing multi-agent system from the bottom has been a very challenging task. This paper studied the development of intelligent agent system with JADE and Jess. Firstly, the analysis and design of the multi-agent system is described; then, the development steps of the multi-agent system with JADE are presented; finally, knowledge inference process with Jess is designed to enhance the intelligence of agent.
Key words: Intelligent agent; Multi-agent system; JADE; Jess
agent作為分布式人工智能概念模型,具有自己行為、目標(biāo)和知識,是能感知環(huán)境[1]并在一定環(huán)境下自主運行的實體,具有主動性、獨立性、反應(yīng)性、交互性等特點[2]。多個agent 通過協(xié)同機制構(gòu)成多agent系統(tǒng)(Multi-Agent System,MAS)[3],對每個agent的目標(biāo)、資源和知識等進行合理安排, 通過相互協(xié)同和協(xié)作,每個agent都能獨立地運行,在實現(xiàn)各自的目標(biāo)基礎(chǔ)上,完成單個agent無法完成的復(fù)雜任務(wù)[4], 從而可對復(fù)雜系統(tǒng)進行建模。
1 系統(tǒng)開發(fā)工具介紹
JADE (Java Agent DEvelopment Framework) [5]是一個用Java語言寫成遵照FIPA定義的MAS開發(fā)框架,它包括一個agent 賴以生存的運行環(huán)境,開發(fā)agent應(yīng)用的類庫和用來調(diào)試和配置的一套圖形化的工具,簡化了MAS的開發(fā)過程。Jess(Java Expert System Shell)是一個由Java語言實現(xiàn)的專家系統(tǒng)外殼,使用聲明式編程通過一個名為“模式匹配”的過程連續(xù)對事實的集合運用一系列規(guī)則,完成知識的推理。它小巧、靈活,并且是已知規(guī)則引擎中最快的[6]。由于JADE和Jess都是基于java語言的,因此,Jess可以集成為agent的推理組件,增強agent的智能性。
2 多agent系統(tǒng)的分析與設(shè)計
多agent系統(tǒng)的分析與設(shè)計過程如圖1所示主要分為以下3個階段。
1) 分析問題:
該階段主要是明確系統(tǒng)邊界和對用戶的需求進行分析。定義出系統(tǒng)的總目標(biāo)及其各子目標(biāo)之間的層次關(guān)系。
2) agent建模:
該階段主要是根據(jù)系統(tǒng)目標(biāo)和子目標(biāo),設(shè)計各類agent,包括它們的屬性和任務(wù),并定義這些agent之間的交互關(guān)系。
3) 建立多agent系統(tǒng)平臺:
該階段主要是創(chuàng)建設(shè)計好的agent,實現(xiàn)它們的屬性和任務(wù),并對它們之間的交互進行控制和協(xié)調(diào),完成各自的目標(biāo)和系統(tǒng)的總目標(biāo)。
3 基于JADE的多agent系統(tǒng)開發(fā)
JADE提供了遵照FIPA規(guī)范的agent開發(fā)平臺和開發(fā)agent的軟件包。主要包括agent管理系統(tǒng)(AMS)和目錄服務(wù)(DF)兩類特殊的agent,以及一個消息傳輸系統(tǒng)(MTS)[5],為供應(yīng)鏈建模層提供agent的通信和管理等基本服務(wù)。使用JADE開發(fā)MAS主要分為以下幾步:
1) 創(chuàng)建agent:使用JADE創(chuàng)建agent,只需要定義一個從jade.core.Agent類繼承的類即可,然后由JADE平臺實時進行實例化,agent之間的引用從不在agent外部公開,它們之間通過傳遞消息來進行交互。每個agent實例通過agent標(biāo)識符進行識別,格式為
2) 定義agent任務(wù):在JADE中,agent的任務(wù)使用行為(Behaviours)來表示的,它通過一個繼承jade.core.behaviour類的對象來實現(xiàn)。為了讓agent執(zhí)行由行為對象表示的任務(wù),必須使用agent類的addBehaviour()方法將行為添加到agent上。
3) agent的搜索:JADE平臺提供了黃頁服務(wù),允許agent發(fā)布它提供的一個或多個功能,以便其它agent可以動態(tài)的發(fā)現(xiàn)和使用它們。在JADE中,由稱為DF的agent提供黃頁服務(wù),遵守FIPA中的管理規(guī)范。
4) agent的通訊:JADE中的agent通訊是遵從FIPA標(biāo)準(zhǔn),基于異步消息模式傳遞的。實時運行環(huán)境中傳遞的消息會先存放到agent的消息隊列中,然后按照agent開發(fā)者的設(shè)計進行處理。JADE中的消息作為jade.lang.acl.ACLMessage類的一個對象,提供get方法和set方法訪問ACL格式制定的所有字段。
4 基于JADE和Jess的agent知識規(guī)則集成
4.1 知識的推理流程
集成了Jess之后,agent知識推理流程如圖2所示,主要過程如下:
1) 知識推理部件首先對Jess環(huán)境下的推理引擎進行一些初始化的工作,例如set_templates、set_rules等。
2) 在仿真的過程中agent的決策函數(shù)遇到?jīng)Q策問題時會向知識推理部件發(fā)送決策請求消息,這些請求消息里包含實時的決策參數(shù)。知識推理部件收到這些消息后,會把決策參數(shù)封裝成特定的事實集,并通過set_facts方法向推理引擎發(fā)送,也就是在Jess的工作內(nèi)存中聲明事實。
3) 知識推理部件通過Run_engine方法啟動推理引擎,Jess會根據(jù)事實集里的事實調(diào)用規(guī)則進行推理,推理結(jié)束后使用Save_facts方法保存推理結(jié)果。
知識推理部件向決策函數(shù)返回推理結(jié)果(即決策結(jié)果),并使用clean_memory方法清空Jess工作內(nèi)存中的事實集。
4.2 Jess中的知識表達
Jess使用框架和產(chǎn)生式規(guī)則方式表示知識。例如,采購agent采用定量訂貨模型,存儲水平小于等于再訂貨點就生成采購列表。其中,生成采購列表的知識用Jess表示為:
(deftemplate material (slot mid) (slot mip)) ;定義物料存儲信息框架
(deftemplate materialstock (slot mid) (slot rl)) ;定義物料采購參數(shù)框架
(deftemplate buylist (slot mid)) ;定義采購申請列表框架
(defrule buyinform
(materialstock (mid ?mid)(rl ?rl)) ;查詢物料的再訂貨點
(material (mid ?mid)(mip ?mip&:(<= ?mip ?rl)));查詢現(xiàn)貨水平低于再訂貨點的物料編號
=>
(assert (buylist (mid ?mid)));把需要訂貨的物料編號寫入采購列表
)
...
4.3 Jess的集成
我們可以使用jess.rete包把用Jess寫的規(guī)則嵌入到agent中去,首先創(chuàng)建一個jess.rete類的對象,然后就可以使用executeCommand()、reset()或run()等方法執(zhí)行Jess的推理,agent中的代碼如下:
Rete engine = new Rete(this);
engine.executeCommand("(batch \"" + rulesFile + "\")");
engine.reset();
if (new File(factsFile).exists())
engine.executeCommand("(load-facts \"" + factsFile + "\")");
...
5 結(jié)論
本對智能agent系統(tǒng)的開發(fā)進行了討論。通過分析問題和agent建模之后,研究者可以使用JADE簡化多agent系統(tǒng)的開發(fā)過程,同時,agent中集成基于Jess的知識規(guī)則,可以提升多agent系統(tǒng)的智能性。
參考文獻:
[1] Russell S,Norvig P,Canny J,Malik J,Edwards D.Artificial intelligence: a modern approach[M].New Jersey: Pearson Education,2010.
[2] 屈正庚.網(wǎng)絡(luò)交易中多Agent協(xié)商策略的研究[J].計算機技術(shù)與發(fā)展,2014(2):111-114,119.
[3] Vila X,Schuster A,Riera A.Security for a Multi-Agent System based on JADE [J].Computers & Security, 2007(5):391-400.
[4] 鄧寒冰,張霞,劉積仁.效用驅(qū)動的多agent合作機制[J].通信學(xué)報,2013(7):124-133,142.
[5] Fabio Bellifemine,Giovanni Caire,Dominic Greenwood.Developing multi-agent systems with JADE [M]. USA: John Wiley & Sons Ltd,2007.
[6] FRIEDMAN-HILL E. JESS in Action [M].Greenwich,CT:Manning,2003.