M.C. Juan Carlos Olivares Rojas

Slides:



Advertisements
Presentaciones similares
INTELIGENCIA ARTIFICIAL
Advertisements

Lenguaje de programación Java
Aplicaciones Cliente-Servidor
Carlos Rojas Kramer Universidad Cristóbal Colón
Unidad II Interfaces Hombre Máquina
Arquitectura CLARO-TECNOTREE
Introducción a Programación Concurrente
Construcción de un sistema multiagente mediante Jade
RMI Remote Method Invocation
UNIVERSIDAD LATINA (UNILA) ENCAPSULACION Y HERENCIA
Aplicación del paradigma orientado a objetos
INTRODUCCIÓN A UML Oscar Miguel Alonso Moreno.
DIAGRAMAS DE CLASES Completando los diagramas de interacción, es posible identificar la especificación de las clases que participarán en la solución indicando.
Características generales de un servicio Web.
Encapsulamiento y Abstracción
INTERFAZ DE ACCES DISEÑO DE BASE DE DATOS
Inteligencia artificial
Introducción al Software
Excepciones y archivos Info 033. Exception El término Exception es la palabra corta para la frase "evento excepcional." Definition: Una excepción es un.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
JADE Java Agent Development Framework EXPOSITOR: Melvin Fallas CascanteA62098.
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Tema 6: Clases Antonio J. Sierra.
Unidad I Java y C++ : Similitudes y diferencias
Elemento Lógico (Software)
Semana 5 Subprogramas..
Patrón Observador Un patrón de diseño es una descripción de clases y objetos comunicándose entre si adaptada para resolver un problema de diseño general.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
Ingeniería de Software
Enseñar con Tecnologías
Programación Orientada a Aspectos (POA)
Sistema de Información
DISEÑO DE SOFTWARE 1ª. Parte
Contenido: 1- Que es el .Net Framework 2- Arquitectura en .Net
Un programa no es nada mas que una serie de instrucciones dadas al ordenador en un lenguaje entendido por el, para decirle exactamente lo que queremos.
Introducción al modelo Cliente-Servidor Carlos Rojas Kramer Universidad Cristóbal Colón.
Software Testing Juan Carlos Olivares Rojas MSN:
Sistemas Inteligentes Distribuidos Sistemas Inteligentes Distribuidos Sesión 13 L. Enrique Sucar / Marco López Sesión 13 L. Enrique Sucar / Marco López.
UNIDAD 2. ALGORITMOS Y ESTRUCTURAS DE DATOS.
Yo soy responsable de mi bienestar
Universidad Central de Venezuela Facultad de Ciencias Postgrado en Ciencias de la Computación Sistemas Distribuidos Albany Márquez.
Test-Driven Development Juan Carlos Olivares Rojas MSN:
INTRODUCCIÓN A LA INTELIGENCIA ARTIFICIAL Y LOS SISTEMAS EXPERTOS
TALLER DE INFORMATICA 1  UNIDAD 1 EXCEL 1.1 INTRODUCCION.
Sistemas de Información para la Administración
Diagramas de Interacción.
COLEGIO DE BACHILLERES PLANTEL 13 XOCHIMILCO-TEPEPAN MATERIA:TIC EQUIPO:21 PRESENTACION: BASE DE DATOS ALUMNAS: Adán Millán Sánchez.
Términos y Conceptos Básicos
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) LENGUAJES DE PROGRAMACIÓN PARA EL DESARROLLO DE INTERFACES.
Elaboración de algoritmos usando lógica de programación
Sistemas MultiAgentes. Definiciones Un agente percibe de su entorno a través de sensores y actúa en su entorno mediante efectores. Propiedades: Autónomo.
(MOODLE) La palabra Moodle es el acrónimo de Modular Object Oriented Dynamic Learning Environment Entorno de Aprendizaje Dinámico Orientado a Objetos.
UNIDAD 2: “Características del Modelado UML” CONTENDIDO Elaborado por: Ingeniero Harold Cabrera Meza Actualizado por: Ingeniero Nilson Albeiro Ferreira.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS GUI.
Metodología de Programación Ayudantía 4 lelagos.ublog.cl 2009.
Introducción a la Inteligencia Artificial
INGENIERIA EN SISTEMAS FUNDAMENTOS DE COMPUTACION B ACHILLERATO EN I NGENIERÍA I NFORMÁTICA L IC. C ARLOS H. G UTIÉRREZ L EÓN.
Métodos instruccionales
Servicios Web Conjunto de aplicaciones o de tecnologías con capacidad para interoperar en la Web. Estas aplicaciones o tecnologías intercambian datos entre.
Fundamentos de Programación Unidad I Conceptos Básicos.
Fundamentos de Ingeniería de Software
Programación orientada a objetos La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos.
Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Práctica 3.
Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Práctica 4 Versión Diseño de tipos Igualdad, representación, código,
Presentación De UML Lenguaje estándar para escribir planos de software Se usa para visualizar, especificar, construir y documentar los artefactos de un.
LICETH CAJAS 3RO ASI 26/10/2010. Es un lenguaje de programación diseñado para crear una amplia gama de aplicaciones que se ejecutan en.NET Framework,
Entorno de Recomendación para el Desarrollo de Objetos de Aprendizaje Manuel E. Prieto Universidad de Castilla-La Mancha, España Victor H. Menéndez Universidad.
Métodos en Java. Estructura de un programa en Java ► La relación con la vida misma la podemos ver en el siguiente comentario: Imaginemos que dos clases.
Las interfaces Predicate y Function Versión Unidad Didáctica 17 Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos.
Programación I Clases. Paradigma POO La programación Orientada a objetos (POO) es una forma programar, más cercana a como expresaríamos las cosas en la.
Transcripción de la presentación:

