Главная страница

Лабораторная работа Агентная платформа jade разработка тестового приложения


Скачать 1.37 Mb.
НазваниеЛабораторная работа Агентная платформа jade разработка тестового приложения
АнкорLABORATOR 1 JADE
Дата10.07.2022
Размер1.37 Mb.
Формат файлаdocx
Имя файлаLaboratornaja_rabota_1.docx
ТипЛабораторная работа
#627872

Курс: «Технологии обработки информации».

Лабораторная работа 1.

Агентная платформа JADE: разработка тестового приложения
доцент кафедры информатики и вычислительной техники Мурманского арктического государственного университета, филиал в г. Апатиты,

к.т.н., Тоичкин Николай Александрович





  • Назначение агентной платформы JADE и средства, предоставляемые разработчику агентных систем

Агент – это программный объект, способный воспринимать ситуацию, принимать решения и коммуницировать с подобными себе объектами, динамически устанавливая с ними связи. Под мультиагентной системой (МАС) будем понимать множество программных агентов, организованных в одно или несколько сообществ, и предназначенных для решения определенной задачи.

Средой разработки и существования МАС являются агентные платформы. Было разработано множество программных реализаций агентных платформ, каждая из которых имеет свои особенности, достоинства и недостатки. Вот лишь небольшой список из более чем ста доступных платформ, публикуемых на сайте организации AgentLink (European Coordination Action for Agent-based Computing): JADE, FIPA-OS, AOS, ZEUS, KADOMA, NOMADS, ARA, AGLETS, GRASSHOPPER, TRACY, AJANTA, LEAP, JACK, SEMOA. Многие из них успешно существуют в виде коммерческих проектов (таких как JACK) или проектов, позиционируемых как проекты с открытым исходным кодом (JADE, ZEUS и др.).

В 90-х годах возникла необходимость создания единых стандартов на разработку агентных систем. В этот период были основаны две организации MASIF (Mobile Agent System Interoperability Facility) и FIPA (Foundation of Physical Intelligent Agents). В результате их работы появились стандарт MASIF и стандарт FIPA, дающие рекомендации по созданию систем мобильных агентов и систем интеллектуальных агентов.

Одной из наиболее популярных агентных платформ в настоящее время является платформа JADE (Java Agent DEvelopment Framework). Проект JADE разрабатывается компанией Telecom Italia Lab с 2000 г.

Агентная платформа JADE является типичным Middleware, т.е. программным обеспечением (ПО) среднего уровня (рис. 1), преставляющим собой набор средств для создания и управления системой с множеством агентов.



Рис. 1. Место Middleware в структуре ПО
Платформа разработки мультиагентных систем JADE включает в себя динамическую среду, где могут «жить» JADE агенты; библиотеку классов, которую программисты могут использовать для разработки собственных агентов; набор графических инструментов, позволяющих управлять активностью запущенных агентов.

JADE предоставляет программисту – разработчику агентных систем следующий набор средств:

  • FIPA-compliant Agent Platform – агентную платформу, основанную на стандарте FIPA и включающую обязательные типы системных агентов, которые автоматически активируются при запуске платформы.

  • Distributed Agent Platform – распределенную агентную платформу, которая может использовать несколько компьютеров (узлов), причем на каждом узле запускается только одна Java Virtual Machine. Агенты исполняются как Java-потоки. Для доставки сообщений между агентами, в зависимости от их местонахождения, используется соответствующий транспортный механизм – Multiple Domains support – множество основанных на FIPA-спецификациях специализированных агентов, которые могут объединяться в федерацию, реализуя таким образом мультидоменную агентную среду.

  • Multithreaded execution environment with two-level scheduling. Каждый JADE-агент имеет собственный поток управления, но он также способен работать в многопотоковом режиме. Java Virtual Machinе проводит планирование задач, исполняемых агентами или одним из них.

  • Object-оriented programming environment. Большинство концепций, свойственных FIPA-спецификации, представляются Java-классами, формирующими интерфейс пользователя.

  • Library of interaction protocols. Использование стандартных интерактивных протоколов fipa-request и fipa-contract-net. Для того чтобы создать агента, который мог бы действовать согласно таким протоколам, разработчикам прикладных программ нужно только имплементировать специфические доменные действия, в то время как вся независимая от прикладной программы протокольная логика будет осуществляться системой JADE.

  • Administration GUI. Простые операции управления платформой могут исполняться через графический интерфейс, отображающий активных агентов и контейнеры агентов. Используя GUI, администраторы платформы могут создавать, уничтожать, прерывать и возобновлять действия агентов, создавать иерархии доменов и мультиагентные федерации.

