Алексей Скороходов опубликовал на SHCHERBAK.NET вторую из серии статей «Работа с JADE в Eclipse: создание первого агента».
Читаем, как организовать взаимодействие между интеллектуальными агентами на платформе JADE (Java Agent DEvelopment Framework).
Автор: Алексей Скороходов
Данная статья является продолжением статьи «Работа с JADE в Eclipse: Создание первого агента!». В предыдущей статье мы рассмотрели вопросы создания программного агента на платформе JADE, но не рассмотрели вопросы коммуникации агентов и их реализации. По сути, не ответили на вопрос, как необходимо разрабатывать агента, который может взаимодействовать с другими.
Итак, агенты…
Агенты — это активные объекты (программные модули), которые могут инициировать целенаправленную деятельность по восприятию среды и воздействию на неё.
Агентам присущи следующие «ментальные» свойства (или их подмножества)*:
- знания (knowledge)-постоянные, неизменяемые в процессе функционирования знания агента о себе, среде и других агентах;
- убеждения(beliefs)-знания агента о среде (в том числе, о других агентах), которые могут стечением времени изменяться и становиться неверными;
- желания(desires)-состояния, которых агент желает достичь (могут быть противоречивыми), аналогичны целям;
- намерения(intentions)-действия, которые агент собирается выполнить вследствие своих желаний или в силу взятых на себя обязательств;
- обязательства (commitments)-задачи, решение которых агент берет на себя в рамках кооперации с другими агентами по их просьбе или поручению.
* автор вышеперечисленных свойств агентов – Тарасов В.Б.
В данной статье мы разработаем два типовых агента:
- Агента, который будет искать агентов в агентной системе (JADE) и «здороваться» с ними
- Агента, отвечающего на «приветствие».
Реализация:
Этих агентов будем разрабатывать в одном проекте среды разработки 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».
рисунок 2
На сегодня все… AgentOWL и вопросы повышения интеллектуальности агентов будут расмотрены в следующих статьях.
К SHCHERBAK.NET присоединился новый автор – Алексей Скороходов!
Теперь в рубрике «Алексей Скороходов» вы, уважаемые читатели, сможете познакомится с материалами, посвящёнными разработке агентов в JADE (Java Agent DEvelopment Framework).
Первую статью Алексея Скороходова вы можете почитать здесь!
Напоминаю, рисунки в статьях представлены в виде миниатюр!
Для просмотра полноразмерных версий рисунков в статьях необходимо с помощью «мыши» кликнуть на миниатюре рисунка и, если у вас включен javascript, откроется окно с рисунком!
Автор: Алексей Скороходов
Для создания агента как видно из названия нам понадобится JADE, eclipse и jdk.
После того, как все это извлечено из архивов и установлено, мы можем создать своего первого агента на платформе JADE (Java Agent DEvelopment Framework). Не будем нарушать традиции и первым нашим агентом будет агент «HelloWorld».
Сначала необходимо создать Java-проект нашего агента в среде Eclipse и подключить JADE к этому проекту (см. Рис 1.)
Рисунок 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).
Рисунок 2.
Кликаем на кнопку с именем «Add External JARs» и указываем путь к библиотекам JADE, в моем случае это «D:\diplom\stop\bin\jade\lib».
Результат наших действий:
Рисунок 3.
Перед тем как запустить нашего агента необходимо настроить параметры запуска проекта. Это можно сделать выбрав в выпадающем меню «Open Run Dialog», как показано на рис. 4.
Рисунок 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?
Если Вам есть, что сказать по поводу редакторов онтологий, пишите в комментарии!
Несколько лет назад открыл для себя замечательный ресурс SourceForge.NET. Меня, как разработчика и исследователя Semantic Web, этот ресурс не мог не заинтересовать. Этот ресурс просто кладезь структурированной информации о различных приложениях, в том числе и приложениях Semantic Web. Одних только проектов, связанных с онтологиями, в нем 185. Плюс 16814 проектов так или иначе связанных с Semantic Web.
Вообщем, этот ресурс может быть весьма полезен исследователям Semantic Web,- как минимум здесь Вы можете посмотреть, какие проекты уже разрабатываются и, главное, на какой стадии разработки находятся. Хочу отметить один немаловажный момент – как бы много Semantic Web проектов не было зарегистрировано на SourceForge.NET, большая часть из них не поддерживается или находится в такой стадии разработки, что просто нельзя их использовать в своих разработках. Но это о грусном!
В качестве положительных моментов – на SourceForge.NET могут быть найдены аннотации существующих Semantic Web проектов и, если повезет, их программная реализация и исходники
Семантические веб-сервисы = Существующие веб-сервисы с SPARQL–точкой доступа (?!)
JADE (Java Agent Development Framework)– фреймворк для разработки мультиагентных систем (МАС).
Рассуждая на тему онтологий, столкнулся с тем, что Semantic Web при всей своей полезности может уйти с арены намного раньше, чем получит широкое признание и внедрение.
Причем его уход будет связан с введением какого-то нового понятия или бренда, типа Semantic Web 2 или Web 3.0. Естественно, опыт полученный в рамках Semantic Web не будет утрачен и в полной мере будет использоваться в рамках «нового бренда», но вот Semantic Web в том виде который мы знаем (пирог Semantic Web) вряд ли будет существовать. Уже четыре года Semantic Web пытается привлечь к себе внимание, а результаты с учетом глобальности Web не очень то и большие.
MOAT (Meaning Of A Tag) – инфраструктура для семантического аннотирования документов с помощью произвольного набора тегов.
В среде Eclipse для обработки онтологий может использоваться набор набор программых компонетов EODM.
В рамках EODM разработаны инструменты для обработки (RDF/OWL parser) и преобразования (RDF/OWL transformer) моделей RDF(S)/OWL с возможностями логического вывода (RDF/OWL reasoner).
http://www.eclipse.org/modeling/mdt/eodm/docs/articles/EODM_Documentation/
http://www.eclipse.org/modeling/mdt/downloads/?project=eodm
Первое впечатление – очень удобное средство для построения маштабируемых mashup-сервисов
Здесь вы можете задавать вопросы по 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, или что? Непонятно.
Ответ: Нет, я имел в виду, что каждый текст нужно представить в виде связанных между собой метаданных, по которым и надо проводить поиск! такие метаданные в принципе можно назвать семантическими аннотациями текста (но это ущербное понятие мне не нравиться, особенно если учитывать, что я имею ввиду полное семантическое описание текства – причем в некоторой форме это описание можно приравнять экземпляру объекта онтологии)
В комментариях можно обсудить вопросы и ответы!
Задать вопрос:







