第一章 JADE学习 - 简介与配置

2020-04-07  本文已影响0人  2010jing

1. JADE简介

JADE(JAVA Agent DEvelopment Framework)是完全用Java语言实现的软件框架。它通过声称符合FIPA 规范的中间件以及支持调试和部署阶段的一组工具,简化了多代理系统的实施 。代理平台可以跨机器分布(甚至不需要共享同一操作系统),并且可以通过远程GUI控制配置。通过在需要时通过创建新代理并将代理从一台计算机移动到另一台计算机,甚至可以在运行时更改配置。唯一的系统要求是Java运行时版本5或更高版本。

该通信体系结构提供了灵活高效的消息传递,其中JADE创建和管理每个代理私有的传入ACL消息队列。代理可以通过几种模式的组合来访问其队列:阻止,轮询,超时和基于模式匹配。完整的FIPA通信模型已经实施,并且其组成部分已经明确区分并完全集成:交互协议,信封,ACL,内容语言,编码方案,本体,最后还有传输协议。传输机制尤其像变色龙,因为它通过透明地选择最佳的可用协议来适应每种情况。FIPA定义的大多数交互协议已经可用,并且可以在定义协议的每个状态的依赖于应用程序的行为之后实例化。

2. FIPA标准简介

FIPA是IEEE计算机协会标准组织,致力于促进基于代理的技术及其标准与其他技术的互操作性。

2005年6月8日,IEEE正式接受FIPA(代理和多代理系统的标准组织)作为其第十一个标准委员会。

FIPA最初成立于1996年,是一家总部位于瑞士的组织,旨在为异构代理和交互代理以及基于代理的系统生成软件标准规范。自成立以来,FIPA在代理商标准的制定中发挥了至关重要的作用,并推动了一系列促进代理商技术发展和采用的举措和活动。此外,FIPA起源和发展的许多想法现在已成为新一代Web / Internet技术和相关规范的焦点。

FIPA核心规范包括 Agent Communication, Agent Transport, Agent Management, Abstract Architecture, and Applications.

3. JADE体系结构

JADE体系结构

基于JADE的应用程序由一组称为代理的组件组成, 每个组件 都有唯一的名称。代理执行任务并通过交换消息进行交互。

代理位于一个平台之上,该 平台 为他们提供基本服务,例如消息传递。一个平台由一个或多个 容器组成。容器可以在不同的主机上执行,从而实现 分布式 平台。每个容器可以包含零个或多个代理。例如,参考下图,主机主机3 中的容器“容器1” 包含代理A2和A3。即使在某些特定情况下并非总是如此,您可以将容器视为JVM(因此,1个JVM ==> 1个容器==> 0或许多代理)。 平台中存在一个称为“ 主容器”的特殊容器 。主容器本身就是一个容器,因此可以包含代理,但与其他容器不同的是:

  1. 它必须是第一个在平台中启动的容器,并且所有其他容器在引导时都会向其注册

  2. 它包括两个特殊的代理: AMS 代表平台中的权限,并且是唯一能够执行平台管理操作(例如启动和终止代理或关闭整个平台)的代理(正常代理可以向AMS请求此类操作)。 提供黄页 服务的 DF, 代理可以在其中发布他们提供的服务,并找到其他代理来提供他们需要的服务。

4. Agent

Agent 可以透明地进行通信,而不管它们是否生活在同一容器(例如上图A2和A3),属于同一平台(例如A1和A2)的不同容器(在相同或不同主机中)还是在不同平台(例如上图A1)中和A5)。通信基于异步消息传递范例。消息格式 由FIPA定义的 ACL语言定义, FIPA是一个国际组织,发布了一组关于代理互操作性的规范。ACL消息包含许多字段,包括:

5. 开发环境搭建

x01 下载安装 JDK

JDK

x02 配置JDK环境(windows环境)

Setup JDK Environment

x03 IDE

IntelliJ IDEA

x04 创建 Maven 项目

  1. Maven project


    Maven project
  2. Pom.xml

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>hk.edu.uic</groupId>
  <artifactId>iCampus</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>iCampus</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>



  <repositories>
    <repository>
      <id>tilab</id>
      <url>https://jade.tilab.com/maven/</url>
    </repository>

  </repositories>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>com.tilab.jade</groupId>
      <artifactId>jade</artifactId>
      <version>4.5.0</version>
    </dependency>

    <dependency>
      <groupId>com.tilab.jade</groupId>
      <artifactId>jade-misc</artifactId>
      <version>2.8.0</version>
    </dependency>

    <dependency>
      <groupId>com.tilab.jade</groupId>
      <artifactId>jade-test-suite</artifactId>
      <version>1.13.0</version>
    </dependency>

    <dependency>
      <groupId>com.tilab.jade</groupId>
      <artifactId>jade-wsdc</artifactId>
      <version>2.7.0</version>
    </dependency>

    <dependency>
      <groupId>com.tilab.jade</groupId>
      <artifactId>jade-xml-codec</artifactId>
      <version>1.11.0</version>
    </dependency>

  </dependencies>

  <build>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-jar-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
        <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
        <plugin>
          <artifactId>maven-site-plugin</artifactId>
          <version>3.7.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-project-info-reports-plugin</artifactId>
          <version>3.0.0</version>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>8</source>
          <target>8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

  1. HelloWorldAgent.java
package hk.edu.uic.agent;

import jade.core.Agent;

public class HelloWorldAgent extends Agent {
    protected void setup() {
        System.out.println("Hello world! I'm an agent!");
        System.out.println("My local name is " + getAID().getLocalName());
        System.out.println("My GUID is " + getAID().getName());
        System.out.println("My addresses are " + String.join(",", getAID().getAddressesArray()));
    }
}
  1. Configuration


    Configuration
  1. Run


    Run

6. JADE管理GUI的主要功能

6.1 启动

JADE管理控制台

在管理控制台的左侧部分,你可以看到一棵树显示,有一个 平台 叫做 <主容器主机>:<主容器端口> / JADE (注意,在我们推出的主容器的事实,我们实际上创建了一个Platform),该平台由一个称为Main Container的容器组成,该容器 包含五个代理:

查看代理商名称,我们看到他们具有以下形式

<本地名称> @ <平台名称>

6.2 使用管理控制台启动代理

现在,使用管理控制台启动另一个HelloWorldAgent。右键单击“主容器”(当前,我们在平台中只有该容器,因此,我们只能在其中启动代理)。在弹出菜单中,选择“ 启动新代理” 项。出现一个类似于图2所示的对话框。键入名称(AnotherAgent)和完全限定的类名(cn.bcrab.agent.HelloWorldAgent),

启动新代理对话框

然后按OK。该 AnotherAgent 应出现在在主容器的RMA管理控制台。

JADE管理控制台

6.3 Dummy Agent

使用 Dummy Agent(现成的“工具”代理),该代理允许发送/接收自定义消息来触发它们。除了虚拟代理外,JADE还提供了其他有用的工具代理。 允许检查代理之间的对话的 嗅探器代理 ,允许检查代理内部(例如,当前正在执行的任务)和 日志管理器代理的 Introspector 或 调试器代理 允许在运行时更改类的日志级别。可以像我们对Ping代理所做的那样启动工具代理。但是,它们在RMA GUI中有一个快捷按钮。

启动DummyAgent GUI

因此,让我们单击 管理控制台右上方工具栏中的 Start DummyAgent按钮。 应该创建一个名为 da0 的DummyAgent。


DummyAgent GUI

DummyAgent GUI左侧的表格显示了ACL消息的插槽。选择“ request” 通信行为, 在“content” 插槽中键入 "Hello JADE",最后为消息选择接收者:例如 "hello"。为此,请右键单击“ Receivers” 文本区域,然后选择“ Add” 菜单项。将出现一个类似于下图所示的对话框。

AID编辑对话框 AID编辑对话框 DummyAgent GUI中发送和接收的消息

您可以 通过选择接收的INFORM消息,然后单击带有“眼镜”图标的按钮来检查它。

6.4 关闭平台

关闭平台,在管理GUI中,选择“ choose File --> Shut down Agent Platform” ,然后 在提示您进行确认时选择“Yes”。


相关代码


Reference:

上一篇 下一篇

猜你喜欢

热点阅读