Upload
fushigi1984
View
1.714
Download
0
Embed Size (px)
Citation preview
ONTOLOGÍAS (PARTE 1)
Grupo Arnoia:
Piñón Martínez, Mª Isabel 77411600-V
Rey Varela, Iria 36166139-L
2
INDICE
Introducción Soporte de JADE para Ontologías
Definición de una Ontología Ejemplo “Frutas”
Cuestiones y Ejercicio
3
INTRODUCCIÓN
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
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.
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
7
SOPORTE DE JADE PARA ONTOLOGÍAS
8
DEFINICIÓN DE UNA
ONTOLOGÍA
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.
10
EJEMPLO “FRUTAS”
frutasOntology(Ontology)
Fruta(Concept)
NOMBRE: StringPRECIO: Integer
Oferta(Predicate)
FRUTA: Fruta
Comprar(Action)
FRUTA: Fruta
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";
…
…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
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));
…
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();
}
}
}
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; }
}
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;
}
}
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;
}
}
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.
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).
19
EJEMPLO “FRUTAS”
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
EJEMPLO “FRUTAS”
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
EJEMPLO “FRUTAS”
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
EJEMPLO “FRUTAS”
En este caso, el lenguaje elegido es el SL.
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
EJEMPLO “FRUTAS”
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
EJEMPLO “FRUTAS”
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
EJEMPLO “FRUTAS”… 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("\n\n... Terminando ...");finished=true;
} } public boolean done() {
return finished;}
} // Fin de la clase EnviarMensajeBehaviour
...
26
EJEMPLO “FRUTAS”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
CUESTIONES Y EJERCICIO
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.
29
EJERCICIO
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: Stringcodigo: Integer
Oferta(Predicate)
proyecto: PFC
Solicitar(Action)
proyecto: PFC
30
NORMAS DE ENTREGA
Enviar el código del ejercicio a: [email protected]
En el email incluir: Nombre y Apellidos DNI Grupo (Bubal, Arenteiro, etc...) Respuesta a las cuestiones y el código modificado.