Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Пример реализации работы с различными схемами и абстрактными дескрипторами онтологии для мультиагентной системы в программной среде JADE

Пример реализации онтологии для мультиагентной системы в программной среде JADE | Пример реализации детерминированного конечного автомата для мультиагентной системы в программной среде JADE | Пример реализации последовательности действий для мультиагентной системы в программной среде JADE | Пример реализации параллельных действий для мультиагентной системы в программной среде JADE | Пример реализации работы со службами AMS и DF для мультиагентной системы в программной среде JADE | Пример реализации работы с протоколом FIPA-Request для мультиагентной системы в программной среде JADE | Пример реализации работы с протоколом FIPA-ContractNet для мультиагентной системы в программной среде JADE |


Читайте также:
  1. Boot (англ. загрузка. Пример: основной загрузочный сектор) -вирусы
  2. D.1. Примеры уязвимостей
  3. F48.1 Синдром деперсонализации-дереализации
  4. I. Задания для самостоятельной работы
  5. I. Задания для самостоятельной работы
  6. I. Задания для самостоятельной работы
  7. I. Задания для самостоятельной работы

 

package ExampleOntology;

 

import jade.Boot;

import jade.core.Profile;

import jade.core.Runtime;

import jade.core.ProfileImpl;

import jade.wrapper.ContainerController;

import jade.wrapper.AgentController;

 

// Главная программа

public class Main

{

public Main() {}

 

// Запуск агентов получателя и отправителя

public static void main(String[] args)

{

// Загрузка JADE-системы

String arg[] = {"-gui"};

Boot boot=new Boot(arg);

// Создание агентного контейнера (для локального хоста)

Profile p = new ProfileImpl();

p.setParameter(Profile.MAIN_HOST, "1-fcd36d9673f14");

p.setParameter(Profile.MAIN_PORT, "1099");

p.setParameter(Profile.CONTAINER_NAME, "MyContainer");

Runtime rt = Runtime.instance();

ContainerController cc = rt.createAgentContainer(p);

// Создание и запуск агентов получателя и отправителя,

// которые содержатся в главном контейнере

try

{

AgentController agent1 = cc.createNewAgent("sender", "ExampleOntology.Sender", null);

agent1.start();

AgentController agent2 = cc.createNewAgent("receiver", "ExampleOntology.Receiver", null);

agent2.start();

}

// Обработка исключительной ситуации

catch(Exception e) {e.printStackTrace();}

}}

 


package ExampleOntology;

 

import jade.content.onto.Ontology;

import jade.content.onto.BasicOntology;

import jade.content.onto.OntologyException;

import jade.content.schema.PrimitiveSchema;

import jade.content.schema.ConceptSchema;

import jade.content.schema.ObjectSchema;

import jade.content.schema.AggregateSchema;

import jade.content.schema.PredicateSchema;

import jade.content.schema.AgentActionSchema;

 

// Онтология

public class PeopleOntology extends Ontology

{

// Имя онтологии

public static final String ONTOLOGY_NAME = "PEOPLE_ONTOLOGY";

 

// Концепты (человек, мужчина, женщина, адрес)

public static final String PERSON = "PERSON";

public static final String MAN = "MAN";

public static final String WOMAN = "WOMAN";

public static final String ADDRESS = "ADDRESS";

 

// Слоты

public static final String NAME = "NAME";

public static final String STREET = "STREET";

public static final String NUMBER = "NUMBER";

public static final String CITY = "CITY";

 

// Предикаты

public static final String FATHER_OF = "FATHER_OF";

public static final String MOTHER_OF = "MOTHER_OF";

 

// Роли предикатов

public static final String FATHER = "FATHER";

public static final String MOTHER = "MOTHER";

public static final String CHILDREN = "CHILDREN";

 

// Действия

public static final String MARRY = "MARRY";

 

// Аргументы действий

public static final String HUSBAND = "HUSBAND";

public static final String WIFE = "WIFE";

 

// Экземпляр онтологии

public static Ontology theInstance = new PeopleOntology();

 

// Метод доступа к экземпляру онтологии

public static Ontology getInstance() {return theInstance;}

 

 

// Конструктор

public PeopleOntology()

{

super(ONTOLOGY_NAME, BasicOntology.getInstance());

try

{

PrimitiveSchema stringSchema = (PrimitiveSchema)getSchema(BasicOntology.STRING);

PrimitiveSchema integerSchema = (PrimitiveSchema)getSchema(BasicOntology.INTEGER);

 

// Схема для концепта Address

ConceptSchema addressSchema = new ConceptSchema(ADDRESS);

addressSchema.add(STREET, stringSchema, ObjectSchema.OPTIONAL);

addressSchema.add(NUMBER, integerSchema, ObjectSchema.OPTIONAL);

addressSchema.add(CITY, stringSchema);

 

// Схема для концепта Person

ConceptSchema personSchema = new ConceptSchema(PERSON);

personSchema.add(NAME, stringSchema);

personSchema.add(ADDRESS, addressSchema, ObjectSchema.OPTIONAL);

 

// Схема для концепта Man

ConceptSchema manSchema = new ConceptSchema(MAN);

manSchema.addSuperSchema(personSchema);

 

// Схема для концепта Woman

ConceptSchema womanSchema = new ConceptSchema(WOMAN);

womanSchema.addSuperSchema(personSchema);

 

// Добавление схемы в онтологию и связывание с ней концепта

add(personSchema, Person.class);

add(manSchema, Man.class);

add(womanSchema, Woman.class);

add(addressSchema, Address.class);

 

// Схема для агрегата

AggregateSchema childrenSchema = new AggregateSchema(BasicOntology.SEQUENCE);

 

// Схема для предиката FatherOf

PredicateSchema fatherOfSchema = new PredicateSchema(FATHER_OF);

fatherOfSchema.add(FATHER, manSchema);

fatherOfSchema.add(CHILDREN, childrenSchema);

 

// Схема для предиката MotherOf

PredicateSchema motherOfSchema = new PredicateSchema(MOTHER_OF);

motherOfSchema.add(MOTHER, womanSchema);

motherOfSchema.add(CHILDREN, childrenSchema);

 

// Добавление схемы в онтологию и связывание с ней предиката

add(fatherOfSchema, FatherOf.class);

add(motherOfSchema, MotherOf.class);

 

// Схема для действия

AgentActionSchema marrySchema = new AgentActionSchema(MARRY);

marrySchema.add(HUSBAND, manSchema);

marrySchema.add(WIFE, womanSchema);

 

// Добавление схемы в онтологию и связывание с ней действия

add(marrySchema);

} catch(OntologyException oe) { oe.printStackTrace(); }

}

}


package ExampleOntology;

import jade.content.Concept;

// класс адрес

public class Address implements Concept

{

public String city = null;

public String street = null;

public int number = 0;

 

public void setCity(String city) {this.city = city;}

 

public void setStreet(String street) {this.street = street;}

 

public void setNumber(int number) {this.number = number;}

 

public String getCity() {return city;}

 

public String getStreet() {return street;}

 

public int getNumber() {return number;}

}

 

 

package ExampleOntology;

import jade.content.Concept;

// класс человек

public class Person implements Concept

{

public String name = null;

public Address address = null;

 

public void setName(String name) {this.name = name;}

 

public void setAddress(Address address){this.address=address;}

 

public String getName() {return name;}

 

public Address getAddress() {return address;}

}

 

 

package ExampleOntology;

// класс мужчина

public class Man extends Person {}

 

 

package ExampleOntology;

// класс женщина

public class Woman extends Person {}

 


package ExampleOntology;

 

import jade.content.Predicate;

import jade.util.leap.List;

 

// класс отец

public class FatherOf implements Predicate

{

public List children = null;

public Man father = null;

 

public void setChildren(List children){this.children=children;}

 

public void setFather(Man father) {this.father = father;}

 

public Man getFather() {return father;}

 

public List getChildren() {return children;}

}

 

 

package ExampleOntology;

 

import jade.content.Predicate;

import jade.util.leap.List;

 

// класс мать

public class MotherOf implements Predicate

{

public List children = null;

public Woman mother = null;

 

public void setChildren(List children){this.children=children;}

 

public void setMother(Woman mother) {this.mother = mother;}

 

public Woman getMother() {return mother;}

 

public List getChildren() {return children;}

}

 


package ExampleOntology;

import jade.core.Agent;

import jade.core.AID;

import jade.core.behaviours.SimpleBehaviour;

import jade.lang.acl.ACLMessage;

import jade.util.leap.List;

import jade.util.leap.ArrayList;

import jade.content.ContentManager;

import jade.content.abs.AbsConcept;

import jade.content.abs.AbsAggregate;

import jade.content.abs.AbsVariable;

import jade.content.abs.AbsPredicate;

import jade.content.abs.AbsIRE;

import jade.content.onto.Ontology;

import jade.content.onto.BasicOntology;

import jade.content.lang.Codec;

import jade.content.lang.sl.SLCodec;

import jade.content.lang.sl.SLVocabulary;

// Агент-отправитель

public class Sender extends Agent

{

// Получить идентификатор менеджера контента

public ContentManager manager = (ContentManager)getContentManager();

// Агент использует язык SL

public Codec codec = new SLCodec();

// Агент связвн с онтологией PeopleOntology

public Ontology ontology = PeopleOntology.getInstance();

 

// Simple-поведение агента

class SenderBehaviour extends SimpleBehaviour

{

// Признак завершения агента

public boolean finished = false;

// Конструктор

public SenderBehaviour(Agent a) { super(a); }

//Завершение агента

public boolean done() { return finished; }

// действие агента (отправка двух сообщений)

public void action()

{

try

{

// Подготовить INFORM-сообщение

System.out.println("[" + getLocalName() +

"] Creating inform message with content fatherOf(man:name John:address London, [man:name Bill:address Paris])");

ACLMessage msg = new ACLMessage(ACLMessage.INFORM);

AID receiver = new AID("receiver", false);

msg.setSender(getAID());

msg.addReceiver(receiver);

msg.setLanguage(codec.getName());

msg.setOntology(ontology.getName());

// INFORM-сообщение информирует, что:

// fatherOf(man:name "John":address "London",

// [man:name "Bill":address "Paris"])

 

Man john = new Man();

Man bill = new Man();

john.setName("John");

bill.setName("Bill");

 

Address johnAddress = new Address();

johnAddress.setCity("London");

john.setAddress(johnAddress);

 

Address billAddress = new Address();

billAddress.setCity("Paris");

bill.setAddress(billAddress);

 

FatherOf fatherOf = new FatherOf();

fatherOf.setFather(john);

 

List children = new ArrayList();

children.add(bill);

fatherOf.setChildren(children);

 

// Заполнение контента INFORM-сообщения

manager.fillContent(msg, fatherOf);

 

// Отправка INFORM-сообщения

System.out.println("[" + getLocalName() +

"] Sending the message...");

send(msg);

 

// Подготовить QUERY_REF-сообщение

System.out.println("[" + getLocalName() +

"] Creating query-ref message with content iota?x fatherOf(?x, [man:name Bill:address Paris])");

msg.setPerformative(ACLMessage.QUERY_REF);

 

// QUERY_REF-сообщение с контентом:

// iota?x fatherOf(?x, [man:name "Bill"

//:address "Paris"])

 

// Создание абстрактного дескриптора absBill

AbsConcept absBill = new AbsConcept(PeopleOntology.MAN);

absBill.set(PeopleOntology.NAME, "Bill");

 

// Создание абстрактного дескриптора absBillAddress

AbsConcept absBillAddress = (AbsConcept)ontology.fromObject(billAddress);

absBill.set(PeopleOntology.ADDRESS, absBillAddress);

 

// Создание абстрактного дескриптора absChildren

AbsAggregate absChildren = new AbsAggregate(BasicOntology.SEQUENCE);

absChildren.add(absBill);

 

// Создание абстрактного дескриптора absX

AbsVariable absX = new AbsVariable("x", PeopleOntology.MAN);

 

// Создание абстрактного дескриптора absFatherOf

AbsPredicate absFatherOf = new AbsPredicate(PeopleOntology.FATHER_OF);

absFatherOf.set(PeopleOntology.FATHER, absX);

absFatherOf.set(PeopleOntology.CHILDREN, absChildren);

 

// Создание абстрактного дескриптора absIRE

AbsIRE absIRE = new AbsIRE(SLVocabulary.IOTA);

absIRE.setVariable(absX);

absIRE.setProposition(absFatherOf);

 

// Заполнение контента QUERY_REF-сообщения

manager.fillContent(msg, absIRE);

 

// Отправка QUERY_REF-сообщения

System.out.println("[" + getLocalName() +

"] Sending the message...");

send(msg);

} catch(Exception e) { e.printStackTrace(); }

 

finished = true;

}

}

 

// регистрация языка и онтологии, добавление поведения агента

public void setup()

{

manager.registerLanguage(codec);

manager.registerOntology(ontology);

addBehaviour(new SenderBehaviour(this));

}

}

 


