Computer Science МФТИ Changes    |    Index    |    Search
::: JadeOnto :::
Parents: WebHome
 
  ACM . Agent . JadeOnto # Edit # Attach # Diffs # Printable # More :::

Main
• Register
• Users
• Site Map

Curriculum

Agent Web
• projects

Algorithms

Web Learn

Image Kit

ProgTech

Publishing

О реализации онтологий на агентной платформе JADE

О пользе онтологий

     В процессе выполнения поставленных задач агенты много общаются между собой. Эта коммуникабельность является, пожалуй, основной чертой, отличающей агентные системы от других. на плаформе JADE общение реализовано с помощью механизма сообщений, пересылаемых средствами платформы от одного агента другому. Каждое такое сообщение представляется классом ALCMessage, содержащим множество полей, среди которых, однако, самым важным является поле content, отражающее содержимое сообщения. Задание значения этого поля является единственным инструментом дать смысловую нагрузку посылаесому сообщению.      Рассмотрим простой пример: пусть агенту А необходимо передать агенту В информацию следующего характера: Есть человек, которого зовут Джон. Ему 45 лет. Эти данные необходимо загнать в сообшение. Сделать это можно несколькими способами. Первый и наиболее тревиальный из них- это превращение информации в строку символов, передача ее и последующий парсинг. Содержимое будет выглядеть примерно так:
name:_JOHN_age:_45

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

Class person
{
  private String name;
  private int age; 
}
      Такая форма представления более удобна, но имеет и свои недостатки. Например, агент, который получает сообщение должен корректным образом разобрать, что ему пришло и что данное сообщение содержит экземпляр класса person, а не что-либо другое. Для того, чтобы это сделать, агент должен располагать информацией о классе person и обо всех остальных классах данной предметной области. Набор таких описаний называется онтологией.

Онтологии и JADE.

     Итак, как мы выяснили, использование онтологий сильно упрощает работу с агентами и их программирование. Однако онтологии являются всего лишь описанием и могут быть применены только с помощью промежуточного инструмента. Набор классов для работы с онтологиями находятся в пакете jade.onto. Задача их сводится к посредничеству между онтологиями и реальными объектами.

Content-reference model

      Онтологии являются формалными явными описаниями предметных областей, но такое определение ничего не говорит о способе их представления. Наивный способ был предложен еще самим Аристотелем и представлял собой иерархию всех вещей. Она явно не годиться для представления в формальном виде. Остоновимся подробно на способе представления онтологий в JADE. Этот способ основан на content-reference model. Механизм ее в следующем.      Каждое понятие предметной области классифицируется в предикат или терм, затем более детально._Термы_ представляю собой базовые понятия предметной области, о которых агенты могут "разговаривать". Примером терма может служить любое понятие, вроде "вещь", "признак". Предикаты представляют собой подобие двузначных функций, которые принимают значения true или false, в зависимости от подставлаеных в них термов. Примером предиката может служить предикат работает, где подставляемыми в него термами будут название компании и имя человека. Предикат возвращает true, если предметная область предполагает, что человек работает на компанию и false, если не предполагает. Понятия или concept расширяет введенную примитиву терм. Понятия используются для обозначения сложных сущностей, для которых термов недостаточно. Примером понятия может служить сложный используемый алгоритм.Кроме того, элементом модели являются действия агентов. Это особые сочетания понятий, которые определяют действия, которые агенты могут выполнять. Действия могут иметь у себя аргументы, подобно предикатам.

     Рассмотрим конкретный пример использования содержательно-ссылочной модели. Для этого рассмотрим онтологию, которая будет описывать работу музыкального магазина(пример music shop). В модель входят следующие элементы.

  • Это один предикат(owns), отвечающий на вопрос, есть или нет в магазине некотороый товар
  • Это терм item, "вещь" в общем.
  • Это понятия, унаследованные от терма item, CD, Book, Track.
  • Это единственноеь действие sell (продать)

Практическое использвание онтологий

      Protege- это программа для работы с онтологиями. Она позволяет представлять онтологии в виде, пригодном для использования при программировании агентов для JADE. Онтологии формируются и описываются с помощью дополненной объектной модели. Это позволяет, например, вводить в классах ссылки не только

Couple of use cases.

      Рассмотрим несколько случаев применения онтологий для программирования JADE- агентов. При этом мы будем рассматривать пример с работой книжного магазина.

     Состав онтологии. Созаданные с помощью Protege онтологии представляют из себя классы с примерно следующим содержимым.

