張冉 林杰
摘要:多agent技術(shù)在復(fù)雜建模領(lǐng)域具有優(yōu)勢(shì),是當(dāng)前研究的一個(gè)熱點(diǎn)。但對(duì)于普通研究者來(lái)說(shuō),從底層開(kāi)發(fā)多agent系統(tǒng)具有復(fù)雜性。因此,該文分析了多agent系統(tǒng)的分析和設(shè)計(jì)過(guò)程,討論了以JADE為開(kāi)發(fā)工具的多agent系統(tǒng)開(kāi)發(fā)步驟,并設(shè)計(jì)了基于Jess的知識(shí)推理流程,增強(qiáng)了agent智能性。對(duì)基于JADE和Jess的智能agent系統(tǒng)的開(kāi)發(fā)過(guò)程進(jìn)行了研究。
關(guān)鍵詞:智能agent; 多agent系統(tǒng); JADE; Jess
中圖分類號(hào): TP391 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):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)和知識(shí),是能感知環(huán)境[1]并在一定環(huán)境下自主運(yùn)行的實(shí)體,具有主動(dòng)性、獨(dú)立性、反應(yīng)性、交互性等特點(diǎn)[2]。多個(gè)agent 通過(guò)協(xié)同機(jī)制構(gòu)成多agent系統(tǒng)(Multi-Agent System,MAS)[3],對(duì)每個(gè)agent的目標(biāo)、資源和知識(shí)等進(jìn)行合理安排, 通過(guò)相互協(xié)同和協(xié)作,每個(gè)agent都能獨(dú)立地運(yùn)行,在實(shí)現(xiàn)各自的目標(biāo)基礎(chǔ)上,完成單個(gè)agent無(wú)法完成的復(fù)雜任務(wù)[4], 從而可對(duì)復(fù)雜系統(tǒng)進(jìn)行建模。
1 系統(tǒng)開(kāi)發(fā)工具介紹
JADE (Java Agent DEvelopment Framework) [5]是一個(gè)用Java語(yǔ)言寫成遵照FIPA定義的MAS開(kāi)發(fā)框架,它包括一個(gè)agent 賴以生存的運(yùn)行環(huán)境,開(kāi)發(fā)agent應(yīng)用的類庫(kù)和用來(lái)調(diào)試和配置的一套圖形化的工具,簡(jiǎn)化了MAS的開(kāi)發(fā)過(guò)程。Jess(Java Expert System Shell)是一個(gè)由Java語(yǔ)言實(shí)現(xiàn)的專家系統(tǒng)外殼,使用聲明式編程通過(guò)一個(gè)名為“模式匹配”的過(guò)程連續(xù)對(duì)事實(shí)的集合運(yùn)用一系列規(guī)則,完成知識(shí)的推理。它小巧、靈活,并且是已知規(guī)則引擎中最快的[6]。由于JADE和Jess都是基于java語(yǔ)言的,因此,Jess可以集成為agent的推理組件,增強(qiáng)agent的智能性。
2 多agent系統(tǒng)的分析與設(shè)計(jì)
多agent系統(tǒng)的分析與設(shè)計(jì)過(guò)程如圖1所示主要分為以下3個(gè)階段。
1) 分析問(wèn)題:
該階段主要是明確系統(tǒng)邊界和對(duì)用戶的需求進(jìn)行分析。定義出系統(tǒng)的總目標(biāo)及其各子目標(biāo)之間的層次關(guān)系。
2) agent建模:
該階段主要是根據(jù)系統(tǒng)目標(biāo)和子目標(biāo),設(shè)計(jì)各類agent,包括它們的屬性和任務(wù),并定義這些agent之間的交互關(guān)系。
3) 建立多agent系統(tǒng)平臺(tái):
該階段主要是創(chuàng)建設(shè)計(jì)好的agent,實(shí)現(xiàn)它們的屬性和任務(wù),并對(duì)它們之間的交互進(jìn)行控制和協(xié)調(diào),完成各自的目標(biāo)和系統(tǒng)的總目標(biāo)。
3 基于JADE的多agent系統(tǒng)開(kāi)發(fā)
JADE提供了遵照FIPA規(guī)范的agent開(kāi)發(fā)平臺(tái)和開(kāi)發(fā)agent的軟件包。主要包括agent管理系統(tǒng)(AMS)和目錄服務(wù)(DF)兩類特殊的agent,以及一個(gè)消息傳輸系統(tǒng)(MTS)[5],為供應(yīng)鏈建模層提供agent的通信和管理等基本服務(wù)。使用JADE開(kāi)發(fā)MAS主要分為以下幾步:
1) 創(chuàng)建agent:使用JADE創(chuàng)建agent,只需要定義一個(gè)從jade.core.Agent類繼承的類即可,然后由JADE平臺(tái)實(shí)時(shí)進(jìn)行實(shí)例化,agent之間的引用從不在agent外部公開(kāi),它們之間通過(guò)傳遞消息來(lái)進(jìn)行交互。每個(gè)agent實(shí)例通過(guò)agent標(biāo)識(shí)符進(jìn)行識(shí)別,格式為
2) 定義agent任務(wù):在JADE中,agent的任務(wù)使用行為(Behaviours)來(lái)表示的,它通過(guò)一個(gè)繼承jade.core.behaviour類的對(duì)象來(lái)實(shí)現(xiàn)。為了讓agent執(zhí)行由行為對(duì)象表示的任務(wù),必須使用agent類的addBehaviour()方法將行為添加到agent上。
3) agent的搜索:JADE平臺(tái)提供了黃頁(yè)服務(wù),允許agent發(fā)布它提供的一個(gè)或多個(gè)功能,以便其它agent可以動(dòng)態(tài)的發(fā)現(xiàn)和使用它們。在JADE中,由稱為DF的agent提供黃頁(yè)服務(wù),遵守FIPA中的管理規(guī)范。
4) agent的通訊:JADE中的agent通訊是遵從FIPA標(biāo)準(zhǔn),基于異步消息模式傳遞的。實(shí)時(shí)運(yùn)行環(huán)境中傳遞的消息會(huì)先存放到agent的消息隊(duì)列中,然后按照agent開(kāi)發(fā)者的設(shè)計(jì)進(jìn)行處理。JADE中的消息作為jade.lang.acl.ACLMessage類的一個(gè)對(duì)象,提供get方法和set方法訪問(wèn)ACL格式制定的所有字段。
4 基于JADE和Jess的agent知識(shí)規(guī)則集成
4.1 知識(shí)的推理流程
集成了Jess之后,agent知識(shí)推理流程如圖2所示,主要過(guò)程如下:
1) 知識(shí)推理部件首先對(duì)Jess環(huán)境下的推理引擎進(jìn)行一些初始化的工作,例如set_templates、set_rules等。
2) 在仿真的過(guò)程中agent的決策函數(shù)遇到?jīng)Q策問(wèn)題時(shí)會(huì)向知識(shí)推理部件發(fā)送決策請(qǐng)求消息,這些請(qǐng)求消息里包含實(shí)時(shí)的決策參數(shù)。知識(shí)推理部件收到這些消息后,會(huì)把決策參數(shù)封裝成特定的事實(shí)集,并通過(guò)set_facts方法向推理引擎發(fā)送,也就是在Jess的工作內(nèi)存中聲明事實(shí)。
3) 知識(shí)推理部件通過(guò)Run_engine方法啟動(dòng)推理引擎,Jess會(huì)根據(jù)事實(shí)集里的事實(shí)調(diào)用規(guī)則進(jìn)行推理,推理結(jié)束后使用Save_facts方法保存推理結(jié)果。
知識(shí)推理部件向決策函數(shù)返回推理結(jié)果(即決策結(jié)果),并使用clean_memory方法清空J(rèn)ess工作內(nèi)存中的事實(shí)集。
4.2 Jess中的知識(shí)表達(dá)
Jess使用框架和產(chǎn)生式規(guī)則方式表示知識(shí)。例如,采購(gòu)agent采用定量訂貨模型,存儲(chǔ)水平小于等于再訂貨點(diǎn)就生成采購(gòu)列表。其中,生成采購(gòu)列表的知識(shí)用Jess表示為:
(deftemplate material (slot mid) (slot mip)) ;定義物料存儲(chǔ)信息框架
(deftemplate materialstock (slot mid) (slot rl)) ;定義物料采購(gòu)參數(shù)框架
(deftemplate buylist (slot mid)) ;定義采購(gòu)申請(qǐng)列表框架
(defrule buyinform
(materialstock (mid ?mid)(rl ?rl)) ;查詢物料的再訂貨點(diǎn)
(material (mid ?mid)(mip ?mip&:(<= ?mip ?rl)));查詢現(xiàn)貨水平低于再訂貨點(diǎn)的物料編號(hào)
=>
(assert (buylist (mid ?mid)));把需要訂貨的物料編號(hào)寫入采購(gòu)列表
)
...
4.3 Jess的集成
我們可以使用jess.rete包把用Jess寫的規(guī)則嵌入到agent中去,首先創(chuàng)建一個(gè)jess.rete類的對(duì)象,然后就可以使用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é)論
本對(duì)智能agent系統(tǒng)的開(kāi)發(fā)進(jìn)行了討論。通過(guò)分析問(wèn)題和agent建模之后,研究者可以使用JADE簡(jiǎn)化多agent系統(tǒng)的開(kāi)發(fā)過(guò)程,同時(shí),agent中集成基于Jess的知識(shí)規(guī)則,可以提升多agent系統(tǒng)的智能性。
參考文獻(xiàn):
[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].計(jì)算機(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ū)動(dòng)的多agent合作機(jī)制[J].通信學(xué)報(bào),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.