Использование AgentOWL

Материал из Semantic Future
Перейти к: навигация, поиск
Catherine Vladimirskaya
Екатерина Владимирская
2PigDu5NcRfUo.jpeg
Род деятельности:

Java Software Engineer

Роль участника:

Участник, Администратор

Основной раздел:

Агентные технологии

Круг интересов:

мультиагентные системы, логический вывод

Сайт:

http://sallie.mp

Nickname

Sally

О себе:

(дополнительная информация)


AgentOWL – небольшая java библиотека, разработанная для поддержки RDF/OWL моделей для Jade агентов.

Здесь используется описание модели знаний агента(generic agent model), основанная на пяти основных элементах: Resources, Actions, Actors, Context и Events. Поддерживается обмен сообщениями в формате RDF/OWL, включение полученной информации в модель.

Содержание

Пример использования AgentOWL

Требования

Краткое описание возможностей системы. Необходимо обеспечить взаимодействие с различными ресурсами сети(получать и размещать информацию). Основные ресурсы – порталы, блоги, вики и т.д. В примере будут раскрыты особенности обмена информацией между агентами, детали внешних взаимодействий в данном случае нас не интересуют.

Анализ

Для каждого ресурса создается свой агент (SemWebAppAgent, PortalAgent, BlogAgent, WikiAgent). Все агенты системы будут использовать эту онтологию, однако она будет наполнена разными индивидами.

SemWebAppAgent способен выполнять запросы к SPARQL endpoint приложений Semantic Web. Допустим остальные агенты такой возможностью не обладают(они могут использовать SPARQL только при взаимодействии внутри системы), поэтому при возникновении такой необходимости делегируют эту задачу агенту SemWebAppAgent.

SemWebAppAgent, в свою очередь, при получении SPARQL запросов выполняет их на локальной OWL-онтологии; если же информация не найдена, то осуществляется запрос к внешнему хранилищу. При этом сам запрос естественно, изменяется.

Для этого примера используем методологию, предложенную автором проекта AgentOWL +основные принципы методологии jade

Для начала создадим простую онтологию в Protege. Если быть точнее, мы расширяем generic agent model, предложенную в проекте AgentOWL, дополняя ее новыми элементами и связями.

Agentowl1.gif

Проектирование

Далее представлен фрагмент диаграммы классов. Здесь описаны два агента, участвующие во взаимодействии , а также их поведения для отправки и получения сообщений

Agentowl2.gif

Реализация

Здесь я опишу основные моменты реализации, касающиеся использования AgentOWL.

Созданную в Protege модель мы помещаем memory_init/agents.owl, туда же добавляем онтологии для всех агентов, наполненные индивидами в разной степени(для имитации рабочей обстановки).

Создаем агентов согласно представленной UML диаграмме классов и добавляем им необходимую функциональность. В разработанном примере BlogAgent отправляет сообщение SPARQL к SemWebAppAgent(в сообщении запрашиваются индивиды для некоторого класса онтологии), получает ответ в формате OWL и добавляет информацию в свою модель.

Так загружаем модель знаний агента(обычно в методе setup() агента, тут используется agent.core.memory.Memory):

Memory  mem = new Memory(»config/BlogAgent.properties», «BlogAgent»);

Сообщения составляем с использованием agent.core.communication.Message из AgentOWL

Пример SPARQL запроса(для поведения QuerySWAgentBehaviour):

Message.createQueryMessage(senderAgent, «SemWebAppAgent», «SELECT ?x WHERE {?x rdf:type ont:» + resourceType + «}»));

Пример ответа(для поведения SendResultBehaviour)

Message.createInformMessage(senderAgent, «BlogAgent», resource));

где resourceType - класс запрашиваемого ресурса, resource - найденные ресурсы(individuals)

Читаем полученное сообщение(готовых методов для чтения в agent.core.communication.Message нет, нужно немного знать jena API)

OntModel m = ModelFactory.createOntologyModel();

m.read(new StringReader(msg.getContent()), Ontology.BASE);

Добавление полученной информации(resource) в модель

Property property = mem.createProperty(»resource»);
Resource resource = mem.getModel().getResource(resource.getURI());
agentIndividual.addProperty(property, resource);

Есть еще возможность загрузки файла с правилами для вывода новых утверждений в онтологической модели агента(agent.core.memory.Memory, метод performInference)

Для отображения результатов в GUI используется XMLRPC Server – org.apache.xmlrpc.WebServer (в своем примере я не создавала GUI для агентов)

Можно также запустить sniffer и полюбоваться на общение агентов:

Agentowl3.gif

Tips

1. В AgentOWL config.properties лежит внутри jar и там прописан путь к memory_init/agents.owl Т.е. либо придется воссоздать этот путь и поместить туда необходимую модель, либо поменять SOURCE_FILE=memory_init/agents.owl в config.properties и пересобрать AgentOWL:)

2. Интерфейс для ввода данных отображения результатов деятельности агентов лучше создавать вебный, используя JSP и преимущества XSLT

3. Агенты могут в процессе работы сохранять знания из памяти в БД(любую которую поддерживает jena API) и в OWL файл и читать их оттуда.

4. Неплохо бы саму библиотеку развить и доработать. Потому что она действительно «небольшая» и в этой области можно еще сделать много чего. Например, абстрактные агенты, в которых уже есть загрузка модели, поведения для обработки входящих сообщений и т.п.

5.В некоторых случаях для агентов удобнее будет использовать онтологии, где объекты отображены в бины(стандартные средства работы с онтологиями в Jade и/или Beangenerator)

Исходный код

Проект-пример можно найти на xp-dev(svn). Пока сборка maven не пофикшена(некоторые dependency библиотеки jena на данный момент maven'ом не тянутся), зато есть сгенерированный ant build


Уровень публикуемого материала
Рекомендуемый уровень знаний читателя в предметной области :

Средний

Обсуждение:
Публикация
Тип публикации:

Обзор

Оригинал:

источник:shcherbak.net

Личные инструменты
Пространства имён
Варианты
Действия
Проект SF:
Деятельность:
Сообщество:
Хранилище знаний:
Гиды:
Руководства:
Инструменты