Алексей Скороходов опубликовал на 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–точкой доступа (?!)







