1. 程式人生 > >JADE學習筆記2 :Agent的建立和執行

JADE學習筆記2 :Agent的建立和執行

2.1 Eclipse環境中新增JADE

JADE環境變數設定成功後,就可以嘗試開發Agent了。為了開發方便,將JADE平臺與Eclipse平臺繫結起來。
首先要在eclipse中新增庫。在視窗-首選項中,選擇java,展開其子項,在構建路徑—〉使用者庫中,新建一個庫,名稱不妨定為jade。選中並新增jade.jar進這個jade庫裡 。

2.2 執行第一個Agent程式

2.2.1 Agent程式

選中新建->工程,命名為Learn_Jade。右擊工程,選中構建路徑->配置構建路徑,在“庫”選項卡中單擊按鈕,新增庫,選擇使用者庫,然後下一步把jade新增進來。

結果如下圖。

在src目錄下新建資料夾test,再在test資料夾下新建類HelloTest。
建立Agent非常簡單,只要定義一個繼承jade.core.Agent類的類就行,其程式如下:

package test;
import jade.core.Agent;
public class HelloClass extends Agent{
        public void setup() {   
            System.out.println("Hello!");   
    }
}

setup()方法用於實現Agent的初始化。Agent在setup()中執行的操作包括:顯示一個圖形介面,建立一個數據庫連線,在黃頁目錄中註冊其提供的服務以及啟動初始化。

2.2.2 執行第一個Agent

執行時,選中HelloTest.Java,右擊->執行方式->執行配置,選擇Java 應用程式,點選新增,名稱起名為:run jade(可任意),專案名不變,Main類起名為:jade.Boot(固定,不可改變),自變數中程式自變數起名為:-gui hello:test.HelloClass(如果只想開啟GUI管理器而不執行程式,則只要-gui即可),其中,hello為智慧體Agent的名字,test為包名,HelloClass為類名。其他預設即可,配置完成。

點選執行,控制檯輸出結果。

十月 14, 2017 8:07:31
下午 jade.core.Runtime beginContainer 資訊: ---------------------------------- This is JADE 4.5.0 - revision 6825 of 23-05-2017 10:06:04 downloaded in Open Source, under LGPL restrictions, at http://jade.tilab.com/ ---------------------------------------- 十月 14, 2017 8:07:32 下午 jade.imtp.leap.LEAPIMTPManager initialize 資訊: Listening for intra-platform commands on address: - jicp://10.160.29.37:1099 十月 14, 2017 8:07:33 下午 jade.core.BaseService init 資訊: Service jade.core.management.AgentManagement initialized 十月 14, 2017 8:07:33 下午 jade.core.BaseService init 資訊: Service jade.core.messaging.Messaging initialized 十月 14, 2017 8:07:33 下午 jade.core.BaseService init 資訊: Service jade.core.resource.ResourceManagement initialized 十月 14, 2017 8:07:33 下午 jade.core.BaseService init 資訊: Service jade.core.mobility.AgentMobility initialized 十月 14, 2017 8:07:33 下午 jade.core.BaseService init 資訊: Service jade.core.event.Notification initialized 十月 14, 2017 8:07:34 下午 jade.mtp.http.HTTPServer <init> 資訊: HTTP-MTP Using XML parser com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser 十月 14, 2017 8:07:34 下午 jade.core.messaging.MessagingService boot 資訊: MTP addresses: http://ASIA-20161230DB:7778/acc 十月 14, 2017 8:07:34 下午 jade.core.AgentContainerImpl joinPlatform 資訊: -------------------------------------- Agent container Main-Container@10.160.29.37 is ready. -------------------------------------------- Hello!

上面紅色字型(這裡沒顯示出來)的是JADE的宣告、服務初始化、MTP地址、以及容器的名稱,最後的“Hello!”是執行的結果。

JADE主圖形介面同時顯示,如下圖。

另外,在專案中不一定非要完全執行,而且我們一般要建立的是多個Agent。一般我們也可以把它編譯為類之後,執行-gui調出GUI介面,選擇Main-Container右擊選擇Start New aAgent新增Agent即可。

還有一點需要注意的是,當執行一個專案後,要想編譯執行一個新的專案或對當前專案修改後重新編譯,必須將當前專案停止(點選控制檯右側的紅色圖示)。

2.3 JADE主要的包

JADE平臺原始碼以一個Java包和若干子包的層次結構組織,原則上,每個包都包含實現某一特定功能的類和介面。主要的包有:
jade.core實現了系統的核心。它包括必須由應用程式設計師繼承的Agent類;除此之外,Behaviour類是包含在jade.core.behaviours子包裡。行為實現了一個agent的任務或者意圖。他們是邏輯上的活動單元,能夠以各種方式組成來完成複雜執行模式,並且可以並行執行。應用程式設計師通過編寫行為和使它們相互連線的agent執行路徑來定義agent操作。
jade.lang.acl子包可以根據FIPA標準規範來處理Agent通訊語言。
jade.content包含了一些類來支援使用者定義的本體和內容語言。有一個單獨的指南來描述如何使用JADE來支援訊息內容。
jade.domain包含了由FIPA標準定義的描述Agent管理實體的所有Java類,尤其是AMS和DF agents,它們提供生命週期,白頁服務,黃頁服務。
jade.gui包含了一套通用的建立圖形使用者介面(GUIs)以顯示和編輯AgentID,Agent描述,ACL訊息(ACLMessages)的類。
jade.proto包含了一些用來構造標準互動協議)的類,以及一些幫助應用程式設計師建立他們自己協議的類。
jade.wrapper.jade.core.Profilejade.core.Runtime類提供了JADE內部程序介面的支援,使外部Java應用程式可以把JADE當做一個連結庫使用。

2.4 進一步認識Agent類

JADE框架根據如下步驟控制一個新agent的產生:執行了agent的構造器,賦予agent一個ID(詳情見HTML文件中jade.core.AID類),註冊到AMS上,處於活動狀態,最終執行setup()方法。通過getAID()得到agent的標識。
任何行為都可以呼叫Agent.doDelete()方法來停止agent執行。
當agent準備轉到刪除狀態,即它將要被銷燬,就要執行Agent.takeDown()方法。程式設計師可以通過過載takeDown()方法來實現任何必須的清除行動。當呼叫這個方法時,agent仍然是註冊到AMS上的,因此可以傳送訊息到其他的agent,但是隻要在takeDown()方法完成之後,agent就會被登出,它的執行緒也會被銷燬。
再看下面這個例子:

package test;
import jade.core.Agent;
import jade.core.Location;
public class HelloClass extends Agent{

    public void setup(){
        System.out.println("Hello World!");
        System.out.println("-----About Me:-----");
        System.out.println("My local name is:"+getAID().getLocalName());//由於本地agent,getAID()此時也可以省略
        System.out.println("My globally unique name is:"+getName() );
        System.out.println("-----About Here:-----");
        Location l = here();//主容器資訊
        System.out.println("I am running in a location called:"+l.getName());
        System.out.println("Which is identified uniquely as:"+l.getID());
        System.out.println("And is contactable at:"+l.getAddress());
        System.out.println("Using the protocol:"+l.getProtocol());
        this.doDelete();
        }
    public void takeDown(){
        System.out.println("Agent takedown!");
    }

}

自變數輸入:-gui hello:test.HelloClass 執行結果如下:

Hello World!
-----About Me:-----
My local name is:hello
My globally unique name is:[email protected]:1099/JADE
-----About Here:-----
I am running in a location called:Main-Container
Which is identified uniquely as:[email protected]
And is contactable at:10.160.29.37
Using the protocol:jicp
Agent takedown!

Agent的建立與基本使用就到此結束了,後面將學習Agent的行為。

相關推薦

JADE學習筆記2 Agent建立執行

2.1 Eclipse環境中新增JADE JADE環境變數設定成功後,就可以嘗試開發Agent了。為了開發方便,將JADE平臺與Eclipse平臺繫結起來。 首先要在eclipse中新增庫。在視窗-首選項中,選擇java,展開其子項,在構建路徑—〉使用者庫中

Qt學習筆記2QMainWindowQWidget的區別

在Qt工程建立時,Qt Widget Application模板下提供了不同的父類繼承。 這裡,主要分析一下QMainWindow和QWidget的區別。 建立工程 分別以QMainWindow和QWidget為基類建立工程,工程建立完成後,如下圖所示: Qt會自動建

Git學習筆記2使用前的配置&建立第一個倉庫並配置local使用者資訊&給檔案重新命名的簡便方法

  git使用前的配置: 1.配置User資訊 配置user.name 和 user.email git config --global user.name 'yourName' git config --global user.email 'yourEmail' 這裡的e

Java學習筆記2使用replaceAll()方法替換字串中的反斜槓左斜槓(\)右斜槓(/)

       在程式設計過程中,需要將一個字串中的反斜槓(\)全部替換成(\\),很簡單的操作但是很容易報錯。        比如:String filePath  =  "D:\daxiang\te

Caffe學習筆記2Windows下安裝搭建caffe框架

小菜在這裡要感謝實習老師張xx,是他的無私奉獻。他把他之前安裝和搭建caffe框架的過程全部記錄下來了寫成文件了,小菜是按照他caffe學習筆記一步一步安裝的,讓小菜少走了許多彎路,不過小菜在安裝的額

Linux C程式設計學習筆記(2)open、creat、close函式及檔案的建立、開啟與關閉

my_create.c #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include

YII框架分析筆記2組件事件行為管理

reac 設置 有變 相關 article class ces col cal Yii是一個基於組件、用於開發大型 Web 應用的高性能 PHP 框架。CComponent幾乎是所有類的基類,它控制著組件與事件的管理,其方法與屬性如下,私有變量$_e數據存放事件(evnet

python學習筆記2字符串

nbsp 大小 alpha .com format 大小寫 fin 判斷大小 key python學習筆記2:字符串 總結:字符串是不可變變量,不能通過下標修改其值    字符串的方法都不會改變字符串原來的值,而是新生成一個字符串 一、3種寫法——單引號,雙引號,三引號  

ESP8266學習筆記2實現ESP8266的局域網內通信

pro reg sad net nts 理解 模式 curl ont 上一篇熟悉了編譯下載操作。如今就以實例入手。project使用的是IOT_DEMO,據DEMO文檔能夠知道ESP8266初始工作模式為softAP+station共存的模式。於是這邊我們就先以soft

Effictive Java學習筆記1創建銷毀對象

安全 需要 () 函數 調用 bsp nbsp bean 成了 建議1:考慮用靜態工廠方法代替構造器 理由:1)靜態方法有名字啊,更容易懂和理解。構造方法重載容易讓人混淆,並不是好主意    2)靜態工廠方法可以不必每次調用時都創建一個新對象,而公共構造函數每次調用都會

hibernate框架學習筆記2配置文件詳解

格式化 version validate ret root 主鍵生成策略 -m color 格式 實體類: package domain; public class Customer { private Long cust_id; priva

struts2框架學習筆記2配置詳解

true class 規範 開發規範 刪除用戶 建議 類名 esp 需要 核心配置文件: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Soft

js學習筆記2不同類型循環

比較 element n) innerhtml 屬性 while clas 一次 學習 今天學習了js的比較、if/else、switch/case和各種循環,這些東西每種語言都大同小異,沒什麽好看的,重點說一下js的循環。 JavaScript 支持不同類型的循環: f

Python3學習筆記1變量簡單數據類型

tle 小數點 per port 小數 指導 day this python 2018-09-16 17:22:11 變量聲明:   變量名 = ?? 如: 1 message = "HelloWorld" 2 message = 1 3 message =

GitHub教程學習筆記2---遠程倉庫本地倉庫

推送使用 過大 repo account 賬號 推送 osi email nis 大家一定有GitHub賬號了吧~~(默認有了) 廖雪峰Lec8:創建一個遠程倉庫(你可以自己搭建Git服務器,不過大家一般用Github~~)//1.創建SSH Keyssh-keygen

【深度學習筆記1】如何建立確定模型正確性?如何優化模型?

近期看了吳恩達的一本書,關於如何建立和確定優化模型?裡面有個人認為需要學習的地方,故做筆記: 1.模型訓練一共有三個資料集:訓練集、開發集(驗證集)、測試集。開發集不能太小,通常在1000-10000,並且測試集屬於同一分佈;2.過擬合:訓練過程中開發集的準確率和測試集測試的準確率差別不大,若開發集比測試集

犀牛書學習筆記2作用域

  作用域(scope): 詞法作用域(lexical scope)(3.10.1節)  ——函式作用域、全域性變數和區域性變數 JavaScript是基於詞法作用域(lexical scope,也成為靜態作用域 st

Git學習筆記2——版本庫建立

什麼是版本庫? 版本庫又名倉庫,英文名repository,可以簡單理解成一個目錄,這個目錄裡面的所有檔案都可以被Git管理起來,每個檔案的修改、刪除,Git都能跟蹤,以便任何時刻都可以追蹤歷史,或者在將來某個時刻可以“還原”。 建立版本庫 第一步 選擇一個合適

python學習筆記元組集合

學習python的小夥伴們經常會有這樣一個疑問,既然有列表裡,問什麼還要有元組呢。因為列表是可變的,而元組是不可變的。比如我們經常需要傳入函式的資料是不變的,這時就要用到元組了。 def info(a): a[0] = 'haha' return a a =

go學習筆記(2)資料結構

Go語言不是一門面向物件的語言,沒有物件和繼承,也沒有面向物件的多型、重寫相關特性。 Go所擁有的是資料結構,它可以關聯方法。Go也支援簡單但高效的組合(Composition),請搜尋面向物件和組合。 雖然Go不支援面向物件,但Go通過定義資料結構的方式,也能實現與Class相似的功能。 一個簡單的例子,