package ExampleOntology;

import jade.core.Agent;

import jade.core.AID;

import jade.core.behaviours.SimpleBehaviour;

import jade.lang.acl.ACLMessage;

import jade.content.ContentManager;

import jade.content.ContentElement;

import jade.content.abs.AbsContentElement;

import jade.content.abs.AbsIRE;

import jade.content.abs.AbsConcept;

import jade.content.abs.AbsPredicate;

import jade.content.onto.Ontology;

import jade.content.onto.BasicOntology;

import jade.content.lang.Codec;

import jade.content.lang.sl.SLCodec;

// Агент-получатель

public class Receiver extends Agent

{

// Получить идентификатор менеджера контента

public ContentManager manager = (ContentManager)getContentManager();

// Агент использует язык SL

public SLCodec codec = new SLCodec();

// Агент связвн с онтологией PeopleOntology

public Ontology ontology = PeopleOntology.getInstance();

// Анализируемое выражение INFORM-сообщения

public FatherOf proposition = null;

 

// Simple-поведение агента

class ReceiverBehaviour extends SimpleBehaviour

{

// Признак завершения агента

public boolean finished = false;

// Конструктор

public ReceiverBehaviour(Agent a) { super(a); }

//Завершение агента

public boolean done() { return finished; }

// действие агента (получение двух сообщений)

public void action()

{

for(int c = 0; c < 2; c++)

{

try

{

System.out.println("[" + getLocalName() +

"] Waiting for a message...");

 

ACLMessage msg = blockingReceive();

 

if (msg!= null)

{

switch(msg.getPerformative())

{

// если получено INFORM-сообщение

case ACLMessage.INFORM:

ContentElement p = manager.extractContent(msg);

if(p instanceof FatherOf)

{

proposition = (FatherOf)p;

System.out.println("[" + getLocalName() +

"] Receiver inform message: information stored.");

break;

}

// если получено QUERY_REF-сообщение

case ACLMessage.QUERY_REF:

AbsContentElement abs = manager.extractAbsContent(msg);

if(abs instanceof AbsIRE)

{

// Подготовить INFORM-сообщение

ACLMessage reply = msg.createReply();

reply.setPerformative(ACLMessage.INFORM);

 

AID sender = new AID("sender", false);

reply.setSender(getAID());

reply.addReceiver(sender);

reply.setLanguage(codec.getName());

reply.setOntology(ontology.getName());

// Создание абстрактных дескрипторов AbsIRE, AbsConcept, absEquals

AbsIRE ire = (AbsIRE)abs;

AbsConcept absFather = (AbsConcept)ontology.fromObject(proposition.getFather());

AbsPredicate absEquals = new AbsPredicate(BasicOntology.EQUALS);

absEquals.set(BasicOntology.EQUALS_LEFT, ire);

absEquals.set(BasicOntology.EQUALS_RIGHT, absFather);

// Заполнение контента INFORM-сообщения

manager.fillContent(reply, absEquals);

// Отправка INFORM-сообщения

send(reply);

System.out.println("[" + getLocalName() + "] Received query-ref message: reply sent:");

System.out.println(absEquals);

break;

}

 

// если сообщение плохо сформировано

default:

System.out.println("["+ getLocalName()+ "] Malformed message.");

}

}

} catch(Exception e) { e.printStackTrace(); }

}

finished = true;

}

}

 

// регистрация языка и онтологии, добавление поведения агента

public void setup()

{

manager.registerLanguage(codec);

manager.registerOntology(ontology);

addBehaviour(new ReceiverBehaviour(this));

}

}

 


Дата добавления: 2015-11-14; просмотров: 48 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Пример реализации работы с протоколом FIPA-Subscribe для мультиагентной системы в программной среде JADE| Краткие теоретические сведения.

mybiblioteka.su - 2015-2024 год. (0.05 сек.)