M.C. Juan Carlos Olivares Rojas Agentes Inteligentes M.C. Juan Carlos Olivares Rojas jolivares@uvaq.edu.mx juancarlosolivares@hotmail.com @jcolivares http://antares.itmorelia.edu.mx/~jcolivar Febrero, 2010

Competencia Específica Conoce los fundamentos teóricos de la teoría de agentes y poderla aplicar en la práctica.

Agentes Es un software (que puede incluir hardware) que trabaja de manera autónoma y es capaz de realizar una serie de problemas de forma razonada. Los agentes se caracterizan por tener bien delimitados sus alcances. Generalmente reciben entrada a través de estímulos y realizan acciones hacia el exterior.

Arquitectura de Agentes

Agentes Inteligentes Un agente es algo que razona (agente viene del latín agere, hacer). Aparte de la autonomía y la racionalidad un agente debe de ser adaptable y en muchos casos “sociable”; es decir, poderse comunicar con otros agentes e incluso con el hombre mismo. Algunos autores a los agentes les llaman softbot.

Agentes Inteligentes

Aplicación de los Agentes Inteligencia y Conocimiento Patrones Agentes Coordinación y Sincronización Robótica Móvil Robótica de Manipuladores Procesamiento de Imágenes Redes Neuronales

Agentes Inteligentes Se trata de emular la inteligencia natural Aprendizaje Memoria Abstracción Razonamiento Solución de problemas Medio ambiente Percepción Imaginación Libre albedrio Actuación Conciencia Creatividad

Áreas de la Teoría de Agentes IA Distribuida Ingeniería de software NOCION DE AGENCIA Sistemas distribuidos y redes POO

Cerebro Humano como Máquina ¿Una computadora biológica? 1011 Neuronas (procesadores) Poder desconocido 1000 – 10000 conexiones por neurona Capacidad basada en las conexiones. Cada neurona es muy compleja. Almacenamiento redundante. No binario, no estable y no asíncrono.

“Sensores Humanos” Neuronas Conexiones información acciones Sonido Color Sabor Olor Tersura acciones

“Sensores Humanos” Sonido 102 Hz, 104 Hz Color 1015 Hz Sabor ¿es una onda? Olor ¿es una reacción química? Tersura ¿es una onda? 104 Hz 102 Hz

MAS Multi-Agent System (Sistemas Multi Agentes) son una colección de agentes generalmente distribuidos geográficamente y que pueden trabajar en conjunto para el logro de objetivos. Se caracterizan por que no hay un control global del sistema (recordar que cada agente es autónomo), por lo que los datos están descentralizados y la comunicación es asíncrona.

MAS Los agentes pueden ser reactivos o proactivos. Se dice que es un agente es reactivo cuando dado un estímulo es capaz de procesar la respuesta. Un agente es proactivo cuando antes de percibir estímulos se encuentra trabajando.