Платформа JADE написана на языке программирования Java с использованием Java RMI, Java CORBA IDL, Java Serialization и Java Reflection API. Она упрощает разработку мультиагентных систем благодаря использованию FIPA-спецификаций и инструментов (tools), которые поддерживают фазы исправления ошибок (debugging) и развертывания (deployment) системы. Эта агентная платформа может распространяться среди 10 компьютеров с разными операционными системами, и ее можно конфигурировать через удаленный GUI-интерфейс. Процесс конфигурирования этой платформы достаточно гибкий. Единственным требованием такой системы является установка на компьютере Java Run Time требуемой версии.

  • Архитектура агентной платформы JADE

Платформа JADE является распределенной и представляет собой набор контейнеров (рис. 2).


Рис. 2. Платформа JADE
Контейнером называется динамическая среда исполнения мультиагентных приложений, в которой находятся агенты. Каждый контейнер может содержать несколько агентов. Набор активных контейнеров называется платформой. Один из контейнеров всегда является главным (Main container), все остальные контейнеры связываются с ним и регистрируются в момент запуска. Поэтому первым контейнером при старте платформы должен быть главный, а все остальные контейнеры должны быть «обыкновенными» (т.е. ненеглавными) контейнерами и должны заранее «знать», как найти главный контейнер, на котором они будут регистрироваться, т.е. должны иметь данные о хосте и порте.

Другой главный контейнер, запущенный где-либо в сети, представляет собой другую платформу, на которой могут зарегистрироваться новые обычные контейнеры. Рис. 1 иллюстрирует эту концепцию на основе примера, показывающего две JADE-платформы, состоящие из трех и одного контейнера соответственно. JADE-агенты определяются с уникальными именами. При условии, что они знают имена других агентов, они могут общаться, независимо от их фактического местонахождения: в общем контейнере (агенты А2 и А3), в разных контейнерах на одной платформе (агенты А1 и А2), или вообще на разных платформах (А4 и А5). Пользователю не обязательно знать, как работает динамическая среда JADE, но необходимо запускать ее перед началом выполнения своих агентов.

Агенты AMS и DF

Кроме возможности приема регистраций от других контейнеров, главный контейнер отличается от обычного контейнера тем, что содержит два специальных агента, автоматически запускаемых одновременно с контейнером:

  • AMS (Agent Management System – система управления агентами) обеспечивает службу управления агентами, которая позволяет создавать и удалять агентов, а также содержит в себе пространство имен агентов. Имя агента является уникальным и имеет следующий формат: @
    . Зная имена друг друга, агенты могут обмениваться сообщениями как внутри контейнера и платформы, так и между различными платформами.

  • DF (Directory Facilitator – менеджер директорий) представляет собой службу «желтых страниц» (yellow pages), где агенты могут публиковать информацию о предоставляемых ими сервисах. С помощью DF агент может находить агентов, предоставляющих необходимые ему сервисы, и вступать с ними в переговоры. Внутри одной платформы может существовать несколько DF, предоставляющих информацию о различных группах сервисов или о сервисах различных групп агентов.

  • Настройка JADE.

Для начала работы необходимо установить и настроить агентную платформу JADE, для этого надо выполнить следующие шаги:

  • Скачать дистрибутив JADE (архив jadeAll.zip с официального сайта проекта [1], который доступен после регистрации и авторизации; WADE качать не нужно!).

  • Скачать и установить JDK и Eclipse [2,3].

  • Выбрать место для извлечения архива: папку, с коротким путем, содержащим только английские названия.

  • Создать проект. В Eclipse чтобы создать новый java-проект:

  • Выберите пункт меню File -> New -> Java Project;

  • Введите имя проекта;

  • Нажмите Finish.




Рис. 3. Создание нового java-проекта в среде Eclipse


  • Подключение библиотеки JADE к проекту:

  • В операционной системе:

  • В папке проекта создайте подпапку \lib;

  • Скопируйте все файлы *.jar из папки \JADE-bin-4.0\jade\lib\ и всех ее подпапок в папку \lib. Обычно это jade.jar и commons-codec-1.3.jar;

  • В Eclipse:

  • Щелкните правой кнопкой на проекте и из контекстного меню выберите Refresh– папка появится в проекте;

  • Щелкните правой кнопкой на проекте и из контекстного меню выберите Properties;

  • В окне Properties выберите слева раздел Java Build Path;

  • В разделе Java Build Path выберите закладку Libraries;

  • Нажмите справа кнопку Add JARs, выберите скопированные *.jar библиотеки, нажмите ОК.




