Presentación ontologías (parte ii)

43
Grupo CADOS Diego Pérez Montes David Estévez Queija

Transcript of Presentación ontologías (parte ii)

Page 1: Presentación ontologías (parte ii)

Grupo CADOS

Diego Pérez Montes

David Estévez Queija

Page 2: Presentación ontologías (parte ii)

Recordar qué es una ontología. Instalación de Protégé. Desarrollo de una ontología con

Protégé. Integración de la ontología con JADE. Lenguajes de contenido (LEAP, SL) Explicación de la práctica

Page 3: Presentación ontologías (parte ii)

Def-> Una Ontología es la "especificación de una conceptualización", la descripción de los conceptos y relaciones entre ellos, que pueden formar parte del conocimiento de un agente o una sociedad de agentes.

Page 4: Presentación ontologías (parte ii)

Recordar qué es una ontología. Instalación de Protégé. Desarrollo de una ontología con

Protégé. Integración de la ontología con JADE. Lenguajes de contenido (LEAP, SL) Explicación de la práctica

Page 5: Presentación ontologías (parte ii)

Hacemos doble click sobre el archivo install_protege_3.4.4.exe.

Al elegir la carpeta de destino seleccionamos Mis Documentos\Protege.

La máquina virtual de Java ya está instalada en el equipo, así que siguiente…

Page 6: Presentación ontologías (parte ii)

Plugin beangenerator v3.2.1 (NO la v4.0) Descargar desde la URL de wikispaces.

Copiamos la carpeta que contiene a“Mis Documentos\Protege\plugins\”

También nos bajaremos el fichero de ejemplos beangeneratos_examples.zip y pegamos la carpeta en “Mis Documentos\Protege\”

Page 7: Presentación ontologías (parte ii)

Recordar qué es una ontología. Instalación de Protégé. Desarrollo de una ontología con

Protégé. Integración de la ontología con JADE. Lenguajes de contenido (LEAP, SL) Explicación de la práctica

Page 8: Presentación ontologías (parte ii)
Page 9: Presentación ontologías (parte ii)

Definimos todos los conceptos.

Definimos los predicados.

Definimos las acciones en la clase AgentAction.

Generamos la ontología con BeanGenerator.

Page 10: Presentación ontologías (parte ii)

Open Other… > SimpleJADEAbstractOntology.pprj

Page 11: Presentación ontologías (parte ii)
Page 12: Presentación ontologías (parte ii)
Page 13: Presentación ontologías (parte ii)

Definimos todos los conceptos.

Definimos los predicados.

Definimos las acciones en la clase AgentAction.

Generamos la ontología con BeanGenerator.

Page 14: Presentación ontologías (parte ii)
Page 15: Presentación ontologías (parte ii)
Page 16: Presentación ontologías (parte ii)
Page 17: Presentación ontologías (parte ii)

Definimos todos los conceptos.

Definimos los predicados.

Definimos las acciones en la clase AgentAction.

Generamos la ontología con BeanGenerator.

Page 18: Presentación ontologías (parte ii)
Page 19: Presentación ontologías (parte ii)
Page 20: Presentación ontologías (parte ii)

Definimos todos los conceptos.

Definimos los predicados.

Definimos las acciones en la clase AgentAction.

Generamos la ontología con BeanGenerator.

Page 21: Presentación ontologías (parte ii)
Page 22: Presentación ontologías (parte ii)
Page 23: Presentación ontologías (parte ii)

Recordar qué es una ontología. Instalación de Protégé. Desarrollo de una ontología con

Protégé. Integración de la ontología con

JADE. Lenguajes de contenido (LEAP, SL) Explicación de la práctica

Page 24: Presentación ontologías (parte ii)

// ONTOLOGIA GENERADA DESDE PROTEGEpackage policiaOntology; import jade.content.onto.*;//IMPORTS//...public class PoliciaOntology extends jade.content.onto.Ontology {

//NOMBRE ONTOLOGIA

public static final String ONTOLOGY_NAME = "policia"; // The singleton instance of this ontology private static ReflectiveIntrospector introspect = new ReflectiveIntrospector(); private static Ontology theInstance = new PoliciaOntology(); public static Ontology getInstance() { return theInstance; } // VOCABULARIO public static final String DISPONIBLE_TIEMPO="TIEMPO"; public static final String DISPONIBLE="Disponible"; public static final String NODISPONIBLE_MOTIVO="MOTIVO"; public static final String NODISPONIBLE="NoDisponible";

Page 25: Presentación ontologías (parte ii)

