JADE平台入門


相關介紹:

JADE(Java Agent Development Framework,Java智能體開發框架)
用途:
Java智能體開發框架

開發者:
TILAB

主要功能:
AMS、DF、ACC
使用效果:
實現特定的功能模塊

簡介:
JADE是基於Java 語言的Agent開發框架,是由TILAB 開發的開放源代碼的自由軟件。JADE是多Agent開發框架,遵循FIPA規范,它提供了基本的命名服務,黃業服務,通訊機制等,可以有效地與其它Java開發平台和技術集成。 JADE架構適應性很強,不僅可以在受限資源環境中運行,而且與其他復雜架構集成到一起,比如:Net和Java EE。它包括一個Agent賴以生存的運行環境,開發Agent應用的類庫和用來調試和配置的一套圖形化的工具,簡化了一個多Agent系統的開發過程。 JADE主要包括以下幾個組成部分:
智能體賴以生存的一個運行時環境
程序員用來開發智能體應用的一個運行時庫
一系列圖形工具,幫助用戶管理和監控運行時智能體的狀態
功能:
JADE為多Agent系統提供了以下功能:
(l)Agent管理系統(Agent Management System,簡稱AMS),負責控制平台內Agent的活動、 生存周期及外部應用程序與平台的交互,規范Agent在平台上用獨一無二的名字來標識;
(2)目錄服務器(Dilectoly Facilitatol,簡稱DF),負責對平台內的Agent提供黃頁服務,注冊服務類型以供查找;
(3)消息傳送系統,也稱為Agent交流通道(Agent Communication Channel,簡稱ACC),控制平台內或不同平台之間的消息傳輸、消息編碼、消息解析等。
JADE定義了Agentclass作為其他Agent的父類,其他Agent均繼承自Agentclass。Agentclass中定義了setup方法,用於初始化Agent;定義了takeDown方法,用於結束Agent的運行;定義了doDelete方法,用於終止Agent;定義了Behaviour類以及addBehaviour方法用於添加Agent任務。為了保證Agent的分布式計算和協作機制,JADE構建行為池(Behaviour Pool)來存儲所有添加的Behaviour,這些Behaviour呈隊列排列,按照進入行為池的順序依次被調用。Behaviour方法被調用時,首先執行Action方法,然后判斷Done函數返回的布爾值,如果為真則將Behaviour移出行為池,繼續下一個Behaviour的執行。JADE提供了這樣一個基類,其他Agent所需要做的是重載setup,action,done,takeDown 這幾個方法來實現特定的功能模塊

JADE架構模型:

wps708B.tmp

wps70BB.tmp

JADE功能模型:
JADE提供了在固定和移動環境中實施分布式點對點應用的基本服務。
允許Agent動態的發現其他Agent以及與其他Agent通訊。Agent通過異步消息進行通訊,這種通訊機制可以在分布和松散耦合的環境中是通用的。Agents可以在異構環境中通信,通過名字來區分(以后的版本中發送方和接收方沒有暫時的依賴關系)。
通過認證和為Agents分配權限實現安全機制。
消息結構使用ACL語言。為了適應復雜對話,JADE提供了一系列執行特定人物的交互性為的典型框架,比如協商,拍賣,任務代理等(用Java抽象類來實現)。消息內容可以在xml和rdf格式間互相轉換。
靈活性強,用Java線程實現多任務。
提供命名服務和黃頁服務。
支持圖形化調試和管理/監控工具。 

智能體簡介

所謂智能體是指駐留在某一環境下能夠自主(autonomous)﹑靈活(flexible)地執行動作以滿足設計目標的行為實體。針對上述定義,下面對智能體的概念作進一步分析:

1.智能體駐留在環境中並需要與環境進行交互
任何智能體都不是孤立和封閉的,它駐留在一定的環境之中,需要與環境持續不斷地進行交互。
2.智能體是行為實體
智能體是一個行為實體,它具有一組動作並能執行這些動作,是動作執行的決策者和實施者。智能體的動作反應了其所具有的能力,這種能力主要體現在:智能體動作的實施有助於實現其設計目標並對其所駐留的環境產生影響。
3.智能體能夠自主地實施行為
智能體具有屬於其自身的計算資源和局部於自身的行為控制機制,能在沒有人類或其他智能體的直接干涉和指導的情況下運行,並能根據其內部狀態和感知到的環境輸入決定自身的狀態,控制自身的行為。
4.智能體有其設計目標
系統中的每個智能體都有其特定的設計目標。在其生命周期和持續運行過程中,智能體根據其設計目標和感知到的環境輸入自主地決定自身行為。所以智能體的設計目標對其行為決策產生直接的影響。
在我們的日常現實生活中,有許多控制系統都可以視為智能體。例如,房間恆溫調控系統中的恆溫調節器就是一個智能體。恆溫調節器智能體的設計目標是要將房間的溫度維持在用戶設定的范圍。它駐留於物理環境(房間)之中,具有溫度感應器以感知環境輸入(房間的溫度),並能對感知到的房間溫度作出適時反應,從而影響所處的環境(調高或者降低房間的溫度)。