Рис. 4. Окно свойств проекта – Java Build Path


  • Подключение исходного кода JADE к библиотекам. Для того, чтобы отладчиком заходить внутрь системы JADE или просто смотреть код JADE, необходимо подключить исходный код JADE к библиотеке jade.jar, для этого:

  • В операционной системе:

  • Скопируйте файл JADE-src-4.0.zip в папку \lib.

  • В Eclipse:

  • Щелкните правой кнопкой на проекте и из контекстного меню выберите Refresh– файл JADE-src-4.0.zip появится в проекте;

  • В окне Package Explorer раскройте раздел Referenced Libraries;

  • Щелкните правой кнопкой на библиотеке jade.jar и из контекстного меню выберите Properties;

  • В окне Properties выберите слева раздел Java Source Attachment
    (рис. 5);

  • Нажмите кнопку Workspace и укажите файл с исходным кодом JADE.




Рис. 5. Окно свойств архива
Замечаем, что иконка библиотеки jade.jar изменилась (рис. 6).



Рис. 6. Окно Package Explorer

  • Полезные утилиты

  • Remote management agent

Remote management agent (рис. 7) представляет собой графическую
консоль для управления мультиагентным приложением. Позволяет создавать
новые контейнеры, управлять агентами, создавать сообщения и запускать
средства отладки. Открывается при запуске агента с параметром –gui.


Доступ к остальным утилитам, рассматриваемым в данной главе осуществляется из RMA.



Рис. 7. RMA

  • Dummy agent

Dummy agent (рис. 8) является графической утилитой, которая позволяет посылать и получать сообщения от имени определенного агента, а также сохранять и загружать очередь его сообщений (отправленных и полученных).



Рис. 8. Dummy agent

  • Sniffer management agent

Sniffer agent (рис. 9) – это графическая утилита для просмотра потока сообщений между избранными агентами. Представляет обмен сообщениями в виде диаграмм последовательностей. Позволяет сохранять/загружать поток сообщений между агентами.



Рис. 9. Sniffer agent

  • Introspecor management agent

Introspector agent (рис. 10) – графическая утилита для просмотра внутреннего состояния агента. Позволяет контролировать жизненный цикл агента, просматривать очередь его сообщений, активные и выполненные поведения, а также запускать исполнение агента с задержками между операциями или по шагам. При этом «шагом» поведения агента считается исполнение метода action(), а не команда в коде языка Java.


Рис. 10. Introspector agent

  • Log management agent

Log Manager agent – графическая утилита для отображения лога сообщений в процесе работы агентного приложения.

  • DF GUI

DF GUI (рис. 11) – графическая утилита для визуализации желтых страниц. Позволяет регистрировать и удалять сервисы агентов, а также осуществлять поиск сервисов.



Рис. 11. DF GUI





  • Создание тестовых агентов




  • Написание тестовых агентов: Рассмотрим тривиальную задачу: два агента постоянно обмениваются сообщениями между собой (пинг-понг). В Eclipse:

  • Нажмите правой кнопкой мыши на папке проекта в Eclipse;

  • Выберите пункт меню New -> Class;

  • Заполните поля как показано на рисунке (рис. 12) и нажмите Finish;




Рис. 12. Создание нового проекта


Рис. 13. Окно редактора кода


  • Отредактируйте файл первого агента PingAgent (см. приложение 1);

  • Создайте и отредактируйте файл второго агента PongAgent (см. приложение 2).

  • Запуск тестового агента:

  • В панели инструментов Eclipse откройте выпадающее меню Debug и выберите пункт Debug Configurations...(то же самое можно сделать из меню Run);




Рис. 14.Выбор конфигурации запуска


Рис. 15. Debug Configuration (шаг 1)


  • В окне Debug Configurations во вкладке Main введите имя вашего проекта и класс запуска jade.Boot;



Рис. 16. Debug Configuration (шаг 2)


  • В окне Debug Configurations во вкладке Arguments введите параметры без кавычек "-gui test1:ru.agentlab.PingAgent;test2:ru.agentlab.PongAgent";

где:

  • test1 и test2 — произвольные строковые имена агентов;

  • ru.agentlab  — название java-пакета, в котором находится java-класс агента;

  • PingAgent и PingAgent — имена java-классов агентов.




Рис. 17. Debug Configuration (шаг 3)


  • В окне Debug Configurations нажмите кнопку Debug;

  • Информация о запуске и ошибках выводится в консоль. В результате запуска вы увидите окно Remote Agent Management GUI.



