# Sistema multiagente

Un sistema multiagente o (sistema ad agenti multipli) è un insieme di agenti situati in un certo ambiente ed interagenti tra loro mediante una opportuna organizzazione. Un agente è cioè un'entità caratterizzata dal fatto di essere, almeno parzialmente, autonoma, sia essa un programma informatico, un robot, un essere umano, e così via.
Oggetto di ricerche da lunga data in intelligenza artificiale, i sistemi ad agenti multipli costituiscono un'interessante tipologia di modellazione di società, e hanno a questo riguardo vasti campi d'applicazione, che si estendono fino alle scienze umane e sociali (economia, sociologia, etc.).

## Origine ed aspetti tecnici
### Origine

I sistemi multiagente possono essere visti come crocevia di diverse discipline:
* l'intelligenza artificiale per gli aspetti decisionali relativi all'agente;
* l'intelligenza artificiale distribuita per la delocalizzazione dell'esecuzione;
* i sistemi distribuiti per ciò che concerne le interazioni tra agenti;
* l'ingegneria del software per quanto riguarda l'evoluzione verso componenti sempre più dotati di autonomia.

### I cinque problemi dei sistemi multiagente

Si possono rilevare cinque principali problemi nei confronti della creazione di sistemi multiagente.
* In primo luogo, il problema dell'azione: come può un insieme di agenti agire simultaneamente in un ambiente frammentato, e come interagisce tale ambiente in risposta agli agenti? Le questioni qui sottintese sono, tra le altre, quella della rappresentazione dell'ambiente per mezzo degli agenti, della collaborazione tra gli agenti, e della pianificazione dell'attività di una molteplicità d'agenti.
* Inoltre, è da considerare il problema dell'agente e della sua relazione col mondo esterno, la quale è rappresentata dal modello cognitivo di cui dispone l'agente. Ogni singolo individuo in una società costituita da molteplici agenti deve essere in grado di mettere in opera le azioni più rispondenti ai suoi obiettivi. Tale attitudine alla decisione è legata ad uno stato mentale che riflette le percezioni, le rappresentazioni, le convinzioni ed un certo numero di parametri "psichici" (desideri, tendenze...) dell'agente. Il problema in questione copre anche la nozione dei vincoli dell'agente nei confronti di un agente terzo.
* I sistemi ad agenti multipli necessitano altresì dello studio della natura delle interazioni, come fonte di opportunità, da una parte, e di vincoli dall'altra. Il problema dell'interazione si interessa alle modalità di interazione (quale linguaggio? quale supporto?), all'analisi ed alla concezione delle forme d'interazione tra agenti. Le nozioni di collaborazione e di cooperazione (considerata come collaborazione + coordinamento delle azioni + risoluzione dei conflitti) sono in questo campo questioni fondamentali. Se si applicano le mere conoscenze dei sistemi a singolo agente a quelli multi agente si avranno degli agenti egoisti (self-interested) che non coopereranno in alcun modo, dunque l'obiettivo del sistema sarà raggiunto in minima parte.
* Di seguito può richiamarsi il problema dell'adattamento, in termini di adattamento individuale o apprendimento da una parte, e adattamento collettivo o evoluzione dall'altra parte.
* Infine, rimane da discutere la questione della realizzazione effettiva e dell'implementazione dei sistemi multiagente, tramite la strutturazione dei linguaggi di programmazione in più tipologie, che vanno da un linguaggio di tipo L5, o linguaggio di formalizzazione e specifica, ad un linguaggio di tipo L1, che è quello dell'implementazione effettiva. Tra le due classi, si trovano i linguaggi per la comunicazione tra agenti, la descrizione delle leggi dell'ambiente e la rappresentazione delle conoscenze.

### Architettura dei sistemi multiagente

