Algoritmos y Estructuras de Datos Compiladores e Intérpretes Herramientas Lenguaje de programación
!Prog C/C++
Linux Matemáticas
Mates Discretas
Programación Orientada a Objetos Redes y Computación Distribuida Sistemas Operativos

Agentes

[date: 19-01-2025] [last modification: 20-01-2025]
[words: 6543] [reading time: 31min] [size: 122598 bytes]

Introducción a los agentes: definición y sus características. Veremos los tipos de entornos en los que los agentes suelen operar y algunas arquitecturas comunes. A continuación, se comentarán los protocolos y lenguajes de comunicación de FIPA ACL, definición de ontologías; y para terminar, implementación de agentes en la plataforma de JADE.

Antecedentes

Tendencias
Ubicuidad

Cada vez sistemas de cómputo más baratos.

==> Se ponen en cualquier lugar: coches, microondas, lavadores, TV…

InterconexiónDichos sistemas no están aislados, sino que dialogan con otros. Disponen de Bluetooth, Wi-Fi, …
Inteligencia (complejidad)Originalmente los estos sistemas eran bastante sencillos, pero como consecuencia de la mejora de la capacidad de cómputo, hoy en día ya no es así.
Delegación

Cada vez se delegan más tareas a sistemas informáticos (coches, aviación…):

  • Más seguro
  • Más rápido
  • No se cansan
Orientado a HumanosAparecen cada vez más abstracciones de alto nivel para que un humano pueda operar con sistemas complejos de forma sencilla.

Todo esto no se estudiaba hasta hace «poco» ==> Aparece un nuevo campo: los sistemas multiagente.

Definición de Agente

Agente
Sistema de computación capaz de realizar acciones de forma independiente a favor de su dueño.

Un agente representa a un usuario y defiende sus objetivos, intereses y metas.

Sistema Multiagente (SMA)

Sistema que contiene un número de agentes que interaccionan entre sí. Para que una interacción sea apropiada es necesaria la habilidad de cooperar, coordinarse y negociar entre sí.

Características:

  • Cada agente no tiene la información completa ni la capacidad para resolver el problema
  • Tienen puntos de vista limitados
  • No hay un sistema de control global
  • Los datos están descentralizados
  • Computación asíncrona

Grandes cuestiones a resolver:

Características

Entidades autónomas
AutonomíaLos agentes trabajan sin la intervención directa del usuario y toman sus propias decisiones.
Es la única característica realmente obligatoria.
Reactividad

Los agentes perciben su entorno y responden a sus estímulos, por lo que se pueden ver como sistemas de control.

  • En la mayor parte de los casos, el agente tiene control parcial sobre el entorno, incluso algunos agentes pueden cambiarlo. Por tanto, suelen ser entornos no deterministas.

  • El agente tiene una serie de precondiciones y unas acciones asociadas a ellas. El principal problema que debe resolver es decidir qué acción se lleva a su objetivo.

  • Además, los agentes deben estar preparados para fallar o incluso no saber si han tenido éxito o no.

Iniciativa

El agente necesita cumplir una serie de objetivos, lo que determinará su comportamiento.

Inteligencia (= complejidad)
Razonamiento
  • Decide qué objetivo perseguir o a qué evento reaccionar
  • Decide cómo actuar para conseguir un objetivo
  • Puede decidir suspender o abandonar un objetivo para centrarse en otro
AprendizajePuede adaptarse progresivamente al usar técnicas de aprendizaje.
Principio de Racionalidad
(Allen Newel, 1982)

Si un agente tiene el conocimiento de que una de sus acciones le llevará a uno de sus objetivos, entonces el agente seleccionará esa acción.

  • Existe una clara conexión entre objetivos y comportamientos
  • Esto no implica que el agente tomará la mejor decisión siempre
Interacción
Concurrencia
  • Resolución de problemas mediante la estrategia de Divide y Vencerás, que permite usar concurrencia.
  • Esto aporta flexibilidad, escalabilidad, tolerancia a fallos y gestión de recursos.
HeterogeneidadHeterogeneidad y especialización: se reparten las responsabilidades.
La diferencia con una red P2P es que los nodos son heterogéneos, diferentes entre sí, cada uno con diferentes objetivos.
Test de Huhns-Singh (1999)

