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

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

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

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

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

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

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

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

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

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

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

Реализация:
Этих агентов будем разрабатывать в одном проекте среды разработки Eclipse, но в разных 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 и jdk.
После того, как все это извлечено из архивов и установлено, мы можем создать своего первого агента на платформе JADE (Java Agent DEvelopment Framework). Не будем нарушать традиции и первым нашим агентом будет агент «HelloWorld».

Сначала необходимо создать Java-проект нашего агента в среде Eclipse и подключить 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.

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

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

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

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

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

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

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

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

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

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

В поисках полезного: Приложения Semantic Web на SourceForge.NET

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

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

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

Read the rest of this entry »

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

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

Read the rest of this entry »

Jade+Агенты+Semantic Web: обзор

Под влиянием комментариев из предыдущей заметки решил написать о JADE.

JADE (Java Agent Development Framework)– фреймворк для разработки мультиагентных систем (МАС).

Read the rest of this entry »

На пути к 4G…

Рассуждая на тему онтологий, столкнулся с тем, что Semantic Web при всей своей полезности может уйти с арены намного раньше, чем получит широкое признание и внедрение.

Причем его уход будет связан с введением какого-то нового понятия или бренда, типа Semantic Web 2 или Web 3.0. Естественно, опыт полученный в рамках Semantic Web не будет утрачен и в полной мере будет использоваться в рамках «нового бренда», но вот Semantic Web в том виде который мы знаем (пирог Semantic Web) вряд ли будет существовать. Уже четыре года Semantic Web пытается привлечь к себе внимание, а результаты с учетом глобальности Web не очень то и большие.

Read the rest of this entry »

MOAT или упрощаем Semantic Web до «неприличного»!

MOAT (Meaning Of A Tag) – инфраструктура для семантического аннотирования документов с помощью произвольного набора тегов.

Read the rest of this entry »

В среде Eclipse для обработки онтологий может использоваться набор набор программых компонетов EODM.

EODM (EMF Ontology Definition Metamodel) – реализация RDF(S)/OWL в среде Eclipse.

В рамках EODM разработаны инструменты для обработки (RDF/OWL parser) и преобразования (RDF/OWL transformer) моделей RDF(S)/OWL с возможностями логического вывода (RDF/OWL reasoner).

Подробное руководство по использованию EODM в своих проектах здесь -

http://www.eclipse.org/modeling/mdt/eodm/docs/articles/EODM_Documentation/

Скачать можно отсюда -

http://www.eclipse.org/modeling/mdt/downloads/?project=eodm

Первое впечатление – очень удобное средство для построения маштабируемых mashup-сервисов :smile:

Вопросы? {FAQ}

Здесь вы можете задавать  вопросы по  Semantic Web и связанным технологиям и средствам.

Мы по мере возможности будем на них отвечать ))

Наиболее интересные вопросы будут рассмотрены и ответы на них будут опубликованы в виде заметок на сайте ))

Вопрос 1:

Где взять онтологии для использования в своих проектах?

Ответ:

Вы можете использовать открытую онтологию OpenCyc (весьма легко интегрируется с Jade).

Кроме того, доступны для скачивания онтологии на DBpedia и protege.stanford.edu.


Вопрос 2:

каким образом можно использовать настраиваемый интерфейс Protege для графовой модели памяти? т.е. как бы подменить используемую в Protege фреймовую модель на графовую.
где можно об этом почитать?

Ответ:

Подменять не нужно, просто надо выбрать какую использовать версию редактора Protege – Protege-Frames или Protege-OWL.

Графовый (Protege-OWL) описан здесь

Protege-Frames описан здесь. Этот Protege использует протокол Open Knowledge Base Connectivity. что это почитать можно на ontolib.com в глоссарии и ссылки получить можно там же.


Вопрос 3:

В каких больших коммерческих проектах технологии SW применены? Хотелось бы увидеть архитектуру этих приложений и по-возможности экономический эффект от применения semantic web по сравнению скажем с WEB 2.0.

