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

Лирическое отступление

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

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

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

Требования

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

Анализ

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

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


generic agent model

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

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

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

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

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


фрагмент диаграммы классов

Реализация

Здесь я опишу основные моменты реализации, касающиеся использования 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 и полюбоваться на общение агентов:

JADE sniffer

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)


здесь можно почитать об авторе


Понравилась статья? Поделитесь с друзьями!


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

  1. DenisMitin:

    Было бы наглядней, если бы были предоставлены исходные файлы проекта …. 😉

  2. Раз возникла такая необходимость — исходники выложу… в ближайшее время:)

  3. iliya:

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *


Ответить с помощью ВКонтакте: