Программирование на JADE для новичков

Giovanni Caire, “JADE PROGRAMMING FOR BEGINNERS”, public translation into Russian from English More about this translation.

Another translations: into Ukrainian. Translate into another language.

Руководство JADE

Использование ограничено в соответствии с лицензионным соглашением.

последнее обновление: 9 сентября 2007. JADE 3.6

Автор: Giovanni Caire (TILAB, formerly CSELT)

Copyright (C) 2000 CSELT S.p.A.

Copyright (C) 2001 TILab S.p.A.

Copyright (C) 2002 TILab S.p.A.

Copyright (C) 2003 TILab S.p.A.

Copyright (C) 2004 Telecom Italia S.p.A.

Copyright (C) 2005 Telecom Italia S.p.A.

Copyright (C) 2006 Telecom Italia S.p.A.

Copyright (C) 2007 Telecom Italia S.p.A.

Copyright (C) 2008 Telecom Italia S.p.A.

JADE (Java Agent DEvelopment Framework) - это среда разработки мультиагентных систем соответсвующих спецификациям FIPA. JADE успешно прошёл первый тест на совместимость с FIPA в Сеуле (январь 1999) и второй тест на совместимость в Лондоне (апрель 2001).

Copyright (C) 2000 CSELT S.p.A. (C) 2001 TILab S.p.A. (C) 2002 TILab S.p.A.

Эта библиотека является свободным программным обеспечением; Вы можете её и/или модифицировать в соответствии с условиями GNU Lesser General Public License опубликованой Free Software Foundation, версии 2.1 лицензии.

Эта библиотека распространяется в надежде, что она будет полезной, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без возможной гарантии товарности или пригодности для конкретной цели. Смотреть GNU Lesser General Public License для более подробной информации. Вы должны получить копию GNU Lesser General Public License вместе с этой библиотекой; иначе напишите в Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

Это руководство состоит из следующего: Глава 1 дает краткий обзор JADE и вводит понятия платформы, контейнера, AMS и DF. Глава 2 представляет собой простой пример, который будет использоваться в этом руководстве для иллюстрации шагов, необходимых для разработки простых агентных приложений с использованием JADE. глава 3 сфокусирована на создании агентов и объясняет базовые свойства агентов и AID классов. Глава 4 объясняет, как сделать, чтобы JADE агенты выполняли задачи, и вводит в класс Behaviour (класс поведения). Глава 5 описывает, как организовать общение между агентами и вводит в ACLMessage и MessageTemplateclasses. В главе 6 показано, как использовать "Желтые страницы" услуг, предоставляемых через агента DF используя DFService класс.

Помимо базовых функций, описанных в этом руководстве, JADE предоставляет ряд расширенных функций, таких как поддержка комплексного взаимодействия протоколов и использование пользовательских онтологий. Описание этих функций можно прочесть в JADE Programmer’s guide и Administrator’s guide, доступных на странице JADE (tilab.com).

1 ОБЗОР JADE

JADE - это платформа разработки мультиагентных систем. Включает в себя:

• Динамическую среду, где JADE агенты могут "жить"; она должна быть активна на принимающем хосте до того, как на нём будут запущены один или более агентов.

• Библиотеку классов, которую программисты должны/могут использовать (прямо или опосредованно) для разработки своих агентов.

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

1.1 Контейнеры и платформы

Каждая запущенная динамическая среда JADE называется контейнером и может содержать несколько агентов. Набор активных контейнеров называется платформой. Единственный специальный контейнер - главный (Main) должен всегда быть активным на платформе: все остальные контейнеры регистрируются и связываются с ним в момент запуска. Отсюда следует, что первым контейнером при старте платформы должен быть главный, а все остальные контейнеры должны быть "нормальными" (т.е. не главными) контейнерами и должны заранее "знать", как найти (то есть иметь данные о хосте и порте) главный контейнер (на котором они будут регистрироваться).

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

Вам не нужно знать, как работает динамическая среда JADE , но нужно запускать её перед началом выполнения своих агентов. Старт JADE как главного или обычного контейнера и выполнение агентов на нём описывается в JADE Administrative Tutorial, доступном на сайте JADE.

1.2 AMS и DF

Помимо возможности приёма регистраций от других контейнеров, главный контейнер отличается от обычного контейнера тем, что содержит два специальных агента (автоматически запускаемых одновременно с контейнером).

AMS (система управления агентами) обеспечивает службу именования (то есть гарантирует, что каждый клиент на платформе обладает уникальным именем) и осуществляет управление на платформе (например, можно создавать и ликвидировать агентов на удалённом контейнере по запросу AMS). В этом руководстве не будет описан процесс взаимодействия с AMS, поскольку это является частью продвинутого JADE-программирования.

DF (Координатор каталога) предоставляет сервис "Жёлтые страницы", с помощью которого агент может искать других агентов, предоставляющих услуги, которые нужны данному агенту для достижения целей. Использование этого сервиса, предоставляемого DF-агентом, описано в главе 6.

2 Пример "Торговля книгами"

Эта глава представляет простой пример, который будет использоваться в этом руководстве для иллюстрации шагов, необходимых для разработки агентного приложения с помощью JADE. Сценарий, рассматривающийся в данном примере, включает в себя агентов-книготорговцев и агентов-покупателей, покупающих книги от имени своих пользователей.

Каждый агент-покупатель получает название книги на покупку ("требуемая книга") в качестве аргумента командной строки и периодически запрашивает предложения(искомой книги) у всех известных ему агентов-продавцов. Когда предложение получено, агент-покупатель принимает его и выдает заказ на покупку. Если несколько агентов предоставляют предложения агенту-покупателю, он принимает лучшее из них (с самой низкой ценой). После покупки нужной книги агент-покупатель завершает свою работу.

Каждый агент-продавец имеет минимальный GUI, с помощью которого пользователь может добавить новые книги (и их цены) в локальный каталог книг для продажи. Агент-продавец непрерывно прослушивает запросы от агентов-покупателей. При получении запроса на книгу агенты-продавцы проверяют свои локальные каталоги и, если запрашиваемая книга находится в их каталоге, отвечают на запрос ценой. В противном случае они отказывают. Когда получен заказ на покупку, они обслуживают его и удаляют проданную книгу из каталога.

Все вопросы, связанные с электронными платежами, вне рамок данного руководства и не принимаются во внимание.

Готовые исходники этого примера имеются среди примеров, приведенных в пакете examples.bookTrading.

3 СОЗДАНИЕ JADE АГЕНТА – КЛАСС АГЕНТА

Создание JADE агента очень просто делается определением класса, наследуемого от класса jade.core.Agent и реализацией метода setup() как показано в коде ниже.

import jade.core.Agent;

public class BookBuyerAgent extends Agent {

protected void setup() {

// Выводим приветствие

System.out.println(“Привет! агент-покупатель “+getAID().getName()+” готов.”);

}

}

Метод setup() состоит из инициализации агента. Фактически, работа агента, как правило, выполняется в рамках "поведения", это будет описано в 4 главе.

3.1 Идентификаторы агента

Каждый агент имеет определенный "идентификатор агента", представленный экземпляром класса jade.core.AID. Метод getAID() класса Agent позволяет извлекать идентификатор агента. Объект AID включает глобальное уникальное имя, а также целый ряд адресов. Имя в JADE имеет форму: <имя_агента>@<имя_платформы>, так что агент называющийся Peter, находящийся на платформе, называемой P1, будет иметь глобальное уникальное имя Peter@P1. Адреса, включенные в AID - это адреса платформы, где находится агент. Эти адреса используются только в тех случаях, когда агент должен общаться с другим агентом, находящемся на другой платформе. Разработчики должны заботиться о них только в особых случаях, которые выходят за рамки этого руководства.

Зная имя агента, его AID может быть получен так:

String nickname = “Peter”;

AID id = new AID(nickname, AID.ISLOCALNAME);

Константа ISLOCALNAME указывает, что первый параметр представляет собой псевдоним (локально на платформе), а не глобальное уникальное имя этого агента.

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

Созданый агент может быть откомпилирован так:

javac –classpath <JADE-classes> BookBuyerAgent.java

Для того, чтобы выполнить откомпилированого агента, среда JADE должна быть запущена, и имя для запуска агента должно быть выбрано:

java –classpath <JADE-classes>;. jade.Boot buyer:BookBuyerAgent

Более подробную информацию о компиляции и запуске агентов можно найти в JADE Administrative Tutorial или в JADE Administrator’s Guide, доступном на сайте JADE. Результат ввода команды такой:

C:\jade>java –classpath <JADE-classes> jade.Boot buyer:BookBuyerAgent

5-mag-2008 11.06.45 jade.core.Runtime beginContainer

INFO: ----------------------------------

This is JADE snapshot - revision 5995 of 2007/09/03 09:45:22

downloaded in Open Source, under LGPL restrictions,

at http://jade.tilab.com/

----------------------------------------

5-mag-2008 11.06.51 jade.core.BaseService init

INFO: Service jade.core.management.AgentManagement initialized5-mag-2008 11.06.51 jade.core.BaseService initINFO: Service jade.core.messaging.Messaging initialized

5-mag-2008 11.06.52 jade.core.BaseService init

INFO: Service jade.core.mobility.AgentMobility initialized

5-mag-2008 11.06.52 jade.core.BaseService init

INFO: Service jade.core.event.Notification initialized

5-mag-2008 11.06.52 jade.core.messaging.MessagingService clearCachedSlice

INFO: Clearing cache

5-mag-2008 11.06.53 jade.mtp.http.HTTPServer <init>

INFO: HTTP-MTP Using XML parser com.sun.org.apache.xerces.internal.parsers.SAXParser

5-mag-2008 11.06.54 jade.core.messaging.MessagingService boot

INFO: MTP addresses:

http://NBNT2004130496.telecomitalia.local:7778/acc

5-mag-2008 11.06.54 jade.core.AgentContainerImpl joinPlatform

INFO: --------------------------------------

Agent container Main-Container@NBNT2004130496 is ready.

--------------------------------------------

Привет! Агент-покупатель buyer@NBNT2004130496:1099/JADE готов.

Первая часть вывода на экран - заявление об отсутсвии гарантий JADE, который печатается каждый раз когда среда JADE запускается. Инициализация ядра сервисов (ядро сервисов внутренняя суть JADE и не описана в этом документе) активирована при старте платформы. Наконец, указание на то, что контейнер под названием "Main-Container" готов завершить запуск среды JADE. Когда среда JADE запускает нашего агента, он выводит своё приветствие. Имя агента "buyer", как мы указали в командной строке. Имя платформы "NBNT2004130496: 1099/JADE" назначается автоматически на основе хоста и порта, на котором вы работаете с JADE (см. JADE Administrator's Guide для присвоения имени платформе).

3.3 Завершение работы агента

Даже если наш агент ничего не делает после вывода приветствия, он всё ещё работает. Для того, чтобы прекратить работу, должен быть вызван метод doDelete (). Так же, как метод setup(), который вызывается JADE средой, как только агент запускается, и предназначен для инициализации агента, метод takeDown () вызывается непосредственно перед завершением работы агента и нужен, чтобы включить очистные операции агента.

3.4 Передача аргументов для агента

Агенты могут получать при запуске аргументы, заданные в командной строке. Эти аргументы могут быть получены как массив объектов, с помощью метода getArguments () класса Agent. Как уже говорилось в главе 2, мы хотим, чтобы наш BookBuyerAgent получил название покупаемой книги в качестве аргумента командной строки. Для достижения этой цели мы изменим его следующим образом (1).

import jade.core.Agent;

import jade.core.AID;

public class BookBuyerAgent extends Agent {

// Название покупаемой книги

private String targetBookTitle;

// Лист известных агентов-продавцов

private AID[] sellerAgents = {new AID(“seller1”, AID.ISLOCALNAME),

new AID(“seller2”, AID.ISLOCALNAME)};

// Тут инициализация агента

protected void setup() {

Pages: ← previous Ctrl next
1 2 3 4 5 6

© Copyright (C) 2008 Telecom Italia S.p.A.

Original (English): JADE PROGRAMMING FOR BEGINNERS

Translation: © Ubububu, aivean, Violectra, CYCC, se7en .

translated.by crowd

Like this translation? Share it or bookmark!