El lenguaje de programación SARL es un lenguaje de programación modular orientado a agentes . Su objetivo es proporcionar las abstracciones fundamentales para abordar la concurrencia, la distribución, la interacción, la descentralización, la reactividad, la autonomía y la reconfiguración dinámica. [ 1 ]
SARL es independiente de la plataforma y de la arquitectura del agente. Proporciona un conjunto de abstracciones de primera clase orientadas a agentes directamente a nivel de lenguaje (véase la sección sobre los conceptos ). No obstante, admite la integración y el mapeo de conceptos proporcionados por otros metamodelos orientados a agentes. SARL aprovecha este mecanismo de extensión para definir sus propias extensiones (organizacionales, basadas en eventos, etc.).
Una característica importante del lenguaje de programación SARL es su soporte nativo para "sistemas multiagente holónicos" y "agentes recursivos" (también llamados " holones ").
Descripción general
El metamodelo de SARL se basa en cuatro conceptos principales: Agente, Capacidad, Espacio y Habilidad. [ 1 ] El metamodelo central de SARL se presenta en la Figura 1, y los conceptos principales están coloreados en azul claro. Cada uno de ellos se detalla en las siguientes secciones, junto con el fragmento de código SARL correspondiente para ilustrar su uso práctico.

En SARL, un Sistema Multiagente (SMA) es un conjunto de Agentes que interactúan entre sí en Espacios distribuidos compartidos. Cada agente posee un conjunto de Capacidades que describen sus habilidades y competencias personales. [ 2 ] [ 3 ] Cada Capacidad puede ser implementada mediante diversas Habilidades. Para comprender la relación entre los conceptos de Capacidad y Habilidad, se puede establecer un paralelismo con los conceptos de Interfaz y sus clases de implementación en lenguajes orientados a objetos. Para implementar arquitecturas específicas (como BDI , razonamiento, reactivas, híbridas, etc.), los desarrolladores deben crear sus propias capacidades y habilidades, dotando a los agentes de nuevas funcionalidades explotables.
A pesar de su naturaleza abierta, SARL impone algunos principios fundamentales que deben ser respetados por las diversas máquinas virtuales (VM) que deseen soportarlo. En primer lugar, la implementación de Space debe ser completamente distribuida y la capa de ejecución debe estar abstraída de los agentes. SARL fomenta la ejecución masivamente paralela de agentes y comportamientos. SARL es totalmente interoperable con Java para reutilizar fácilmente todas las contribuciones de la comunidad Java, así como para facilitar la integración y evolución de sistemas heredados. Uno de los principios clave que rigen SARL consiste en no imponer una forma predefinida para que los agentes interactúen dentro de un Space. De igual manera, la forma de identificar agentes depende del tipo de Space considerado. Esto permite definir diferentes tipos de mecanismos y modelos de interacción en los Spaces.
El metamodelo y la sintaxis del lenguaje de programación SARL se inspiran en lenguajes como Scala , Clojure y Ruby . Las herramientas SARL se han desarrollado sobre Xtext , lo que permite crear fácilmente lenguajes específicos de dominio que se integran directamente en el entorno Eclipse . La definición completa de la sintaxis SARL está disponible en GitHub .
Conceptos
El lenguaje de programación SARL se basa en un metamodelo orientado a agentes que se fundamenta en los siguientes conceptos.
Agentes de software emocionales
Un agente es una entidad autónoma con un conjunto de habilidades para desarrollar las capacidades que exhibe. Posee capacidades intrínsecas consideradas esenciales para respetar las competencias comúnmente aceptadas en los agentes, como la autonomía, la reactividad, la proactividad y las capacidades sociales. Entre estas capacidades intrínsecas se encuentra la capacidad de "comportamiento", que determina su conducta global. Un agente también tiene un comportamiento predeterminado descrito directamente en su definición.
Un comportamiento asigna un conjunto de percepciones representadas por eventos a una secuencia de acciones. Un evento es la especificación de alguna ocurrencia en un espacio que puede desencadenar efectos por parte de un receptor (por ejemplo, un agente, un comportamiento, etc.).
Este lenguaje no impone un bucle de control específico para cada agente. El programador puede implementar cualquier protocolo de control o autoridad para su propio escenario de aplicación, excepto para los eventos de inicialización y destrucción. De hecho, cuando se crean los agentes, la máquina virtual que ejecuta el programa de software emocional se encarga de crear las instancias del agente e instalar las habilidades asociadas a las capacidades integradas. Luego, cuando el agente está listo para comenzar su ejecución, activa el evento Initialize. Cuando el agente decide detener su ejecución, la máquina virtual activa el evento Destroy para permitirle liberar cualquier recurso que aún contenga.
Capacidad y Habilidad
Una acción es la especificación de una transformación de una parte del sistema diseñado o de su entorno. Esta transformación garantiza las propiedades resultantes si el sistema, antes de la transformación, satisface un conjunto de restricciones. Una acción se define en términos de precondiciones y postcondiciones.
Una capacidad es la especificación de un conjunto de acciones. Esta especificación no presupone nada sobre su implementación. Puede utilizarse para especificar qué puede hacer un agente y qué requiere un comportamiento para su ejecución.
Una Habilidad es una posible implementación de una capacidad que cumple con todas las restricciones de esta especificación. Un agente puede evolucionar dinámicamente aprendiendo/adquiriendo nuevas Capacidades, pero también puede cambiar dinámicamente la Habilidad asociada a una capacidad dada. [ 2 ] [ 3 ] La adquisición de nuevas capacidades también permite a un agente acceder a nuevos comportamientos que requieren dichas capacidades. Esto proporciona a los agentes un mecanismo de autoadaptación que les permite cambiar dinámicamente su arquitectura según sus necesidades y objetivos actuales.
Contexto y espacio
Un Contexto define el perímetro o límite de un subsistema y reúne un conjunto de Espacios. En cada contexto, existe al menos un Espacio particular, denominado Espacio Predeterminado, al que pertenecen todos los agentes de dicho contexto. Esto garantiza la existencia de un Espacio común para todos los agentes del mismo contexto. Cada agente puede crear espacios públicos o privados específicos para alcanzar sus objetivos personales. Desde su creación, los agentes se incorporan a un contexto denominado Contexto Predeterminado. El concepto de Contexto cobra pleno sentido cuando se considera que los agentes son compuestos u holónicos (véase más adelante).
Un Espacio es el soporte para la interacción entre agentes que respetan las reglas definidas en una Especificación de Espacio. Una Especificación de Espacio define las reglas (incluidas las de acción y percepción) para interactuar dentro de un conjunto determinado de Espacios que respetan dicha especificación.
Agente recursivo o agente de software emocional
Los agentes pueden estar compuestos por otros agentes para definir sistemas multiagente jerárquicos. Cada agente define su propio Contexto, llamado Contexto Interno, y forma parte de uno o más Contextos Externos.
Ejemplos
package helloworld import io.sarl.core.Initialize agent HelloWorldAgent { on Initialize { println ( "Hola, mundo!" ) } }Intercambio de mensajes entre dos agentes
Para ilustrar la sintaxis del lenguaje SARL, a continuación se muestra el esquema Ping-Pong . El agente A envía un mensaje PING al agente B para comprobar si sigue activo. El agente B responde con un mensaje PONG.
En primer lugar, los dos mensajes deben definirse como eventos (sin atributo):
evento PING evento PONG
El agente A se define con
agente A { utiliza DefaultContextInteraction, Inicializando en Initialize { emitir(nuevo Ping) } en Pong { println("El agente " + occurrence .source + " está vivo".) } }En el código anterior, la palabra clave `uses` permite al agente usar capacidades previamente definidas: la capacidad de interactuar con otros agentes dentro del contexto predeterminado (DefaultContextInteraction) y la capacidad de registrar mensajes (Logging). La palabra clave `on` permite definir las acciones cuando el agente A recibe un evento específico. Cuando el agente A recibe el evento `Initialize`, emite un evento `Ping` a todos los agentes existentes. Cuando el agente A recibe el evento `Pong`, registra un mensaje con la identidad del emisor del evento.
El agente B se define con
agente B { utiliza DefaultContextInteraction, Iniciar sesión en Ping { println("El agente " + occurrence .source + " quiere saber si estoy vivo.") emitir(nuevo Pong, direcciones de ámbito(ocurrencia.fuente)) } }Cuando el agente B recibe el mensaje Ping, registra un mensaje y responde con un mensaje Pong. Para evitar la difusión del mensaje Pong, el receptor de este mensaje está restringido al ámbito correspondiente a la dirección del emisor del Ping.
Plataforma Janus: un entorno de ejecución SARL
El lenguaje SARL especifica un conjunto de conceptos y sus relaciones. Sin embargo, para ser independiente de la plataforma, el lenguaje SARL no impone una infraestructura de ejecución específica.
No obstante, el Proyecto Janus proporciona la infraestructura para ejecutar agentes SARL. Janus es una plataforma multiagente de código abierto totalmente implementada en Java 1.7. Implementa toda la infraestructura necesaria para ejecutar un sistema multiagente (MAS) programado en el lenguaje SARL. Este entorno de ejecución respalda la principal premisa del lenguaje SARL: la ejecución paralela y totalmente distribuida de los comportamientos de los agentes. Además, la plataforma Janus proporciona herramientas que ayudan al programador a desplegar su MAS, por ejemplo, mediante la detección automática de núcleos Janus.
Técnicamente, la plataforma Janus sigue las mejores prácticas del desarrollo de software actual, como la inversión de control , y se beneficia de nuevas tecnologías como las estructuras de datos distribuidas ( redes de datos en memoria como Hazelcast ).
Véase también
Referencias
- 1 2 Rodríguez, S., Gaud, N., y Galland, S. (2014). SARL: un lenguaje de programación orientado a agentes de propósito general. En The 2014 IEEE/WIC/ACM International Conference on Intelligent Agent Technology. Varsovia, Polonia: IEEE Computer Society Press.
- 1 2 Rodriguez S., Gaud N., Hilaire V., Galland S., & Koukam K. (2006). Un concepto de análisis y diseño para la autoorganización en sistemas multiagente holónicos. En el Taller Internacional sobre Ingeniería de Aplicaciones Autoorganizadas (ESOA'06), páginas 62–75. Springer-Verlag.
- 1 2 Cossentino M., Gaud N., Hilaire V., Galland S. y Koukam K. 2010. ASPECS: un proceso de software orientado a agentes para la ingeniería de sistemas complejos: cómo diseñar sociedades de agentes bajo una perspectiva holónica. En Int. Journal on Autonomous Agents and Multi-Agent Systems, 2(2):260–304, marzo de 2010. doi: 10.1007/s10458-009-9099-4.
Enlaces externos
- Sitio web oficial de SARL
- Lenguajes de programación basados en agentes
- Software basado en agentes
- Sistemas multiagente