Agent

是一個具有自適應性和智能性的軟件實體,能代表用戶或其它程序,以主動服務的方式完成一項工作。Agent至少應具備以下幾方面的關鍵屬性: 
①自主性:Agent具有屬於其自身的計算資源和局部於自身行為控制的機制,能在無外界直接操縱的情況下,根據其內部狀態和感知到的(外部)環境信息,決定和控制自身的行為。
②交互性:能與其他Agent進行多種形式的交互,能有效地與其他Agent協同工作。
③反應性:能感知所處的環境,並對相關事件做出適時反應。
④主動性:能遵循承諾采取主動行動,表現出面向目標的行為。
⑤推理和規划能力:Agent具有學習知識和經驗及進行相關的推理和智能計算的能力。

多Agent系統
多代理系統(MAS,Mu1ti-Agent System)的思想源於Herbet Simon的著作Administrative Behavior,他認為,一個大的機構把許多個體組織起來,可以彌補個體工作能力的有限;同樣,勞動的分工和每個個體負責一項專門的任務,可以彌補個體學習新任務能力的有限;社會機構間有組織的信息流動,可以彌補個體處理信息並運用信息作出決策能力的有限。盡管Simon的理論是針對人類社會而言的,但它卻為MAS系統奠定了思想基礎。單個代理的智能是有限的,但可以通過適當的體系結構把代理組織起來,從而彌補各個代理的不足,使得整個系統的能力超過任何單個代理的能力。

MAS不僅研究單個代理復雜的體系結構以及這樣的代理之間的簡單交互,而且研究大量相對簡單的代理之間的復雜交互,即建立復雜的社會模型,而不是復雜的個體模型。研究人員更關注MAS中代理在社會層次上的知識和行為。
MAS系統的關鍵有兩個方面:一是代理之間的協作,另一個就是對環境(信息環境)的適應。首先需要研究一種使各個代理能夠協調工作的方法,這就需要建立一個代理之間交換信息的協議集。代理之間的協作通常有任務共享和結果共享兩種方式:任務共享是指單個代理可以用最少的通信和全局同步信息完成子問題求解,它要求對任務進行適當的分解。結果共享是指代理之間通過共享部分結果的形式互相協助,這種方式在代理之間的部分結果互有交互時比較合適。
MAS是一個開發和集成多Agent系統的平台,它提供了多Agent的運行機制。MAS依據應用較廣的BDI模型定義了單個Agent模型,內嵌了正向推理機來實現計划的協商與控制。用戶依據平台的開發規范,並利用平台提供的應用程序接口。可賦予Agent相應的知識與能力,構造的多Agent系統具有以目標驅動、有一定的自主性和推理能力等特點。

與單Agent相比,MAS有如下特點:

多Agent系統由多個自主或半自主的智能體組成,每個Agent或者履行自己的職責,或者與其他Agent通信獲取信息互相協作完成整個問題的求解。 
①社會性:Agent處於由多個Agent構成的社會環境中,通過某種Agent語言與其他Agent實施靈活多樣的交互和通訊,實現與其他Agent的合作、協同、協商、競爭等。
②自制性:在多Agent系統中一個Agent發出請求后,其他Agent只有同時具備提供此服務的能力與興趣時才能接受動作委托,即一個Agent不能強制另一個Agent提供某種服務。這一特點最適用於學習者特征的獲取。
③協作性:在多Agent系統中,具有不同目標的各個Agent必須相互協作、協同、協商對未完成問題的求解。

環境配置

下載

