Le piattaforme multi-agent guadagnano popolarità. Fra i prodotti più interessanti c’è JADE, una piattaforma concepita e sviluppata in Italia.
L’idea di una piattaforma multi-agent, ossia in grado di registrare e coordinare più agenti, non è nuova. Così come non sono nuovi il concetto stesso di agente e l’approccio AOP (Agent Oriented Programming). Tuttavia si tratta di idee sempre più popolari, un po’ come l’intelligenza artificiale.
Breve storia di agenti e piattaforme multi-agent
Il concetto nasce con ogni probabilità dalla teoria del ragionamento pratico umano di Bratman, anche conosciuta come BDI (Belief-Desire-Intention), la quale a sua volta è stata ispirata dalle idee di Dennett sull’atteggiamento intenzionale, proposta nel tentativo di spiegare e predire il comportamento di “agenti” razionali.
L’idea era di imputare “credenze” (beliefs) e “desideri” a un attore (l’agente razionale), e predirne il comportamento applicando ragionamento pratico alle suddette. Bratman aggiunse che la nozione di “intenzione” era fondamentale per spiegare il comportamento di tali agenti, ovvero i desideri su cui l’agente decide di committarsi. A differenza dei desideri, l’intenzione si tradurrebbe poi in un piano per assecondare tali desideri.
Il termine “Agent-Oriented Programming” (AOP) fu coniato da Shoham nel 1993 (Agent-oriented programming. Artificial Intelligence, 60(1):51-92): la sua idea era che le strutture cognitive come credenze, desideri e intenzioni potevano essere utilizzate non solo per predire e spiegare il comportamento di determinati agenti, ma anche per programmarli; Shoham ideò e propose AGENT-0, un linguaggio di programmazione ad hoc, in cui le nozioni di cui sopra erano incorporate come strutture di prima classe.
In seguito a AGENT-0 furono sviluppati una serie di linguaggi di programmazione ad alto livello, come AgentSpeak, GOAL, 3APL (An Abstract Agent Programming Language), 2APL (A Practical Agent Programming Language), SARL (di cui Janus è uno dei run-time più utilizzati), anche stimolati da workshop internazionali come AAMAS (Autonomous Agents and Multi-Agent Systems, organizzati da IFAAMAS) e COIN (Coordination, Organization, Institution and Norms in agent Systems). Diverse ricerche suggerivano tuttavia l’importanza dell’utilizzo di linguaggi main-stream già consolidati come linguaggi di rappresentazione (per la maggior parte Java, anche se ci sono implementazioni per esempio in Python come SPADE), che portò all’implementazione di piattaforme di un certo successo come come Jason/AgentSpeak, JADE, WADE, Jack AOS, Netlogo, Jiac, Jadex.
Un passo importante verso la standardizzazione fu portato dalla creazione della FIPA (Foundation for Intelligent Physical Agents) nel 1995, che definì uno standard architetturale per l’implementazione ed esecuzione degli agenti, nonché di uno standard di comunicazione inter-agente (ACL). Dal 2005 la FIPA ha cessato di essere autonoma ed è entrata a far parte di IEEE Computer Society come 11° comitato di standardizzazione. Ma le idee portate avanti stanno guadagnando ancora più focus negli ultimi anni, tanto che JADE, sviluppata da Telecom Italia Lab, è ancora oggi considerata la piattaforma multi-agent più diffusa.
Ma che cos’è un agente?
In ambito software possiamo definire un agente come un sistema che agisce per conto di un utente (o di un altro sistema), che sia autonomo, sociale (può interagire ed eventualmente cooperare con altri agenti), reattivo (in grado di rispondere e adeguarsi a stimoli esterni) e proattivo (in grado di agire di propria iniziativa).
Oggi l’utilizzo di agenti software è sempre più diffuso, dai web crawler che indicizzano la rete per i motori di ricerca, ai chatbot, ai bot di content editing (vedi il curioso problema dei “litigi” tra bot in Wikipedia), ai software di crowd simulation in ambito cinematografico (famoso l’utilizzo in alcune scene di massa nel film World War Z) .
Agenti intelligenti all’opera in World War Z (Scene di massa create col crowd simulator Alice di Cinesite)
Per farsi un’idea generale degli ambiti di applicazione basta dare un’occhiata alla pagina di call for papers di AAMAS 2017.
Piattaforme Multi-Agent (MAS)
In sostanza quando parliamo di MAS parliamo di una piattaforma in grado di gestire l’esecuzione di agenti e le loro interazioni; inoltre questo genere di sistemi consentono la gestione di interazioni anche molto complesse tra agenti autonomi, nonché i loro spostamenti da un contenitore all’altro (agenti mobili).
Architettura
La FIPA definisce una serie di componenti per le piattaforme ad agenti:
Architettura di riferimento FIPA
– Uno o più Directory Facilitator (DF): servizio di naming che mantiene l’elenco aggiornato degli agenti
– Un Agent Management System (AMS): servizio obbligatorio che gestisce tutte le operazioni relative agli agenti (creazione, distruzione, migrazione…)
– Message Transport Service (MTS): servizio fornito dalla piattaforma per trasportare messaggi in formato FIPA-ACL, servizio mandatorio per la comunicazione cross-piattaforma (MTP). Il protocollo di comunicazione interno (IMTP) non dovendo comunicare con piattaforme esterne non è definito e lasciato libero alle ottimizzazioni.
Metodologie di sviluppo
I sistemi multi-agent sono stati sviluppati per anni secondo una metodologia molto ben collaudata, conosciuta come PASSI (Process for Agent Societies Specification and Implementation), per la quale recentemente è stato anche proposta un’evoluzione AGILE.
JADE
Un’analisi di dettaglio della teoria e dell’architettura dei sistemi multi-agent è fuori dallo scope di questo articolo, ma merita di fare eccezione JADE, in quanto si tratta ad oggi non solo di una delle piattaforme più utilizzate e conosciute, ma anche totalmente sviluppata in Italia.
JADE (Java Agent Development framework) come piattaforma nasce nel 1998, con lo scopo di validare le specifiche FIPA, ideato da Fabio Bellifemine, Agostino Poggi e Giovanni Rimassa all’interno di Telecom Italia Lab. e successivamente guidato da Giovanni Caire, progetto fortemente stimolato anche da iniziative di ampio respiro come FACTS e Agentcities.
Architettura
L’architettura di Jade, interamente in Java, prevede un container principale, avviato per primo durante il boot della piattaforma, e uno o più container secondari. Il container principale ha le seguenti responsabilità: mantenere la Container Table (CT), che funziona da registry di tutti i container che compongono la piattaforma, mantenere la Global Agent Descriptor Table (GADT), che funziona da registry di tutti gli agenti della piattaforma, inclusi stato e locazione, mantenere (responsabilità comune a tutti i container) una Local Agent Descriptor Table (LADT), simile alla GADT, ma relativa agli agenti ospitati in locale.
Oltre agli agenti applicativi contiene due agenti speciali: il Directory Facilitator (DF), una specie di servizio di pagine gialle che mantiene una lista aggiornata di tutti gli agenti autorizzati e l’Agent Management Service (AMS), che supervisiona l’intera piattaforma, gestendo il ciclo di vita degli agenti.
Tramite l’add-on LEAP è inoltre supportata la possibilità di deployare JADE in ambienti “lightweight” (es. Android) con Java ME o .NET.
Comunicazione
In JADE la comunicazione tra agenti residenti nella stessa Virtual Machine avviene direttamente tramite eventi Java, essendo tutti thread dello stesso processo, mentre il protocollo per la comunicazione tra container della stessa piattaforma (IMTP: Internal Message Transfer Protocol) avviene via Java RMI, o socket TCP ove RMI non fosse disponibile (piattaforme JME).
La comunicazione tra agenti di piattaforme differenti richiede una certa interoperabilità, e l’uso di protocolli condivisi (MTP: Message Transfer Protocol), e ad oggi JADE supporta HTTP, HTTPS, IIOP, JMS.
Mobilità
Una delle features più interessanti di JADE è il supporto alla mobilità degli agenti, ovvero la capacità di muovere codice e stato di un agente tra due piattaforme JADE, grazie a jipms, un add-on sviluppato originariamente dall’Universitat Autonoma de Barcelona.
Intelligenza Artificiale
JADE fornisce l’infrastruttura di base per la gestione di agenti e l’esecuzione di comportamenti, ma di base non implementa nessuna forma di comportamenti “intelligenti”. Esistono tuttavia possibilità di integrare JADE con diversi tipi di engine.
Ecco qualche esempio:
Ragionamento rule-based
È possibile integrare facilmente JADE con JESS, un rule engine in Java, che implementa l’algoritmo RETE. In questo modo gli agenti sarebbero in grado di effettuare inferenze e gestire comportamenti basati su regole.
Inoltre è possibile creare sistemi complessi integrando JADE+JESS con Knowledge bases di ontologie creati con Protégé (vedi JadeJessProtege e la presentazione sul sito di Protégé).
Con Jadex è possibile arricchire gli agenti Jade con modelli BDI.
Workflow
Tecnicamente non necessariamente legata all’intelligenza artificiale è la gestione dei workflow, per cui è stato implementato WADE (Workflow Agent Development Environment), divenuto oggi l’estensione più importante di tutta la piattaforma.
Progetti e casi d’uso
WANTS-Assurance
WANTS è uno dei progetti mission critical implementati con WADE da Telecom, ed è in produzione con successo dal 2008.
Lo scope del progetto è il monitoraggio in real-time di più di 3 milioni di linee xDSL contemporaneamente.
Come mostrato nella figura di sopra, tradizionalmente le linee xDSL quando raggiungono la centrale vengono splittate in due: la componente voce viene indirizzata verso la linea telefonica tradizionale, mentre la componente dati viene collegata ad un DSLAM, che convoglia poi fino a 800 linee nella rete a banda larga. Al momento di realizzare il progetto Telecom Italia aveva più di 25000 DSLAM installati nel territorio italiano, per un totale di oltre 8 milioni di linee telefoniche, con un processo di migrazione dalla tecnologia ATM a IP in atto e (all’epoca) circa 5000 IP DSLAM installati su 3 milioni di linee.
La qualità della linea può essere impattata da molti fattori (degrado dei cavi, distanza dalla centralina, rumore…), e può essere gestita attraverso una certa quantità di parametri, che attraverso quella che viene chiamata DLM (Dynamic Line Management) devono periodicamente essere riaggiustati per mantenere la qualità della linea a livelli accettabili . Di conseguenza, dato l’ordine di grandezza del numero di linee in gioco, si era resa necessaria l’automazione di tali procedure.
A differenza del tradizionale polling periodico dei DSLAM (non particolarmente efficiente visto il numero di linee), il nuovo approccio era di tipo “push”, ovvero rispondeva a notifiche inviate direttamente dal DSLAM, e solo in quel caso si procedeva a interrogare i dispositivi di rete, immagazzinando poi i dati in un database apposito. I vantaggi principali erano la possibilità di intervenire proattivamente anche in assenza di trouble ticket, prima di eventuali lamentazioni dell’utente, e l’avere a disposizione lo storico della linea da parte del tecnico.
Vista la mole di traffico prevista (oltre 15 milioni di notifiche al giorno, fino a 500 al secondo), era necessaria un’elevata scalabilità.
– Notification Handler Agents (NH): Agenti destinati a ricevere le notifiche TRAP dai DSLAM, circa uno per ogni 1000 dispositivi
– Resource Proxy Agents (RP): Un pool di circa 200 agenti era deputato a elaborare le notifiche e a diagnosticare eventuali variazioni del livello di connettività
– Device Assignment Manager Agent (DAM): Questo è l’agente che tiene traccia delle assegnazioni device-RP. Per poter agire su un DSLAM tutti i componenti della piattaforma devono prima ottenere il riferimento dal DAM.
– Network Manager Agent (NM): Agente amministrativo, esegue compiti come assegnare un nuovo dispositivo al sistema
– Dynamic Line Management Agent (DLM): Questi agenti sono in carica per la gestione della linea, applicando le configurazioni come da processo sottostante.
NFV Sentinel
NFV (Network Function Virtualization) è un concetto che sta sempre più prendendo piede dall’avvento del cloud, e la cui espansione sarà probabilmente portata alla massima potenza con l’avvento del 5G.
Il concetto di base è quello di virtualizzare progressivamente tutte le funzioni di rete, sostituendo gli apparati hardware con funzionalità software. In Telecom il progetto ha visto il rilascio in produzione della sua prima fase e conta di sostituire inizialmente tutte le funzioni di rete “core” (es: DNS, HLR…).
Il progetto Service Guard (ribattezzato in Sentinel) ha visto il rilascio in produzione lo scorso anno e si prefigge il monitoraggio di tutta la nuova rete NFV di Telecom tramite WADE
Altri Progetti
Multi-Agent Based Cloud Service Composition using Contract Net Protocol for Information Retrieval Purpose: Sistema multi-agent per Information Retrieving in ambito medico, utilizzando JADE + JavaEE [fonte].
ACE-JADE: Estensione a JADE per aggiungere il support a quello che viene definito Autonomic Computing [fonte: “Enabling Autonomic Computing Support for the JADE Agent Platform”]
MACSimJX: Software che permette ai modelli MATLAB realizzati con SimuLink di accedere a JADE.
Altri possibili scenari di utilizzo
IoT
JADE è implementato in Java, e come dimostrato dai due progetti Telecom consente la mobilità di agenti tra qualsiasi piattaforma e/o dispositivo che supporti Java; inoltre l’integrazione tramite LEAP con Java ME (che con Java 8 sta rinascendo a nuova vita) apre la strada virtualmente a qualsiasi soluzione embedded, grazie a MIDP (Mobile Information Device Profile) che risiede in cima alle configurazioni CLDC (Connected Limited Device Configuration) per piccoli dispositivi e CDC (Connected Device Configuration), per dispositivi un po’ più capaci come smartphone e set-top boxes.
Qualche esempio:
Jade Implementation of Power Restoration in Automated Distributed System: Sistema di gestione e risoluzione dei fault nelle reti elettriche, modellato e simulato con SimuLink e implementato con JADE+MACSimJX.
IMAIS: proposto in A Mobile Multi-Agent Information System for Ubiquitous Fetal Monitoring, sistema ad agenti implementato con JADE, per il monitoraggio delle funzioni vitali dei feti.
Efficient Model for Distributed Computing based on Smart Embedded Agent: interessante modello di elaborazione parallela in ambiente distribuito, realizzato con JADE su Raspberry PI.
Big Data
Come evidenziato nei progetti precedenti, l’elevato parallelismo e la mobilità consentito dalle piattaforme ad agenti consente di ottimizzare le risorse effettuando pre-analisi in prossimità della fonte, ma ad esempio possono consentire di risolvere problemi architetturali come il Single Point of Failure. Per esempio Divya e Shunmuganathan all’ISCO dello scorso anno hanno proposto una modifica architetturale ad Hadoop sostituendo il JobTracker (che appunto è il single point of failure) con agenti JADE, in grado di elaborare le query e assegnare task ai vari nodi in maniera autonoma.
Machine Learning
“Stiamo lavorando per estendere JADE con sistemi di intelligenza artificiale, e a sistemi di Big Data come Hadoop” (JADE oggi fornisce prevalentemente l’infrastruttura dell’architettura e il supporto alla mobilità, ma non fornisce nessuna funzionalità esplicita di ragionamento artificiale) mi racconta Giovanni Caire di Telecom Italia; ma l’integrazione con reti neurali ha comunque già stimolato diverse proposte e lavori.
Ne cito uno come esempio:
DEIR: Multi-agent Software Control System with Hybrid Intelligence for Ubiquitous Intelligent Environments, sistema per Ubiquitous Computing, implementato con JADE, UPnP (Universal Plug & Play), e un motore di inferenza chiamato MAHIS, combinante fuzzy inference e decision tree.