Un sistema que contenga uno o más agentes, debe cambiar sustancialmente si otro de los agentes se agrega al sistema.

Condiciones:

  • El entorno del agente no es estático: pueden suceder eventos.
  • El entorno es lo suficientemente observable (que no tiene porqué serlo).
  • El tipo de los agentes que se incorporan es alguno ya existente en el sistema.
  • Comportamiento emergente: aparecen comportamientos no programados.
  • Mejora el rendimiento
Habilidad social
Habilidad social
  • Interaccionan: dialogan entre ellos.
  • Delegan: asignan tareas a otros agentes.
  • Cooperan: trabajo en común para llegar a un fin común.
  • Negocian: formulan acuerdos cuando varios agentes compiten.
  • Se coordinan: organizan el proceso de solución del problema evitando interacciones nocivas.

==> Usan un lenguaje complejo y rico:

  • KQML
  • FIPA ACL (JADE)

Algunos autores consideran que hablar estos lenguajes es suficiente para considerar una aplicación un agente.

Movilidad
Agentes móviles
  • Los agentes pueden migrar de un nodo a otro en una red, preservando su estado en cada salto.
  • Esto se puede conseguir mediante intérpretes y máquinas virtuales, como la JVM (usa Java RMI por debajo), que es independiente de plataforma.

Entornos

Tipos de entornos
Accesible vs Inaccesible
  • Accesible: el agente puede obtener información completa y exacta del entorno.
  • La mayoría de los entornos son inaccesibles.
  • Cuando más accesible, más fácil es desarrollar agentes.
Determinístico vs No determinístico
  • Determinístico: una acción tiene un solo posible efecto.
  • Los entornos no determinísticos complican el desarrollo de agentes.
Episódico vs No episódico
  • Episódico: las prestaciones de un agente dependen de un número discreto de episodios, no del escenario completo.

    Es decir, no existe dependencia entre incidente actual y anterior. En un entorno no episódico o secuencial, las decisiones anteriores pueden afectar al futuro.

  • Son más simples de desarrollar: no necesita razonar respecto de interacciones entre el episodio actual y futuros episodios.

Estático vs Dinámico
  • Estático: el entorno solo se modifica por las interacciones del agente.
  • Dinámico: existen otros procesos que modifican el entorno, sin que el agente tenga control sobre ello. Dichos procesos pueden interferir en las decisiones del agente.
Continuo vs Discreto
  • Discreto: número fijo y finito de acciones a tomar y percibir.

Ejemplo:

  • Discreto: partida de ajedrez.
  • Continuo: conducir un coche.

Arquitecturas de agentes

Arquitecturas basadas en capas
Horizontal

Todas las tareas están conectadas con las percepciones y acciones.

Hay una función mediadora:

  • Decide qué capa tiene el control del agente
  • Asegura la consistencia
  • Es el cuello de botella del sistema
SENSORESEExvpiltoarrarobstáculosACCIONES
VentajasParalelismo.
Desventajas
  • Todas las capas tienen que tener un alto conocimiento sobre el entorno.
  • Coste de control de coordinación (función mediadora) , ¿qué tarea se va a realizar?
Vertical

Las tareas funciona por capas, con la posibilidad de tener varias pasadas por capa:

  • Una primera capa encargada de la percepción.
  • El resto de capas son abstracciones.
  • La última realiza las acciones.
TPoemraAcbeAdspSCetcECriNIdaóSOecnONccREiiESsoSinoenses
VentajasMenor conocimiento del control.
Desventajas
  • Mayor complejidad en la capa que interactúa con los sensores.
  • No tolerante a fallos.
Arquitecturas según su procesamiento
Basadas en lógica

Se representa el estado interno como un conjunto de sentencias lógicas de primer orden. Luego se utilizan reglas de deducción lógicas para tomar decisiones.

VentajasRepresentación clara y elegante.
Desventajas
  • Complejidad temporal elevada.
  • Es difícil encontrar una representación simbólica para todo.
Arquitecturas deliberativas

