Знакомство с JADE
Цель лабораторной работы
Презентацию к лабораторной работе Вы можете скачать здесь.
Познакомится с мультиагентной платформой JADE, установить платформу на рабочий компьютер, освоить протокол передачи данных между агентами на платформе, запуск главного контейнера платформы и нового агента, на примере агентов "PingAgent" - запрос-ответ.
Инструкция по выполнению лабораторной работы
Подготовка
Перед началом работы необходимо запустить среду разработки Eclipse IDE, загрузить и установить JDK и JADE. Запустить платформу можно двумя способами: из командной строки или в среде разработки. Как и в предыдущих лабораторных работах мы будем использовать среду разработки Eclipse IDE. Для запуска из командной строке необходимо обратится к инструкции на официальном сайте платформы JADE по ссылке: http://jade.tilab.com/doc/index.html.
Для начала знакомства с JADE необходимо установить JDK и запустить Eclipse IDE (см. лаб. работу 1). В Eclipse IDE создать рабочую папку и открыть новый Java проект. Далее, открыть новый файл java, в который будем записывать программный код агента.
Перед тем как создавать агента нам потребуется установить платформу JADE. Скачать архив с платформой можно с официального сайта JADE по ссылке: http://jade.tilab.com/. Но необходимо будет зарегистрироваться и получить подтверждение регистрации по электронной почте. Скачайте последнюю версию платформы. Распакуйте архив и откройте его. Архив содержит 3 папки:
- JADE-bin-4.X – папка с исполняемыми файлами;
- JADE-bin-4.X – папка с исполняемыми файлами;
- JADE-example-4.X – папка с примерами.
Создайте отдельную папку, например, с названием Jade, и скопируйте содержимое всех трех папок из архива в новую папку (для упрощения адреса лучше всего новую папку создать в корне диска).
В результате мы получаем готовую платформу. Проверьте расположение таких файлов как:
- build.xml – находится в корне папки Jade (созданной нами);
- jade.jar – находится в папке lib/;
- папки исходных файлов examples/ и jade/ - находятся в src/.
Перед запуском платформы и дальнейшей работы с ней хотелось бы обозначить следующие моменты в архитектуре системы. Основными элементами мультиагентной системы являются Агенты. Мультиагентная платформа состоит из контейнеров, в которых "живут" Агенты. Контейнер может не содержать ни одного агента или содержать сколько угодно агентов. Каждый контейнер обладает своим сетевым адресом и именем. Есть особый контейнер – главный контейнер – без него платформа не работает. Главный контейнер имеет несколько особенностей. Перечислим их:
- он должен быть создан первым;
- он должен включать в себя двух специальных агентов:
- AMS (agent management system) – агент, который управляет остальными агентами; он способен создавать и останавливать агентов;
- DF (directory facilitation) – по сути представляет из себя желтые страницы, в котором записываются адреса, имена и возможности агентов в системе.
Выполнение работы
Для запуска платформы необходимо запустить Eclipse IDE, создать новую рабочую среду и в ней открыть новый Java проект (рис. 6.10).
Далее переходим в окно создания проекта, задаем имя и нажимаем Next. В следующем окне необходимо подключить к нашему проекту библиотеки Jade (рис. 6.11)
Для подключения библиотек необходимо нажать Add External JARs и указать путь к библиотекам. Они находятся в папке \lib, куда были скопированы все файлы архивов платформы Jade. После этого, нажимаем Finish.
Теперь к проекту подключены библиотеки JADE. Создаем нового Агента из примера "PingAgent". Для этого необходимо создать новый класс в папке \src (рис. 6.12).
Теперь вводим информацию, создаем новый класс в папку Project/src в пакете sprintintel с именем PingAgent. Также на этом этапе необходимо записать в поле "Superclass" следующую информацию: java.lang.Agent и нажать Finish.
Сейчас у нас есть новый Агент и подключены необходимые библиотеки. Необходимо задать программный код Агента. Для этого открываем PingAgent.java из папки examples\PingAgent, которая находится в директории, в которую распакованы архивы Jade. Копируем все содержимое примера в нашего агента. Посмотрим на код нашего агента, в нем есть ошибки, которые необходимо исправить (рис. 6.13).
Эта ошибка вполне понятна. Необходимо исправить имя пакета, который мы используем. В нашем случае – это sprintintel. Далее необходимо обязательно сохранить изменения в файле Агента.
Для того чтобы запустить Агента и мультиагентную платформу переходим меню Run Configuration. В нем добавляем новую конфигурацию запуска Java-приложения. На рис. 6.14 и рис. 6.15 показаны параметры главного класса (MainClass) – jade.Boot и видно название настоящего проекта. В поле Program Argument вкладки Arguments вводим значении "–gui". Таким образом, мы определили, что нам необходимо запустить платформу и главный контейнер, который уже содержит дополнительный класс нашего агента PingAgent.
Нажимаем на кнопку Run и запускаем нашу платформу. Платформа запущена, и мы видим пользовательский интерфейс, в котором запущена платформа и два базовых агента AMS и DF. Чтобы добавить в главный контейнер нашего Агента "Ping", необходимо войти во вкладку Action и добавить класс нашего Агента (рис. 6.17).
Наш агент теперь находится в главном контейнере. В чем же суть Агента в примере PingAgent? Основная задача этого агента – это отправлять ответ в виде слова "Ping" при запросе в виде слова "Pong". В коде эта часть выглядит так:
public void action() { ACLMessage msg = myAgent.receive(); if(msg != null){ ACLMessage reply = msg.createReply(); if(msg.getPerformative()== ACLMessage.REQUEST){ String content = msg.getContent(); if ((content != null) && (content.indexOf("ping") != -1)){ myLogger.log(Logger.INFO, "Agent "+getLocalName()+" - Received PING Request from "+msg.getSender().getLocalName()); reply.setPerformative(ACLMessage.INFORM); reply.setContent("pong"); } } } }
При запуске агента в главном контейнере он обращается в "желтые страницы" – агент DF, который записывает у себя адрес этого агента. Все запросы осуществляются через DF агента. Таким образом, в систему могут входить и выходить новые агенты и быть "на связи".
Теперь проверим работу нашего Агента и отправим ему запрос с помощью DummyAgent – готовый агент с пользовательским интерфейсом, посредством которого возможно отправлять сообщения на другие агенты и получать от них ответы. Для запуска DummyAgent необходимо нажать кнопку StartDummyAgent в ряду кнопок быстрого доступа пользовательского интерфейса платформы. В самом Агенте необходимо составить запрос в правильной форме, как это показано на рис.6.18
После правильного заполнения запроса необходимо нажать на кнопку: отправить сообщение. DummyAgent позволяет отправляет запрос с одного точного адреса агента на точный адрес другого агента даже если они находится в различных контейнерах. Но эти агенты должны быть прописаны в одной мультиагентной системе (т.е. известны DF агентам). Справа, нажав на значок очки, в белом поле пользовательского интерфейса DummyAgent, можно увидеть, пришел ли ответ и какого он содержания (рис.6.19).
Для того, чтобы проще было отслеживать отправку сообщений, можно запустить еще одного агента Sniffer, в котором отражаются стрелочками отправленные сообщения между агентами (рис.6.20).
Задания для самостоятельной работы
- Создать еще одного агента Ping1 и отправить запрос двум агентам одновременно
- Изменить текст сообщения запроса и ответа.
- Создать Container1 (не главный) и создать в нем агента.
- Запустить агентов в примере папки src/examples/bookTrading.
Выводы
В этой главе были описаны основные принципы разработки мультиагентных систем и разобран пример работы с платформой JADE.