Ontologias

2,029 views

Published on

Published in: Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,029
On SlideShare
0
From Embeds
0
Number of Embeds
94
Actions
Shares
0
Downloads
55
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • 1 - Los agentes intercambiarán información según el formato de los hechos especificados en la ontología.

    3 - Para que los agentes se comuniquen entre ellos, deben compartir el mismo idioma, vocabulario y protocolos.
  • 2 - Es decir, mediante el uso de ontologías ... a los mensajes que se intercambian los agentes …. y no sólo datos, como hasta ahora
    3 - Pero teniendo en cuenta que …
    4 - … de descodificación, en la recepción del mensaje.
    5 - Con ese propósito llegamos a los …
  • 2 - conjuntos de elementos que definen la estructura de los predicados, las acciones de los agentes y conceptos relevantes al dominio del problema.

    Predicados: expresiones sobre el estado de mundo. Se utilizan típicamente en mensajes INFORM y QUERY-IF, no en REQUEST.
    Acciones de los agentes: expresiones que indican acciones que pueden realizar los agentes. Típicamente se utilizan en mensajes de tipo REQUEST.
    Conceptos: expresiones que representan objetos, representan una estructura con varios atributos. No aparecen aislados en los mensajes sino incluidos en otros elementos.
    Otros elementos: primitivas (elementos atómicos como números o cadenas de caracteres), agregaciones (conjuntos, listas de otros términos), expresiones (identifican las entidades para las que se cumple un predicado), variables.
  • - Supongamos una ontología para una tienda de frutas, que podemos utilizar para enviarse ofertas entre agentes.  
    - Podemos identificar los diferentes tipos de esquemas de una ontología:
    Conceptos: representan las entidades que forman parte de la ontología, en este caso la ontología tendrá un concepto que será “Frutas”.
    Predicados: son expresiones que relacionan a los conceptos para decir algo. Son necesarios porque un mensaje nunca podremos enviar conceptos, sino que tendremos que enviar predicados o acciones. En el ejemplo usaremos un predicado “Oferta” que indicará que un agente oferta una determinado fruta.
    Acciones: son acciones que pueden llevar a cabo los agentes. Para la ontología de frutas una acción será “Comprar” que indicará a un agente que debe comprar una determinada fruta.
  • Podemos observar que lo primero que se hace es definir el nombre de la ontología, y un vocabulario que será el que manejen los agentes para comunicarse. A continuación, se definen y se añaden los elementos a la ontología. Para cada elemento de la ontología (concepto, acción o predicado) se define su estructura. Como se observa en el código, cada campo de un esquema debe ser de un tipo predefinido, en este caso se usan los tipos primitivos STRING e INTEGER.
  • Por cada elemento de la ontología, tenemos que crear una clase Java asociada. Por ejemplo, el concepto Fruta daría lugar a la siguiente clase, que hereda de Concept.
  • La clase Oferta, que implementa el predicado “Oferta”, hereda de Predicate.
  • Y por último, la clase Comprar, que implementa la acción “Comprar” y que, por tanto, hereda de AgentAction.
  • 1 - Imaginemos dos agentes que comparten esta ontología, y que se intercambian mensajes de ofertas. Si un agente desea comunicar una oferta de pimientos rojos a 1 euros el kilo …
  • 3.1 - legible para las personas y codifica las expresiones como string
    3.2 - no legible y codifica en byte-encoded
  • - Sabiendo todo esto, el último paso consiste en registrar el lenguaje de contenido y la ontología en el método setup() de los agentes
  • Ontologias

    1. 1. ONTOLOGÍAS (PARTE 1) Grupo Arnoia: Piñón Martínez, Mª Isabel 77411600-V Rey Varela, Iria 36166139-L
    2. 2. INDICE  Introducción  Soporte de JADE para Ontologías  Definición de una Ontología  Ejemplo “Frutas”  Cuestiones y Ejercicio 2
    3. 3. INTRODUCCIÓN 3
    4. 4. INTRODUCCIÓN  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.  La necesidad de utilizar ontologías viene dada por:  Abundancia de comunicación entre agentes.  Interoperabilidad de sistemas y plataformas.  Problemas semánticos.  JADE proporciona tres formas distintas de llevar a cabo la comunicación:  La forma más básica es utilizar cadenas  Objetos serializables de Java  Definir los objetos que van a ser transferidos como extensión de las clases predefinidas por JADE 4
    5. 5. INTRODUCCIÓN  Una ontología en JADE, se define de forma que los agentes se comuniquen utilizando el tercer método descrito. El soporte JADE para ontologías incluye las clases para trabajar con éstas y con los lenguajes de contenido:  Los lenguajes de contenido tienen que ver con la representación interna del contenido de los mensajes ACL.  Las ontologías tienen que ver con la semántica de los mensajes que se intercambian y su chequeo.  Incorporamos contenido semántico.  Las ontologías se definen en base a objetos de Java.  Necesitamos encapsular o codificar la semántica de esos objetos dentro de mensajes ACL, y hacer el proceso contrario.  Lenguajes de contenido (LEAP y SL) y soporte Jade para el manejo de ontologías. 5
    6. 6. SOPORTE DE JADE PARA ONTOLOGÍAS  Jade incorpora, en el paquete jade.content, soporte (codecs), para dos lenguajes de contenido:  El lenguaje SL es legible por los humanos y codifica las expresiones como string.  El lenguaje LEAP no es legible por los humanos y es byte-encoded.  Una ontología es una instancia de la clase jade.content.onto.Ontology en la cual se definen los Schemas (jade.content.schema):  Predicados (PredicateSchema)  Acciones de los agentes (AgentActionSchema)  Conceptos (ConceptSchema)  Otros elementos 6
    7. 7. SOPORTE DE JADE PARA ONTOLOGÍAS 7
    8. 8. DEFINICIÓN DE UNA ONTOLOGÍA 8
    9. 9. DEFINICIÓN DE UNA ONTOLOGÍA  Como una ontología es básicamente una colección de esquemas que normalmente no varían a lo largo del ciclo de vida de un agente, es recomendable declarar la ontología siguiendo el patrón singleton, de modo que sólo se pueda crear un objeto de esa clase. Esto nos permite compartir la misma ontología (y todos los esquemas incluidos) entre todos los agentes que se estén ejecutando en la JVM. 9
    10. 10. EJEMPLO “FRUTAS” 10 frutasOntology (Ontology) Fruta (Concept) NOMBRE: String PRECIO: Integer Oferta (Predicate) FRUTA: Fruta Comprar (Action) FRUTA: Fruta
    11. 11. EJEMPLO “FRUTAS” package examples.frutasOntology; import jade.content.onto.*; import jade.content.schema.*; public class frutasOntology extends Ontology { // Nombre de la ontología public static final String ONTOLOGY_NAME = "ontología de frutas"; // Vocabulario de la ontología que van a manejar los agentes public static final String FRUTA = "Fruta"; public static final String FRUTA_NOMBRE = "nombre"; public static final String FRUTA_PRECIO = "precio"; … 11 … public static final String OFERTA = "Oferta"; public static final String OFERTA_FRUTA = "fruta"; public static final String COMPRAR = "Comprar"; public static final String COMPRAR_FRUTA = "fruta"; // Instancia de la ontología (que será única) private static Ontology instancia = new frutaOntology(); // Método para acceder a la instancia de la ontología public static Ontology getInstance() { return instancia; } …
    12. 12. EJEMPLO “FRUTAS” … // Constructor privado private frutasOntology() { // frutasOntology extiende la ontología básica super(ONTOLOGY_NAME, BasicOntology.getInstance()); try { // Añade los elementos add(new ConceptSchema(FRUTA), Fruta.class); add(new PredicateSchema(OFERTA), Oferta.class); add(new AgentActionSchema(COMPRAR), Comprar.class); // Estructura del esquema para el concepto FRUTA ConceptSchema cs = (ConceptSchema) getSchema(FRUTA); cs.add(FRUTA_NOMBRE, (PrimitiveSchema) getSchema(BasicOntology.STRING)); cs.add(FRUTA_PRECIO, (PrimitiveSchema) getSchema(BasicOntology.INTEGER)); … 12
    13. 13. EJEMPLO “FRUTAS” … // Estructura del esquema para el predicado OFERTA PredicateSchema ps = (PredicateSchema) getSchema(OFERTA); ps.add(OFERTA_FRUTA, (ConceptSchema) getSchema(FRUTA)); // Estructura del esquema para la acción COMPRAR AgentActionSchema as = (AgentActionSchema) getSchema(COMPRAR); as.add(COMPRAR_FRUTA, (ConceptSchema) getSchema(FRUTA)); } catch (OntologyException oe) { oe.printStackTrace(); } } } 13
    14. 14. EJEMPLO “FRUTAS” package examples.frutasOntology; import jade.content.Concept; public class Fruta implements Concept { private String nombre; private int precio; public String getNombre() { return nombre; } public void setNombre(String n) { nombre = n; } public int getPrecio() { return precio; } public void setPrecio(int p) { precio = p; } } 14
    15. 15. EJEMPLO “FRUTAS” package examples.frutasOntology; import jade.content.Predicate; public class Oferta implements Predicate { private Fruta fruta; public Fruta getFruta() { return fruta; } public void setFruta(Fruta f) { fruta = f; } } 15
    16. 16. EJEMPLO “FRUTAS” package examples.frutasOntology; import jade.content.AgentAction; public class Comprar implements AgentAction { private Fruta fruta; public Fruta getFruta() { return fruta; } public void setLibro(Fruta f) { fruta = f; } } 16
    17. 17.  La información se guarda como un objeto de la clase Oferta, que tenemos que convertir a formato ACL para realizar el acto comunicativo. En el receptor se realizará el proceso contrario.  La conversión y las operaciones de chequeo son llevadas a cabo por un objeto que gestiona el contenido, este objeto se denomina ContentManager y está incluído en el paquete jade.content.  Cada agente en JADE posee un ContentManager al que puede acceder usando el método getContentManager(). Esta clase proporciona todo los métodos de transformación de un objeto a un string para introducirlo en un slot de un ACLMessage y viceversa. 17
    18. 18.  La conversión la realiza a partir de:  Una ontología (la que hemos definido).  Un codec de un lenguaje de contenido (instancia de la clase Codec del paquete jade.content.lang).  La ontología permite validar la información desde un punto de vista semántico y el codec realiza la conversión a string según las reglas sintácticas del lenguaje de contenido.  JADE define dos lenguajes de contenidos predefinidos. En el paquete jade.content se incluyen dos codecs para dos lenguajes de contenido, los tipos de lenguaje son los siguientes:  Lenguaje SL (jade.content.lang.sl)  Lenguaje LEAP (jade.content.lang.leap). 18
    19. 19. EJEMPLO “FRUTAS” 19 package examples.frutasOntology; … public class Comprador extends Agent { private Codec codec = new SLCodec(); private Ontology ontologia = frutasOntology.getInstance(); // Clase que describe el comportamiento que permite recibir un mensaje // y contestarlo class WaitPingAndReplyBehaviour extends SimpleBehaviour { private boolean finished = false; public WaitPingAndReplyBehaviour(Agent a) { super(a); } …
    20. 20. EJEMPLO “FRUTAS” 20 public void action() { System.out.println("nEsperando oferta del Vendedor...."); MessageTemplate mt = MessageTemplate.and( MessageTemplate.MatchLanguage(codec.getName()), MessageTemplate.MatchOntology(ontologia.getName())); ACLMessage msg = blockingReceive(mt); try { if(msg != null){ if(msg.getPerformative() == ACLMessage.NOT_UNDERSTOOD){ System.out.println("Mensaje NOT UNDERSTOOD recibido");} else{ if(msg.getPerformative()== ACLMessage.INFORM){ ContentElement ce = getContentManager().extractContent(msg); if (ce instanceof Oferta){ // Recibido un INFORM con contenido correcto Oferta of = (Oferta) ce; Fruta fru = of.getFruta(); System.out.println("Mensaje recibido:"); System.out.println("Nombre: " + fru.getNombre()); System.out.println("Precio: " + fru.getPrecio());} …
    21. 21. EJEMPLO “FRUTAS” 21 else{ // Recibido un INFORM con contenido incorrecto ACLMessage reply = msg.createReply(); reply.setPerformative(ACLMessage.NOT_UNDERSTOOD); reply.setContent("( UnexpectedContent (expected ping))"); send(reply); } } else { // Recibida una performativa incorrecta ACLMessage reply = msg.createReply(); reply.setPerformative(ACLMessage.NOT_UNDERSTOOD); reply.setContent("( (Unexpected-act "+ACLMessage.getPerformative (msg.getPerformative())+")( expected (inform)))"); send(reply); } } }else{ //System.out.println("No message received");} } catch (jade.content.lang.Codec.CodecException ce) { System.out.println(ce);} catch (jade.content.onto.OntologyException oe) { System.out.println(oe);} }
    22. 22. EJEMPLO “FRUTAS”  En este caso, el lenguaje elegido es el SL. 22 public boolean done() { return finished;} } //Fin de la clase WaitPingAndReplyBehaviour protected void setup() { getContentManager().registerLanguage(codec); getContentManager().registerOntology(ontologia); WaitPingAndReplyBehaviour PingBehaviour; PingBehaviour = new WaitPingAndReplyBehaviour(this); addBehaviour(PingBehaviour); } } //Clase Comprador
    23. 23. EJEMPLO “FRUTAS” 23 package examples.frutasOntology; … public class Vendedor extends Agent { private Codec codec = new SLCodec(); private Ontology ontologia = frutasOntology.getInstance(); class EnviarMensajeBehaviour extends SimpleBehaviour { private boolean finished = false; public EnviarMensajeBehaviour(Agent a) { super(a); } …
    24. 24. EJEMPLO “FRUTAS” 24 public void action() { try { System.out.println("nIntroduce el nombre del DESTINATARIO (…): "); BufferedReader buff = new BufferedReader(new InputStreamReader(System.in)); String respuesta = buff.readLine(); AID r = new AID(); r.setLocalName(respuesta); ACLMessage msg = new ACLMessage(ACLMessage.INFORM); msg.setSender(getAID()); msg.addReceiver(r); msg.setLanguage(codec.getName()); msg.setOntology(ontologia.getName()); System.out.println("nIntroduce el NOMBRE de la fruta:"); respuesta = buff.readLine(); Fruta fru = new Fruta(); fru.setNombre(respuesta); System.out.println("nIntroduce el PRECIO:"); respuesta = buff.readLine(); fru.setPrecio(Integer.parseInt(respuesta)); Oferta of = new Oferta(); of.setFruta(fru); getContentManager().fillContent(msg, of); send(msg); }
    25. 25. EJEMPLO “FRUTAS” 25 … catch (java.io.IOException io) {System.out.println(io); } catch (jade.content.lang.Codec.CodecException ce) { System.out.println(ce); } catch (jade.content.onto.OntologyException oe) { System.out.println(oe); } catch (Exception e){ System.out.println("nn... Terminando ..."); finished=true; } } public boolean done() { return finished;} } // Fin de la clase EnviarMensajeBehaviour ...
    26. 26. EJEMPLO “FRUTAS” 26 protected void setup() { /** Registrarse en el DF */ DFAgentDescription dfd = new DFAgentDescription(); ServiceDescription sd = new ServiceDescription(); sd.setType("Vendedor"); sd.setName(getName()); sd.setOwnership("ARNOIA"); dfd.setName(getAID()); dfd.addServices(sd); try { DFService.register(this,dfd); } catch (FIPAException e) { System.err.println(getLocalName()+" registration with DF unsucceeded. Reason: "+e.getMessage()); doDelete(); } getContentManager().registerLanguage(codec); getContentManager().registerOntology(ontologia); EnviarMensajeBehaviour EnviarBehaviour = new EnviarMensajeBehaviour(this); addBehaviour(EnviarBehaviour); } protected void takeDown() { try { DFService.deregister(this);} catch (FIPAException fe) {fe.printStackTrace();} } } //Clase Vendedor
    27. 27. CUESTIONES Y EJERCICIO 27
    28. 28. CUESTIONES  ¿Por qué es necesario el uso de Ontologías?  ¿Cuáles son las 3 formas que proporciona JADE para llevar a cabo la comunicación entre Agentes?  ¿Qué clases se incluyen en el paquete jade.content.schema?  ¿Qué lenguajes de contenido soporta JADE? Defínelos brevemente. 28
    29. 29. EJERCICIO 29  Supongamos una ontología para una Universidad, que podemos utilizar para solicitar PFC’s ofertados.  La ontología pfcOntology consta de un Concept (PFC) definido por un título y un codigo.  El agente Profesor le envía al agente Alumno un predicado Oferta para hacerle saber que puede Solicitar el PFC indicado. pfcOntology (Ontology) PFC (Concept) titulo: String codigo: Integer Oferta (Predicate) proyecto: PFC Solicitar (Action) proyecto: PFC
    30. 30. NORMAS DE ENTREGA  Enviar el código del ejercicio a: arnoiasma@gmail.com  En el email incluir:  Nombre y Apellidos  DNI  Grupo (Bubal, Arenteiro, etc...)  Respuesta a las cuestiones y el código modificado. 30

    ×