Construcción de un sistema multiagente mediante Jade

Slides:



Advertisements
Presentaciones similares
Curso de Java Java – Redes Rogelio Ferreira Escutia.
Advertisements

Complejidad Computacional
1 INFORME RESUMEN SOBRE EL NIVEL DE UTILIZACION DE LAS TIC EN LAS EMPRESAS GALLEGAS ( Resumen PYMES ) Noviembre de 2004.
1 INFORME RESUMEN SOBRE EL NIVEL DE UTILIZACION DE LAS TIC EN LAS EMPRESAS GALLEGAS (MICROEMPRESAS, resultados provisionales) 29 de julio de 2004.
AYUDA A LA FUNCIÓN DOCENTE Internet
Características Generales y Entornos de Desarrollo
Curso de java básico (scjp)
DESARROLLO DE SOLUCIONES EMPRESARIALES MOVILES USANDO TECNOLOGIA SUN APLICACIONES MOVILES CON J2ME RMS Ing. Ronald Criollo.
Esquema de Mapeo de Base de Datos Relacionales a Objetos
Programación Interactiva Manejo de Excepciones
Programación Interactiva Introducción a Java
CLASE 3 SOFTWARE DEL MICROPROCESADOR
Estructuras de Información y Archivos
I.T.E.S.R.C. Romina Tamez Andrea Martínez Ma. De Lourdes Solís
Streaming (Retransmisión de contenidos multimedia en Internet)
Phone2Wave-Server Manual de Operación.
Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase.
INTRODUCCIÓN A JAVA.
Parte 3. Descripción del código de una función 1.
“Programación orientada a Objetos II”
Seguridad de redes empresariales
Pruebas de programas Java mediante JUnit
Informática II Prof. Dr. Gustavo Patiño MJ
Genéricos en Java Jaime Ramírez, Ángel Lucas González
Aplicación del paradigma orientado a objetos
Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
Windows XP sp3.
© Manuel ColladoVersiones-1 Control de versiones, configuración y cambios VCS: Version Control System SCM: Software Configuration Management.
Control de versiones, configuración y cambios
Índice Sesión I Bloque I (09:30 a 10:30 Horas) Configuración Inicial
Programación Orientada a Objetos en Java
BEATRIZ LAFONT VILLODRE
Marzo 2007 Lenguajes Visuales Clase III.
Por: Santiago Toro Rendón Raquel Sepúlveda.  El SO se instala en una sección definida de la unidad de disco duro, denominada partición de disco. Existen.
7a.1 Silberschatz, Galvin y Gagne ©2003 Sistemas Operativos 6ª edición Capítulo 7: Sincronización de procesos parte a.
Conceptos Básicos de Java
Primer Programa en JAVA
© 2006 Cisco Systems, Inc. Todos los derechos reservados.Información pública de Cisco 1 Listas de control de acceso Acceso a la WAN: capítulo 5.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Programación Orientada a Objetos usando C++
Medio de tele-comunicación
Lic. Rosemary Torrico Bascopé
Slide 7-1 Copyright © 2003 Pearson Education, Inc. Figure: Estructuras de datos.
JADE Java Agent Development Framework EXPOSITOR: Melvin Fallas CascanteA62098.
Java Orientado a Objetos CLASES,OBJETOS Y MÉTODOS
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.
Estructuras de control
Variables polimórficas (plantillas): definición, uso y aplicación
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA OCHO THREADS.
Técnicas avanzadas de programación Interfaces
1 TEMA 5. Seguridad en Java 1.Introducción a los Controladores de Seguridad 2.Decidir qué Métodos Sobreescribir del SecurityManager 3.Escribir un Controlador.
UNIDAD 2 CLASES Y OBJETOS. CLASE Elementos cabecera y cuerpo de la clase. Cabecera: aporta información fundamental sobre la clase en sí y constituye de.
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.
Capitulo # 4 herencia PROGRAMACION III UNIVERSIDAD
Patrones Creacionales
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.
Patrones de Diseño: Command
UNIDAD EDUCATIVA CALASANZ Manual de usos de WORDPRESS. NOMBRE: Melissa Veintimilla Labanda Curso: 1º ´´C´´ FECHA: 29 de marzo del 2015.
Threads en Java  Threads: programas multitarea  Creación de threads  Ciclo de vida de un thread  Sincronizació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.
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.
Factorías e Iterables Introducción del concepto de patrón de diseño Construcción de tipos para recorridos con for extendido Fundamentos de Programación.
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,
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,
Las interfaces Predicate y Function Versión Unidad Didáctica 17 Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Transcripción de la presentación:

Construcción de un sistema multiagente mediante Jade Curso: Agentes Inteligentes Sevilla, 20 de Mayo de 2008 Gonzalo A. Aranda Corral

Java Agent DEvelopment framework Jade es básicamente dos cosas: Una plataforma: que permite “VIVIR” y “CONVIVIR” a los agentes dentro de ella. Es decir, proporciona el entorno necesario para la ejecución de estos agentes simultáneamente y los canales para su comunicación y cooperación. Un conjunto de herramientas con el que realizar el desarrollo de agentes y sistemas multiagente de forma más sencilla, rápida y efectiva. Labor tediosa. Totalmente realizado en Java. (Portabilidad y Movilidad) Software libre distribuido por TILAB en código fuente bajo LPGL http://jade.tilab.com/

Foundation for Intelligent Physical Agents (FIPA) Otra de las características más importantes de Jade es el cumplimiento de las especificaciones FIPA Arquitectura: Esto nos dará muchas ventajas a la hora de la integración de diferentes aplicaciones, incluso con plataformas de diferentes propietarios. Lenguaje de comunicación empleado FIPA-ACL. Servicios de agentes: ciclo de vida, páginas blancas, páginas amarillas, transporte de mensajes,... Conjunto de herramientas gráficas que soportan la depuración y ejecución de agentes (RMA, sniffer, ...) http://www.fipa.org

Arquitectura básica (Infraestructura) Plataforma distribuida Comunicación entre plataformas Protocolos estándares: Internet

Arquitectura básica (Plataforma) Especificación FIPA Agentes y servicios Comunicación

Arquitectura básica (Agentes) AMS . Agent Management System: Garantiza que cada agente en la plataforma tenga un único nombre. Encargado de proporcionar los servicios de páginas blancas y ciclo de vida, y de mantener el directorio de los identificadores de agentes (AID: Agent Identifier) y su estado. Cada agente debe registrarse con el AMS para obtener un AID válido DF . Directory Facilitator: Agente que proporciona el servicio de páginas amarillas. Un agente puede encontrar otros agentes que proporcionan los servicios que requiere para cumplir sus objetivos ACC . Agent Communication Channel: Software que controla el intercambio de mensajes

Cómo obtener Jade Dirección: http://jade.tilab.com Para la mayoría de las acciones es necesario registrarse, y aceptar los requisitos de la licencia LGPL La versión actual de Jade es la 3.6(Mayo 2008), aunque nosotros vamos a realizar este seminario sobre la versión 3.4 (Marzo 2006)

Instalación Descargamos el fichero (JADE-all-3.4.zip) de la versión correspondiente. Descomprimimos el fichero y nos salen cuatro nuevos ficheros: JADE-doc-3.4.zip: la documentacion javadoc, el manual del administrador, el del programador y un tutorial. JADE-src-3.4.zip: el codigo fuente sin compilar. JADE-bin-3.4.zip: el codigo ya compilado y listo para ser invocado. JADE-examples-3.4.zip: ejemplos de uso de la plataforma. Volvemos a descomprimir los 4 ficheros en el mismo directorio. Se creará un directorio lib/ debajo del cual estarán las librerías necesarias para la ejecución de Jade NECESITA, al menos, JAVA 1.4.2

Creación del proyecto

Creación del proyecto

Creación del proyecto

La clase Agent Para trabajar con agentes se debe conocer mas o menos a fondo la clase jade.core.Agent ya que para crear un agente JADE se debe crear una nueva clase de agente que herede de ésta y que como mínimo implemente el metod setup(). El método setup() se ejecuta cuando se va a lanzar el agente para su ejecución y únicamente debe contener código relativo a tareas de inicialización. Por lo tanto, de momento, el agente no va a hacer absolutamente nada mas que emitir ese mensaje cuando se lance. El agente va a permanecer ejecutándose hasta que se invoca el método doDelete(). Este método llama a su vez a takeDown() que podéis redefinir para incluir código relativo a limpieza de elementos del agente. El método getArguments() devuelve un Object[] que proporciona los argumentos que se le han pasado al agente. Para que no haya ningún problema, el lector de los argumentos debe saber el numero y el tipo de cada uno de los argumentos.

Identificadores de agentes En JADE, la descripción del agente, el AID (Agent Identier) tiene su correspondiente clase java, jade.core.AID a partir de la cuál se pueden manejar las características básicas del agente La clase Agent incorpora el método getAID() que permite recuperar el nombre del agente. El nombre del agente, un identificador único globalmente(normativa FIPA), va a tener la estructura <nickname>@nombre-plataforma>

