Работа с JADE в Eclipse: разработка агентов (часть 2)

Алексей Скороходов опубликовал на SHCHERBAK.NET вторую из серии статей "Работа с JADE в : создание первого агента".
Читаем, как организовать взаимодействие между интеллектуальными агентами на платформе JADE (Java Agent DEvelopment Framework).

Автор: Алексей Скороходов

Данная статья является продолжением статьи «Работа с JADE в Eclipse: Создание первого агента!». В предыдущей статье мы рассмотрели вопросы создания программного агента на платформе JADE, но не рассмотрели вопросы коммуникации агентов и их реализации. По сути, не ответили на вопрос, как необходимо разрабатывать агента, который может взаимодействовать с другими.

Итак, агенты...

Агенты — это активные объекты (программные модули), которые могут инициировать целенаправленную деятельность по восприятию среды и воздействию на неё.

Агентам присущи следующие «ментальные» свойства (или их подмножества)*:

  • знания (knowledge)-постоянные, неизменяемые в процессе функционирования знания агента о себе, среде и других агентах;
  • убеждения(beliefs)-знания агента о среде (в том числе, о других агентах), которые могут стечением времени изменяться и становиться неверными;
  • желания(desires)-состояния, которых агент желает достичь (могут быть противоречивыми), аналогичны целям;
  • намерения(intentions)-действия, которые агент собирается выполнить вследствие своих желаний или в силу взятых на себя обязательств;
  • обязательства (commitments)-задачи, решение которых агент берет на себя в рамках кооперации с другими агентами по их просьбе или поручению.

* автор вышеперечисленных свойств агентов - Тарасов В.Б.

В данной статье мы разработаем два типовых агента:

  1. Агента, который будет искать агентов в агентной системе (JADE) и «здороваться» с ними
  2. Агента,  отвечающего на «приветствие».

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

Реализация агента 1 (A.java) представлена в листинге ниже:

package Agent_A;

import jade.core.Agent;
import jade.core.AID;
import jade.domain.AMSService;
import jade.domain.FIPAAgentManagement.*;
import jade.core.behaviours.*;
import jade.lang.acl.*;

public class A extends Agent{
protected void setup()
{
addBehaviour(new CyclicBehaviour(this) // Поведение агента исполняемое в цикле
{
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 (int i=0; i
{
AID agentID = agents[i].getName();
ACLMessage msg = new ACLMessage(ACLMessage.INFORM);
msg.addReceiver(agentID);// id агента которому отправляем сообщение
msg.setLanguage("English");//Язык
msg.setContent("Ping");//Содержимое сообщения
send(msg);//отправляем сообщение
}
}
}

Реализация агента 2 (B.java) представлена в листинге ниже:

package Agent_B;

import jade.core.Agent;
import jade.core.behaviours.*;
import jade.lang.acl.*;

public class B extends Agent{
protected void setup()
{
addBehaviour(new CyclicBehaviour(this)
{
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 )
//set the performative of this ACL message object to the passed constant. Remind to use the set of constants (i.e. INFORM, REQUEST, ... ) defined in this class
reply.setContent("Pong");Содержимое сообщения
send(reply);//отправляем сообщения
}
block();
}
});
}
}

Как видно из рисунка 1, агент ххх отправил сообщение ”Ping” сам его же получил и вывел на экран.Также получил и вывел принятое сообщение агент ууу, после чего отправил сообщение ”Pong” это был ответ на полученное сообщение. Далее агент ххх получив сообщение ”Pong”, выводит его. (xxx,yyy -экземпляры соответствующих классов (агентов))



Сообщения между агентами

рисунок 1


Далее, с помощью снифера, который встроен в платформу Jade мы можем видеть какие сообщения и кому были отправлены. Так на рис 2. наш агент «xxx» отправил сообщение всем агентам запущенным в данный момент на платформе  JADE  (включая и себя) это связано с тем, что при поиске агентов мы «c.setMaxResults (new Long(-1));»  установили равным «-1».


Сниффер  JADE

рисунок 2

На сегодня все... AgentOWL и вопросы повышения интеллектуальности агентов будут расмотрены в следующих статьях.

Работа с JADE в Eclipse: Создание первого агента!

К SHCHERBAK.NET присоединился новый автор - Алексей Скороходов!

Теперь в рубрике "Алексей Скороходов" вы, уважаемые читатели, сможете познакомится с материалами, посвящёнными разработке агентов в JADE (Java Agent DEvelopment Framework).

Первую статью Алексея Скороходова вы можете почитать здесь!


Напоминаю, рисунки в статьях представлены в виде миниатюр!

Для просмотра полноразмерных версий рисунков в статьях необходимо с помощью "мыши" кликнуть на миниатюре рисунка и, если у вас включен javascript, откроется окно с рисунком!

Работа с JADE в Eclipse: Создание первого агента!

Автор: Алексей Скороходов

Для создания агента как видно из названия нам понадобится JADE, eclipse и jdk.
После того, как все это извлечено из архивов и установлено, мы можем создать своего первого агента на платформе JADE (Java Agent DEvelopment Framework). Не будем нарушать традиции и первым нашим агентом будет агент «HelloWorld».

Сначала необходимо создать Java-проект нашего агента в среде и подключить JADE к этому проекту (см. Рис 1.)

Мастер создания JAVA проекта

Рисунок 1.

Далее, в полученном проекте в папке src создаем Package c именем «hello». Теперь пришла очередь создать class с именем «HelloWorld» .

Ну и наконец код агента. В нашем случае он будет выглядеть так:


package hello;

import jade.core.Agent;

public class HelloWorld extends Agent
{
public void setup()
{
System.out.println(”Hello Yuhana, my name is : ” +getAID().getName());
}
}

Теперь необходимо подключить JADE (рис. 2 и 3).

Мастер создания JAVA проекта

Рисунок 2.

Кликаем на кнопку с именем «Add External JARs» и указываем путь к библиотекам JADE, в моем случае это «D:\diplom\stop\bin\jade\lib».
Результат наших действий:

Add External JARs JADE

Рисунок 3.

Перед тем как запустить нашего агента необходимо настроить параметры запуска проекта. Это можно сделать выбрав в выпадающем меню «Open Run Dialog», как показано на рис. 4.

Open Run Dialog

Рисунок 4.

Далее, необходимо для «Java Application» создать новую конфигурацию. Во вкладке «Main» присвоим имя нашей конфигурации «test_agents». В «Main class» при нажатии кнопки «Search» выбираем «Boot — jade» и ставил «галочку» в «Include system libraries when searching for a main class» (см. Рис. 5 ).

Выполнение Агента

Рисунок 5.

Далее, во вкладке «Arguments» в «Program argument» добавляем строку «-gui jade.Boot test:hello.HelloWorld»!!!

Ну вот и все, запускаем и получаем агента, выполнившего элементарное действие:

Выполнение Агента

Рисунок 6.

Так с помощью чего лучше создавать онтологии?

Проведённый опрос на сайте SHCHERBAK.NET показал, что многие пользуются редактором онтологий Protege.

, OilEd, не очень-то пользуются популярностью. Если с вообщем все ясно (качественный продукт за весьма большие деньги), то с остальными ...

Мне лично на их рассмотрение хватило 30 минут ... после Protege эти редакторы для моих задач уже не подходили! Хотя редакторы достойные!

- мощный и стабильный редактор онтологий, причем во многих отношениях лучше Protege... но как мне кажется мог бы стоить меньше.

Меня удивил тот факт, что есть другие достойные альтернативы Protege -

IBM Integrated Ontology Development Toolkit () - 1 час на регистрацию + 15 минут на установку закончились не успешно! Ничего не могу сказать! Но ODM для я пользуюсь, может и достойная вещь! Все таки проекты весьма связаны между собой!

SWOOP - интересный проект, но интерфейс угнетает...

И еще несколько ссылок на редакторы онтологий.

А вы чем пользуетесь?

P.S. В заметке по поводу редакторов высказано мое субъективное мнение и не более того! В опросе несколько человек сказали - мы используем какой-то другой редактор. Неужели это SWOOP?

Если Вам есть, что сказать по поводу редакторов онтологий, пишите в комментарии! ;)

Несколько лет назад открыл для себя замечательный ресурс SourceForge.NET. Меня, как разработчика и исследователя Semantic Web, этот ресурс не мог не заинтересовать. Этот ресурс просто кладезь структурированной информации о различных приложениях, в том числе и приложениях Semantic Web. Одних только проектов, связанных с онтологиями, в нем 185. Плюс 16814 проектов так или иначе связанных с Semantic Web.

Вообщем, этот ресурс может быть весьма полезен исследователям Semantic Web,- как минимум здесь Вы можете посмотреть, какие проекты уже разрабатываются и, главное, на какой стадии разработки находятся. Хочу отметить один немаловажный момент - как бы много Semantic Web проектов не было зарегистрировано на SourceForge.NET, большая часть из них не поддерживается или находится в такой стадии разработки, что просто нельзя их использовать в своих разработках. Но это о грусном!

В качестве положительных моментов - на SourceForge.NET могут быть найдены аннотации существующих Semantic Web проектов и, если повезет, их программная реализация и исходники :)

Читать продолжение »

Семантические веб-сервисы = Существующие веб-сервисы с SPARQL–точкой доступа (?!)

При реализации такого вот равенства уже мог бы наступить Semantic Web!

Читать продолжение »