Рис. 18. Запуск агентов
Как видно из консоли, агент test_1 отправил сообщение ”Ping”, сам же его получил и вывел на экран. Также получил и вывел принятое сообщение агент test_2, после чего отправил сообщение ”Pong” это был ответ на полученное сообщение. Далее агент test_1 получив сообщение ”Pong”, выводит его.

С помощью DummyAgent можно проверить работу нашего Агента, отправляя ему запросы. Для запуска DummyAgent необходимо нажать кнопку StartDummyAgent в ряду кнопок быстрого доступа пользовательского интерфейса платформы. В самом Агенте необходимо составить запрос в правильной форме, как это показано на рис.19



Рис. 19. Dummy agent
После правильного заполнения запроса необходимо нажать на кнопку: отправить
сообщение. DummyAgent позволяет отправляет запрос с одного точного адреса агента на
точный адрес другого агента даже если они находится в различных контейнерах. Но эти
агенты должны быть прописаны в одной мультиагентной системе (т.е. известны DF агентам).

Для того, чтобы проще было отслеживать отправку сообщений, можно запустить еще
одного агента Sniffer, в котором отражаются стрелочками отправленные сообщения между агентами (рис.20).



Рис. 20. Запуск сниффера

  • Импорт существующего проекта в Eclipse

  • Выберите меню File->Import....

  • В окне Import выберите вкладку General, а затем Existing Project into Workspace.

  • В окне укажите путь к папке проекта и выберите один или несколько обнаруженных проектов.

  • Нажмите Finish.

  • Источники

  • Официальный сайт Java Agent Development Framework. URL: http://jade.tilab.com/

  • Скачать Java SE Development Kit (JDK) http://www.oracle.com/technetwork/java/javase/downloads/index.html

  • Скачать среду Eclipse http://www.eclipse.org/downloads/

  • Агентная платформа JADE: http://www.studfiles.ru/preview/2947243/#2947243

  • Агенты и мультиагентные системы

http://www.agentlab.ru/confluence/pages/viewpage.action?pageId=7012409


Приложение 1

Листинг: Файл PingAgent.java

package ru.agentlab;

import jade.core.AID;

import jade.core.Agent;

import jade.core.behaviours.CyclicBehaviour;

import jade.domain.AMSService;

import jade.domain.FIPAAgentManagement.AMSAgentDescription;

import jade.domain.FIPAAgentManagement.SearchConstraints;

import jade.lang.acl.ACLMessage;

public class PingAgent extends Agent {

private static final long serialVersionUID = 8257866411543354395L;

public void setup() {

System.out.println("Hello World, my name is : " + getAID().getName());

// Поведение агента исполняемое в цикле

addBehaviour(new CyclicBehaviour(this) {

private static final long serialVersionUID = 7774831398907094833L;

public void action() {

ACLMessage msg = receive();

if (msg != null) {

// Вывод на экран локального имени агента и полученного

// сообщения

System.out.println(" – " + myAgent.getLocalName() + " received: " + msg.getContent());

}

// Блокируем поведение, пока в очереди сообщений агента

// не появится хотя бы одно сообщение

block();

}

});

AMSAgentDescription[] agents = null;

try {

SearchConstraints c = new SearchConstraints();

c.setMaxResults(new Long(-1));

agents = AMSService.search(this, new AMSAgentDescription(), c);

} catch (Exception e) {

System.out.println("Problem searching AMS: " + e);

e.printStackTrace();

}

for (AMSAgentDescription agent : agents) {

AID agentID = agent.getName();

ACLMessage msg = new ACLMessage(ACLMessage.INFORM);

msg.addReceiver(agentID);// id агента которому отправляем сообщение

msg.setLanguage("English");// Язык сообщения

msg.setContent("Ping"); // Содержимое сообщения

send(msg); // отправляем сообщение

}

}

}



Приложение 2

Листинг: Файл PongAgent.java

package ru.agentlab;

import jade.core.Agent;

import jade.core.behaviours.CyclicBehaviour;

import jade.lang.acl.ACLMessage;

public class PongAgent extends Agent {

private static final long serialVersionUID = 3663966406239393054L;

protected void setup() {

addBehaviour(new CyclicBehaviour(this) {

private static final long serialVersionUID = -1912882200351395625L;

public void action() {

ACLMessage msg = receive();

if (msg != null) {

// Вывод на экран локального имени агента и полученного сообщения

System.out.println(" – " + myAgent.getLocalName() + " received: " + msg.getContent());

ACLMessage reply = msg.createReply();

reply.setPerformative(ACLMessage.INFORM); // устанавливаем перформатив сообщения

reply.setContent("Pong"); // содержимое сообщения

send(reply);// отправляем сообщения

}

block();

}

});

}

}


написать администратору сайта