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:04downloaded 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:hello@10.160.29.37:1099/JADE
-----About Here:-----
I am running in a location called:Main-Container
Which is identified uniquely as:Main-Container@10.160.29.37
And is contactable at:10.160.29.37
Using the protocol:jicp
Agent takedown!

Agent的创建与基本使用就到此结束了,后面将学习Agent的行为。

JADE学习笔记2 :Agent的创建和运行相关推荐

  1. V-rep学习笔记:机器人模型创建2—添加关节

    下面接着之前经过简化并调整好视觉效果的模型继续工作流,为了使模型能受控制运动起来必须在合适的位置上添加相应的运动副/关节.一般情况下我们可以查阅手册或根据设计图纸获得这些关节的准确位置和姿态,知道这些 ...

  2. maven 学习笔记(三)创建一个较复杂的 eclipse+android+maven 工程

    前面maven 学习笔记(二)已经说过了怎样通过插件创建一个简单的工程,有了前面的基础,创建一个较复杂的工程就容易了很多.同样是通过已经有了插件,同样如果插件系统中并未存在,还是需要通过Add Arc ...

  3. ASM学习笔记2 - 类的创建和修改 —— ClassWriter的综合应用

    ASM学习笔记2 - 类的创建和修改 -- ClassWriter的综合应用 上回我们说到,通过使用ClassVisitor和ClassReader,我们能够分析已经存在的类.这一节中,我们将使用Cl ...

  4. Pyqt学习笔记(1) ----- 创建按钮,并添加单击事件

    Pyqt学习笔记(1) ----- 创建按钮,并添加单击事件 from PyQt5 import QtCore, QtGui, QtWidgets import sys from PyQt5.QtGu ...

  5. oracle创建索引index,【学习笔记】Oracle索引 创建含sysdate的函数index案例

    天萃荷净 分享一篇运维DBA需求,创建含sysdate的函数index案例 1.模拟Oracle数据库环境 创建表插入数据库 [oracle@node1 ~]$ sqlplus chf/oraclep ...

  6. UE5 Shader基础学习笔记——01-12 图形管线/创建shader/数学节点/贴图压缩/LerpDotUV/常用向量/坐标空间/MinMaxClampSaturate/法线贴图混合

    UE5 Shader基础学习笔记--01-12 图形管线/创建shader/数学节点/贴图压缩/LerpDotUV/常用向量/坐标空间/MinMaxClampSaturate/法线贴图混合 Lec01 ...

  7. Dynamo学习笔记——常用几何体的创建和编辑

    Dynamo学习笔记--常用几何体的创建和编辑 第一章 dynamo学习笔记--常用几何体的创建和编辑 文章目录 Dynamo学习笔记--常用几何体的创建和编辑 前言 专业术语梳理 一.常用平面几何形 ...

  8. Quartz.NET 2.0 学习笔记(5) :实例创建Windows服务实现任务调度 Quartz.NET 项目地址 http://quartznet.sourceforge.net/ Quar

    Quartz.NET 2.0 学习笔记(5) :实例创建Windows服务实现任务调度 Quartz.NET 项目地址 http://quartznet.sourceforge.net/ Quartz ...

  9. IOS学习笔记05---C语言程序的开发运行过程

    IOS学习笔记05---C语言程序的开发运行过程 0 5.C语言3-C语言程序的开发运行过程 ----------------------------------------------------- ...

  10. 2022Java学习笔记七十三(异常处理:运行时异常、编译时异常、异常的默认处理的流程)

    2022Java学习笔记七十三(异常处理:运行时异常.编译时异常.异常的默认处理的流程) 一.异常体系 1.Exception:java.lang包下,称为异常类,它表示程序本身可以处理的问题 2.R ...

最新文章

  1. 程序员的疯狂:打工与创业的残酷区别
  2. 公共资源情报(OSINT)工具Automater
  3. FIREBIRD浅历
  4. java string转bytebuf,如何将Java字符串转换为字节[]?
  5. TypeError: Cannot read property ‘range‘ of null
  6. merge into ORA-30926
  7. 572g装固态 acer v3_联想 thinkpad R60E 0658DE2 升级SSD 固态硬盘方案?宏碁V3-572G-51MR光驱位加装固态硬盘应该买什么样接口类型的...
  8. 电脑终端仿真程序(crt中文免费版) 附使用说明
  9. 【Unity5】实现24小时日出日落的效果 24小时天幕系统
  10. linux wifi信道,2.4G wifi 的频道/信道 20M 40M的概念,区别
  11. 公司来了一个low逼程序员,进程线程面试题总结
  12. 什么是固定资产管理系统?用固定资产管理系统管理固定资产的好处?
  13. 得到app文稿导出_得到-app分析
  14. 二倍均值随机算法之抢拼手气红包场景应用
  15. 【论文阅读】Adaptive Cross-Modal Prototypes for Cross-Domain Visual-Language Retrieval
  16. vue create xxx创建项目过程中报错的解决方法
  17. Angular ng-model指令详解
  18. Net Framework 4.7.2安装
  19. java二维码登录实现
  20. Vue 权限菜单(动态路由)详解

热门文章

  1. GUI 图形用户界面编程(十一)-扑克界面设计
  2. HJ88 扑克牌大小
  3. 亲爱的数据工作者,教你绕开13个雷区的方法
  4. SpringCloud 教程(一)| 微服务及五大神兽组件 --- 微服务架构
  5. 【图】女孩暴雨中为残疾乞丐撑伞引热议
  6. uniapp 真机调试 click点击事件无效
  7. [程序员福利] 获取Lynda视频课程免费账户
  8. direct wifi 投屏_【教程】Microsoft Wi-Fi Direct Virtual关闭方法
  9. [渝粤教育] 广东-国家-开放大学 21秋期末考试建设工程法规10221k2
  10. 如何使用Smartproxy运行无限的运动鞋机器人任务