Autonomy in Castelfranchi: examples in JADE & JASON

Outline


1. Introduzione

2. Fondamenta Teoriche e definizioni

3. Autonomia nei MAS: definizione formale

4. Autonomia rispetto all'ambiente

  • 4.1 Autonomia dagli stimoli
  • 4.2 Autonomia cognitiva
  • 4.3 Esempi in Jason
5. Autonomia sociale
  • 5.1 Autonomia esecutiva
  • 5.2 Autonomia motivazionale
    • 5.2.1 L'importanza della razionalità
    • 5.2.2 Il meccanismo a doppio filtro
  • 5.3 Esempi in Jade
6. Altre forme di autonomia
  • 6.1 Autonomia rispetto all'utente
  • 6.2 Autonomia rispetto alle norme
  • 6.3 Autonomia rispetto a sé stessi
7. Conclusioni

8. Bibliografia

1. Introduzione

Il professor Cristiano Castelfranchi è un ricercatore dell'Istituto di Psicologia del CNR e per molti anni il suo lavoro si è orientato verso l'applicazione di modelli cognitivi nell'intelligenza artificiale. Tra i contributi più importanti troviamo sicuramente lo studio dei comportamenti autonomi goal-oriented nei sistemi multi agente (MAS), con l’obiettivo di evidenziare come le relazioni sociali modellino la cognizione dei singoli individui.

L’obiettivo di questa attività è quello di razionalizzare le forme di autonomia emerse dal lavoro di Castelfranchi, mettendo in luce le caratteristiche di ognuna di esse, analizzando le differenze, e cercando di applicarle a dei semplici sistemi ad agenti costruiti per rendere ancora più espliciti e comprensibili i diversi modelli di autonomia rappresentati.

Verranno inizialmente definiti tutti i concetti utilizzati in questa relazione, dall’agente al sistema multi-agente, dalla goal orientation alla self regulation, in modo da facilitare la comprensione del testo. Successivamente, sarà definita in modo formale la nozione di autonomia come tema centrale, focalizzando l’attenzione sul fatto che non esiste una forma univoca di autonomia, ma, essendo un concetto relazionale, viene sempre valutata sulla base delle diverse entità coinvolte. Considerando un agente cognitivo come entità fondamentale di cui valutare l’autonomia, le entità secondarie prese maggiormente in considerazione da Castelfranchi sono da un lato l’ambiente e dall’altro uno o più agenti cognitivi. Sarà brevemente discussa l’importanza di porre un limite all’autonomia di un agente rispetto all’ambiente in cui si trova, e descritta la relazione tra autonomia e adattabilità tramite il teorema di Cartesio. In seguito si farà un necessario distinguo tra le due forme di autonomia dall’ambiente, ovvero l’autonomia dagli stimoli (più semplice) e l’autonomia cognitiva (più complessa): per realizzare gli esempi implementativi di queste due forme di autonomia sarà utilizzato il linguaggio Jason, mediante il quale proveremo a dare una rappresentazione di autonomia dall’ambiente.

L’autonomia di un agente rispetto ad altri agenti, è definita come autonomia sociale. In caso di collaborazione tra due agenti, l’autonomia esecutiva consiste nella capacità di un agente sociale di scegliere tra diverse soluzioni per raggiungere il goal. L’agente sociale avrà un goal predefinito, immutabile, differentemente dal caso di autonomia motivazionale, che è definita come la vera natura degli agenti social. La differenza principale rispetto alla precedente forma di autonomia, è che in questo caso l’agente può adottare goal di altri agenti sociali, soprattutto se “convenienti” per il raggiungimento del suo goal iniziale. Una volta elencate le principali caratteristiche di cui gode un agente socialmente autonomo, sarà discussa l’importanza del concetto di razionalità, e le necessità di controllo sui goals e sui beliefs, allo scopo di garantirgli un modello socio-cognitivo consistente ed efficace. Le due tipologie di autonomia sociale, in una loro versione adeguatamente semplificata, verranno poi rappresentate in un sistema multiagente Jade, che nonostante non espliciti concetti fondamentali come Goals, Beliefs e Intentions, ci ha permesso di raggiungere un soddisfacente risultato.

Infine verranno descritte ulteriori forme di autonomia, evidenziate in studi utili allo svolgimento di questa relazione, che, tuttavia, non ricoprono un ruolo centrale nella ricerca di Cristiano Castelfranchi.

2. Fondamenta teoriche e definizioni

I sistemi multiagente sono un campo di ricerca dell’informatica relativamente recente: sono studiati dall’inizio degli anni ‘80 ma hanno guadagnato ampio riconoscimento soltanto nella metà degli anni ‘90; da allora l’interesse internazionale e la ricerca in questo settore sono cresciuti enormemente.

Questa rapida crescita è stata stimolata dalla convinzione che gli agenti siano un paradigma appropriato al fine di sfruttare le possibilità offerte dai massive open distributed systems. Inoltre i sistemi multiagente sembrano essere una metafora naturale per la comprensione e la costruzione di quelli che potremmo definire “sistemi sociali artificiali”.

Formalmente, con sistema multiagente (MAS, Multi-Agent System), intenderemo sistemi composti da una serie di elementi computazionali, gli agenti, la cui interazione riveste un ruolo centrale.

Non è semplice trovare una definizione universalmente riconosciuta per il termine “agente”, anche se molto spesso accettata è la seguente:
Un agente è un sistema software (o più raramente hardware) che gode delle seguenti proprietà:

  • Autonomia: gli agenti operano senza l’intervento diretto dell’uomo o di altri agenti, e hanno un certo tipo di controllo sulle azioni e sul proprio stato interno (Castelfranchi, 1994);
  • Abilità sociali: gli agenti possono interagire con altri agenti (e possibilmente umani) attraverso un certo tipo di linguaggo di comunicazione (Genesereth and Ketchpel, 1994);
  • Reattività: gli agenti percepiscono l’ambiente in cui agiscono e reagiscono ai suoi cambiamenti;
  • Pro-attività: gli agenti non agiscono semplicemente in risposta all’ambiente , ma sono in grado di avere un comportamento goal-oriented prendendo l’iniziativa.
Tuttavia, per quanto riguarda l’intelligenza artificiale, è necessario estendere questa definizione con alcuni concetti che solitamente sono utilizzati per la descrizione del comportamento umano, ma che devono essere applicati anche nel caso in cui si vogliano definire gli agenti intelligenti:
  • conoscenza;
  • credenze (beliefs);
  • desideri (desires);
  • intezioni (intentions);
  • benevolenza;
  • razionalità.
(Wooldridge and Jennings, 1995)

Un agente “goal-oriented” è un sistema il cui comportamento è orientato ad ottenere un certo stato del mondo circostante. Nel contesto dell'autonomia, i comportamenti “goal-governed” hanno grande rilevanza, perchè sono controllati da una rappresentazione esplicita di “Set-point” interni all’agente stesso (Goals).

Gli agenti “self-regulated” sono agenti “goal-governed” che, dato un certo Goal, sono in grado di raggiungerlo in autonomia pianificando ed eseguendo determinate azioni e, quando necessario, adottando correttivi.

Tuttavia, essere un agente “goal-oriented” ed essere “self-regulated” sono entrambe condizioni necessarie ma non sufficienti per potersi definire un agente sociale autonomo: l’autonomia richiede che i goal stessi siano autonomi. (Castelfranchi, 1994)

3. Autonomia nei MAS: definizione formale

L’autonomia è una delle nozioni più importanti nei campi dell’intelligenza artificiale, robotica, sistemi multi-agente ecc.

Si può preliminarmente definire l'autonomia come un concetto relazionale: essa deriva dalle relazioni tra 3 classi di entità:

  • Un'entità X, (il soggetto principale) la cui autonomia è oggetto di valutazione;
  • Una funzione azione/goal (f) che deve essere realizzata o mantenuta dal soggetto principale e sul quale l'autonomia è valutata;
  • Il soggetto/entità secondario Z (potrebbe essere una molteplicità di soggetti), che confrontato al soggetto principale può essere considerato autonomo rispetto alla funzione/azione/goal specificata.
Sulla base dei tipi di relazioni e il tipo di natura delle entità considerate possiamo evidenziare diversi gradi di autonomia. In altre parole non c'è una definizione univoca o un singolo significato di autonomia.

Formalmente:

Autonomia(X,Z,f)

dove X è un agente cognitivo;
Z può (o meno) essere un agente cognitivo (anche più di uno);
f rappresenta la "coppia" azione/goal -> f = (a,g).

Sì può quindi leggere "l'autonomia di X da Z su f". (Castelfranchi, 2003)

Se prendiamo in considerazione il soggetto secondario, possiamo distinguere due casistiche: autonomia sociale e autonomia rispetto all'ambiente.

4. Autonomia rispetto all'ambiente

Questo è il caso in cui il soggetto secondario (Z) è rappresentato dall'ambiente.

Gli agenti sono entità in grado di agire nell'ambiente sulla base della percezione di ciò che li circonda, e la loro autonomia (relativamente all’ambiente) deve essere necessariamente limitata, poichè per la loro caratteristica di adattabilità al contesto (situatedness) non possono agire in modo autistico, basandosi solo sulla loro rappresentazione interna.

La relazione tra adattabilità e autonomia è descrivibile attraverso il problema di Cartesio: “La risposta di un sistema vivente all’ambiente circostante non è nè causato nè strettamente indipendente dagli stimoli esterni.” Infatti, per quanto riguarda gli umani, possiamo dire che il comportamento è influenzato da stimoli esterni, ma non è mai imposto da questi. Si adatta alle situazioni esterne, ma non è causato da esse.

Il comportamento non ha cause, ma motivi, ragioni. Non è un insieme di rigidi riflessi deterministici agli stimoli esterni.
(Castelfranchi, 1994)

4.1 Autonomia dagli stimoli

L’autonomia dagli stimoli è un tipo di autonomia rispetto all'ambiente che hanno alcuni sistemi molto semplici. Sulla base di una sorta di stato interno, reagiscono agli stimoli ricevuto dall'ambiente o decidono di ignorarli.
(Castelfranchi, 1994)

4.2 Autonomia cognitiva

L'autonomia cognitiva è anch'essa una tipologia di autonomia relativa all'ambiente e può essere vista come una versione estesa dell'autonomia dagli stimoli. Viene introdotto il concetto di meditazione cognitiva, dove gli stimoli sono rimpiazzati dai Beliefs (credenze, significati, opinioni) e le classiche reazioni sono rimpiazzate dai Goals (obiettivi)(Castelfranchi, 1994).

4.3 Esempi in Jason