MAS Algunos ejemplos de agentes: Un demonio en unix (poca racionalidad) Un sistema de calefacción/aire acondicionado automatizado (poca racionalidad) Un agente planificador de vuelos Un agente para recomendaciones en sistemas de comercio electrónico.

MAS Se considera que para que un agente inteligente esté realmente completo se necesita de las siguientes actitudes: Conocimientos Creencias Intenciones Obligaciones Emociones

MAS En los sistemas multiagente se hace sumamente necesario la movilidad. Existen diversas clasificaciones de MAS: COLABORATIVOS/ APRENDEN COOPERATIVOS AGENTES INTELIGENTES COLABORATIVOS AGENTES DE INTERFAZ AUTONOMOS APRENDEN

Actividad Para un Taxi con piloto automático (taximetro reemplazado por un agente inteligente ) Determine lo siguiente: Percepciones Acciones Metas Ambiente

Ejemplo de MAS

Ambientes Dependiendo del tipo de ambiente, la inteligencia del agente varía. Actualmente se maneja el concepto de AMI (Ambientes Inteligentes) para describir el cómputo generalmente ubicuo que puede interactuar con su entorno. Es una variante de la domótica y del cómputo automatizado. A continuación se muestran los diferentes tipos de ambientes.

Cómputo Ubicuo y AMI Inteligencia Ambiental Las tendencias actuales en computación son a tener dispositivos cada vez más pequeños embebidos en el entorno que nos nueva forma de interactuar con el medio que nos rodea, por lo que se necesita que dichos elementos puedan comunicarse entre sí para formar Ambientes Inteligentes (AMI) Inteligencia Ambiental

¿Qué se necesita para AMI? ¿Qué? WHAT ¿Donde? WHERE Consciencia del dispositivo Realizar servicios solos Realizar servicios coordinados ¿Quién? WHO ¿Cómo? HOW ¿Cuándo? WHEN Context-Aware y SOA

Ambientes Accesible/Inaccesible: Si los sensores proporcionan todo lo que hay que saber sobre el estado completo del ambiente. Determinístico/No-determinístico (estocástico): Si el estado siguiente del ambiente está determinado plenamente por el estado presente del mismo, y por la acción del agente.

Ambientes Episódico/No-episódico: Un ambiente episódico implica que los episodios siguientes no dependen de las acciones que ocurrían en episodios previos. Estático/Dinámico: Será estático todo ambiente que no cambie mientras el agente está pensando.

Ambientes Discreto/Continuo: se es discreto cuando existe un escaso número de percepciones y acciones en el ambiente. Continuo en el otro caso. Sin adversario/con adversarios racionales: los ambientes de estudio generalmente son contrincarios, aunque la realidad es más compleja, como la bolsa o los juegos deportivos.

Ejercicio de Ambientes

Tipos de Ambientes De acuerdo con Russell & Norving se tienen los siguientes tipos de agentes: De reflejo simple: se basan en reglas condición/acción. Carecen de memoria referente a estados pasados del mundo. Bien informado de lo que pasa: con un estado interno usado para almacanar estados pasados del mundo.

Tipos de Ambientes Basados en meta (proactivos): además de disponer de información sobre el estado, tienen una meta que describe situaciones deseables. Basados en Utilidad: basan su decisión en la teoría de la utilidad para actuar racionalmente.

Agente Reactivo (Reflejo)

Agentes bien informados

Agentes basados en Metas

Agentes basados en Utilidad

BDI Es una forma de representar agentes: Belief (creencias), Desire (deseos), Intentions (intenciones). Las creencias representan la base de conocimientos, los deseos los logros a obtener y las intenciones son la serie de acciones a realizar para lograr los objetivos. Todo esto se debe explicitar de alguna forma.

Ejemplo de BDI Ejemplo: TERMOSTATO D = mantener temperatura en T B = { t (A), OK(T) } I = { Calentar, Enfriar, nada} Filtro: - Si A > T entonces I = Enfriar - Si A < T entonces I = Calentar - Si A = T entonces I = Nada

Ejemplo de BDI Acción: Case I de Enfriar Acción = bajar temp Calentar Acción = subir temp Nada Acción = nada Después de todo esto el principal reto en teoría de agentes es el lenguaje de comunicación entre los agentes y su entorno.

