El llenguatge de programació SARL és un llenguatge de programació modular orientat a agents. El seu objectiu és proporcionar les abstraccions fonamentals per tractar la concurrència, la distribució, la interacció, la descentralització, la reactivitat, l'autonomia i la reconfiguració dinàmica.
SARL és independent de la plataforma i agnòstic de l'arquitectura de l'agent. Proporciona un conjunt d'abstraccions de primera classe orientades a agents directament a nivell de llenguatge (vegeu la secció sobre els conceptes). No obstant això, admet la integració i el mapatge de conceptes proporcionats per altres metamodels orientats a agents. La mateixa SARL explota aquest mecanisme d'extensió per definir les seves pròpies extensions (organitzatives, basades en esdeveniments, etc.).
Una característica important del llenguatge de programació SARL és el seu suport natiu per a "sistemes multiagent holònics" i "agents recursius" (també anomenats " holons ").
Visió general El metamodel de SARL es basa en quatre conceptes principals: Agent, Capacitat, Espai i Habilitat. El metamodel central de SARL es presenta a la Figura 1, i els conceptes principals estan acolorits en blau clar. Cadascun d'ells es detalla a les seccions següents, així com el fragment corresponent de codi SARL per il·lustrar el seu ús pràctic.
En SARL, un sistema multiagent (MAS) és un conjunt d'agents que interactuen entre si en espais distribuïts compartits. Cada agent té un conjunt de capacitats que descriuen el que és capaç de dur a terme, les seves competències personals. Cada capacitat pot ser realitzada/implementada mitjançant diverses habilitats. Per entendre la relació entre els conceptes de Capacitat i Habilitat, es pot establir un paral·lelisme amb els conceptes d'Interfície i les seves classes d'implementació en llenguatges orientats a objectes. Per implementar arquitectures específiques (com ara BDI, raonament, reactives, híbrides, etc.), els desenvolupadors haurien de desenvolupar les seves pròpies capacitats i habilitats proporcionant als agents noves característiques explotables.
Malgrat la seva naturalesa oberta, SARL imposa alguns principis fonamentals que han de respectar les diverses màquines virtuals (VM) que volen donar-li suport. En primer lloc, la implementació de Space ha de ser completament distribuïda i la capa d'execució ha de ser abstraïda dels agents. SARL fomenta una execució massivament paral·lela d'agents i comportaments. SARL és totalment interoperable amb Java per reutilitzar fàcilment totes les contribucions proporcionades per la comunitat Java, però també per facilitar la integració i l'evolució dels sistemes antics. Un dels principis clau que regeixen les SARL consisteix a no imposar una manera predefinida perquè els agents interactuïn dins d'un espai. De la mateixa manera, la manera d'identificar els agents depèn del tipus d'espai considerat. Això permet definir diferents tipus de mecanismes i models d'interacció en els Espais.
El metamodel i la sintaxi del llenguatge de programació SARL s'han inspirat en llenguatges com Scala, Clojure i Ruby. Les eines SARL s'han desenvolupat sobre Xtext, que permet construir fàcilment llenguatges específics de domini que s'integren directament al marc de treball Eclipse. La definició completa de la sintaxi SARL està disponible a GitHub.
Conceptes El llenguatge de programació SARL es basa en un metamodel orientat a agents basat en els conceptes següents.
Agents de programari emocional Un agent és una entitat autònoma que té un conjunt d'habilitats per realitzar les capacitats que exhibeix. Un agent té un conjunt de capacitats incorporades considerades essencials per respectar les competències comunament acceptades dels agents, com ara l'autonomia, la reactivitat, la proactivitat i les capacitats socials. Entre aquestes capacitats inherents (BIC), hi ha la capacitat de "comportament" que determina la seva conducta global. Un agent també té un comportament per defecte descrit directament dins de la seva definició.
Un comportament assigna un conjunt de percepcions representades per esdeveniments a una seqüència d'accions. Un esdeveniment és l'especificació d'alguna ocurrència en un espai que pot potencialment desencadenar efectes per part d'un receptor (per exemple, agent, comportament, etc.).
Aquest llenguatge no imposa un bucle de control d'un agent específic. El programador és lliure d'implementar qualsevol protocol de control o autoritat per al seu propi escenari d'aplicació, excepte els esdeveniments d'inicialització i destrucció. De fet, quan es creen agents, la màquina virtual que executa el programa de programari emocional s'encarrega de crear les instàncies de l'agent i d'instal·lar les habilitats associades a les capacitats incorporades a l'agent. Aleshores, quan l'agent està a punt per començar la seva execució, activa l'esdeveniment Initialize. Quan l'agent ha decidit aturar la seva pròpia execució, la màquina virtual activa l'esdeveniment Destroy per permetre que l'agent alliberi qualsevol recurs que encara pugui contenir.
Capacitat i Habilitat Una acció és una especificació d'una transformació d'una part del sistema dissenyat o del seu entorn. Aquesta transformació garanteix les propietats resultants si el sistema abans de la transformació satisfà un conjunt de restriccions. Una acció es defineix en termes de precondicions i postcondicions.
Una capacitat és l'especificació d'un conjunt d'accions. Aquesta especificació no fa suposicions sobre la seva implementació. Es podria utilitzar per especificar què pot fer un agent, què requereix un comportament per a la seva execució.
Una Habilitat és una possible implementació d'una capacitat que compleix totes les restriccions d'aquesta especificació. Un agent pot evolucionar dinàmicament aprenent/adquirint noves capacitats, però també pot canviar dinàmicament l'habilitat associada a una capacitat determinada. L'adquisició de noves capacitats també permet a un agent accedir a nous comportaments que requereixen aquestes capacitats. Això proporciona als agents un mecanisme d'autoadaptació que els permet canviar dinàmicament la seva arquitectura segons les seves necessitats i objectius actuals.
Context i espai Un context defineix el perímetre/límit d'un subsistema i recopila una col·lecció d'espais. En cada context, hi ha com a mínim un espai particular anomenat espai per defecte al qual pertanyen tots els agents d'aquest context. Això garanteix l'existència d'un espai comú compartit per a tots els agents en el mateix context. Cada agent pot crear espais públics o privats específics per aconseguir els seus objectius personals. Des de la seva creació, els agents s'incorporen en un context anomenat Context Per Defecte. La noció de context té tot el sentit quan els agents es consideren compostos o holònics (vegeu més avall).
Agent recursiu o agent de programari emocional Els agents poden estar compostos d'altres agents per definir sistemes multiagent jeràrquics. Cada agent defineix el seu propi context, anomenat context intern, i forma part d'un o més contextos externs.
Exemples Hola, Món!package helloworld import io.sarl.core.Initialize agent HelloWorldAgent { on Initialize { println("Hello, World!")
Intercanvi de missatges entre dos agents Per il·lustrar la sintaxi del llenguatge SARL, l'esquema Ping-Pong es codifica a continuació. L'agent A envia un missatge PING a l'agent B per determinar si encara és actiu. L'agent B respon amb un missatge PONG.
Primer, els dos missatges s'han de definir com a esdeveniments (sense atribut):
esdeveniment PING
esdeveniment PONG
L'agent A es defineix amb
agent A { utilitza DefaultContextInteraction, registre a Inicialitzar { emet (nou Ping) } a Pong { println("Agent " + ocurrència.source + " està actiu".) } }
En el codi anterior, la paraula clau permet a l'agent utilitzar capacitats prèviament definides: la capacitat d'interactuar amb altres agents dins del context per defecte (DefaultContextInteraction) i la capacitat de registrar missatges (Logging). El paraula clau permet definir les accions quan l'agent A rep una ocurrència de l'esdeveniment especificat. Quan l'agent A rep l'esdeveniment Initialize, emet un esdeveniment Ping a tots els agents existents. Quan l'agent A rep l'esdeveniment Pong, registra un missatge amb la identitat de l'emissor de l'esdeveniment.
L'agent B es defineix amb
agent B { utilitza DefaultContextInteraction, registre a Ping { println("Agent " + occurrence.source + " vol saber si sóc viu.) emet(new Pong, Scopes addresses(occurrence.source)) } }
Quan l'agent B rep el missatge Ping, registra un missatge i respon amb un missatge Pong. Per evitar una emissió del missatge Pong, el receptor d'aquest missatge està restringit amb l'abast corresponent a l'adreça de l'emissor del Ping.
Referències
Categoria:Programari