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 這幾個方法來實現特定的功能模塊html
JADE架構模型:java
JADE功能模型:
JADE提供了在固定和移動環境中實施分佈式點對點應用的基本服務。
容許Agent動態的發現其餘Agent以及與其餘Agent通信。Agent經過異步消息進行通信,這種通信機制能夠在分佈和鬆散耦合的環境中是通用的。Agents能夠在異構環境中通訊,經過名字來區分(之後的版本中發送方和接收方沒有暫時的依賴關係)。
經過認證和爲Agents分配權限實現安全機制。
消息結構使用ACL語言。爲了適應複雜對話,JADE提供了一系列執行特定人物的交互性爲的典型框架,好比協商,拍賣,任務代理等(用Java抽象類來實現)。消息內容能夠在xml和rdf格式間互相轉換。
靈活性強,用Java線程實現多任務。
提供命名服務和黃頁服務。
支持圖形化調試和管理/監控工具。 程序員
所謂智能體是指駐留在某一環境下可以自主(autonomous)﹑靈活(flexible)地執行動做以知足設計目標的行爲實體。針對上述定義,下面對智能體的概念做進一步分析:redis
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管理器)窗口以下圖,則表示配置成功
以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,以下圖:
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,運行以下:
GUI管理器顯示以下:
備註:其實在項目中不必定非要徹底運行,並且咱們通常要建立的是多個Agent。通常咱們也能夠把它編譯爲類以後,在GUI管理器這個界面的Main-Container右擊選擇Start New aAgent添加Agent便可。
其餘類開發相似,我會不斷更新...