Lenguajes de Agentes Existen diversos lenguajes de comunicación entre agentes la gran mayoría propietarios aunque en los últimos años se han estandarizado dos: KQML FIPA ACL En este curso se trabajará con la plataforma de agentes JADE. Los agentes se han hecho tan populares que ha surgido el paradigma de programación orientado a agentes AOP por sus siglas en inglés.

AOP Programación Orientada a Agentes Nuevo paradigma computacional Especialización de la OOP Elemento central: Agentes BDI Agente: creencias + capacidades + compromisos

AOP Característica OOP AOP Unidad Básica Objecto Agente Unidad Básica de Estados Sin restricciones Creencias, compromisos, … Proceso de cálculo Métodos de Respuesta y Paso de Mensajes Tipo de mensajes Informe, solicitud, oferta, promesa, declinación Limitaciones en métodos Ninguna Honestidad, Consistencia, …

<<agent>> agent-name AOP Modelado de Agentes <<agent>> agent-name Role role 1, role 2, …, role n role dynamic 1, role dynamic 2, …, role dynamic n Organization organization 1, organization 2, ., organization n org dynamic 1, org dynamic 2, ., org dynamic n

Plataformas de Agentes Existen muchas plataformas MAS como: Concordia FIPA-OS Zeus Gossip JATLite Odyssey Aglets Voyager

JADE Java Agent DEvelopment Framework fue desarrollado en Italia por Telecom (formalmente CSELT) junto con la Universidad de Parma en Julio de 1998. El objetivo fue crear una implementación concreta de la especificación FIPA. Actualmente es la plataforma de agentes más utilizada en el mundo.

FIPA Es un estándar para el manejo de agentes para poderlos hacer interoperables define una arquitectura básica así como un lenguaje de agentes: ACL basado en KQML. En el caso de JADE se tiene la característica de manejar agentes móviles donde si no se le define “inteligencia” simplemente funcionan como un middleware de aplicaciones distribuidas.

JADE Es un marco de trabajo de software para facilitar el desarrollo de sistemas multiagentes inteligentes e interoperables. Constituye un midelware para el desarrollo y un ambiente de ejecución para aplicaciones punto a punto que siguen el paradigma de agentes. Jade está basado en Java.

Arquitectura de JADE

Arquitectura JADE Cada instancia del ambiente de ejecución se llama Contenedor, dado que puede contener varios agentes. El conjunto de contenedores activos se llama Plataforma. Debe existir un contenedor denominado como principal (Main Container), en el cual todos los demás contenedores deben registrarse tan pronto inicien su ejecución en el sistema.

Arquitectura JADE El primer contenedor en iniciar en una plataforma debe ser el principal. Los demás contenedores deben saber dónde localizar al principal (host:port) Si existe otro contenedor principal, entonces este constituye otra plataforma. Los contenedores puede registrarse en cualquiera de las plataformas disponibles.

Arquitectura JADE El contenedor principal maneja dos agentes especiales: AMS (Agent Management System) Provee el servicio de nombres y representa la autoridad en el sistema (crear o eliminar agentes en un contenedor remoto). DF (Directory facilitator) Provee las páginas amarillas de servicios a través del cuál un agente puede encontrar a otros que proveen los servicios que requiere para completar sus metas.

Arquitectura JADE JADE cuenta con una interfaz gráfica para el manejo de los agentes. Para poder ejecutar JADE se requiere actualizar la variable de entorno classpath. En sistemas *X a través de export CLASSPATH=$CLASSPATH:/rutabibliotecas/jade.jar:/rutabibliotecas/otrosarchivos.jar

Arquitectura JADE En el caso de sistemas Windows puede hacer a través de línea de comandos o a través de la opción de variable de entorno dentro de la configuración principal del equipo. Una vez instalada la máquina virtual de Java se ejecuta: java jade.Boot para correr en modo texto JADE o bien java jade.Boot –gui para correrlo en modo gráfico.

Arquitectura JADE Interfaz Gráfica RMA (Remote Agent Management)

Arquitectura JADE Se cuenta con algunos agentes de utilidad como el agente sniffer que permite rastrear el paso de mensajes entre los agentes.

Arquitectura JADE El agente instrospector permite visualizar los mensajes y comportamientos de los agentes.

Arquitectura JADE El agente Dummy permite interactuar con otros agentes mandando y recibiendo mensajes.

