嵌入式輕量Agent平臺(tái)的構(gòu)建研究
1 引言
多Agent系統(tǒng)是指由多個(gè)分布和并行工作的Agent通過(guò)協(xié)作完成某些任務(wù)或達(dá)到某些目標(biāo)的計(jì)算系統(tǒng)。嵌入式多智能體是把嵌入式系統(tǒng)與多Agent相結(jié)合的技術(shù),充分發(fā)揮了二者優(yōu)勢(shì)[1]。但是,多年來(lái)多Agent系統(tǒng)一直沒(méi)有應(yīng)用到嵌入式設(shè)備上。這是由于沒(méi)有合適的Agent平臺(tái)能夠適應(yīng)于軟、硬件資源受到限制的嵌入式系統(tǒng)。KVM (Kilo-bytes Virtual Machine)的出現(xiàn),使JAVA這種跨平臺(tái)的語(yǔ)言成功應(yīng)用于嵌入式設(shè)備中,同時(shí)也方便了嵌入式環(huán)境下的輕量Agent(Lightweight Agent)的實(shí)現(xiàn)。本文在ARM嵌入式環(huán)境下測(cè)試輕量級(jí)Agent平臺(tái)。
2 面向Agent軟件開(kāi)發(fā)平臺(tái)
JADE 是基于跨平臺(tái)的JAVA語(yǔ)言,是一項(xiàng)旨在開(kāi)發(fā)符合FIPA(Foundation for Intelligent Physical Agents)Agent標(biāo)準(zhǔn)的多Agent系統(tǒng)或程序的軟件開(kāi)發(fā)框架[2]。主機(jī)上運(yùn)行的遠(yuǎn)程管理Agent ( Remote Manage Agent,RMA ),包括AMS(Agent Management System)、DF(Directory Facilitator)、ACC(Agent Communication Channel)三部分。
如果利用JDAE平臺(tái)開(kāi)發(fā)多Agent系統(tǒng),運(yùn)行環(huán)境必須具備JAVA虛擬機(jī)。但是,這么一個(gè)軟件運(yùn)行空間的大小遠(yuǎn)遠(yuǎn)超過(guò)普通嵌入式系統(tǒng)所能提供的存儲(chǔ)空間。因此必須采用一種新的輕量化的Agent開(kāi)發(fā)平臺(tái)、框架,使其適應(yīng)于嵌入式環(huán)境。
3 輕量Agent平臺(tái)研究
3.1輕量化LEAP的研究
LEAP(Lightweight Extensible Agent Platform)是JADE運(yùn)行在J2ME/CLDC下的版本,專門(mén)在手持設(shè)備等資源受限的環(huán)境中運(yùn)行。LEAP運(yùn)行在通信的上層,容器Container之間通過(guò)TCP/IP通信而不用關(guān)心物理連接方式[4]。
J2ME把運(yùn)算功能有限、電力有限的嵌入式設(shè)備稱作可連接外界、資源有限的設(shè)備,規(guī)定這類設(shè)備要執(zhí)行JAVA程序必須滿足某些特定條件(CPU速度等),這些必須滿足的條件就定義在CLDC規(guī)范中。與標(biāo)準(zhǔn)版的JAVA—J2SE相比,J2ME/CLDC所支持的只有標(biāo)準(zhǔn)核心類庫(kù)的子集合,對(duì)存儲(chǔ)空間的需求在160KB~512KB之間。并且J2ME /CLDC添加支持嵌入式系統(tǒng)的擴(kuò)充類庫(kù),如javax.microedition.io.*類庫(kù),不含有RMI。所以,LEAP直接使用TCP/IP套接字通信來(lái)連接不同的容器[4]。LEAP沒(méi)有AMS和DF,為了實(shí)現(xiàn)這些功能,LEAP直接訪問(wèn)運(yùn)行在其它機(jī)器上的JADE平臺(tái)。分布在每一個(gè)嵌入式設(shè)備上的Agent的代碼量就會(huì)大大減少,各Agent的功能不會(huì)減弱。
3.2輕量化平臺(tái)的運(yùn)行
LEAP有兩種截然不同的運(yùn)行方式,其中一種方式是將一個(gè)完整的容器運(yùn)行在嵌入式設(shè)備上,即Stand alone 方式。另外一種為Split 方式,將容器劃分成前臺(tái)(FrontEnd)和后臺(tái)(BackEnd),前臺(tái)即運(yùn)行在嵌入式設(shè)備上,后臺(tái)運(yùn)行在裝有J2SE的主機(jī)上。
一個(gè)完整的容器啟動(dòng)需要首先啟動(dòng)AMS和DF。根據(jù)文獻(xiàn)[3]的介紹,前臺(tái)作為一個(gè)存儲(chǔ)空間有限的設(shè)備,不可能運(yùn)行大量代碼,是輕量的。結(jié)果,前臺(tái)啟動(dòng)后不會(huì)創(chuàng)建AMS與DF。同時(shí),代碼量的減少使得前臺(tái)啟動(dòng)加快。后臺(tái)部分運(yùn)行在普通的主機(jī)上,前臺(tái)對(duì)后臺(tái)的依賴體現(xiàn)在后臺(tái)必須在前臺(tái)啟動(dòng)之前工作起來(lái)。
3.3輕量Agent平臺(tái)改進(jìn)
3.3.1 KDDIAP
由于環(huán)境等因素的影響,移動(dòng)嵌入式設(shè)備在無(wú)線通信時(shí)經(jīng)常會(huì)遇見(jiàn)通訊連接不穩(wěn)定、設(shè)備不在信號(hào)覆蓋的范圍等問(wèn)題。在無(wú)線設(shè)備上運(yùn)行Agent會(huì)因?yàn)樯鲜鰡?wèn)題不能隨時(shí)隨地提供服務(wù)。
這種情況發(fā)生時(shí),JADE-LEAP就不能很好地滿足人們的需求。而這是由LEAP的特性決定的,LEAP應(yīng)用于無(wú)線設(shè)備完全依賴于主PC機(jī)上的JADE平臺(tái),即采用Split運(yùn)行方式。因此,實(shí)現(xiàn)嵌入式無(wú)線設(shè)備上的Agent管理,首先要保證通訊穩(wěn)定,這在無(wú)線環(huán)境下實(shí)現(xiàn)就有些困難。針對(duì)這些問(wèn)題,文獻(xiàn)[6]提出了專門(mén)針對(duì)手機(jī)等無(wú)線通信設(shè)備的Agent平臺(tái)架構(gòu)KDDIAP。將移動(dòng)設(shè)備和中央服務(wù)器分解成一個(gè)個(gè)符合FIPA的子平臺(tái)。遵循FIPA是為了與其他類似平臺(tái)方便地交互信息。與LEAP最大的區(qū)別就在于,移動(dòng)設(shè)備上運(yùn)行的子平臺(tái)也具有AMS和DF功能。每個(gè)手機(jī)上都有相對(duì)完整的Container。
3.3.2混合模式輕量Agent平臺(tái)
KDDIAP適合于無(wú)線環(huán)境下應(yīng)用,在最初啟動(dòng)時(shí)需要?jiǎng)?chuàng)建AMS和DF。然而,JADE-LEAP啟動(dòng)時(shí)不用創(chuàng)建AMS和DF,速度顯然會(huì)比KDDIAP快。在一個(gè)實(shí)際的復(fù)雜系統(tǒng)中,存在很多嵌入式設(shè)備,它們分別工作在有線連接的網(wǎng)絡(luò)和無(wú)線網(wǎng)絡(luò)的環(huán)境中,各自的存儲(chǔ)資源也不盡相同。根據(jù)各自不同的特點(diǎn),我們把KDDIAP與LEAP技術(shù)結(jié)合起來(lái),對(duì)現(xiàn)有的Agent運(yùn)行系統(tǒng)框架進(jìn)行改進(jìn)。如圖1,有3個(gè)容器,Main Container運(yùn)行在J2SE上,Container-1運(yùn)行在J2ME/CLDC或Personal Java上,Container-2運(yùn)行在J2ME/CLDC上;Container-2處于Split 方式,而Container-1類似于KDDIAP方式,它在啟動(dòng)時(shí)會(huì)創(chuàng)建AMS與DF。Container-2對(duì)應(yīng)的設(shè)備應(yīng)該有較好的通信保障,前臺(tái)在啟動(dòng)之后如果也創(chuàng)建AMS和DF將總共用到大約40個(gè)JAVA類,不適合資源受限的嵌入式設(shè)備 。我們?cè)谇芭_(tái)僅僅創(chuàng)建一個(gè)Client Agent,可以隨時(shí)訪問(wèn)后臺(tái),與后臺(tái)交互信息,對(duì)于存儲(chǔ)空間有限或處理器速度較慢的情況下確保了通信的實(shí)時(shí)性;相比之下Container-1處于無(wú)線環(huán)境,利用KDDIAP提供的方法可使Agent在任何時(shí)候提供服務(wù),軟件Agent的代碼也會(huì)相應(yīng)增加,對(duì)設(shè)備計(jì)算能力的要求會(huì)高一些,例如可以讓軟件Agent工作在ARM這樣的高檔硬件平臺(tái)上。
這種改進(jìn)能確保異構(gòu)網(wǎng)絡(luò)環(huán)境下輕量Agent的正常運(yùn)行,并且使整個(gè)Agent系統(tǒng)軟件精簡(jiǎn)靈活。同時(shí),我們所做的改動(dòng)仍然遵循FIPA 標(biāo)準(zhǔn),以方便與其他符合FIPA的平臺(tái)交互。[!--empirenews.page--]
圖1 混合模式輕量Agent平臺(tái)
4 輕量Agent在嵌入式環(huán)境下部署
4.1 KVM移植
為測(cè)試輕量Agent平臺(tái),我們將Agent平臺(tái)移植到基于ARM的嵌入式系統(tǒng)。這種嵌入式系統(tǒng)以三星公司的 S3C2410 芯片(ARM9內(nèi)核)作為應(yīng)用處理器,實(shí)時(shí)操作系統(tǒng)采用 Linux 操作系統(tǒng)。針對(duì)嵌入式設(shè)備硬件資源有限的事實(shí),CLDC規(guī)范定義一個(gè)簡(jiǎn)化版本的JAVA虛擬機(jī),這個(gè)虛擬機(jī)通常被稱為KVM(Kilo-bytes Virtual Machine) [5]。
圖2 輕量化的系統(tǒng)結(jié)構(gòu)
圖3 編譯后的KVM
建立輕量Agent運(yùn)行的環(huán)境,需要在基于ARM與嵌入式操作系統(tǒng)的平臺(tái)上移植KVM,使JAVA語(yǔ)言能夠運(yùn)行,如圖2。而KVM的目的是創(chuàng)造一個(gè)盡可能小的且盡可能完整的JAVA虛擬機(jī),使開(kāi)發(fā)者不用像開(kāi)發(fā)C語(yǔ)言一樣關(guān)心硬件,而通過(guò)JAVA語(yǔ)言來(lái)進(jìn)行開(kāi)發(fā),達(dá)到一次編譯,各種平臺(tái)使用的目的。圖3表示編譯好的KVM可以在ARM上運(yùn)行。將KVM燒到目標(biāo)平臺(tái)上,便可以執(zhí)行JAVA程序。
4.2 輕量Agent部署
根據(jù)改進(jìn)的輕量Agent框架部署Agent平臺(tái),圖4所示的JADE安裝在運(yùn)行J2SE的PC機(jī)上,Container-1和Container-2對(duì)應(yīng)著輕量Agent運(yùn)行的不同環(huán)境。
圖1中的PDA處于無(wú)線通信方式,它的Agent平臺(tái)一旦啟動(dòng),便會(huì)自動(dòng)創(chuàng)建AMS和DF。同時(shí),PDA上Container-1立即到位于PC機(jī)上的JADE平臺(tái)上注冊(cè)。圖1中的嵌入式設(shè)備是基于s3c2410的網(wǎng)絡(luò)設(shè)備,通過(guò)網(wǎng)線與鄰近的PC機(jī)通信。這里的嵌入式設(shè)備上軟件Agent平臺(tái)啟動(dòng)后不會(huì)創(chuàng)建AMS和DF,為獲得相應(yīng)的服務(wù),嵌入式設(shè)備只需創(chuàng)建一個(gè)Client Agent,利用這個(gè)智能體隨時(shí)通過(guò)網(wǎng)線訪問(wèn)后臺(tái)即可。圖4中Container-1和Container-2里面的所有Agent會(huì)注冊(cè)到Main-Container所在的Agent平臺(tái)。
完成注冊(cè)后,各遠(yuǎn)端Agent與Main-Container所在的Agent平臺(tái)通信,提供各自的信息,供其它平臺(tái)上的Agent利用。異構(gòu)網(wǎng)絡(luò)環(huán)境下,各嵌入式實(shí)時(shí)設(shè)備協(xié)同工作就基于這些信息。Container-1中的Agent若要同Container-2中的Agent交互,需要找到臨近的主機(jī)注冊(cè)。注冊(cè)到Main-Container所在的主機(jī)上之后,在主平臺(tái)下與已經(jīng)注冊(cè)了的Container-2中的Agent 交互信息。
并不是所有的Container都能夠提供注冊(cè)服務(wù),Container-2就是如此。提供注冊(cè)與注銷(xiāo)服務(wù)的平臺(tái),一般運(yùn)行在資源豐富的PC機(jī)上,這樣為嵌入式設(shè)備上運(yùn)行的軟件Agent減少了相應(yīng)的服務(wù),也減少了代碼。
圖 4 Agent的注冊(cè)與部署結(jié)果
5 結(jié)論
JADE-LEAP框架下,位于資源有限設(shè)備上的Agent不具有AMS與DF創(chuàng)建的功能,為實(shí)現(xiàn)這一功能只有通過(guò)網(wǎng)絡(luò)遠(yuǎn)程訪問(wèn)。在有線的網(wǎng)絡(luò)環(huán)境下,實(shí)現(xiàn)這些功能并不難,可是一旦處于無(wú)線環(huán)境這種平臺(tái)就不穩(wěn)定了。KDDIAP作為對(duì)LEAP這種原有的輕量化平臺(tái)的改進(jìn),解決了無(wú)線環(huán)境下實(shí)時(shí)獲得Agent服務(wù)的問(wèn)題,這是以增加代碼量和平臺(tái)啟動(dòng)時(shí)間為代價(jià)的?;旌夏J降妮p量Agent平臺(tái)結(jié)合了兩種輕量平臺(tái)的優(yōu)點(diǎn),保證了Agent平臺(tái)輕量化、靈活性。
本文創(chuàng)新點(diǎn):目前國(guó)內(nèi)外使用的多代理系統(tǒng)開(kāi)發(fā)平臺(tái)很多,但是適合于嵌入式系統(tǒng)平臺(tái)卻不多。主要原因在于嵌入式系統(tǒng)資源受限、工作環(huán)境多變、原有代理開(kāi)發(fā)平臺(tái)代碼量大。本文對(duì)原有的開(kāi)發(fā)平臺(tái)進(jìn)行輕量化改進(jìn),使其適合嵌入式系統(tǒng),并以S3C2410為例,研究了系統(tǒng)的構(gòu)建方法。