Modela el mundo y el conocimiento sobre el mismo de forma simbólica, explícitamente representado, en donde las decisiones se toman utilizando mecanismos de razonamiento lógico según patrones y manipulaciones.

Típicamente se sigue la teoría clásica de la planificación:

  • Estado inicial
  • Conjunto de planes
  • Estado objetivo

El agente contiene un sistema de planificación que determina qué paso debe realizar para llegar del estado inicial al estado objetivo.


Un ejemplo es la arquitectura BDI (Believes – Desires – Intentions):

  • Creencias: conocimiento del agente sobre el entorno.
  • Deseos: metas y objetivos
  • Intenciones: manejan y conducen a acciones dirigidas hacia las metas. Influyen en las creencias.

Se trata de un modelo intuitivo, pero es difícil equilibrar una conducta para que sea reactiva y tenga iniciativa:

  • Agentes audaces: no se paran para reconsiderar sus intenciones, por lo que tienen un coste temporal y computacional bajo. Son aptos para entornos que no cambian rápidamente
  • Agentes cautos: se paran constantemente para reconsiderar sus intenciones, para explorar nuevas posibilidades. Aptos para entornos que cambian rápidamente.
VentajasModelos intuitivos
DesventajasDifíciles de equilibrar en iniciativa y reactividad.
Arquitecturas reactivas

El argumento principal de estas estrategias es que no se necesita utilizar el modelo simbólico para tener inteligencia. Entonces:

  • No incluye un modelo simbólico del mundo
  • No usa razonamiento complejo

==> Se usa el modelo Estímulo-Respuesta.

  • Uso de arquitecturas verticales para el procesamiento descendiente: patrones que se activan bajo ciertas condiciones de los sensores y tienen un efecto directo sobre los actuadores
  • Se utilizan capas por prioridades, que bloquean las anteriores.

Un ejemplo típico de estas arquitecturas es la propuesta de Roodney Brooks, conocida como la arquitectura de subsunción:

  • Muchas tareas pueden dispararse simultáneamente
  • Las conductas siguen una jerarquía, normalmente por abstracción
SensoresCCCaaapppaaa210Actuadores
Ventajas
  • Respuesta inmediata.
  • No tiene los problemas de la representación simbólica.
Desventajas
  • Es difícil diseñar agentes puramente reactivos con capacidad de aprendizaje.
  • Interacciones difíciles de entender con agentes con muchas conductas.
Arquitecturas híbridas

Dado que no es del todo acertado utilizar arquitecturas totalmente deliberativas o totalmente reactivas, se plantean versiones híbridas que combinan varios modelos. Generalmente se trata de un sistema formado por dos o más subsistemas, que pueden seguir varias estrategias:

  • Deliberativo: mundo simbólico.
  • Reactivo: procesar estímulos que no necesitan deliberación.

Estructuración por capas:

  • Vertical: solo una capa tiene acceso a los sensores y actuadores.
  • Horizontal: todas las capas tienen acceso.

También es posible realizar abstracciones dentro de este modelo:

  • Reactivo (nivel bajo): decisiones en base a los datos recopilados
  • Conocimiento (nivel medio): conocimiento que se posee del medio (simbólico)
  • Social (nivel alto): maneja aspectos sociales de otros agentes (deseos, intenciones, …)
VentajasÓptima para equilibrar las diferentes conductas del agente (reactividad e iniciativa).
Desventajas
  • Falta de claridad
  • Hay un número muy elevado de posibles interacciones entre las distintas capas

Comunicación entre agentes

Teoría de los actos del habla (Speech acts)

La comunicación entre agentes se basa en esta teoría: quien habla no solo declara sentencias verdaderas o falsas, sino que también realiza actos del habla: peticiones, sugerencias, promesas, amenazas

  • Locución: acto de decir algo
  • Ilocución: intención del mensaje.
  • Performativa: conjunto de ilocuciones clasificadas por su objetivo.
    • Asertivas: informar
    • Directivas: pedir y preguntar
    • Permisivas, Prohibitivas y Declarativas: causan eventos
    • Expresivas: emociones y evaluaciones
  • Perlocución: efecto de la ilocución sobre el receptor.