Arquitectura JADE Para la comunicación se utiliza el protocolo IIOP utilizando RMI (con compatibilidad nativa con CORBA). La comunicación se puede dar: Entre agentes en el mismo contenedor Entre agentes en distintos contenedores pero en la misma máquina Entre agentes en distintas máquinas utilizando JADE Entre agentes en distintas plataformas

Ciclo de Vida de Agente en JADE

Modelo de Ejecución JADE usa la abstracción de Behavior o comportamiento para modelar las tareas que un agente debe realizar. JADE usa el modelo de concurrencia de hilo-por-agente en lugar de hilo-por-comportamiento para mantener pocos hilos en concurrencia.

Modelo de Ejecución Cada agente posee un programador de comportamientos que implementa una política “round-robin non-preemptive”. Se utilizan dos métodos para manejar la cola de comportamientos de agente: addBehaviour(Behaviour) y removeBehaviour(behaviour).

Hola Mundo en JADE En el caso de contar con un IDE como NetBeans se deberán incluir todos los archivos de biblioteca *.jar en el proyecto. Para poder ejecutarlo se necesitará modificar las propiedades del proyecto para que la clase principal sea jade.Boot y en los argumentos de ejecución la opción –gui seguida del nombre del agente y de la clase agente. Por ejemplo agente1:Comprador

Modelo de Ejecución