package musicShopOntology;
import jade.content.onto.*;
import jade.content.schema.*;
public class MusicShopOntology extends Ontology {
// The name identifying this ontology
public static final String ONTOLOGY_NAME = "Music-shop-ontology";
// VOCABULARY
public static final String ITEM = "Item";
public static final String ITEM_SERIAL = "serial-number";
public static final String CD = "CD";
public static final String CD_NAME = "name";
public static final String CD_TRACKS = "tracks";
public static final String TRACK = "Track";
public static final String TRACK_TITLE = "title";
public static final String TRACK_DURATION = "duration";
public static final String BOOK = "Book";
public static final String BOOK_TITLE = "title";
public static final String OWNS = "Owns";
public static final String OWNS_OWNER = "owner";
public static final String OWNS_ITEM = "item";
public static final String SELL = "Sell";
public static final String SELL_BUYER = "buyer";
public static final String SELL_ITEM = "item";
// The singleton instance of this ontology
private static Ontology theInstance = new MusicShopOntology();
// This is the method to access the singleton music shop ontology object
public static Ontology getInstance() {
return theInstance;
}
// Private constructor
private MusicShopOntology() {
// The music shop ontology extends the basic ontology
super(ONTOLOGY_NAME, BasicOntology.getInstance())
try {
add(new ConceptSchema(ITEM), Item.class);
add(new ConceptSchema(CD), CD.class);
add(new ConceptSchema(TRACK), Track.class);
add(new ConceptSchema(BOOK), Book.class);
add(new PredicateSchema(OWNS), Owns.class);
add(new AgentActionSchema(SELL), Sell.class);
// Structure of the schema for the Item concept
ConceptSchema cs = (ConceptSchema) getSchema(ITEM);
cs.add(ITEM_SERIAL, (PrimitiveSchema) getSchema(BasicOntology.INTEGER),
ObjectSchema.OPTIONAL); // The serial-number slot is optional and
// allowed values are integers.
// Structure of the schema for the CD concept
cs = (ConceptSchema) getSchema(CD);
cs.addSuperSchema((ConceptSchema) getSchema(ITEM));
cs.add(CD_NAME, (PrimitiveSchema) getSchema(BasicOntology.STRING));
cs.add(CD_TRACKS, (ConceptSchema) getSchema(TRACK), 1,
ObjectSchema.UNLIMITED); // The tracks slot has cardinality > 1
// Structure of the schema for the Track concept
cs = (ConceptSchema) getSchema(TRACK);
cs.add(TRACK_TITLE, (PrimitiveSchema) getSchema(BasicOntology.STRING));
cs.add(TRACK_DURATION, (PrimitiveSchema)
getSchema(BasicOntology.INTEGER), ObjectSchema.OPTIONAL);
// Structure of the schema for the Book concept
cs = (ConceptSchema) getSchema(BOOK);
cs.addSuperSchema((ConceptSchema) getSchema(ITEM));
cs.add(BOOK_TITLE, (PrimitiveSchema) getSchema(BasicOntology.STRING));
// Structure of the schema for the Owns predicate
PredicateSchema ps = (PredicateSchema) getSchema(OWNS);
ps.add(OWNS_OWNER, (ConceptSchema) getSchema(BasicOntology.AID));
ps.add(OWNS_ITEM, (ConceptSchema) getSchema(ITEM));
// Structure of the schema for the Sell agent action
AgentActionSchema as = (AgentActionSchema) getSchema(SELL);
as.add(SELL_ITEM, (ConceptSchema) getSchema(ITEM));
as.add(SELL_BUYER, (ConceptSchema) getSchema(BasicOntology.AID));
}
catch (OntologyException oe) {
oe.printStackTrace();
}
}
}

     Каждый элемент онтологии представляется полем класса, и использует в качестве суперкласса классы терм или действие агента.

     Пересылка сообщений. Пусть мы хотим спросить агента, есть ли у него CD с определенным названием и треками. Для этого в рамках модели есть предикат OWNS. Сообщение готовится следующим образом:

// Prepare the Query-IF message
ACLMessage msg = new ACLMessage(ACLMessage.QUERY_IF);
msg.addReceiver(sellerAID) // sellerAID is the AID of the Seller agent
msg.setLanguage(codec.getName());
msg.setOntology(ontology.getName());
// Prepare the content. Optional fields are not set
CD cd = new CD();
cd.setName(“Synchronicity”);
List tracks = new ArrayList();
Track t = new Track();
t.setTitle(“Every breath you take”);
tracks.add(t);
t = new Track();
t.setTitle(“King of pain”);
tracks.add(t);
cd.setTracks(tracks);
Owns owns = new Owns();
owns.setOwner(sellerAID);
owns.setItem(cd);

Как видно, сначала создаются классы с требуемыми полями, затем они добавляются в сообщение как содержимое. Наконец, JADE транслирует содержимое в строковый формат, что выполняется командой

getContentManager().fillContent(msg, owns);
send(msg);

     Получение сообщений происходит по похожему сценарию.

// Receive the message
MessageTemplate mt = MessageTemplate.and(
MessageTemplate.MatchLanguage(codec.getName()),
MessageTemplate.MatchOntology(ontology.getName()) );
ACLMessage msg = blockingReceive(mt);
try {
ContentElement ce = null;
if (msg.getPerformative() == ACLMessage.QUERY_IF) {
// Let JADE convert from String to Java objects
ce = getContentManager().extractContent(msg);
if (ce instanceof Owns) {
Owns owns = (Owns) ce;
Item it = owns.getItem();
// Check if I have this item and answer accordingly
….
}
….
}
catch (CodecException ce) {
ce.printStackTrace();
}
catch (OntologyException oe) {
oe.printStackTrace();
}
}

Заключение.

     Логический итог написанного состоит в следующем. Онтологии являются довольно универсальным средством, позволяющим описывать предметные области. Без использования онтологи работа любой агентной системы сильно усложняется необходимостью вводить сложные механизмы распознавания и классфикации поступающей информации. Реализация онтолгий в JADE выполнена с помощью содержательно- ссылочной модели. Она позволяет сохранять онтологии в виде классов и кроме того, передавать объекты классов как содержимое сообщений. -- PeterD? - 02 Jun 2004

Attachment sort Action Size Date Who Comment
1.gif manage 11.6 K 06 Jun 2004 - 13:49 PeterD?  
2.gif manage 12.7 K 06 Jun 2004 - 14:05 PeterD?  
3.gif manage 24.0 K 07 Jun 2004 - 18:46 PeterD?  
4.gif manage 6.1 K 07 Jun 2004 - 18:48 PeterD?  
src.rar manage 10.9 K 14 Jun 2004 - 08:51 PeterD?  

Rambler's Top100 Rambler's Top100


# Edit menu  

Topic revision r1.8 - 14 Jun 2004 - 08:51 GMT - PeterD?
Topic parents: WebHome
Copyright © 2003-2017 by the contributing authors.