JADE学习笔记2 :Agent的创建和运行
来源:互联网 发布:雷克萨斯rx200t 知乎 编辑:程序博客网 时间:2024/06/15 08:29
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.Profile和jade.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:helloMy globally unique name is:hello@10.160.29.37:1099/JADE-----About Here:-----I am running in a location called:Main-ContainerWhich is identified uniquely as:Main-Container@10.160.29.37And is contactable at:10.160.29.37Using the protocol:jicpAgent takedown!
Agent的创建与基本使用就到此结束了,后面将学习Agent的行为。
- JADE学习笔记2 :Agent的创建和运行
- JADE学习笔记3:Agent行为
- JADE学习笔记4:Agent通信
- JADE学习笔记之四,外部程序调用agent
- Jade 创建agent时传参数
- 用JADE创建多agent系统
- 用JADE创建多agent系统
- jade学习三---jade实例运行,图解。
- jade学习笔记一
- jade 学习笔记二
- jade template 学习笔记
- Jade学习笔记
- node jade学习笔记
- Jade学习笔记
- jade 学习笔记
- jade的启动与运行
- jade中的agent behaviour
- Jade Agent 交互协议
- 证券交易中各类词汇的解释
- 初识SDR
- Java学习之路——数组排序法(冒泡、直选、插入、反转)
- 利用reduce端的GroupingComparator来实现将一组bean看成相同的key
- codevs 1961 躲避大龙 bfs
- JADE学习笔记2 :Agent的创建和运行
- 双向链表基本操作
- servlet
- vijos 无向图最短路径 思维
- BZOJ 1485 [HNOI2009]有趣的数列
- Mongo查询操作
- 求解最大子数组问题
- 网易2017秋招编程题集合
- Codeforces Round #437