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.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: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的行为。

原创粉丝点击