Ответ:

Один из наиболее интересных коммерческих проектов Semantic Web это проект DBin.

Проект весьма неоднозначный, с одной стороны в нем есть черты rdf store, с другой – социальной сети. О нем немного можно почитать здесь.

В качестве основы для приложения Dbin используется среда Eclipse и новая парадигма Semantic Web Communities.

Анализом экономического эффекта от внедрения SW я не занимался, но при прочих равных разработку программного обеспечения в парадигме Semantic Web выполнить проще, а значит и дешевле. А возможности при этом будут выше. Как минимум синтаксическая и семантическая интероперабельность приложения SW будет гораздо выше, чем у любого другого приложения, построенного на классических технологиях.

К слову, интероперабельность – это способность к взаимодействию!

Вопрос 4:

Что полезного дает использование RDF для описания структуры сайта и для “сайтоделания” вообще?
Разве недостаточно “голого” XML? Насколько существенно использование в проекте именно RDF-графов?

Ответ:

RDF – это средство Semantic Web, которое сделает когда-то возможной автоматическую обработку информации агентами!

RDF – это семантическая разметка данных. Анализ такой разметки позволяет агенту делать логический вывод.

XML ориентировался на отделение структуры данных от их визуального представления, а RDF позволил внести в структуру данных XML понятие семантики. Т.е. позволил данные на веб-страницах представлять в виде наборов связанных отношениями объектов.

Анализ отношений между объектами и есть основа логического вывода.

В своих проектах более целесообразно использовать OWL (как более развитую альтернатива RDF).

Если Вы все-таки останавливаете свой выбор на RDF, то более эффективным будет использование RDF в синтаксисе n3.

RDF в XML/RDF синтаксисе весьма «тяжёлое» решение.

Конкретно, на сайте ontolib.com были доступны два вида информации, первый – html, второй – rdf со схемой данных rdfs. Внешняя программа анализируя содержимое сайта могла выделить ссылку на RDF+RDFS, а уже по ним эта программа должна (в идеале) осуществлять более точный и «осмысленный» анализ содержимого сайта.


Вопрос 5:

Где можно скачать руководство пользователя для Protégé? русскоязычный вариант предпочтительнее, но и на английском дока не помешала бы…

Ответ:

Руководства пользователя, программиста и другая документация по Protege на английском здесь.

Переводы руководств (и многое другое) можно скачать здесь!


Вопрос 6:

Можно ли визуализировать RDF с помощью CSS?

Ответ:

Нет, но можно с помощью XSL.


Вопрос 7:

Допустим документы со связанными с ними RDF-файлами. Если ставить задачу написания поисковика по метаданным, то существует ил язык запросов к такому поисковику? Что уже сделано в этом плане вообще? Спасибо.

Ответ:

Задачу поисковика по метаданным решать не целесообразно. Уже теоретически и практически эту задачу решили, причем давно! Вот решать задачу поиска документов с учетом метаданных – это другое дело! Задача из серии неподъемных, но решив ее, Вы будете на высоте. Суть проблемы в том, что есть документ и соответсвующая ему онтология (или метаданные), надо провести поиск по содержимому документа на основе метаданных описывающих структуру и семантику этого содержимого. В случае, если вы все таки хотите только по метаданным искать, тогда SPARQL+OWL (или SWRL) может решить вашу задачу!

Вопрос 7.1:

Говоря о задаче поиска документов с учетом метаданных, что конкретно вы имеете в виду? Как перейти от ЕЯ запроса к SPARQL, или что? Непонятно.

Ответ: Нет, я имел в виду, что каждый текст нужно представить в виде связанных между собой метаданных, по которым и надо проводить поиск!  такие метаданные в принципе можно назвать семантическими аннотациями текста (но это ущербное понятие мне не нравиться, особенно если учитывать, что я имею ввиду полное семантическое описание текства – причем в некоторой форме это описание можно приравнять  экземпляру объекта онтологии)

В комментариях можно обсудить вопросы и ответы!


Задать вопрос: