jade agentes inteligentes básico

58
AGENTES INTELIGENTES CON JAVA NETBEANS. JADE. Octavio C. Abundez Ramírez email: [email protected] Facebook: Octavio Abundez Taller: Agentes Inteligentes México, D.F., 29-30 de Octubre de 2015

Upload: octavio-abundez

Post on 11-Apr-2017

1.249 views

Category:

Software


3 download

TRANSCRIPT

Page 1: Jade Agentes inteligentes básico

AGENTES INTELIGENTES CON JAVA NETBEANS.

JADE.

Octavio C. Abundez Ramírezemail: [email protected]

Facebook: Octavio Abundez

• Taller: Agentes Inteligentes • México, D.F., 29-30 de Octubre de 2015

Page 2: Jade Agentes inteligentes básico

MAIN CONTAINER•AMS (Sistema de Gestión de Agente)-Proporciona El servicio de nombres y representa la autoridad en la plataforma.• DF (Directorio Facilitador)-Proporciona Un servicio de páginas amarillas por medio de los cuales un agente puede encontrar otros agentes que prestan los servicios que requiere para lograr sus metas.• RMA (Remote Management Agent)-Actuando como consola gráfica para la gestión de la plataforma y el control.

Page 3: Jade Agentes inteligentes básico

Remote Monitoring Agent

• Proporcionar a la interfaz gráfica de usuario para controlar el ciclo de vida de los agentes

Page 4: Jade Agentes inteligentes básico

• Canal de comunicación del agente (ACC)- Agente a Agente- Plataforma agente a Plataforma Agente

Message Transport System

Page 5: Jade Agentes inteligentes básico

•Agent identifier –<nickname>@<platform_name>

Page 6: Jade Agentes inteligentes básico

Objetos vs AgentesUn objeto es reactivaUn objeto es una entidad pasiva (o reactiva). Si nadie solicita el valorde un atributo o activa un método de el objeto, entonces no Pasa nada.

Un agente es ProActifUn agente tiene, además de los Atributos y métodos, procesos Internos función, incluso en ausencia de tensiones externas. Un agente puede actuar, por tanto, incluso si nadie le pregunta nada

Page 7: Jade Agentes inteligentes básico

Dummy Agent Herramienta útil para la depuración• Permite la interacción con otros agentes de envío,

recepción y visualización de mensajes de ACL• ¿Cómo poner en marcha:

-Desde La línea de comandosjava jade.Boot da:

jade.tools.DummyAgent.DummyAgent-Desde El GUI RMA

• Elegir "Herramientas Iniciar DummyAgent"• Seleccione "Iniciar nueva Agent" y proporcionar

jade.tools.DummyAgent.DummyAgent como el nombre de la clase

Page 8: Jade Agentes inteligentes básico

Dummy Agent

Page 9: Jade Agentes inteligentes básico

Cuando un agente sniff (o un grupo), algunos mensajes son enviados a el agente, son visibles en una especie de diagrama UML de secuencia

• Cuando un agentes o contenedores son creados o destruidos, el Agente Sniffer es informado por la AMS

• ¿Cómo poner en marcha:-Desde La línea de comandos java jade.Boot snif: jade.tools.sniffer.Sniffer-Desde El GUI RMA• Elegir "Herramientas Iniciar Sniffer"• O seleccione "Iniciar nueva Agent" y proporcionar

jade.tools.sniffer.Sniffer como el nombre de la clase

Sniffer Agent

Page 10: Jade Agentes inteligentes básico

Sniffer Agent

Page 11: Jade Agentes inteligentes básico

Sniffer Agent • DF es un servicio de páginas amarillas:

agentes pueden registrar sus servicios o buscar en el DF

• En cada plataforma, hay al menos un DF• Cómo iniciar la interfaz gráfica de usuario:-Desde El GUI RMA• Elegir "Herramientas Mostrar la GUI DF"

Page 12: Jade Agentes inteligentes básico

IntrospectorAgentMonitoriza el ciclo de vida de un agente: mensajes enviados recibido, cola / comportamiento• ¿Cómo poner en marcha:-Desde El GUI RMA• elegir "Herramientas -Iniciar IntrospectorAgent"

Page 13: Jade Agentes inteligentes básico

El ciclo de vida de los agentes y la movilidad.

INICIADO: el objeto Agente está construido, pero no se ha

registrado en sí pero con la AMS, no tiene nombre ni una

dirección y no puede comunicarse con otros agentes.

ACTIVO: el objeto Agente se ha registrado en el AMS, tiene un

nombre regular y la dirección y puede acceder a todas las

diversas características JADE.

SUSPENDIDO: el objeto del agente se detiene en ese momento.

su rosca interna se suspende y no se está ejecutando el

comportamiento del agente. doSuspend ()

Page 14: Jade Agentes inteligentes básico

ESPERA: el objeto Agente está bloqueado, esperando algo. Su rosca interna es durmiendo en un monitor de Java y se despierta cuando se cumple alguna condición (por lo general, cuando un mensaje llega). doWait ()

ELIMINADO: el agente es definitivamente muerto. La rosca interna ha terminado su ejecución y el Agente no es más registrado en el AMS.

TRÁNSITO: un agente móvil entra en este estado mientras se está migrando a la nueva ubicación. Los sistema continúa para amortiguar los mensajes que luego serán enviados a su nueva ubicación.

El ciclo de vida de los agentes y la movilidad.

Page 15: Jade Agentes inteligentes básico

El ciclo de vida de los agentes y la movilidad.

Page 16: Jade Agentes inteligentes básico

Creación de agentesHay dos formas de ejecutar un agente: desde el GUI de JADE y desde la línea de comandos.

Desde la línea de comandos.java jade.Boot –container <nombre_agente>:

<paquete_.class> Ejecución remota de agentesjade.Boot -container -host nombreHost

<nombre_agente>:<ruta_agente.class> 

Page 17: Jade Agentes inteligentes básico
Page 18: Jade Agentes inteligentes básico

Entonces…¿Qué es un agente?

"Los agentes autónomos son sistemas computacionales que

habitan en algún complejo entorno dinámico, sienten y

actúan de forma autónoma en este entorno, y al hacerlo, se dan cuenta de un conjunto de metas o tareas para las que han sido

diseñados."

Page 19: Jade Agentes inteligentes básico

Qué es un comportamiento EN JADE?

Un comportamiento o behaviour hace referencia a una funcionalidad que incorpora el agente.

Los comportamientos especifican tareas o servicios que realiza un agente para lograr sus objetivos. Cada comportamiento puede realizar una tarea simple como "Envia este mensaje" o "compra X " aunque también se pueden crear comportamientos compuestos.

Cada tarea del agente sará una instancia de una clase que deber heredar de la clase Behaviour.

class MiComportamiento extends Behaviour{ … }LIBRERÍA: jade.core.behaviours.*

Page 20: Jade Agentes inteligentes básico

Qué es un comportamiento EN JADE?

Los agentes están programados en base a sus comportamientos. La programación basada en comportamientos debe realizar los siguientes pasos:

1. Determinar qué debe ser capaz de hacer el agente.2. Asociar cada funcionalidad con un comportamiento.3. Escoger el tipo de comportamientos4. Dejar a JADE la tarea del scheduling (un solo 5. comportamiento se está ejecutando en cada instante).En el ejemplo ANTERIOR se puede ver como se añade un

comportamiento desde el método setup() del agente.

Page 21: Jade Agentes inteligentes básico

Qué es un comportamiento EN JADE?

Además de añadir nuevos comportamientos, también se pueden eliminar comportamientos de un agente con el método removeBehaviour(Behaviour).Así, si en el ejemplo anterior quisiéramos borrar el primer comportamiento desde el segundo comportamiento bastaría con hacer una llamada a removeBehaviour() dentro del método action del segundo comportamiento:

Page 22: Jade Agentes inteligentes básico

Ejercicios de Comportamiento

Crea un proyecto de nombre:dia2Crea el paquete: comportat

◦ Crea la clase: comportat1◦ Crea la clase: comportat1_m◦ Crea la clase: comportat2

Page 23: Jade Agentes inteligentes básico

Comportamiento Métodos de un comportamiento

Toda clase que herede de Behaviour deberá implementar:

- El método action().Este método define la acción a ser ejecutada cuando se ejecute el

comportamiento. Debe incluir el código de las acciones a realizar cuando se ejecute el comportamiento.Es invocado cuando se produce el evento asociado al comportamiento.Es recomendable que los métodos action() no tengan un tiempo de ejecución

alto ya que mientras que se ejecutan no pueden ser interrumpidos por otro comportamiento.

- El método done().Es invocado cuando finaliza la ejecución del método action().Este método determina si el comportamiento ha sido completado o no.

Devuelve un booleano (true si ha terminado o false en caso contrario).Si el comportamiento ha finalizado, éste se elimina de la cola de

comportamientos activos.Se puede utilizar una marca que se activa cuando se quiere que finalice el

comportamiento (se evalúa su valor en el método done()).

Page 24: Jade Agentes inteligentes básico

Un comportamiento también puede ser bloqueado utilizando el método block(). Este método permite bloquear un comportamiento hasta que algún acontecimiento ocurra (típicamente, hasta que un mensaje llegue). Este no afecta a los demás comportamientos de un agente.Cuando el método action() termina, el método block() coloca el comportamiento en la cola de comportamientos bloqueados.

Comportamiento

Page 25: Jade Agentes inteligentes básico

ComportamientoEn el paquete: comportat

◦ Crea la clase: comportat3◦ Crea la clase: comportat4◦ Crea la clase: comportat5

OneShotBehaviour

En este tipo de comportamiento elmétodo done() siempre devuelve "true",

de formaque sólo se ejecuta una vez y de formaininterrumpida.

Page 26: Jade Agentes inteligentes básico

CyclicBehaviourRepresenta un comportamiento que debe ejecutarse una serie de veces.

El método done() devuelve false.Se mantiene activo tanto tiempo como esté activo el agente.Hay riesgo de que se pueda quedar con

todala CPU.

Comportamiento

Page 27: Jade Agentes inteligentes básico

Comportamiento

Un agente de la clase Receptor llamándolo con el nombre “receptor”

java jade.Boot -container receptor:comportat.Receptor

Un agente de la clase Emisor llamándolo con el nombre "emisor1" :

java jade.Boot -container emisor1:comportat.Emisor

Obtenemos la siguiente salida:En el paquete: comportat◦ Crea la clase: Emisor◦ Crea la clase: Receptor

Page 28: Jade Agentes inteligentes básico

Comunicación 1ª partejava jade.Boot -container receptor:comportat.Receptor

Después ejecuta el programa:

Page 29: Jade Agentes inteligentes básico

Comportamiento

java jade.Boot -container emisor1:comportat.Emisor

Después ejecuta el programa:

Page 30: Jade Agentes inteligentes básico

Fundamentos:La comunicación entre agentes

Es fundamental para poder conseguir la potencia propia de los sistemas multiagente.

Determina el comportamiento social de los agentes Para que los agentes se puedan comunicar deben usar el

mismo lenguaje de comunicación Un lenguaje de comunicación define los tipos de mensaje:

informar, solicitar, preguntar… Las conversaciones entre agentes se rigen por una serie de

protocolos de interacción El lenguaje de comunicación de agentes (ACL) permitirá

transmitir una serie de conocimiento que vendrá expresado en un lenguaje de contenido. Los términos del lenguaje de contenido que representen conocimiento pertenecerán a un vocabulario común a los distintos agentes que se llama ontología.

Page 31: Jade Agentes inteligentes básico

Comunicación 2ª parteUn agente de la clase Receptor

llamándolo con el nombre “receptor” java jade.Boot -container

receptor:comportat.Receptor2Un agente de la clase Emisor llamándolo

con el nombre "emisor1" :java jade.Boot -container emisor1:comportat.Emisor2

Obtenemos la siguiente salida:En el paquete: comportat◦ Crea la clase: Emisor2◦ Crea la clase: Receptor2

Page 32: Jade Agentes inteligentes básico

Comportamientojava jade.Boot -container receptor:comportat.Receptor

Después ejecuta el programa:

Page 33: Jade Agentes inteligentes básico

Comportamiento

java jade.Boot -container emisor1:comportat.Emisor2

Después ejecuta el programa:

Page 34: Jade Agentes inteligentes básico

Haciendo uso de createReply().De esta manera, la clase Receptor quedaría así:

Como verás en este programa, existe una respuesta del agente receptor

Comportamiento

En el paquete: comportat◦ Crea la clase: Emisor3◦ Crea la clase: Receptor3

Page 35: Jade Agentes inteligentes básico

Comportamiento

En el paquete: comportat◦ Crea la clase:

Receptor3◦ Crea la clase:

Emisor3

En el presente programa se da un pequeño dialogo

Page 36: Jade Agentes inteligentes básico

La comunicación JADE :es FIPA-ACL. Un mensaje FIPA-ACL puede contener los siguientes campos:

performative: tipo de acto comunicativo (acción que realiza el mensaje). Es el único campo obligatorio y puede tomar uno de los siguientes valores:

◦ accept-proposal: aceptar una propuesta recibida previamente◦ agree: estar de acuerdo en realizar alguna acción◦ cancel: cancelar alguna acción pedida previamente◦ cfp: solicitar propuestas para realizar una acción dada◦ confirm: informar a un receptor que una proposición es cierta◦ disconfirm: informar a un receptor que una proposición es falsa◦ failure: informar a otro agente que se intentó una acción pero falló◦ inform: informar a un receptor que una proposición es cierta◦ inform-if: si el agente que recibe la acción cree que la sentencia

es verdadera informará de manera afirmativa, sino indicará que es falsa.

Page 37: Jade Agentes inteligentes básico

La comunicación JADE :es FIPA-ACL. not-understood: informar a un receptor que el emisor no entendió el

mensaje propagate: el receptor trata el mensaje como si fuese dirigido

directamente a él, y debe identificar los agentes en este descriptor y enviarles el mensaje a ellos

propose: enviar una propuesta para realizar una cierta acción proxy: el receptor debe seleccionar agentes objetivo denotados por una

descripción dada, y enviarles un mensaje embebido query-if: preguntarle a otro agente si una determinada proposición es

cierta query-ref: preguntar a otro agente por el objeto referenciado en una

expresión refuse: rechazar realizar una acción reject-proposal: rechazar una propuesta durante una negociación request: solicitar a un receptor que realice alguna acción request-when: solicitar al receptor que realice alguna acción cuando una

proposición dada sea cierta request-whenever: solicitar al receptor que realice alguna acción cada

vez que una proposición dada sea cierta subscribe: una intención persistente de notificar al emisor de un

determinado valor, y volver a notificarle cada vez que dicho valor cambie

Page 38: Jade Agentes inteligentes básico

La comunicación JADE :es FIPA-ACL. Métodos de ACLMessage

A continuación se muestran algunos de los métodos más importantes de la clase ACLMessage. Para consultar más detenidamente todos los métodos de dicha clase se puede consultar su documentación en la API de JADE ( ACLMessage )

setPerformative(int ): toma como parámetro una constante representativa de un tipo de acción performativa y la establece como performativa del mensaje. Los posibles actos comunicativos son los que hemos visto antes y las constantes que los representan se pueden ver en la API. Por ejemplo, para hacer que el mensaje msg sea de tipo agree bastará con escribir: msg.setPerformative(ACLMessage.AGREE);

getPerformative(): devuelve un entero equivalente a la constante que representa a la performativa del mensaje

createReply(): crea un mensaje de respuesta para el mensaje sobre el que es aplicado, poniendo los valores oportunos en campos como receiver, conversation-id, etc.

addReceiver(AID ): toma como parámetro un AID y lo añade a la lista de receptores getAllReceiver(): devuelve un iterador sobre la lista de receptores. setContent(String ): recibe como parámetro una cadena y la pone como contenido del

mensaje getContent(): devuelve una cadena con el contenido del mensaje

Page 39: Jade Agentes inteligentes básico

Selección de mensajes

Para seleccionar los mensajes que un agente desea recibir podemos utilizar la clase MessageTemplate.Esta clase permite definir filtros para cada atributo del mensaje ACLMessage y se utiliza como parámetro en los métodos receive y blockingReceive.

En esta clase se definen un conjunto de métodos estáticos que nos devuelven como resultado un objeto de tipo MessageTemplate.

Las diferentes opciones de filtrado son:MatchPerformative( performative ) donde performativepuede ser:◦ ACLMessage.INFORM◦ ACLMessage.PROPOSE◦ ACLMessage.QUERY_REF◦ ...

La comunicación JADE :es FIPA-ACL.

Page 40: Jade Agentes inteligentes básico

MatchSender( AID ) MatchConversationID( String ): Permite dedicar un comportamiento a

gestionar una conversación/negociación. and( Template1, Template2 ): realiza un and lógico entre los dos filtros. or ( Template1, Template2 ): realiza un or lógico entre los dos filtros. not( Template ): invierte el filtro. MatchOntology( String ): devuelve un filtro según el nombre de la ontologia

que le pasemos como parámetro. MatchProtocol( String ): devuelve un filtro según el nombre del protocolo que

le pasamos. MatchLanguage( String ): devuelve un filtro según el lenguaje introducido. MatchContent( String ): crea una plantilla según el contenido del mensaje. MatchReplyWith( String ): devuelve un filtro según el campo replywith.

Además existe el método match(ACLMessage) que devuelve verdadero si el mensaje que le pasamos como parámetro cumple el filtro definido en el objeto MessageTemplate.

En el ejemplo anterior, el agente Receptor podría solo estar interesado en recibir mensajes del tipo REQUEST, en Español y procedentes exclusivamente del agente "emisor". Esto se puede obtener modificando el 

La comunicación JADE :es FIPA-ACL.

Page 41: Jade Agentes inteligentes básico

En el paquete: comportat◦ Crea la clase: Emisor4◦ Crea la clase: Receptor4

La comunicación JADE :es FIPA-ACL.

Page 42: Jade Agentes inteligentes básico

La comunicación JADE :es FIPA-ACL.

Después ejecuta el programa:

Page 43: Jade Agentes inteligentes básico

La comunicación JADE :es FIPA-ACL.

Después ejecuta el programa:

Page 44: Jade Agentes inteligentes básico

La comunicación JADE :es FIPA-ACL.

Ejecución de◦ La clase:

Receptor4

◦ La clase: Emisor4

Page 45: Jade Agentes inteligentes básico

Páginas amarillas (DF Agent)

Permite a los agentes publicar los servicios que proporcionan, para que otros agentes puedan acceder a ellos.

Page 46: Jade Agentes inteligentes básico

Páginas amarillas (DF Agent)

El agente debe proporcionar al DF una descripción, incluyendo su AID, los protocolos, lenguajes y ontologías que el resto de agentes necesitan conocer para interactuar con él; y la lista de servicios publicados.

Para cada servicio se proporciona una descripción, incluyendo: tipo de servicio, nombre, protocolos, lenguajes y ontologías; y una serie de propiedades específicas del servicio.

Antes de finalizar su ejecución el agente debe eliminar del DF sus servicios.

Page 47: Jade Agentes inteligentes básico

Páginas amarillas (DF Agent)

Para realizar las acciones anteriores Jade proporciona los siguientes métodos:static DFAgentDescription register: registra los servicios de un agente en el DF.

static void deregister: elimina del registro del DF los servicios del agente.

Los servicios se definen con los siguientes métodos de la clase ServiceDescription:◦ void setName: modifica el nombre del servicio.◦ void setOwnership: modifica el propietario del servicio.◦ void setType: modifica el tipo de servicio.◦ void addLanguages: añade lenguaje del servicio.◦ void addOntologies: añade ontología del servicio.◦ void addProtocols: añade protocolo del servicio.◦ void addProperties: añade propiedades del servicio.

Page 48: Jade Agentes inteligentes básico

Publicar servicios:La descripcion del agente se modifica con los

siguientes métodos de la clase DFAgentDescription:◦ void setName: modifica el AID de la descripciñón del

agente.◦ void addServices: añade el servicio pasado por

parámetro a la descripción del agente.◦ void removeServices: elimina el servicio pasado por

parámetro a la descripción del agente.◦ void addLanguages: añade lenguajes que el agente

entiende.◦ void addOntologies: añade ontologías que el agente

entiende.◦ void addProtocols: añade protocolos que el agente

entiende.

Page 49: Jade Agentes inteligentes básico

Páginas blancas (AMS Agent)• 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, esta operación en JADE la realizan los agentes de manera automática en el agente AMS por defecto.

Page 50: Jade Agentes inteligentes básico

Páginas blancas (AMS Agent)

Para acceder a los servicios del agente AMS hay que importar la clase AMSService. Esta clase contiene los siguientes métodos:static void register: registra al agente en el AMS. Tanto esta operación como la operación deregister se realizan automáticamente en JADE cuando se ejecutan los métodos setup() y takeDown() respectivamente, por lo tanto no suelen ser usados normalmente.

static void deregister: elimina el registro del agente en el AMS.

static void modify: modifica los datos del agente en el AMS. static AMSAgentDescription search: devuelve la descripción

de los agentes registrados en el agente AMS.

Programa 14. Crea la clase: PaginasBlancas y ejecutalo

Page 51: Jade Agentes inteligentes básico

Páginas blancas (AMS Agent)Programa 14. Crea la clase: PaginasBlancas y ejecutalo

Page 52: Jade Agentes inteligentes básico

Protocolos de comunicaciónEl paquete jade.protoEste paquete agrupa todas las clases que, en

forma de comportamientos, facilitan la implementación

de los protocolos de comunicación definidos por FIPA.

Dichas clases se agrupan dentro del paquete en cuatro

parejas de clases principales con las cuales se podrán

implementar la mayoría de los protocolos.

Page 53: Jade Agentes inteligentes básico

Protocolos de comunicación Como ya se indicó más arriba estas clases implementan

comportamientos, y concretamente el tipo de comportamiento que implementa es el FSMBehaviour, ya que las acciones de los agentes en los protocolos FIPA se puede reducir simplemente a una máquina de estados finitos, y este es el tipo de comportamiento indicado para representar dichas máquinas. Este comportamiento es más fácil de comprender observando el siguiente ejemplo en el cual Pedro le pide la hora Juan:

Pedro: Juan, ¿Tienes hora? Juan: Sí, un segundo. Juan mira el reloj. Juan: Son las seis en punto.

Page 54: Jade Agentes inteligentes básico

Protocolos de comunicación

Page 55: Jade Agentes inteligentes básico

Protocolos de comunicación En JADE los comportamientos de los iniciadores se ejecutarán

una sola vez, mientras que los de los respondedores serán cíclicos.La acciones que se realizan

en cada estado se definen mediante

 manejadores (Handlers), mientras que los mensajes se concretan mediante (Prepares)..

Page 56: Jade Agentes inteligentes básico

Algunos de los protocolos que implementa la clase AchieveRE son:

FIPA-RequestEste protocolo permite a un agente solicitar a otro la realización de una acción y está identificado en el parámetro del protocolo del mensaje con el valor fipa-request. Los mensajes que se intercambian son: Request, la petición.

Agree, si acepta la petición o refuse si la rechaza. En caso de que el mensaje anterior fuera un agree:

Failure si ocurrió algún error en el proceso, inform-done si se realizó correctamente e inform-result si además se tiene que comunicar el resultado.

A continuación se presenta un ejemplo que hace uso de estas clases.

Page 57: Jade Agentes inteligentes básico

Ejercicio último En este ejemplo un agente (representado por la clase Testigo) avisará a

los hospitales pasados como parámetro de que ha habido un accidente de tráfico y pide ayuda. Es decir podremos crear varios hospitales y pasarlos todos como parámetros al testigo.

Los hospitales (representados por la clase Hospital) podrán atender la emergencia o descartarla por estar fuera de su radio de actuación. 

Para que funcione bien, hay que lanzar primero el agente Hospital (uno o varios) y luego pasarle como parámetro al agente Testigo uno o mas agentes (en caso de no pasar ninguno dará un error de falta de parámetros).

Page 58: Jade Agentes inteligentes básico