Использование AgentOWL
| Catherine Vladimirskaya | |
| Екатерина Владимирская | |
| |
| Род деятельности: |
Java Software Engineer |
|---|---|
| Роль участника: | |
| Основной раздел: | |
| Круг интересов: |
мультиагентные системы, логический вывод |
| Сайт: | |
| Nickname | |
| О себе: |
(дополнительная информация) |
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, дополняя ее новыми элементами и связями.
Проектирование
Далее представлен фрагмент диаграммы классов. Здесь описаны два агента, участвующие во взаимодействии , а также их поведения для отправки и получения сообщений
Реализация
Здесь я опишу основные моменты реализации, касающиеся использования 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 и полюбоваться на общение агентов:
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
| Уровень публикуемого материала | |
| Рекомендуемый уровень знаний читателя в предметной области : | |
|---|---|
| Обсуждение: | |
| Публикация | |
| Тип публикации: | |
|---|---|
| Оригинал: | |