//.../** * Constructor */ private PoliciaOntology(){ super(ONTOLOGY_NAME, BasicOntology.getInstance()); try { // CONCEPTOS ConceptSchema ladronSchema = new ConceptSchema(LADRON); add(ladronSchema, policiaOntology.Ladron.class); ConceptSchema motivoSchema = new ConceptSchema(MOTIVO); add(motivoSchema, policiaOntology.Motivo.class); ConceptSchema descripcionSchema = new ConceptSchema(DESCRIPCION); add(descripcionSchema, policiaOntology.Descripcion.class); ConceptSchema tiempoLlegadaSchema = new ConceptSchema(TIEMPOLLEGADA); add(tiempoLlegadaSchema, policiaOntology.TiempoLlegada.class); // ACCIONES (AgentAction) AgentActionSchema detenerLadronSchema = new AgentActionSchema(DETENERLADRON); add(detenerLadronSchema, policiaOntology.DetenerLadron.class);

Page 26: Presentación ontologías (parte ii)

// PREDICADOS PredicateSchema ladronDetenidoSchema = new PredicateSchema(LADRONDETENIDO); add(ladronDetenidoSchema, policiaOntology.LadronDetenido.class); PredicateSchema noDisponibleSchema = new PredicateSchema(NODISPONIBLE); add(noDisponibleSchema, policiaOntology.NoDisponible.class); PredicateSchema disponibleSchema = new PredicateSchema(DISPONIBLE); add(disponibleSchema, policiaOntology.Disponible.class); // CAMPOS EN CONCEPTOS Y PREDICADOS (“slots”) ladronSchema.add(LADRON_DESCRIPCION, descripcionSchema, ObjectSchema.OPTIONAL); motivoSchema.add(MOTIVO_MOTIVO, (TermSchema)getSchema(BasicOntology.STRING), ObjectSchema.OPTIONAL);

//...

Page 27: Presentación ontologías (parte ii)

// AGENTE “CLIENTE”, EN ESTE CASO EL TESTIGO DEL DELITO

import policiaOntology.*; //Import de la ontologia en el directorio “policiaOntology”//Resto de importsimport jade.content.lang.sl.*; //Import del lenguaje de contenido: SL

