stringtranslate.com

SARL (lenguaje de programación)

El lenguaje de programación SARL es un lenguaje de programación modular orientado a agentes . Su objetivo es proporcionar las abstracciones fundamentales para gestionar 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 al agente directamente a nivel de lenguaje (ver la sección sobre los conceptos). Sin embargo, admite la integración y el mapeo de conceptos proporcionados por otros metamodelos orientados al agente. SARL mismo explota este mecanismo de extensión para definir sus propias extensiones (organizativas, impulsadas por 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, así como el fragmento de código SARL correspondiente para ilustrar su uso práctico.

Figura 1: Los conceptos del lenguaje de programación SARL.
Figura 1: Los conceptos del lenguaje de programación SARL.

En SARL, un Sistema Multiagente (MAS) es una colección de Agentes que interactúan entre sí en Espacios distribuidos compartidos. Cada agente tiene una colección de Capacidades que describen lo que puede realizar, sus competencias personales. [2] [3] Cada Capacidad puede entonces ser realizada/implementada por varias Habilidades. Para entender la relación entre los conceptos de Capacidad y Habilidad, se puede trazar un paralelo con los conceptos de Interfaz y sus clases de implementación en lenguajes orientados a objetos. Para implementar arquitecturas específicas (como BDI , razonamiento, reactiva, híbrida, etc.) los desarrolladores deben desarrollar sus propias capacidades y habilidades proporcionando a los agentes nuevas características explotables.

A pesar de su naturaleza abierta, SARL impone algunos principios fundamentales que deben respetar las distintas Máquinas Virtuales (VM) que quieran soportarlo. En primer lugar, la implementación del Espacio debe ser completamente distribuida y la capa de ejecución debe estar abstraída de los agentes. SARL fomenta una ejecución masivamente paralela de Agentes y Comportamientos. SARL es completamente interoperable con Java para reutilizar fácilmente todas las contribuciones proporcionadas por la comunidad Java, pero también para facilitar la integración y evolución de sistemas heredados. Uno de los principios clave que gobiernan SARL consiste en no imponer una forma predefinida para que los Agentes interactúen dentro de un Espacio. Del mismo modo, la forma de identificar a los agentes depende del tipo de Espacio considerado. Esto permite definir diferentes tipos de mecanismos y modelos de interacción en los Espacios.

El metamodelo y la sintaxis del lenguaje de programación SARL se han inspirado 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 marco 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 basado en los siguientes conceptos.

Agentes de software emocionales

Un agente es una entidad autónoma que posee un conjunto de habilidades para realizar las capacidades que exhibe. Un agente tiene un conjunto de capacidades incorporadas que se consideran esenciales para respetar las competencias comúnmente aceptadas de los agentes, como la autonomía, la reactividad, la proactividad y las capacidades sociales. Entre estas capacidades incorporadas (BIC), se encuentra la capacidad de "comportamientos" que determina su conducta global. Un agente también tiene un comportamiento predeterminado descrito directamente en su definición.

Un comportamiento asigna una colección de percepciones representadas por eventos a una secuencia de acciones. Un evento es la especificación de algún suceso en un espacio que potencialmente puede desencadenar efectos por parte de un receptor (por ejemplo, agente, comportamiento, etc.).

Este lenguaje no impone un bucle de control específico para el agente. El programador es libre de 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 está ejecutando el programa de software emocional es la encargada de crear las instancias del agente e instalar las habilidades asociadas a las capacidades integradas en el agente. Luego, cuando el agente está listo para comenzar su ejecución, dispara el evento Initialize. Cuando el agente ha decidido detener su propia ejecución, la máquina virtual dispara el evento Destroy para permitir que el agente libere cualquier recurso que aún pueda tener.

Capacidad y habilidad

Una acción es una 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 condiciones previas y posteriores.

Una capacidad es la especificación de un conjunto de acciones. Esta especificación no hace suposiciones sobre su implementación. Se puede utilizar para especificar lo que un agente puede hacer y lo que 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 mediante el aprendizaje/adquisición de 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 obtener acceso a nuevos comportamientos que requieren estas capacidades. Esto proporciona a los agentes un mecanismo de autoadaptación que les permite cambiar dinámicamente su arquitectura de acuerdo con sus necesidades y objetivos actuales.

Contexto y espacio

Un Contexto define el perímetro/límite de un subsistema y reúne una colección de Espacios. En cada contexto, hay al menos un Espacio particular llamado Espacio Predeterminado al que pertenecen todos los agentes en ese contexto. Esto asegura la existencia de un Espacio compartido común para todos los agentes en el mismo contexto. Cada agente puede entonces crear espacios públicos o privados específicos para lograr sus objetivos personales. Desde su creación, los agentes se incorporan a un contexto llamado Contexto Predeterminado. La noción de Contexto cobra pleno sentido cuando los agentes se consideran compuestos u holónicos (ver más abajo).

Un Espacio es el soporte de la interacción entre agentes que respetan las reglas definidas en una Especificación de Espacio. Una Especificación de Espacio define las reglas (incluyendo la acción y la percepción) para interactuar dentro de un conjunto dado de Espacios que respetan esta 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

¡Hola Mundo!

paquete holamundo importar io.sarl.core.Initialize agente HelloWorldAgent { en Initialize { println ( "Hola, mundo!" ) } }         

Intercambio de mensajes entre dos agentes

Para ilustrar la sintaxis del lenguaje SARL, se codifica a continuación el esquema Ping-Pong . El agente A envía un mensaje PING al agente B para determinar si aún está activo. El agente B responde con un mensaje PONG.

Primero, los dos mensajes deben definirse como eventos (sin atributo):

 evento PING evento PONG

El agente A se define con

 El agente A { usa DefaultContextInteraction, inicia sesión en Initialize { emitir(nuevo Ping) } en Pong { println("El agente " + ocurrencia .fuente + " está vivo".) } }

En el código anterior, la palabra clave uses permite al agente utilizar capacidades previamente definidas: la capacidad de interactuar con otros agentes dentro del contexto por defecto (DefaultContextInteraction), y la capacidad de registrar mensajes (Logging). La palabra clave on permite definir las acciones cuando una ocurrencia del evento especificado es recibida por el agente A. 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 dentro.

El agente B se define con

 El agente B { usa DefaultContextInteraction, inicia sesión en Ping { println("El agente " + ocurrencia .fuente + " quiere saber si estoy vivo.) emitir(nuevo Pong, direcciones de Scopes(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 queda restringido al alcance correspondiente a la dirección del emisor del Ping.

Plataforma Janus: un entorno de ejecución de SARL

El lenguaje SARL especifica un conjunto de conceptos y sus relaciones. Sin embargo, el lenguaje SARL no impone una infraestructura de ejecución particular por ser independiente de la plataforma.

Sin embargo, el Proyecto Janus proporciona la infraestructura para ejecutar agentes SARL. Janus es una plataforma multiagente de código abierto completamente implementada en Java 1.7. Implementa toda la infraestructura necesaria para ejecutar un MAS programado en el lenguaje SARL. El supuesto principal realizado a nivel del lenguaje SARL se ve respaldado por este entorno de ejecución: ejecución paralela y completamente distribuida de los comportamientos de los agentes. Además, la plataforma Janus proporciona las herramientas para ayudar al programador a implementar su MAS con el descubrimiento automático de kernels Janus, por ejemplo.

Técnicamente, la plataforma Janus sigue las mejores prácticas en el desarrollo de software actual, como la inversión de control, y se beneficia de nuevas tecnologías como las estructuras de datos distribuidas (In-Memory Data Grid como Hazelcast).

Véase también

Referencias

  1. ^ ab Rodriguez, S., Gaud, N., y Galland, S. (2014). SARL: un lenguaje de programación orientado a agentes de propósito general. En la Conferencia Internacional IEEE/WIC/ACM de 2014 sobre Tecnología de Agentes Inteligentes. Varsovia, Polonia: IEEE Computer Society Press.
  2. ^ ab Rodriguez S., Gaud N., Hilaire V., Galland S. y 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 aplicaciones de ingeniería autoorganizada (ESOA'06), páginas 62-75. Springer-Verlag.
  3. ^ ab 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