El primer Agente Creamos nuestro primer agente cuya función va a ser saludar al mundo. import jade.core.Agent; public class JAgente extends Agent { protected void setup() { System.out.println(“Hola Mundo.”); }

Ejecución Para la ejecucion de Jade, lo podemos realizar de dos formas distintas: Desde la linea de comandos: java <classpath> [opciones] jade.Boot agente:ClaseAgente classpath: direccion y nombre de los *.jar de Jade opciones: en principio, solo vamos a usar la opcion “-gui” para mostrar el interface grafico de Jade jade..Boot: es la clase de arranque de la plataforma agente:ClaseAgente: Nombre y clases(incluyendo paquetes) de donde queremos crear el agente Desde Eclipse: Creamos un proyecto y ponemos los siguiente paramentros (Ver pag siguiente)

Ejecución

Ejecución

Ejecución

Plugin para Eclipse http://dit.unitn.it/~dnguyen/ejade/

Traza SIGUE VIVO!!! 25-may-2006 1:46:38 jade.core.Runtime beginContainer INFO: ---------------------------------- This is JADE 3.3 - 2005/03/02 16:11:05 downloaded in Open Source, under LGPL restrictions, at http://jade.cselt.it/ ---------------------------------------- *******************MAS INFORMACION INFO: -------------------------------------- Agent container Main-Container@JADE-IMTP://GON-WS1 is ready. -------------------------------------------- Hola Mundo. SIEMPRE CERRAR HACIENDO SHUTDOWN DESDE EL MENU DE LA PLATAFORMA... SI NO, SE QUEDA ABIERTA!

jade.core.behaviours.Behaviour Comportamientos Los agentes realizan las acciones y las percepciones mediante los “Comportamientos”. La clase(y paquete) principal de los comportamientos es: jade.core.behaviours.Behaviour La clase Behaviour tiene 2 métodos principales: action(): que es el método que se ejecuta cada vez que se invoca el método done(): hace la comprobación de si el comportamiento ha terminado o no.

Comportamientos Un comportamiento tipo sería: public class CSimple extends Behaviour { public void action() { while (true) { // Acciones a realizar } public boolean done() { return true; OJO: Este comportamiento bloquearía el sistema

Ciclo de vida de un agente

Comportamientos El funcionamiento de los comportamientos está implementado a 2 niveles: Una cola circular de los comportamientos activos Una cola con los comportamiento bloqueados. Los comportamientos se desbloquean al recibir el agente un mensaje.

Comportamiento(II) Lanzar el comportamiento para añadir un comportamiento a un agente usaremos el método “addBehaviour()” que lo podremos llamar de la siguiente forma: (dentro de la clase agente, todavía) this.addBehaviour(new Behaviour() { int contador = 12; public void action() { // ACCIONES A REALIZAR System.out.println(contador); contador--; } public boolean done() { // CONDICION DE FINAL DE COMPORTAMIENTO return contador == 0; });

Comportamiento(III) o creando un objeto y activándolo miPrimerComportamiento comporta = new miPrimerComportamiento(); this.addBehaviour(comporta); con la clase “miPrimerComportamiento” creada anteriormente, ya sea como clase privada dentro del fichero o como pública en un fichero aparte class miPrimerComportamiento extends Behaviour { int contador = 10; public void action() { // ACCIONES A REALIZAR System.out.println("\t" + contador); contador--; } public boolean done() { // CONDICION DE FINAL DE COMPORTAMIENTO return contador == 0;

Tipos de comportamientos Dentro de Jade, vienen implementado diferentes comportamientos listos para ser usados. Son los siguientes: Behaviour: Comportamiento genérico. OneShotBehaviour: El método done() siempre devuelve “true”, de forma que solo se ejecuta una vez y de forma ininterrumpida. CyclicBehaviour: El método done() siempre devuelve “false”, de forma que está siempre ejecutándose. Esto puede tener el peligro de quedarse con toda la CPU. TickerBehaviour: Comportamiento que se ejecuta periódicamente cada cierto tiempo(dado en el constructor). .............. Los comportamientos además se pueden componer y formar comportamientos más complejos. Una implementación interesante sería el comportamiento BDI dentro de Jade.

Implementación de un comportamiento cíclico public class Mensajeria extends CyclicBehaviour { private int estado = 0; public void action() { ACLMessage mensajes = myAgent.receive(); if (mensajes != null) { switch(estado) { case 0: // Llega una peticion de partida nueva case 1: break; } } else { block(); Los comportamientos cíclicos se suelen implementar como una máquina de estados, y con bloqueos a la espera de recibir mensajes.

Mensajería La capacidad de comunicación de un agente viene soportada por el envío de mensajes ACL. En un mensaje podremos distinguir 4 partes principales: Receptor y Emisor Contenido Directiva Lenguaje y Ontologías El mensaje es un objeto de la clase jade.lang.acl.ACLMessage y cuando se crea el mensaje, invocando al constructor, le pasamos un parámetro que es la “PERFORMATIVA” Además, el mensaje posee otros parámetros para identificar los mensajes, como ReplyWith, ConversationId, etc

Mensajería El envío de mensajes lo deberemos de realizar dentro de los comportamientos. Estos comportamientos podrán ser OneShot o Cyclic, dependiendo de lo que nos interese. Los comportamientos cíclicos se realizan para la recepción de mensajes, ya que los podemos bloquear hasta la recepción de uno nuevo. En el Agente Jugador, tendríamos un comportamiento de disparo para solicitar que empiece la partida. Todas las acciones de un agente, deben de estar implementadas como comportamientos.

Mensajería package Jugador; import jade.core.AID; import jade.core.behaviours.OneShotBehaviour; import jade.lang.acl.ACLMessage; public class MEmpezar extends OneShotBehaviour { public void action() { ACLMessage mensaje = new ACLMessage(ACLMessage.REQUEST); AID partida = new AID("miPartida",AID.ISLOCALNAME); mensaje.addReceiver(partida); mensaje.setContent("Quiero Jugar"); myAgent.send(mensaje); }

Mensajería Dentro de Jade, y haciendo uso de las directivas, se han implementado diferentes protocolos, que sólo vamos a nombrar ya que se escapan de nuestro alcance. FIPA Request Interaction Protocol Specification FIPA Query Interaction Protocol Specification FIPA Request When Interaction Protocol Specification FIPA Contract Net Interaction Protocol Specification ... El lenguaje de contenido FIPA es el SL, que es un lenguaje con una sintaxis muy parecida al LISP, aunque no está demás recordar que FIPA lo que tiene son RECOMENDACIONES. También se puede hacer uso de ontologías, que podemos crear con programas como Protégé.

Registro y búsqueda Los agentes se pueden registrar en las plataformas para ser buscados (*) “No tenemos por que saber como se llama el agente que posee nuestra partida” Aunque al menos tiene que existir lo que se denomina: “El secreto compartido”, es decir, tenemos que saber ALGO de lo que queremos buscar. En nuestro caso es el nombre de los dos agentes especiales AMS y DF El registro dentro del servicio de páginas blancas es obligatorio para pertenecer a la plataforma. El registro en las páginas amarillas es opcional. En él se registran los servicios que ofrece cada agente, pudiéndose dar más de una entrada por agente.

Registro en Páginas Blancas Se realiza automáticamente al unirse a la plataforma. Se puede realizar “a mano” si se desea, Si extendemos de la clase Agent, esta lo tiene implementado.

Registro en Páginas Amarillas //----------------------------------------------------------------// // Registrar el Creador en el facilitador de directorio DFAgentDescription dfd = new DFAgentDescription(); dfd.setName(getAID()); ServiceDescription sd = new ServiceDescription(); sd.setType("Crear"); sd.setName("Creacion"); dfd.addServices(sd); try { DFService.register(this,dfd); cad.println("Creador\t\tRegistrado"); } catch(FIPAException fe) { fe.printStackTrace(); }

Búsqueda de servicios DFAgentDescription template = new DFAgentDescription(); sd = new ServiceDescription(); sd.setType("Traducir"); template.addServices(sd); AID[] creadores = null; try { DFAgentDescription[] result = DFService.search(this,template); creadores = new AID[result.length]; for (int i=0; i< result.length; i++) { creadores[i] = result[i].getName(); } } catch (FIPAException fe) { creadores = null; fe.printStackTrace(); if (creadores == null) { this.doDelete();

Un caso práctico: Tetris

Agente Partida Tetris: Introducción. Sistema Multi-agente (2) que van a interactuar por medio de mensajes ACL para implementar el juego del Tetris Jade nos ofrece la facilidad de implementación rápida de comportamientos y la exportabilidad, casi inmediata, a un funcionamiento en red. Agente Jugador