public class Testigo extends Agent {

//Se usara el lenguaje SL

private Codec codec = new SLCodec(); private Ontology ontologia = PoliciaOntology.getInstance();//...//Emision del mensajeACLMessage msg = new ACLMessage(ACLMessage.REQUEST);//... // Se establece el protocolo de comunicaciones msg.setProtocol(FIPANames.InteractionProtocol.FIPA_REQUEST); // Se establece el lenguaje de contenido y la ontología del mensaje. msg.setLanguage(codec.getName()); msg.setOntology(ontologia.getName());

Page 28: Presentación ontologías (parte ii)

//...// Mostrar menu por pantalla//...// Crea la accion DetenerLadron con la descripcion dadaDetenerLadron dl = new DetenerLadron();

// Registra el lenguaje de contenido y la ontologia utilizadagetContentManager().registerLanguage(codec);getContentManager().registerOntology(ontologia); // Crea la accion a enviar asociándola a la acción DetenerLadron creada// necesitado por SL.Action a = new Action(getAID(), dl);

// Rellena el mensaje ACL para que sea consistente con el lenguaje de contenido y la //ontologia getContentManager().fillContent(msg,a);

//...

Page 29: Presentación ontologías (parte ii)

class ManejadorInitiator extends AchieveREInitiator{ public ManejadorInitiator(Agent a,ACLMessage msg){ super(a,msg); } protected void handleAgree(ACLMessage agree){ try{

// Decodifica el mensaje ACL recibido mediante el lenguaje de contenido y la ontologia actualesContentElement ce = getContentManager().extractContent(agree); if (ce instanceof Disponible) { // Recibido un AGREE con contenido correcto Disponible disp = (Disponible) ce; // Transforma el contenido en el objeto predicado EstoyDisponible de la ontologia

//...

Page 30: Presentación ontologías (parte ii)

protected void handleInform(ACLMessage inform) { try{ // Decodifica el mensaje ACL recibido mediante el lenguaje de contenido y la ontologia actuales ContentElement ce = getContentManager().extractContent(inform); if (ce instanceof LadronDetenido) { // Recibido un INFORM con contenido correcto LadronDetenido ld = (LadronDetenido) ce; // Transforma el contenido en el objeto predicado LadronDetenido de la ontologia

//...

Page 31: Presentación ontologías (parte ii)

protected void handleRefuse(ACLMessage refuse) { try{ // Decodifica el mensaje ACL recibido mediante el lenguaje de contenido y la ontologia actuales ContentElement ce = getContentManager().extractContent(refuse); if (ce instanceof NoDisponible) { // Recibido un REFUSE con contenido correcto NoDisponible nd = (NoDisponible) ce; // Transforma el contenido en el objeto predicado NoDisponible de la ontologia

//...

protected void handleNotUnderstood(ACLMessage notUnderstood) { System.out.println("La comisaria " + notUnderstood.getSender().getName() + " no entiende el mensaje."); }

//...

Page 32: Presentación ontologías (parte ii)

// AGENTE “SERVIDOR”, EN ESTE CASO LA COMSARIA

import policiaOntology.*; //Import ontologia import jade.content.lang.Codec; import jade.content.lang.sl.SLCodec; //Import lenguaje SL

//Resto importspublic class Comisaria extends Agent { private Codec codec = new SLCodec(); private Ontology ontologia = PoliciaOntology.getInstance();

//...protected void setup() { // Crea una plantilla que solo acepte los mensajes ACL recibidos que utilizan el protocolo FIPA_REQUEST // Y ademas que sean del tipo REQUEST // Y ademas que esten codificados mediante el lenguaje de contenido SLCodec // Y que utilicen la ontologia policiaOntology

Page 33: Presentación ontologías (parte ii)

MessageTemplate protocolo = MessageTemplate.MatchProtocol(FIPANames.InteractionProtocol.FIPA_REQUEST);MessageTemplate performativa = MessageTemplate.MatchPerformative(ACLMessage.REQUEST);MessageTemplate lenguajeContenido = MessageTemplate.MatchLanguage(codec.getName());MessageTemplate ontoTemplate = MessageTemplate.MatchOntology(ontologia.getName()); MessageTemplate plantilla = MessageTemplate.and(MessageTemplate.and(protocolo, performativa),MessageTemplate.and(lenguajeContenido, ontoTemplate));

// Registra el lenguaje de contenido y la ontologia en el gestor de contenidosgetContentManager().registerLanguage(codec);getContentManager().registerOntology(ontologia);

Page 34: Presentación ontologías (parte ii)

class ManejadorResponder extends AchieveREResponder { public ManejadorResponder(Agent a,MessageTemplate mt) { super(a,mt); } protected ACLMessage prepareResponse(ACLMessage request) { ACLMessage respuesta = request.createReply(); try { // Decodifica el mensaje ACL recibido a un objeto de tipo Action mediante el lenguaje de contenido y la ontologia actuales Action a = (Action) myAgent.getContentManager().extractContent(request); // Recupera el objeto accion de la ontologia DetenerLadron dl = (DetenerLadron) a.getAction();

Page 35: Presentación ontologías (parte ii)

// Crea un predicado Disponible de la ontologia añadiandole el concepto TiempoLlegada TiempoLlegada tl = new TiempoLlegada(); tl.setTiempo((int)(Math.random()*10)); Disponible disp = new Disponible(); disp.setTIEMPO(tl); getContentManager().fillContent(respuesta,disp); protected ACLMessage prepareResultNotification(ACLMessage request,ACLMessage response) { // Si la policia fue a detener al ladron ACLMessage inform = request.createReply(); try { ContentElement ce = getContentManager().extractContent(response);

Page 36: Presentación ontologías (parte ii)

Disponible disp = (Disponible)ce; System.out.println("[Comisaria "+getLocalName()+"]: Hemos conseguido detener al ladron!!"); inform.setPerformative(ACLMessage.INFORM); Action a = (Action) myAgent.getContentManager().extractContent(request); DetenerLadron dl = (DetenerLadron) a.getAction(); // Crea un predicado LadronDetenido de la ontologia y le añade el ladron detenido LadronDetenido ld = new LadronDetenido(); ld.setLadron(dl.getLadron()); getContentManager().fillContent(inform,ld);

Page 37: Presentación ontologías (parte ii)

Recordar qué es una ontología. Instalación de Protégé. Desarrollo de una ontología con

Protégé. Integración de la ontología con JADE. Lenguajes de contenido (LEAP, SL) Explicación de la práctica

Page 38: Presentación ontologías (parte ii)

SL: Strings. Operadores Lógicos y Modales. Requiere de “ACTION”.

LEAP: Binario. Más ligero.

// USO DE SL

import jade.content.lang.sl.*;...public class Testigo extends Agent { private Codec codec = new SLCodec(); private Ontology ontologia = PoliciaOntology.getInstance();...

Page 39: Presentación ontologías (parte ii)

Recordar qué es una ontología. Instalación de Protégé. Desarrollo de una ontología con

Protégé. Integración de la ontología con JADE. Lenguajes de contenido (LEAP, SL) Explicación de la práctica

Page 40: Presentación ontologías (parte ii)

Fiesta del IMSERSO. Diagrama:

Page 41: Presentación ontologías (parte ii)

Agente FiestaAgent: La fiesta del IMSERSO.

Agente FiesteroAgent: “Portero” del a fiesta.

Page 42: Presentación ontologías (parte ii)
Page 43: Presentación ontologías (parte ii)

Grupo CADOS