L'autonomia rispetto all'ambiente e i concetti introdotti nei paragrafi 3.1 e 3.2 sono stati descritti tramite la realizzazione di due esempi rappresentanti rispettivamente l'autonomia dagli stimoli e l'autonomia cognitiva. Questi due esempi sono stati realizzati in Jason, piattaforma utilizzata per lo sviluppo di sistemi multi-agente. Jason implementa la semantica operazionale di una variante estensiva del linguaggio agent-oriented AgentSpeak tramite il quale vengono descritti i comportamenti dei vari agenti. Per maggiori informazioni riguardanti la tecnologia utilizzata si veda il lavoro di (Balducci, Moisuc, 2013).

Gli esempi, per quanto semplicistici possano sembrare, descrivono chiaramente i concetti di autonomia dagli stimoli e autonomia cognitiva.

Autonomia rispetto agli stimoli

Al centro dell'autonomia relativa agli stimoli, provenienti dall'ambiente, vi è lo stato interno e la decisione dell'agente di considerare o meno tali impulsi: l'esempio rappresenta un agente che si muove linearmente all'interno dell'ambiente; muovendosi "brucia" calorie e aumenta il suo grado/livello di fame.
Nell'ambiente sono posizionate alcune mele in grado di soddisfare il bisogno di cibo da parte dell'agente: l'autonomia trattata in questo esempio si evidenzia nel momento in cui l'agente decide di nutrirsi o meno con una determinata mela sulla base del suo stato interno (il grado di fame).
Inizialmente l'agente non presenta alcun belief ma ha il semplice goal di controllare gli slot componenti lo scenario:

// Apple searcher 

/* Initial goal */

!check(slots).

/* Plans */

+!check(slots) : not apple(r1) <- next(slot); !!check(slots). +!check(slots).

+apple(r1) : not .desire(eat(apple)) <- !eat(apple).

+!eat(apple) <- eat(apple); next(slot); !!check(slots).

L'esecuzione del goal iniziale, come si può notare, avviene tramite l'omonimo plan che consiste nel movimento dell'agente all'interno dello scenario. In presenza di una mela l'agente valuterà la sua necessità di mangiarla o proseguire in quanto sufficientemente sazio. Il belief +apple(r1) viene aggiunto, tramite chiamata al metodo addPercept(a1) della libreria jason.environment, ogni qualvolta l'agente abbia le medesime coordinate di una mela:

void updatePercepts() {
	clearPercepts();

Location r1Loc = model.getAgPos(0);

if (model.hasObject(APPLE, r1Loc)) { addPercept(a1); } }


Autonomia cognitiva

Per quanto riguarda l'autonomia cognitiva, l'ambiente è descritto dalla presenza di un incendio (la cui intensità iniziale varia da esecuzione ad esecuzione) e da un'uscita di emergenza.
Il perdurare dell'incendio all'interno dello scenario comporterà un incremento di intensità delle fiamme e, ovviamente, un pericolo maggiore. Inizialmente l'unico agente all'interno dello scenario non è conscio della presenza di alcun incendio e si muoverà in maniera casuale in esso: una volta che la distanza sarà tale che l'incendio possa essere notato dall'agente, questi compirà una valutazione riguardante il pericolo rappresentato dalle fiamme.
Nel caso cui l'incendio sia estinguibile l'agente si dirigerà, seguendo il cammino più breve, verso di esso allo scopo di domarlo, nel caso contrario, invece, scapperà verso l'uscita di emergenza. L'autonomia cognitiva, in questo esempio, si evidenzia nel momento in cui l'agente sceglie o meno di domare l'incendio: la sua scelta sarà ponderata ed è vera e propria convinzione, rappresentata tramite sintassi belief e realizzata mediante goal.

/* Initial beliefs */
safety.
look.

/* Initial goals */

!check(slots).

/* Plans */

+!check(slots) : look <- move(slot); !!check(slots). +!check(slots).

+fire(r1) : safety <- -look; !at(r1,fire); !at(r1,exit).

+danger(r1) : true <- -safety; -look; !at(r1,exit).

+!at(r1,fire): at(r1,fire) <- extinguish(fire). +!at(r1,fire): not at(r1,fire) & safety <- move_towards(fire); !at(r1,fire). +!at(r1,fire): not at(r1,fire) & not safety <-move_towards(exit).

+!at(r1,exit): at(r1,exit) <-escape(r1). +!at(r1,exit): not at(r1,exit) <--safety; move_towards(exit); !at(r1,exit).

I beliefs che caratterizzano l'agente descrivono rispettivamente la percezione di sicurezza dell'ambiente circostante e la volontà di muoversi liberamente.
Anche in questo caso il piano iniziale è un controllo dei singoli slot componenti lo scenario, la sostanziale differenza è che, a differenza dell'esempio precedente, il movimento dell'agente è totalmente casuale. Questo movimento casuale continuerà fino a quando la distanza tra incendio ed agente sarà tale da consentirne la percezione da parte dell'agente: una volta che essa sarà inferiore ad una certa soglia l'agente compirà una prima decisione, basata sull'intensità del fuoco in quel momento, che lo spingerà a dirigersi verso incendio o uscita.
L'agente, nel cammino verso l'incendio, continua a monitorare l'intensità del fuoco: nel caso in cui esso possa diventare eccessivamente pericoloso allora rivaluterà le sue precedenti convinzioni e si dirigerà verso l'uscita.

void updatePercepts() {

clearPercepts(); Location r1Loc = model.getAgPos(0);

if (r1Loc.equals(exitLocation)) { addPercept(ae);//at(r1,exit) } if (r1Loc.equals(fireLocation)) { addPercept(af); //at(r1,fire) } if (model.getAgPos(0).distance(fireLocation) < DISTANCE && dangerous == false ) { addPercept(f1); //fire(r1) }

if (fireIntesity > DANGER_THR) { addPercept(danger); //danger(r1) dangerous = true; } }

L'autonomia cognitiva dell'agente lo porta a modificare i propri beliefs, come ad esempio quello relativo alla sicurezza dell'ambiente circostante, al fine di realizzare una vera e propria meditazione cognitiva.

5. Autonomia Sociale

Nel caso in cui il soggetto secondario (Z) sia rappresentato da altri agenti, possiamo parlare di autonomia sociale: l'agente X è - più o meno - autonomo rispetto all'agente Z.

Due nozioni molto differenti sono evidenziate a livello sociale:

  • Autonomia come indipendenza, autosufficienza;
  • Autonomia in collaborazione.
Nel primo caso un agente è totalmente autonomo (riguardo ad una determinata azione o goal) quando non necessita di aiuto o di risorse di altri agenti al fine di completare il proprio goal o eseguire la propria azione.
Nel secondo caso intendiamo l'autonomia in relazione a quanto l'agente è autonomo quando sta lavorando per un altro agente.
(Castelfranchi, 2003)

Se prendiamo in considerazione l'azione/funzione/goal (che deve essere realizzata o gestita dal soggetto principale e sulla quale l'autonomia è valutata), possiamo distinguere 2 casi principali: autonomia esecutiva e autonomia motivazionale.

5.1 Autonomia Esecutiva

Si tratta di una forma molto debole di autonomia sociale e possiamo definirla come la capacità dell'agente X di collaborare con un suo pari Z, eseguendo gli ordini a lui impartiti. L'autonomia dell'agente X è quindi limitata a qualche livello decisionale su come eseguire il lavoro a lui richiesto, ma non permette il cambiamento dei propri goals iniziali.

Per semplificare, si può considerare l'esempio di un robot che agisce al fine di eseguire ordini, senza alcuna iniziativa o preferenza personale. Anche se è in grado di risolvere il problema, ad esempio scegliendo tra diverse tecniche di problem solving, le sue scelte sono limitate ai mezzi, non ai fini.
(Castelfranchi, 1994)

5.2 Autonomia Motivazionale

L'autonomia motivazionale rappresenta la vera natura di un agente "social".

L'agente X è dotato dei propri goal iniziali, ma può anche scegliere se adottare goal esterni provenienti da altri agenti Z.

Per essere autonomo dagli altri agenti, l’agente deve essere in grado di rifiutare, come accettare, le richieste dei suoi pari, sulla base delle proprie ragioni. Se l’agente sceglie sulla base dei propri goals, possiamo considerare la decisione autonoma sia che soddisfi o meno le richieste altrui.

Si può riassumere il concetto di agente socialmente autonomo con questi 5 postulati:

  • Ha i propri goal;
  • Può prendere decisioni riguardanti goal in conflitto tra loro;
  • Può adottare goal da agenti esterni;
  • Può adottare goal da agenti esterni in conseguenza di una scelta tra questi ed altri goal;
  • Adotta goal da agenti esterni solo se possono aiutarlo a raggiungere più facilmente i propri.
La condizione 3 è particolarmente importante perchè è la base della 4 e della 5. Può essere vista come un paradosso, tuttavia un agente che non adotta mai goal di altri agenti non è realmente autonomo, ma autarchico.
(Castelfranchi 1994)

5.2.1 L'importanza della razionalità

razionalità
dal latino "ratio" (razio, cioè ragione, motivo, senso) indica l'essere in una logica consequenziale e stabilita.

Alla base dell'autonomia motivazionale c'è la razionalità, nello specifico per quel che riguarda la scelta di adottare un goal proveniente dall'esterno, o meno.

Un agente razionale sa che ogni azione ha un costo e comporta un determinato sforzo; un agente che svolge azioni (pagandone il costo) per obiettivi di altri agenti, è irrazionale tanto quanto un agente che spende energie per goal inottenibili. Da entrambi gli scenari, non ne guadagna nulla.
D’altro canto, un agente autonomo non può definirsi tale se rifiuta sempre e a prescindere le richieste di altri.

Di conseguenza, un agente socialmente autonomo e razionale decide di adottare goal di agenti esterni soltanto se crede che abbia senso per poter raggiungere i propri goals. Questo però non coincide necessariamente con una visione egoistica dell’agente, perchè i goal di un agente possono anche includere "benevolenza", come amicizia, amore, altruisimo etc. o impulsi reattivi all'altruismo di altri agenti.
(Castelfranchi, 1994)

Il problema maggiore consiste nel trovare il giusto equilibrio tra la benevolenza e la razionalità, per fare in modo che, anche in caso di benevolenza, l'adozione di un goal non sia limitata alle richieste esplicite o aspettative di altri agenti.

5.2.2 Il meccanismo a doppio filtro

Per essere autonomo, un agente deve poter avere controllo sull'acquisizione dei propri stati mentali (Beliefs e Goals).

La cosiddetta architettura a doppio filtro si ha quando si inseriscono ulteriori postulati all'adozione di goal:

  • Non è possibile modificare direttamente i goal di un agente da fuori: tutte le modifiche ai goal devono essere ottenute modificando anche i beliefs. In questo modo il controllo sui beliefs diventa un nuovo filtro per l’adozione dei goals. I goal non sono un sottoinsieme dei beliefs, possono insistere sugli stessi argomenti, ma lo stato mentale di voler ottenere qualcosa, non equivale allo stato mentale di credere in qualcosa.
  • Non è possibile modificare direttamente i beliefs di un agente da fuori: l’adozione di un nuovo belief è una decisione speciale che l’agente prende sulla base di diversi criteri e controlli. Questo protegge la sua autonomia cognitiva.
Controllo sui Beliefs

Non bisogna confondere la sensibilità all'influenza con la credulità, che rende invece l’agente totalmente vulnerabile: se un l'agente crede ad ogni cosa, può essere indotto da altri a cambiare i propri beliefs, e di conseguenza l'adozione dei propri goals. Questo lo renderebbe molto vulnerabile, di conseguenza deve essere dotato di un meccanismo di valutazione dell'affidabilità delle fonti e di un criterio per decidere se credere o meno a qualcosa.

  • L'agente valuta la coerenza con i beliefs precedenti e l'affidabilità della fonte informativa;
  • L'agente dà priorità ai beliefs dedotti grazie alla propria esperienza oppure ai propri ragionamenti (se ben supportati) rispetto a quelli provenienti da altri agenti;
  • L'agente tende a mantenere beliefs rilevanti per i propri goals e a scartare quelli che non sono rilevanti.
    (Castelfranchi, 1994)
Controllo sui Goals

L’autonomia nell’adozione dei goal è garantita da due postulati:

  • L'adozione di goal solo se interessanti per sè-stessi, dove per "interessanti" si intendono i goal subordinati ad uno o più dei goal iniziali, oppure goal che hanno maggior valore di quelli originali. Formalmente: Un agente goal-autonomo adotta un goal Q se e solo se ha almeno un altro goal P che il goal Q potrebbe aiutare a raggiungere;
  • Ogni modifica dei goals di un altro agente è ottenuta modificando i suoi beliefs. Bisogna però precisare che ciò non implica l'utilizzo della comunicazione, poichè un agente potrebbe modificare i beliefs di un altro suo pari modificando ad esempio la sua percezione della realtà (alterandone i sensi o modificando direttamente l'ambiente.)
    (Castelfranchi, 1994)

5.3 Esempi in JADE

Java Agent DEvelopment Framework (JADE) è un framework Java che supporta lo sviluppo di applicazioni distribuite basate sul paradigma di programmazione ad agenti, fornendo un insieme di servizi di base, conformi allo standard FIPA, necessari alla creazione e al mantenimento di un sistema multiagente.
(Wikipedia)

Questo framework è stato utilizzato per realizzare due scenari esemplificativi del concetto di autonomia motivazionale nei sistemi multiagente, al fine di valutarne la realizzabilità e gli aspetti chiave.
Occorre specificare che alcune caratteristiche avanzate degli agenti sociali, sebbene evidenziate dagli studi di Castelfranchi, non sono state considerate nel dettaglio all'interno dei progetti, data la loro complessità realizzativa. Altri aspetti implementativi, ritenuti poco interessanti nel contesto di autonomia sociale, sono stati oggetto di semplificazione/banalizzazione, al fine di focalizzare l'attenzione su quelli maggiormente interessanti.

Autonomia Esecutiva

Il primo esempio vuole rappresentare un sistema in cui vi sono agenti sociali dotati di sola autonomia esecutiva. Le tipologie di agenti presenti sono due:

  • SortingAgent, che ha come goal quello di ordinare un array di interi piuttosto lungo;
  • HelpingAgent, che ha come goal quello di aiutare un altro agente.
La peculiarità di entrambi i tipi di agente, è che sono sociali (si parlano, collaborano) ma hanno una forma molto ridotta di autonomia sociale; i goal iniziali non possono essere modificati perchè entrambi hanno uno scopo ben definito che non cambia durante il loro ciclo di vita.

SortingAgent.png

Tralasciando aspetti tecnici e realizzativi, è importante notare come l’autonomia dell’agente sociale SortingAgent sia limitata nello scegliere il metodo attraverso il quale risolvere il problema dell’ordinamento; in caso di presenza di un altro agente è in grado di distribuire l’algoritmo, mentre se è solo all’interno del sistema, può risolverlo in autonomia (con maggior sforzo).

HelpingAgent.png

Differentemente, l’HelpingAgent è in attesa di una richiesta di aiuto. Una volta ricevuta la richiesta, si comporta come un mero esecutore di lavoro. Citando l'esempio del robot che Castelfranchi porta per l'economia esecutiva: "la sua autonomia si limita alla scelta dei mezzi attraverso i quali completare il lavoro (ovvero la scelta tra i diversi algoritmi) ma non al fine ultimo."

Entrambi gli agenti sono implementati come macchine a stati finiti, in cui su ogni stato viene utilizzato un behaviour differente.

Queste piccole parti di codice sono gli unici punti in cui si nota l’autonomia esecutiva.
L'autonomia esecutiva del SortingAgent si ha nel momento in cui termina il behaviour di richiesta aiuto, e deve decidere, sulla base delle risposte ottenute, verso quale stato muoversi scegliendo tra l’esecuzione dell’algoritmo in modo distribuito o sequenziale:

private class AskForHelpBehaviour extends OneShotBehaviour {

@Override public void action() { //… //asks for help //… }

@Override public int onEnd() { if (_helpingAgent != null) return 1; //I will cooperate with another agent else return 0; //I will do it on my own } }

Per quanto riguarda l’HelpingAgent, è autonomo nel momento in cui deve scegliere, sulla base di alcune sue considerazioni interne, l'algoritmo attraverso il quale completare l’ordinamento:

private class WaitJobBehaviour extends OneShotBehaviour {

@Override public void action() {

ACLMessage jobMessage = myAgent.blockingReceive(_mt); try { int[] array = (int[]) jobMessage.getContentObject();

switch(chooseAlgorithm()){ case 0: Sort.qsort(array, 0, array.length -1, -1); break; case 1: Sort.msort(); break; case 2: Sort.ssort(); break; }

… }

...

}

Quello che emerge da questo esempio è che il concetto "Castelfranchiano" di autonomia esecutiva, si mappa piuttosto semplicemente su un comune agente software Jade, in quanto molto limitata. Gli agenti possono essere in grado di scegliere in autonomia tra diverse opzioni interne per il raggiungimento del goal iniziale di cui sono dotati, ma non possono cambiarlo o aggiungerne dei nuovi. Proprio per questo, gli agenti che abbiamo progettato non sono "general purpose" ma "special purpose", e l'unica vera complessità risiede nel renderli in grado di comunicare e collaborare.

Autonomia Motivazionale

Il secondo esempio è sicuramente più complesso e interessante e prende in esame il caso di autonomia motivazionale in un semplice MAS.

All’interno di questo sistema c’è un solo tipo di agente sociale, che presenta le seguenti caratteristiche:

  • ha un certo quantitativo di lavoro da svolgere, espresso in millisecondi;
  • ha un certo grado di benevolenza (0.5 – 1.5);
  • ha la capacità di lavorare in maniera continuativa per una quantità di tempo ben definita, prima di doversi obbligatoriamente riposare;
  • ha una struttura di memoria interna in cui valuta il comportamento sociale degli altri agenti presenti nel sistema e ne tiene traccia;
  • il suo goal iniziale è quello di portare a termine il proprio lavoro;
  • può chiedere aiuto e distribuire a un altro agente “aiutante” parte del proprio lavoro;
  • può aiutare un altro agente, prendendo in carico parte del suo lavoro.
Anche in questo caso, l’agente è ottenuto tramite una macchina a stati finiti, in cui ogni stato rappresenta un diverso Behaviour.
SocialAgent.png

Come è possibile notare dal diagramma degli stati, il comportamento dell’agente è piuttosto complesso, soprattutto a causa del fatto che la stessa tipologia di agente può ricoprire più ruoli nel contesto sociale (agente lavoratore, agente aiutante, etc) ed è quindi complesso gestire le interazioni e la coordinazione tra le singole istanze di agente sociale.

I quattro stati principali dell'agente sono:

  • Working;
  • Relaxing;
  • Helping;
  • Selfish.
Possiamo definire questi behaviour come i quattro diversi comportamenti che l'agente assume per raggiungere un determinato goal:
  • Working, il goal è quello di portare a termine il proprio lavoro iniziale;
  • Relaxing, quando l'agente è stanco non può più lavorare (e portare a termine il proprio goal iniziale). Conseguentemente, necessita di riposare per un certo intervallo di tempo;
  • Helping, viene aggiunto il goal di aiutare un altro agente, perchè questo potrebbe garantire all'agente aiutante di ottenere, in un tempo minore, il proprio goal iniziale;
  • Selfish, l'agente diventa temporaneamente "egoista"; L'agente passa in questo stato quando è vicino alla conlcusione del proprio lavoro, il goal resta il medesimo, tuttavia vengono momentaneamente ignorate le richieste finchè l'agente non avrà definitivamente terminato;
Gli altri stati (behaviour) in cui l'agente può capitare sono in realtà stati necessari per gestire la coordinazione tra i vari agenti nello scambio di richieste di aiuto/risposte. Come si evince dal diagramma, lo stato "centrale" in cui l'agente transita con maggior frequenza è quello in cui risponde alle richieste di aiuto, questo perchè i SocialAgent(s) danno per scontato che vi sia sempre una risposta (da parte di tutti gli altri agenti) alle proprie richieste.

L’aspetto maggiormente rilevante ai fini del progetto è senza dubbio relativo alla piena autonomia nella gestione delle relazioni sociali con gli altri agenti: un agente X, sulla base di scelte razionali, può decidere se accettare o meno la richiesta di aiuto di un agente Y, modificando in maniera implicita il proprio stato interno (Goal).

Il meccanismo alla base della scelta di X è piuttosto semplice, e si basa sui seguenti parametri:

  • L’opinione che X ha rispetto ad Y;
  • Il quantitativo di lavoro residuo di X;
  • Il quantitativo di lavoro richiesto da Y;
  • Il grado di benevolenza di X;
  • Il fatto che X sia effettivamente disponibile e non sia già impegnato.
Quando X riceve la richiesta di aiuto da parte di Y, vi associa un costo:
  • Sulla base della quantità di aiuto richiesto;
  • Sulla base della propria benevolenza;
  • Sulla base dell'opinione che ha di Y.
private double processHelpRequest(String agent, int amount) {
    Integer ranking = _rank.get(agent);
    // If i don't know the agent ranking, i just set it as sufficient
    if (ranking == null) {
        ranking = 6;
        _rank.put(agent, ranking);
    }

// high ranking --> > probability to be helped if (ranking > 0) { return (amount * 6) / (ranking * BENEVOLENCE); } else { return Double.MAX_VALUE; } }

Questo calcolo del punteggio viene eseguito per tutte le richieste di aiuto presenti nella mailbox dell'agente X, che vengono poi ordinate in modo crescente. Una volta completato l'ordinamento, X effettua un’ulteriore considerazione, prima di scegliere se accettare la richiesta con costo minore:

    if(!busy && 
           ((_myJob == 0 && processedRequest.getPoints() != Double.MAX_VALUE)
  	     ||
  	   (processedRequest.getPoints() < (_myJob/2)))
    ){
  	 //Accetto di aiutare
    }else if (_helpedAgent != null && 				 
                  _helpedAgent.getName().equals(processedRequest.getRequest().getSender().getName())
    ){
         //Lo informo che lo sto già aiutando
    }else {
         //Rifiuto di aiutare
    }

Ricapitolando, la prima richiesta viene accettata solo se:

  • X Non sta già aiutando qualcun altro (!busy);
  • X ha terminato il proprio lavoro e il ranking di Y > 0 (processedRequest.getPoints() != Double.MAX_VALUE);
  • oppure Y richiede una quantità di lavoro inferiore alla metà del lavoro residuo di X.
L’ultima condizione può sembrare paradossale, ma in realtà è molto importante: X accetta non solo quando non è impegnato, ma anche quando è molto impegnato! Il motivo va ricercato nel fatto che accettando la richiesta di aiuto di Y, condiziona positivamente l’opinione di Y nei suoi confronti dimostrando collaborazione, quindi Y sarà sicuramente più propenso ad aiutarlo in futuro. Considerato il fatto che X ha ancora molto lavoro da svolgere, l’aiuto di Y potrà rivelarsi prezioso.

Tutte le altre richieste sono esplicitamente rifiutate, tranne la richiesta di un eventuale agente Y che X sta già aiutando. Questo piccolo accorgimento si è reso necessario considerando il fatto che ogni agente sociale migliora la propria opinione degli agenti quando la risposta a una richiesta di aiuto è positiva, mentre la abbassa quando la risposta è negativa. A causa di ciò, nel caso l'agente X fosse già impegnato nell'aiutare l'agente Y, e l'agente Y mandasse una nuova richiesta di aiuto ad X, si verificherebbe una strana condizione nella quale X non potrebbe accettare la nuova richiesta (perchè già impegnato nell'aiutare Y) e Y, conseguentemente, ne abbasserebbe il ranking… paradossale! Il problema è stato risolto con l'agente X che non rifiuta in modo esplicito la richiesta di Y, ma lo informa del fatto che lo sta già aiutando. L'agente Y, così facendo, non abbassa il ranking di X.

Questo modello per la razionalità è sicuramente molto semplice, ma efficace. Nonostante il fatto che Jade non espliciti un'architettura BDI e la conseguente mancata implementazione del meccanismo a doppio filtro per il nostro agente sociale, siamo riusciti ad ottenere empiricamente dei dati piuttosto rilevanti.

Si considerino questi tre scenari:

  1. MAS composto da 3 agenti sociali con Benevolenza = 0.5;
  2. MAS composto da 3 agenti sociali con Benevolenza = 1.5;
  3. MAS composto da 3 agenti sociali con Benevolenza = 1;
Supponendo un carico di lavoro distribuito tra i 3 agenti pari a 300 secondi, il tempo che i 3 agenti impiegano per completare il lavoro totale nel sistema è, rispettivamente:
  1. 124 secondi;
  2. 110 secondi;
  3. 102 secondi;
Come si può evincere dai risultati, una benevolenza equilibrata, che non incide eccessivamente sulla scelta razionale, consente di ottenere i risultati migliori dal punto di vista della distribuzione del lavoro. Altrettanto chiaro è che un sistema composto da agenti eccessivamente egoisti (basso grado di benevolenza, non collaborativi) fornisce risultati peggiori se confrontato con un sistema composto da agenti molto altruisti che, nonostante non ottimizzino sempre le scelte, sono comunque in grado di collaborare.

6. Altre forme di autonomia

In questa sezione presenteremo altre forme di autonomia secondo il cosiddetto modello a "vocali". Tale modello distingue 5 componenti in grado di caratterizzare un MAS (Carabelea, 2004):

  • Agents;
  • Environment;
  • Interaction;
  • Organization;
  • User.
Ognuno di questi elementi definisce una serie di vincoli che l'agente dovrà rispettare al fine di comportarsi in maniera adeguata all'interno del sistema. Per ciascuno di essi identifichiamo un tipo differente di autonomia: l'autonomia rispetto all'ambiente (E-Autonomy) e l'autonomia sociale (I-Autonomy) sono state trattate ampiamente nei capitoli X e Y e hanno rivestito un ruolo centrale nello studio di Castelfranchi. Tuttavia, per maggiore completezza, riteniamo opportuno classificare anche i restanti tipi di autonomia.

6.1 Autonomia rispetto all'utente (U-Autonomy)

In gran parte dei casi di studio l'agente è un "assistente personale" dell'utente: lo aiuta nella scelta dei comportamenti oppure decide quale compito, piano o azione eseguire successivamente. Questa decisione può essere personale o può essere frutto di una richiesta all'utente stesso; questo "scambio di controllo" da e verso l'utente è definito in (Tambe, 2002) come "autonomia regolabile". La definizione più ricorrente per questo tipo di autonomia è che "un agente è autonomo rispetto all'utente nel caso in cui la scelta di un'azione possa essere fatta senza l'intervento dell'utente"; per questo motivo si può affermare che un agente gode di autonomia regolabile se, qualche volta, passa il controllo delle sue azioni all'utente.

6.2 Autonomia rispetto alle norme (O-Autonomy)

È comunemente accettato che l'uso di autonomia introduca un grado di non-determinismo nel comportamento del sistema, almeno fino a quando la risposta di un agente autonomo non è nota a priori. Una soluzione a riguardo potrebbe essere l'introduzione di leggi sociali, convenzioni o strutture organizzative con il fine di restringere l'autonomia degli agenti. Questi costrutti vengono definiti "norme": nel caso esse siano presenti l'agente dovrà essere in grado di riconoscerle e di ragionare su di loro. Un agente è definito autonomo rispetto ad una norma se è in grado di violarla. Questa forma di autonomia è estremamente problematica: è difficile formalizzare norme in modo che esse permettano una razionalizzazione da parte degli agenti e un eccesso di autonomia può portare a vere e proprie forme di "ribellione".

6.3 Autonomia rispetto a sé stessi (A-Autonomy)

L'autonomia è generalmente vista come la proprietà che permette ad un agente di esercitare un controllo locale sul proprio comportamento, cioè esso non può essere imposto da una fonte esterna (ambiente, utente, altro agente, una norma). Questa forma di autonomia può essere interpretata come la proprietà che permette ad un agente di aver e poter scegliere tra differenti possibili comportamenti. Tutti gli agenti sono implicitamente dotati di questa autonomia in quanto consente la possibilità di adattare il proprio modo di agire a seconda delle differenti situazioni; infatti è questo tipo di autonomia che assicura la possibilità di godere di altre tipologie di autonomia: se un agente avesse un solo comportamento non avrebbe senso parlare della sua capacità di rifiutare l'imposizione da parte di una fonte esterna.

7. Conclusioni

Il lavoro di Cristiano Castelfranchi, per quanto riguarda i multi-agent systems, è senza dubbio fondamentale nello studio dei concetti di autonomia e goal oriented behaviours. La profonda analisi di gran parte delle diverse forme di Autonomia Sociale e Autonomia rispetto all'Ambiente, può essere sfruttata nella realizzazione di sistemi multi-agente in cui si voglia dare molta importanza alle dimensioni di interazione sociale e, ovviamente, di autonomia, al fine di comprenderne (e considerare) in fase di progettazione le criticità e caratteristiche fondamentali.

Una schematizzazione delle forme di autonomia considerate in questo lavoro è la seguente, in cui si enfatizzano con colore verde quelle analizzate.

Autonomy.png

Relativamente alla realizzazione degli esempi e confrontando le due tecnologie agent oriented utilizzate, possiamo fare alcune valutazioni sommarie:

  • Jason, appoggiandosi su un'architettura esplicita di agente BDI, si presta in modo più naturale ai concetti analizzati. La progettazione quindi risulta più intuitiva, nonostante la sintassi del linguaggio sia prolog-based;
  • Jade, diversamente, è un framework totalmente basato su Java, in cui gli agenti hanno un'architettura Behaviour-oriented. Questa caratteristica, per sua natura, rende sostanzialmente diversa la gestione dello stato interno, perchè Beliefs, Goals e Intentions sono impliciti nei vari comportamenti implementati per l'agente. Per questo motivo non sono state applicate agli agenti sociali realizzati tutte le caratteristiche che Castelfranchi utilizza per descriverne il comportamento, come ad esempio l'architettura a doppio filtro per il controllo su Goals e Beliefs, perchè sarebbe stato necessario implementare un middleware per estendere gli agenti Jade.

8. Bibliografia

Wooldridge, Michael and Jennings, Nicholas R. (1995)
Intelligent Agents: Theory and Practice Knowledge Engineering Review, 10(2):115-152

Castelfranchi, Cristiano. (1994)
Guarantees for autonomy in cognitive agent architecture In Wooldridge, M. J. and Jennings, N. R., editors, Intelligent Agents, volume 890 of Lecture Notes in Computer Science, pages 56-70. Springer Berlin Heidelberg. ECAI-94 Workshop on Agent Theories, Architectures, and Languages (ATAL) Amsterdam, The Netherlands 8-9 August 1994. Proceedings.

Castelfranchi, Cristiano and Falcone, Rino (2003)
From Automaticity to Autonomy: The Frontier of Artificial Agents In Henry Hexmoor, Cristiano Castelfranchi, Rino Falcone, editors Agent Autonomy Multiagent Systems, Artificial Societies, and Simulated Organizations Volume 7, 2003, pages 103-136. Springer US;

Bordini, Rafael H. and Hübner, Jomi Fred and Wooldridge, Michael (2007)
Programming Multi-Agent Systems in AgentSpeak using Jason John Wiley & Sons, 2007, 292 pages.

Genesereth, Michael R. and Ketchpel, Steven P. (1994)
Software Agents Communications of the ACM, volume 37, 1994, pages 48-53.

Carabelea, Cosmin and Boissier, Olivier and Florea, Adina (2004)
Autonomy in Multi-agent Systems: A Classification Attempt In Nickles, Matthias and Rovatsos, Michael and Weiss, Gerhard Agents and Computational Autonomy: Potential, Risks, and Solutions, 2004, pages 103-113.