Programación en JADE El proyecto en su totalidad se puede bajar de la liga AgenteSimple.zip del sitio Web de la asignatura. import jade.core.*; import javax.swing.*; public class AgenteSimple extends Agent { @Override public void setup(){ System.out.println("Ejemplo de Agente Simple!!!");

Programación en JADE JOptionPane.showMessageDialog(null, "El nombre del agente es:"+getAID().getName()); } @Override public void takeDown(){ JOptionPane.showMessageDialog(null, "Se murió el agente");

Programación en JADE Un agente de manera predeterminada no recibe datos a través de su constructor por lo que debe pasárselos a través de línea de comandos. import jade.core.Agent; public class Parametros extends Agent { private String titulo; @Override protected void setup() { System.out.println("Prueba de

Programación en JADE Object[] args = getArguments(); if (args != null && args.length > 0) { titulo = (String) args[0]; System.out.println("Comprando CD:"+titulo); } else { System.out.println("No se recibieron parámetros. El agente morirá"); doDelete(); } @Override protected void takeDown() { System.out.println("El agente:"+getAID().getName()+" está colgando los tennis");

Programación en JADE @Override protected void takeDown() { System.out.println("El agente:"+getAID().getName()+" está colgando los tennis"); } Para ejecutarse sería algo así como: java jade.Boot –gui agente:MiClaseAgente(“Parametro1”, parametro2, etc…)

Programación en JADE Aunque se pueden crear agentes a partir de otra clase que por ejemplo tenga o no un método main() su funcionamiento no es el adecuado. Por ejemplo si quisiéramos que un agente tuviese una interfaz gráfica, sería el agente el cual debiera de crear la interfaz.

Programación en JADE Otra de las características fundamentales de los agentes es la programación de los comportamientos. Un comportamiento no es otra cosa que un método que ejecuta de manera constante (en forma concurrente un hilo). A continuación se muestra un ejemplo de definición de comportamiento de un agente con interfaz gráfica.

Programación en JADE import jade.core.Agent; import jade.core.behaviours.*; import java.util.*; public class Comportamiento extends Agent { private Hashtable catalogo; private Interfaz i; @Override protected void setup() { setCatalogo(new Hashtable());

Programación en JADE i = new Interfaz(this); i.setVisible(true); } @Override protected void takeDown() { i.dispose(); public Hashtable getCatalogo() { return catalogo;

Programación en JADE public void setCatalogo(Hashtable catalogo) { this.catalogo = catalogo; } En la interfaz se diseña una forma con un cuadro de texto y dos botones: uno para agregar el texto (implementa el comportamiento del agente) y otro para listar los datos.

Programación en JADE La clase que define el comportamiento tiene la siguiente estructura class comportamientoAgregar extends Behaviour{ private String titulo; private int precio; private Hashtable catalogo; public comportamientoAgregar(String t, int p, Hashtable h){ titulo = t;

Programación en JADE precio = p; catalogo = h; } public void action() { catalogo.put(titulo, precio); public boolean done() { return true;

Programación en JADE En lo que respecta al botón de agregar en la interfaz que manda llamar al comportamiento del agente se tiene: public void actualizarCatalogo() { agente.addBehaviour(new comportamientoAgregar(titulo.getText(), Integer.parseInt(precio.getText()), agente.getCatalogo())); }

Comportamientos en JADE Existen algunos tipos de comportamientos básicos predefinidos para extender el uso de comportamientos: SimpleBehaviour: Es un comportamiento simple en el cual el usuario debe definir dentro del método onEnd() la condiciones sobre las cuales el comportamiento debe terminar.

Comportamientos en JADE OneShotBehaviour: Es un comportamiento simple que se ejecuta sólo una vez y no puede ser bloqueado. Por lo tanto el método done() siempre retorna verdadero. La función done() retorna verdadero o falso para definir si el comportamiento finalizó o no. CyclicBehaviour: Este comportamiento simple puede ser ejecutado infinitamente, por lo que el método done() siempre retorna falso.

Comportamientos en JADE FSMBehaviour.- Es un comportamiento compuesto que se ejecuta de acuerdo a una máquina de estado finito cuyos estados son definidos por el usuario. SequentialBehaviour.- Este comportamiento compuesto ejecuta secuencialmente varios subcomportamientos y termina cuando todos los subcomportamientos hayan terminado.6. ParallelBehaviour.- Es un comportamiento compuesto que ejecuta subcomportamientos concurrentemente y termina cuando una condici ́on particular en estos subcomportamien- tos se cumple.

Comportamientos en JADE ParallelBehaviour: Es un comportamiento compuesto que ejecuta subcomportamientos concurrentemente y termina cuando una condición particular en estos subcomportamientos se cumple. TickerBehaviour: es un comportamiquento que se hace cada x tiempo predeterminado.

Comportamientos en JADE public class AgenteMonitor extends Agent { ... addBehaviour(new TickerBehaviour(this,2000) { public void onTick() { //Instrucciones de monitoreo System.out.println(“ya casi es hora de salir”) }} }); ...

Clonación Los agentes se pueden clonar, para ello se deberán redefinir los métodos afterClone y beforeClone para definir funcionalidades básicas. Los agentes se pueden crear en tiempo de ejecución para ello se deberá importar la clase jade.core.RunTime. Runtime rt = Runtime.instance();

Clonación AgentContainer ac = getContainerController(); AgentController agente1= ac.createNewAgent("AgenteRecolector",”paquete.X",args); Agente1.start();

Ontologías en JADE Se pueden definir ontologías para un manejo homogéneo del vocabulario de los agentes. Las ontologías se basan en jade.content.onto.Ontologyy deben de definir tres dominios de conceptos: PredicateSchema, AgentActionSchema y ConceptSchema incluidas en el paquete jade.content.schema.

Ejemplo de Ontología package conexionOntology; import jade.content.onto.*; import jade.content.schema.*; public class conexionOntology extends Ontology { public static final String ONTOLOGY_NAME = "ontología de conexión”; public static final String URL_ = "Url”; public static final String URL_IP = "ip"; public static final String URL_PUERTO =

Ejemplo de Ontología "puerto"; public static final String CONEXIONA = "ConexionA"; public static final String CONEXIONA_URL = "url"; public static final String CONECTA = "Conecta"; public static final String CONECTA_URL = "url”; private static Ontology laInstancia = new conexionOntology();

Ejemplo de Ontología public static Ontology getInstance() {return laInstancia;} private conexionOntology() { super(ONTOLOGY_NAME, BasicOntology.getInstance()); try { add(new ConceptSchema(URL_), Url.class); add(new PredicateSchema(CONEXIONA), ConexionA.class); add(new AgentActionSchema(CONECTA),

Ejemplo de Ontología Conecta.class); U RL_ConceptSchema cs = (ConceptSchema) getSchema(URL_); cs.add(URL_IP, (PrimitiveSchema) getSchema(BasicOntology.STRING),ObjectSchema.OPTIONAL); cs.add(URL_PUERTO, (PrimitiveSchema) getSchema(BasicOntology.INTEGER)); PredicateSchema ps = (PredicateSchema) getSchema(CONEXIONA);

Ejemplo de Ontología ps.add(CONEXIONA_URL, (ConceptSchema) getSchema(URL_)); AgentActionSchema as = (AgentActionSchema) getSchema(CONECTA); as.add(CONECTA_URL, (ConceptSchema) getSchema(URL_)); }catch (OntologyException oe) {oe.printStackTrace(); }

Concepto de Ontología package conexionOntology; import jade.content.Concept; public class Url implements Concept { private String ip; private int puerto; public String getIp() {return ip;} public void setIp(String i) {ip = i;} public int getPuerto() {return puerto;} public void setPuerto(int p) {puerto = p;}}

Ejemplo deOntologías package conexionOntology; import jade.content.Predicate; public class ConexionA implements Predicate { private Url url; public Url getUrl() { return url;} public void setUrl(Url u) { url = u;}}

Ejemplo de Ontologías package conexionOntology; import jade.content.AgentAction; public class Conecta implements AgentAction { private Url url; public Url getUrl() { return url;} public void setUrl(Url u) { url = u; }}

Programación en JADE Como puede observarse en algunos casos da lo mismo implementar un comportamiento que definir un método cuando el comportamiento no es inteligente. La parte más interesante de los sistemas de agentes móviles es la comunicación entre los agentes. A continuación se muestra un ejemplo de cómo implementar el envío de mensajes

Programación en JADE import jade.core.*; import jade.lang.acl.*; import java.io.*; public class Mensajero extends Agent { private String nombre; private String contenido; public Mensajero(){ nombre = ""; contenido = ""; }

Programación en JADE @Override public void setup() { ACLMessage msg = new ACLMessage(ACLMessage.INFORM); BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Introduce el nombre del agente a enviar mensaje?"); try { nombre = bf.readLine();

Programación en JADE } catch (IOException ioe) { ioe.printStackTrace(); } msg.addReceiver(new AID(nombre, AID.ISLOCALNAME)); msg.setLanguage("Español"); System.out.println("Introduce el contenido del mensaje?"); try { contenido = bf.readLine();

Programación en JADE } catch (IOException ioe){ ioe.printStackTrace(); msg.setContent(contenido); send(msg); System.out.println("Contenido Enviado");

Programación en JADE import jade.core.*; import jade.lang.acl.*; public class ReceptorRespuesta extends Agent{ @Override public void setup(){ //receive es no bloueante... //ACLMessage msg = receive(); //Hasta que llegue un mensaje aquí se queda

Programación en JADE ACLMessage msg = blockingReceive(); if (msg != null) { System.out.println("Llego mensaje..."); String nombre = msg.getSender().getLocalName(); System.out.println("Mensaje enviado por:"+nombre); String contenido = msg.getContent();

Programación en JADE System.out.println("El contenido del mensaje es:"+contenido); ACLMessage reply = msg.createReply(); reply.setPerformative(ACLMessage.PROPOSE); String respuesta = String.valueOf(Math.random()*100); System.out.println("La respuesta a enviar es:"+respuesta); reply.setContent(""+respuesta);

Programación en JADE send(reply); } else { System.out.println("No llegó mensaje");

Programación en JADE import jade.core.*; import jade.domain.*; import jade.domain.FIPAAgentManagement.*; public class Registro extends Agent{ @Override public void setup(){ System.out.println("Registrando Agente en la sección amarilla..."); DFAgentDescription dfd = new DFAgentDescription();

Programación en JADE dfd.setName(getAID()); ServiceDescription sd = new ServiceDescription(); sd.setType("Venta-Libros"); sd.setName("Agente-Vendedor"); dfd.addServices(sd); try { DFService.register(this, dfd); } catch (FIPAException fe) { fe.printStackTrace(); } }

Programación en JADE @Override protected void takeDown() { try { DFService.deregister(this); } catch (FIPAException fe) { fe.printStackTrace(); } System.out.println("Desregistrando servicios en el DF"); }}

Prácticas Agente para Transacciones de Comercio Electrónico (“carrito de compras”) Un MAS que permita tener un agente para tomar pedido, recolectar pedido, cancelar pedido. Un buscador Web de páginas semánticas en dispositivos móviles

Bibliografía Winston, P. (1992) Artificial Intelligence, 3ra. Edición, Addison-Wesley. Fabio Bellifemine, Giovanni Caire, Agostino Poggi, Giovanni Rimassa, 2008, JADE: A software framework for developing multi-agent applications. Lessons learned, Information and Software Technology, 50(1): 10-21. http://jade.tilab.com/

¿Preguntas, dudas y comentarios?