Objetivos:

  • Completitud para cubrir un amplio rango de situaciones de comunicación
  • Simplicidad para no sobredimensionar agentes simples
  • Concisión para minimizar la redundancia y ambigüedad

Niveles de comunicación:

Tipos de mensajes:

Hay varias implementaciones posibles: CORBA, RMI, DCOM…

A mayores se utilizan lenguajes de comunicación: deben tener su semántica bien definida formalmente. Algunas implementaciones son KQML, FIPA ACL, basados en XML, …

Protocolos de comunicación

Protocolo
Los protocolos son patrones fijos de intercambios de mensajes que modelan las posibles comunicaciones, un mismo protocolo puede explicar múltiples conversaciones distintas.
Conversación
Una conversación es una instancia particular de uno de los diálogos definidos por un protocolo.

Un protocolo sería el equivalente a una clase, y una instancia de dicha clase sería un diálogo propiamente dicho.

Cualquier participante en una conversación debe conocer el protocolo que se está utilizando para que la comunicación sea efectiva. Este debe estar definido formalmente e implementado por algún estándar.

Posibles implementaciones:

Servicio de transporte

Servicio de transporte
Es capaz de recibir un mensaje, codificarlo como una secuencia de bytes, y enviarlo a través de la red.

Generalmente, se espera que el servicio de transporte tenga las siguientes características:

Cada agente tendrá un nombre que le permita al servicio remitir el mensaje correctamente. Es capaz de determinar el mecanismo subyacente a utilizar (TCP/IP, HTTP) y permitir cambios en la ubicación del agente.

Asociado a los mensajes, puede haber metainformación y otros parámetros. Esto no se codifica en el cuerpo del mensaje, sino en la interfaz proporcionada para el envío del mensaje.

FIPA ACL

FIPA
Foundation for Intelligent Physical Agents es un organismo que estandariza lenguajes y protocolos de agentes.
FIPA ACL
El Agent Communications Language es el lenguaje estándar de comunicación de agentes de FIPA.

Requisitos

  1. Los agentes envía not-understood si no reconocen un mensaje.
    Los emisores deben estar preparados para recibir not-understood de otros.
  2. Un agente puede implementar cualquier subconjunto de ACL (mensajes y protocolos).
    Pero dicha implementación debe ser correcta bajo su semántica.
  3. Si usa nombres según ACL, deben estar implementados correctamente según su semántica.
  4. Los agentes pueden usar otros nombres no definidos, pero son responsables de asegurarse que otros agentes comprenden el significado.
    No deben definir nuevos actos que coincidan con alguno de los estándares.
  5. Un agente debe ser capaz de generar mensajes sintácticamente bien formados.
    Debe ser capaz de traducir una secuencia de caracteres a la sintaxis del mensaje.

Modelo de comunicaciones

Generalmente la estructura tiene los siguientes elementos:

AgenteinicTERCREILOPCiimeoennenroapicnsfntondosetpr.gotvoopeoeuloerqrtnnstaocruoidprjgosAerdeuaeílacrorenaoctyssioctpó|oaoncnroratmeeuqnu::::::::::iesrcrielopccseeoennanroatncnp-vntontdetlregotvi|eieyeluloevrvn-poaocroietwlpggosAnriyeeylagft-teoht<<inrowwotm<oonee<rr-|xeddirpx>>desrpcu>reb>pstcorribe

Tipos de mensajes

Ejemplo de mensaje

(   request
    :sender an-agent
    :receiver other_agent
    :content
        (action an-agent
            (search
                (:other-agent-description
                    (:services
                        (:service-type email)))
    :language SL0
    :ontology fipa-agent-management
    :protocol FIPA-request
)
accept-proposaldisconfirmnot-understoodreject-proposal
agreefailureproposerequest
cancelinformquery-ifrequest-when
cfpinform-ifquery-refrequest-whenever
confirminform-refrefusesuscribe

Protocolos

Algunos protocolos de FIPA ACL
FIPA-querySolicitar una acción tipo inform (query-if, query-ref)
FIPA-requestSolicitar que otro realice una acción
FIPA-request-whenAnálogo al anterior + precondición que debe esperar
FIPA-contract-netUno desea que otro realice una acción. Hay varios candidatos y se desea minimizar una función que caracteriza la tarea.
FIPA-iterated-contract-netIgual que el anterior, pero con varias iteraciones o ronda.
FIPA-english-auctionSubasta al alza
FIPA-dutch-auctionSubasta a la baja
FIPA-brokeringIntermediación entre agentes. El broker envía la petición a un conjunto de agentes y proporciona las respuestas.
FIPA-recruitingAnálogo al anterior, pero los agentes responden al iniciador y no al broker
FIPA-subscribeSe le notificará cuando se cumpla la condición dada
FIPA-proposePropone la realización de una acción. Suele ir seguida de una notificación de estado.

KQML

Knowledge Query and Manipulation Language es otro lenguaje para comunicar actitudes sobre la información, indiferente sobre el formato de la información.

Define la comunicación a 4 niveles:

Ontologías

Cómo se representa la información en el mensaje es responsabilidad del programador. Para ello, tiene varias estrategias que puede usar:

Nótese que las secuencias de caracteres o bytes son mejores a la hora de transmitir, pero los objetos son más fáciles de manipular por los agentes.

Ontología

Nomenclatura y definición formal de los tipos y propiedades de los objetos de determinado contexto, así como sus relaciones.

Es un modelo que representa un dominio, y permite describir las estructuras y relaciones de un dominio sin ambigüedades.

Una ontología es un diccionario que contiene las definiciones de las palabras y sus sinónimos, para resolver ambigüedades. Se utiliza para representar el conocimiento de distintos universos de discurso.

Problemáticas que resuelven:

Sin embargo, también plantea el problema del diseño de ontologías: es complejo (sobre todo para dominios inestables y constantemente cambiantes) y altamente dependiente del dominio. Normalmente se diseñan por expertos en el ámbito.

Algunas implementaciones:

JADE

JADE
Java Agent Development Environment es un middleware open source para el desarrollo de sistemas multiagente en Java. Está basado en FIPA ACL.

Implementa las siguientes características:

Arquitectura

Diagrama de la arquitectura de JADE

Diagrama de la arquitectura de JADE

Una aplicación basada en JADE está compuesta de una colección de activos llamados agentes:

Si se desea mandar un mensaje dentro de la misma plataforma, llega con usar el nombre del agente. Sin embargo, si está en otra plataforma, se le debe añadir el nombre de la plataforma también.

Arranque

jade -cp jade.jar jade.Boot [opciones] [agentes]

Opciones:

Especificadores del agente:

<agentname>:<package>.<agentClass>(<params>)

Los parámetros de los agentes se especifican separados por comas (,), y más agentes con puntos y comas (;).

Agentes auxiliares

Agentes auxiliares
AMS

El Agent Management System representa la autoridad en la plataforma JADE. Se encarga de la monitorización y gestión de la plataforma:

  • Creación y eliminación de contenedores (tanto locales como remotos).
  • Ciclo de vida de los agentes: creación, suspensión, reactivación, eliminación, migración y clonación.
  • Componer mensajes a cualquier agente.
  • Lanzar otras herramientas gráficas.

Otros agentes pueden solicitarle que realice acciones utilizando FIPA-request, lenguaje SL y la ontología de gestión de JADE.

Se puede obtener fácilmente una referencia a través de Agent.getAMS().

DF

El agente Directory Facilitator proporciona el servicio de páginas amarillas. Se trata de un registro que permite localizar a los agentes mediante una descripción y unas propiedades.

Se opera utilizando la clase DFService.

Dummy AgentCompone y envía mensajes. Lee y almacena la cola de mensajes desde un archivo.
Sniffer AgentMuestra el flujo de interacciones entre agentes, el contenido de los mensajes intercambiados y carga/almacena el flujo desde un archivo.
Introspector AgentMonitoriza el estado interno de un agente y depura la ejecución.
Log Manager AgentEs la interfaz gráfica para modificar el almacenamiento de la plataforma durante la ejecución (logging).

Programación en JADE

Para programar un agente en JADE, es necesario crear una clase y hacer que extienda de la clase jade.core.Agent:


import jade.code.Agent;

public class MiAgente {
    @Override
    protected void setup() {
        // Inicio del agente

        doDelete(); // Terminar la ejecución del agente
    }

    @Override
    protected void takeDown() {
        // Rutina de terminación del agente
    }
}

Cada instancia de un agente se identifica por un jade.core.AID (Agent ID), que se puede obtener con la función Agent.getAID().

AID id1 = getAID();
AID id2 = new AID(localname, AID.ISLOCALNAME);
AID id3 = new AID(name, AID.ISGUID);

Envío de argumentos al agente

Se pueden obtener los parámetros enviados por línea de comandos o desde el agente AMS con la función:

Object[] arguments = getArguments();

Clase Behaviour

El trabajo o tareas que realiza un agente se llaman comportamientos, de la clase jade.core.behaviours.Behaviour.

Se pueden crear nuevos comportamientos extendiendo dicha clase:

Cada comportamiento tiene una referencia a su agente a través de la referencia protegida myAgent.

Para ejecutar los comportamientos, se deben añadir a los agentes con Agent.addBehaviour(). Si no hay ninguno para ejecutar, el agente pasa a un estado IDLE y su thread duerme.

Con el método Agent.removeBehaviour() se pueden eliminar comportamientos, pero no se ejecuta onEnd().

Planificación de comportamientos:

setup()
while True:
    if doDelete():
        break

    b = schedule.getBehaviour()
    b.action()
    if b.done():
        schedule.removeBehaviour(b)
takeDown()
Tipos de comportamientos
jade.core.behaviours.OneShot
  • Concluye de forma inmediata
  • action() solo se ejecuta una vez
  • done() devuelve siempre true
jade.core.behaviours.Cyclic
  • Nunca termina
  • action() siempre realiza la misma acción
  • done() devuelve siempre false
jade.core.behaviours.Complex
  • Tiene un estado interno que se va modificando
  • action() realiza una operación diferente en base a ese estado
  • done() devuelve true en determinada condición
Planificar operaciones en momentos concretos
WeakerBehaviour
  • La subclase debe implementar onWake(), que reemplaza a action()
  • Solo se ejecuta una vez después de un cierto tiempo
TickerBehaviour
  • La subclase debe implementar onTick(), que reemplaza a action()
  • Se llama un número indefinido de veces hasta que se detiene con stop()
  • onTick() se llama cada vez después de un cierto tiempo

Modelo de comunicación

Los agentes se pasan mensajes de forma asíncrona. Su formato está definido por el estándar de FIPA ACL.

La clase jade.lang.acl.ACLMessage representa un mensaje y proporciona getters y setters a todos los cambios definidos por ACL.

ACLMessage msg = new ACLMessage(ACLMessage.INFORM);
msg.addReceiver(new AID("Peter", AID.ISLOCALNAME));
msg.setLanguage("English");
msg.setOntology("Wheather-Forecast-Ontology");
msg.setContent("Today it's raining");
myAgent.send(msg);

Y para recibir el mensaje:

ACLMessage msg = myAgent.receive();
if (msg != null) {
    // Procesar el mensaje
}

// Bloquear el comportamiento porque no hay mensajes

Es importante bloquear el comportamiento para permitir que otros se puedan ejecutar, dado que el actual no puede continuar porque espera un mensaje.

Bloquear

Un comportamiento que espera mensajes recibidos no sabe cuándo le llegará un mensaje. Debe realizar un poll llamando continuamente a myAgent.receive().

==> Tiempo de CPU perdido.

El método Behaviour.block() marca el comportamiento actual como bloqueado, lo que no lo hace elegible a ejecutar en siguientes planificaciones.

Cada vez que se recibe un mensaje, se desbloquea y se inserta de nuevo en la cola de comportamientos elegibles. Ahora tiene la oportunidad de procesar el mensaje.

IMPORTANTE: esta llamada no bloquea la ejecución, solo cambia el estado. El comportamiento se seguirá ejecutando hasta el final de action()

Por tanto, lo mejor es:

ACLMessage msg = myAgent.receive();
if (msg == null) {
    block();
    return;
}

// Procesar el mensaje

Alternativamente, también es posible recibir mensajes en modo bloqueante: Agent.blockingReceive().

Lectura selectiva de mensajes

El método receive() devuelve el primer mensaje de la cola de mensajes y lo elimina. Esto puede suponer un problema cuando hay varios comportamientos esperando mensajes: uno de le puede robar el mensaje al otro.

Para evitar eso, es posible recibir solo los mensajes con determinadas características gracias a jade.lang.acl.MessageTemplate.

MessageTemplate tpl = MessageTemplate.MatchOntology("Test-Ontology");
ACLMessage msg = myAgent.receive(tpl);
if (msg != null) {
    // Procesar el mensaje
    assert msg.getOntology().equals("Test-Ontology");
} else {
    block();
    return;
}

Se pueden combinar varios usando MessageTemplate.or() o MessageTemplate.and().

Servicio de páginas amarillas

El servicio de páginas amarillas permite buscar y/o registrar agentes para que otros puedan localizarlos. El DF es un agente, por lo tanto se comunica con mensajes ACL al igual que el resto de agentes.

La clase DFService proporciona métodos estáticos que ya gestionan el envío de estos mensajes:

Ontologías

En JADE, las ontologías se utilizan para representar los elementos que pueden ser usados como contenido de un mensaje ACL.

Se forman de las siguientes partes:

Creación de una Ontología

Para crear una ontología en JADE hay que definir los elementos del esquema y gestionar las expresiones de contenido como objetos Java. Se utiliza el ContentManager para llenar y analizar el contenido de los mensajes.

Java Beans

Un Bean en Java es una clase especial con una forma muy concreta:

  • Clase serializable
  • Tiene un único constructor público sin argumentos
  • Todos sus atributos son privados
  • Tiene getters y setters para todos ellos

Es útil para herramientas de generación de código.

Los Beans de implementación se utilizan para manipular datos como objetos Java, y si contenido puede variar durante la ejecución.

Tipos de clases de una Ontología
Concept

Representa un concepto básico de la ontología y el resto de elementos se construyen a partir de aquí.

  • Pueden tener atributos y otros Concepts
  • Se implementan como beans que implementan jade.onto.Concept
  • No tiene sentido usarlos directamente como contenido de los mensajes.
public class Person extends jade.onto.Concept {
    private String name;
    private int age;
    private Person parent;

    public Person() {}
    public String getName() { ... }
    public void setName(String name) { ... }
    // ...
}
Predicate

Representan predicados o hechos, expresiones que afirman algo sobre el entorno.

  • Pueden tomar un valor cierto o falso.
  • Suelen contener Concepts como slots.
AgentAction

Se trata de un tipo especial de Concept:

  • Representan una acción que puede tomar el agente.
    • Petición, solicitar servicio, ofrecer un objeto, registrarse, …
  • Al contrario que Concept, sí tiene sentido que sea el contenido de un mensaje.
  • No contiene directamente el agente que realiza la acción, sino que se encapsula dentro de un Action:
    new Action(AID, new MyAgentAction());
    
Ontology

Por otro lado, la ontología se define a partir de una instancia de la clase jade.content.onto.Ontology.

Esta contiene los esquemas (jade.content.onto.Schema) que definen las estructura de los predicados, conceptos y acciones para su procesado. No varía durante la ejecución del programa (se trata de un Singleton).

Existen clases para usar como base, por ejemplo BasicOntology, que ya tienen algunos esquemas predefinidos:

  • Tipos primitivos
  • Predicados, conceptos y acciones
  • El concepto de AID

Lenguajes de contenido

El siguiente paso es transformar dichos objetos al formato ACL que requiere el estándar. JADE proporciona codecs o lenguajes de contenido para codificar los beans según marca dicho estándar; hay 2 tipos:

Tipos de lenguajes de contenido
jade.content.lang.SL
  • Se trata del método más usado
  • Los elementos se codifican como cadenas de caracteres (texto)
  • Esto hace que sea legible por los humanos y más sencillo para depurar
  • Compatible con un gran número de sistemas
jade.content.lang.LEAP
  • Los elementos se codifican como secuencias de bytes (binario)
  • No es legible por los humanos (pero el AgentSniffer los traduce)
  • Es más ligero y más eficiente. Por eso se usa en contextos de alto rendimiento.
  • Solo es compatible con JADE.
Content Manager

Se trata de una clase de servicio que se encarga de administrar las ontologías y lenguajes de contenido.

Se obtiene con el método Agent.getContentManager():

  • registerOntology(): especifica el codec
  • registerLanguage(): especifica el lenguaje
  • fillContent(): codifica e inyecta un bean el slot de contenido de un ACLMessage.
  • extractContent(): realiza la operación inversa

Protégé

Diseñar una ontología es complejo y generalmente las crean expertos en el dominio (que no son necesariamente programadores).

Por tanto, se crearon software específico para el diseño de ontologías, como Protégé. OntologyBeanGenerator es un plugin que genera el código Java (los beans y la clase Ontology)

Otros

jade.proto

El paquete jade.proto contiene los comportamientos para el rol de iniciador y el que responde en la mayoría de protocolos de interacción más comunes.

Todas estas clases manejan automáticamente el flujo de mensajes y los timeouts. Proporciona métodos de callback que deben ser redefinidos para tomar las acciones necesarias cuando, por ejemplo, se recibe un mensaje o termina un timeout.

Movilidad

JADE soporta movilidad fuerte: se transfiere tanto el código del agente como su estado (el agente debe ser serializable).

  1. Se para la ejecución del agente.
  2. Se mueve a un contenedor remoto.
  3. Se continua ejecutándose desde el punto exacto donde se detuvo.

Si el código del agente no está disponible en la nueva localización, se recupera bajo demanda.

La migración se inicia:

También se puede clonar con Agent.doClone()

Seguridad

Dado que JADE es un entorno distribuido, hay que tener en cuenta los potenciales peligros:

Se previenen los principales problemas utilizando:

Todos los aspectos de seguridad se implementaron en SecurityHelper, que se puede obtener con Agent.getHelper().

Interfaz con procesos

La clase jade.core.Runtime y el paquete jade.wrapper permiten usar JADE desde un programa externo de Java para crear contenedores y ejecutar agentes.

Comportamientos en Threads

La clase jade.core.behaviours.ThreadedBehaviour permite ejecutar comportamientos normales en un thread dedicado.

Persistencia

Permite guardar y recuperar el estado de un agente de una BD relacional. Todavía es una característica experimental.

Jess y JADE

Jess (Java Expert System Shell) es un sistema experto basado en CLIPS que proporciona una programación basada en reglas y un motor de inferencia para obtener conclusiones a partir de ellas.

La idea de que, en todo momento se tengan que revisar de nuevo todas las reglas que determinen el comportamiento del agente es muy ineficiente.

Algoritmo RETE

Aplica de forma eficiente las reglas de un sistema experto:

  • Se implementa mediante una red de nodos, cada uno representa un patrón condicional de una regla. Los nodos finales representan la acción final.
  • Durante la generación de esta red, se eliminan elementos redundantes para ahorrar cálculos.
  • Solo actualiza aquellos elementos del entorno que se han actualizado: activa o desactiva el nodo asociado.
  • Cuando todos nodos de una misma rama están activos, entonces se puede ejecutar la acción del nodo hoja.

Consigue un mejor tiempo de ejecución sacrificando memoria.

Para integrar JADE con Jess, se utiliza una clase especial Rete, que implementa el motor de inferencia. Basta con instanciar la clase y manipularlo correctamente.

A continuación, se instancia otro objeto para cargar y parsear la base de conocimiento de un archivo con sintaxis tipo CLIPS. Tras comprobar que es todo correcto, se carga dicha base de conocimientos y se arranca el sistema.

La llamada al método Rete.run() hará que se apliquen todas las comprobaciones y reglas lógicas hasta que no queden más para ejecutar. Esto puede bloquear el hilo del agente, por lo que también se puede usar alternativamente la función Rete.run(MAX_PASSES), que limita el número máximo de pasadas que se hacen por la base de conocimiento.

La idea de esta integración es que el agente reciba estímulos del entorno, añada hechos al sistema experto y reaccione según las reglas con alguna acción. Para ello, puede implementarse desde Jess o implementar la clase Jess.UserFunction.

Anterior: Redes P2P Volver a Redes y Computación Distribuida