Con riferimento ai cinque problemi precedenti, è possibile delineare gli elementi dell'architettura d'un sistema ad agenti multipli come segue.
* Gli agenti devono essere dotati di svariati sistemi di decisione e pianificazione. La ricerca operativa, o teoria delle decisioni, è una disciplina completamente dedita allo studio di questo soggetto. Nella categoria delle interazioni con l'ambiente, un altro problema ricorrente dei sistemi ad agenti è quello del pathfinding (insieme al suo algoritmo più conosciuto, l'algoritmo A*).
* Gli agenti necessitano inoltre d'un modello cognitivo: anche qui esistono diversi modelli, tra cui uno dei più classici è il modello BDI (Beliefs-Desires-Intentions, cioè Convinzioni-Desideri-Intenzioni). Esso considera da una parte l'insieme delle credenze (Beliefs) dell'agente sull'ambiente in cui si trova ad operare, che sono il risultato delle sue conoscenze e delle sue percezioni, e dall'altra parte un insieme di obiettivi (Desires). Intersecando questi due insiemi, si ottiene un nuovo insieme di intenzioni (Intentions), che in seguito possono tradursi direttamente in azioni.
* Ancora, gli agenti devono altresì essere forniti di un sistema di comunicazione. Molti linguaggi specializzati hanno visto la luce a questo scopo: il Knowledge Query and Manipulation Language (KQML), e più recentemente lo standard FIPA-ACL (ACL sta per Agent Communication Language) creato dalla Foundation for Intelligent Physical Agents FIPA. Tale standard è fondato in particolare sulla teoria degli atti linguistici, elaborata da John Searle.
* Il problema dell'adattamento rappresenta un argomento spinoso, oggetto attualmente di numerose ricerche. Si potrebbe tuttavia citare l'esempio di alcuni virus, non solo informatici ma anche biologici, capaci di adattarsi al loro ambiente per effetto di mutazioni.
* Infine, l'implementazione effettiva di un sistema multiagente, se non fa parte, propriamente parlando, dell'architettura del sistema, merita di essere evocata attraverso l'esempio fornito dai numerosi linguaggi di programmazione sviluppati a scopo di ricerca nel settore dell'intelligenza artificiale. Si pensi in particolare al linguaggio LISP.

### Categorie di agenti

È possibile introdurre una classificazione degli agenti secondo due criteri: agenti cognitivi o reattivi da una parte, comportamento teleonomico o riflesso dall'altra.
La distinzione tra cognitivo e reattivo attiene essenzialmente alla rappresentazione del mondo di cui dispone l'agente. Se il singolo agente è dotato d'una rappresentazione simbolica del mondo a partire dalla quale è in grado di formulare ragionamenti, si parlerà di agente cognitivo, mentre se non dispone che d'una rappresentazione subsimbolica, vale a dire limitata alle percezioni, si parlerà di agente reattivo. Tale distinzione corrisponde a due scuole di pensiero relative ai sistemi multiagente: la prima sostiene un approccio basato su insiemi di agenti "intelligenti" collaborativi, da una prospettiva più sociologica; la seconda studia la possibilità dell'emergenza d'un comportamento "intelligente" di un insieme d'agenti non intelligenti (come quello delle formiche simulato dalle cosiddette ant colony).
La seconda distinzione tra comportamento teleonomico o riflesso divide i comportamenti intenzionali (perseguire scopi espliciti) dai comportamenti legati a delle percezioni. Le tendenze degli agenti possono essere anche espresse esplicitamente all'interno degli agenti o al contrario provenire dall'ambiente. È possibile costruire una tabella che raggruppi i differenti tipi d'agente (compilata da Ferber, si veda la bibliografia):
Categorie di agenti :
| | Agenti cognitivi | Agenti reattivi |
| Comportamento teleonomico | Agenti intenzionali | Agenti impulsivi |
| Comportamento riflesso | Agenti "modulari" | Agenti tropici |
Gli agenti cognitivi sono il più delle volte intenzionali, cioè hanno scopi prefissati che tentano di realizzare. Si possono pure trovare talvolta degli agenti detti modulari i quali, anche se possiedono una rappresentazione del loro universo, non hanno tuttavia degli scopi precisi. Tali agenti potrebbero servire ad esempio a rispondere alle interrogazioni avanzate da altri agenti su detto universo. Gli agenti reattivi possono a loro volta essere suddivisi in agenti impulsivi e tropici. Un agente impulsivo avrà una missione ben determinata (per esempio, assicurarsi che un serbatoio resti sempre sufficientemente pieno) e si comporterà di conseguenza qualora percepisca che l'ambiente non risponde più allo scopo che gli è stato affidato (il livello del serbatoio è troppo basso). L'agente tropico, dal canto suo, reagisce solo allo stato locale dell'ambiente (c'è del fuoco, io fuggo). La fonte della motivazione è nel primo caso interna (agenti impulsivi che hanno una "missione"), nel secondo caso è legata esclusivamente all'ambiente.

## Applicazioni
### Nel campo della ricerca

Si distinguono generalmente tre tipi d'utilizzo: la simulazione di fenomeni complessi, la risoluzione di problemi, e la progettazione di programmi.
Si utilizzano i sistemi multiagente per simulare le interazioni esistenti tra agenti autonomi. Si cerca di determinare l'evoluzione del sistema al fine di prevederne l'organizzazione risultante. Per esempio, in sociologia, si possono modellare i differenti agenti che compongono una certa comunità. Attraverso la messa a punto dei vincoli, si può cercare di comprendere quale sarà la combinazione più efficace per pervenire al risultato atteso (ad es., la costruzione d'un ponte). Il fattore importante è il comportamento dell'insieme, non certo il comportamento individuale. Le applicazioni esistenti hanno riguardato la fisica delle particelle (agente = particella elementare), la chimica (agente = molecola), la biologia cellulare (agente = cellula), l'etologia (agente = animale), la sociologia e l'etnologia (agente = essere umano). L'autonomia consente in questi casi di simulare il comportamento esatto di ogni entità.
L'intelligenza artificiale distribuita è nata per risolvere i problemi di complessità dei grossi programmi monoblocco dell'intelligenza artificiale: l'esecuzione è pertanto non concentrata ma distribuita, ma il controllo rimane centralizzato. Al contrario, nei sistemi ad agenti multipli, ciascun agente possiede un controllo totale sul suo comportamento. Per risolvere un problema complesso, talvolta è in effetti più semplice concepire programmi relativamente piccoli (gli agenti) interagenti con un unico grosso programma monoblocco. L'autonomia permette al sistema di adattarsi dinamicamente ai cambiamenti imprevisti che intervengono nell'ambiente.
Allo stesso tempo, l'ingegneria del software si è evoluta in direzione di componenti sempre più autonomi. I sistemi ad agenti multipli possono essere visti come un raccordo tra ingegneria del software ed intelligenza artificiale distribuita, con l'apporto rilevante dei sistemi distribuiti. In rapporto ad un oggetto, un agente può prendere iniziative, può rifiutarsi di obbedire ad una richiesta, può spostarsi, etc.: l'autonomia consente al progettista di concentrarsi sul lato umanamente comprensibile del software.

### La metafora dei videogiochi

Si può rappresentare un sistema ad agenti multipli come una di quelle comunità virtuali che si trovano sempre più nei videogiochi attuali. Consideriamo l'esempio di un gioco che simuli la vita di una famiglia. Il sistema multiagente può essere decomposto secondo più dimensioni. In primo luogo, si avrà un ambiente con una sua metrica. Si può ritenere che esso consista della casa con giardino in cui vive la famiglia. Inoltre il sistema può disporre di un insieme di oggetti passivi sui quali gli agenti possono intervenire: si tratta di tutti gli oggetti che arredano la casa, ma anche dei generi alimentari. Ovviamente, un sistema multiagente è composto da agenti; questi ultimi, attivi ed autonomi, interagiscono col loro entourage (l'ambiente, gli oggetti e gli altri agenti), e corrispondono ai membri della famiglia (senza dimenticare il cane). Ancora, si mette a punto un insieme di relazioni tra oggetti ed agenti, il che definisce un'organizzazione. Si potranno ad esempio esprimere i legami familiari tra i diversi individui, ma anche delineare i rapporti di proprietà (quale oggetto appartiene a chi?). Infine, si integra nel sistema un insieme di operatori che permettono agli agenti di agire sugli oggetti o su altri agenti (il figlio può mangiare uno yogurt o portare a spasso il cane o parlare a sua sorella), e di sensori che consentono agli agenti di conoscere i mutamenti ambientali e degli altri agenti (lo yogurt è caduto in terra, papà mi ha chiesto di far uscire il cane). Ecco dunque cos'è che può chiamarsi sistema multiagente. In informatica, l'agente sarà un programma autonomo che possiede un insieme di conoscenze e agisce secondo regole proprie.