安裝前注意:安裝JADE前需要先安裝jdk並配置好Java環境。請參看:如何配置Java環境
從JADE的官方網站JADE官網上下載JADE的最新版本,目前最新的是4.4.0,我下載的是包含全部文件的JADE-all-4.4.0.zip,先解壓這個壓縮包,解壓得到的文件夾中的所有壓縮包也解壓到各自的文件夾。在C盤建立文件夾起名為jade(存放位置和命名自己喜歡和習慣即可),用來存放JADE的相關文件,我把剛才解壓縮的四個文件夾都拷貝到在這個jade文件夾中。
四個文件夾說明:
① JADE-bin-4.4.0(存放JADE的核心部件,它是JADE框架平台的支持文件)
② JADE-doc-4.4.0(存放JADE的說明文檔,其中包括各種程序說明與教程資料)
③ JADE-examples-4.4.0(存放 JADE 的實例源代碼)
④ JADE-src-4.4.0(存放JADE框架平台的源代碼,JADE為開源項目)

配置

右擊計算機->屬性->高級系統配置->環境變量->CLASSPATH中添加JADE-bin-4.4.0文件夾中存放的jar文件的路徑,這里只有jade.jar這一個架包,照之前的做法,我的添加的是  C:\jade\JADE-bin-4.4.0\jade\lib\jade.jar  ,注意如果原先CLASSPARH最后面沒有英文分號,記得添加英文分號  ;  添加完之后點擊三下確定即可

驗證是否成功

WIN+R->cmd,打開命令提示符,輸入  java jade.Boot -gui  ,彈出JADE Remote Agent Management GUI(以后為了方便,統稱為:GUI管理器)窗口如下圖,則表示配置成功

image

運行示例:

以C:\jade\JADE-examples-4.4.0\jade\src\examples\hello文件夾中的HelloWorldAgent.java為例
cd C:\jade\JADE-examples-4.4.0\jade\src\examples\hello //進入文件夾
javac -d . HelloWorldAgent.java //編譯
java jade.Boot -gui myAgent:examples.hello.HelloWorldAgent //運行
//注意:myAgent是這個Agent對象的名字,可以自由指定。examples.hello表示包名,HelloWorldAgent表示類名
而那個窗口的左邊的樹結構下的葉節點上沒有顯示我們的myAgent,因為這個HelloWorldAgent.java的代碼中含有doDelete();因此創建的Agent對象會自行銷毀自己。如果想要在GUI管理器中看到自己所建的Agent對象,可以改HelloWorldAgent.java文件, 將doDelete();注釋掉,前面加//,保存重新編譯。再次使用上面的命令運行就可以在JADE Remote Agent Management GUI中看到找到葉節點上多了一個名字類似於myAgent@.../JADE的Agent,如下圖:

image

Eclipse下開發:

Window->Preferences->Java->Build Path->User Libraries新建庫,命名為jade,添加jade.jar進這個jade庫里
新建工程,命名為jade,右擊工程,Build Path->Configure Build Path->Libraries->Add Library->User Library,然后將jade庫添加進去
在src目錄下新建文件夾jadetest,然后建立類,HelloWorldAgent.java,內容如下:

package jadetest;

/**
 * ***************************************************************
 * JADE - Java Agent DEvelopment Framework is a framework to develop
 * multi-agent systems in compliance with the FIPA specifications.
 * Copyright (C) 2000 CSELT S.p.A.
 * 
 * GNU Lesser General Public License
 * 
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation,
 * version 2.1 of the License.
 * 
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 * 
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 * Boston, MA  02111-1307, USA.
 * **************************************************************
 */

import jade.core.Agent;

/**
 * This example shows a minimal agent that just prints "Hallo World!" and then terminates.
 * 
 * @author Giovanni Caire - TILAB
 */
public class HelloWorldAgent extends Agent {

    protected void setup() {
        System.out.println("Hello World! My name is " + getLocalName());

        // Make this agent terminate
        // doDelete();
    }
}

右擊HelloWorldAgent.java,選擇Run As,選擇Run Configurations,選擇Java Application,點擊添加,Name起名為:Run In JADE(可任意),Project名不變,Main Class起名為:jade.Boot(固定,不可改變),Argument中Program arguments起名為:-gui hello:jadetest.HelloWorldAgent(如果只想打開GUI管理器而不運行程序,則只要-gui即可),其中,hello為智能體的名字,jadetest為包名,HelloWorldAgent為類名。其他默認即可,配置完成,點擊Run,運行如下:

image

imageimage

image

GUI管理器顯示如下:

image

備注:其實在項目中不一定非要完全運行,而且我們一般要創建的是多個Agent。一般我們也可以把它編譯為類之后,在GUI管理器這個界面的Main-Container右擊選擇Start New aAgent添加Agent即可。

其他類開發類似,我會不斷更新...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM