Lab. Jason
Slide: file:///C:/UNI/Magistrale/ISE/Lab/ise-lab-jason.pdf
Indice
Obiettivo del Lab Jason
Definizione
Jason è una piattaforma per programmare sistemi multi-agente in AgentSpeak(L), un linguaggio orientato ad agenti BDI basato su credenze, obiettivi e piani.
Il laboratorio mostra come realizzare agenti intenzionali, cioè agenti che reagiscono a eventi, perseguono goal, mantengono credenze e interagiscono con altri agenti e con l’ambiente.
Nel corso non si segue l’installazione manuale classica di Jason. Si usa Gradle per rendere l’esecuzione riproducibile e si evita la dipendenza dal vecchio plugin Eclipse. Il repository principale degli esercizi è https://github.com/unibo-fc-isi-ise/code-jason.
Tip
Per ogni file
X.mas2j, Gradle definisce un task del tiporunXMas, che avvia il MAS corrispondente.
Struttura di un MAS Jason
Definizione
Un MAS Jason è descritto da un file
.mas2j, che specifica infrastruttura, agenti, file AgentSpeak e, se presente, ambiente.
Esempio minimale:
MAS helloworld {
infrastructure: Centralised
agents:
agent1 hello_agent;
aslSourcePath: "src/main/asl";
}Un file .asl contiene:
- credenze iniziali e regole;
- goal iniziali;
- piani che reagiscono a eventi.
Esempio “hello world”:
!start.
+!start : true <- .print("hello world").In pratica: il MAS definisce chi esiste; il file .asl definisce come ragiona e agisce ciascun agente.
Basi di AgentSpeak(L)
Goal Piani e Guardie
Definizione
Un piano Jason specifica come reagire a un evento, eventualmente solo quando una guardia logica è soddisfatta.
La forma generale è:
+!goal(Arg) : Condizione <- Azione1; Azione2; !SottoGoal.Concetti fondamentali:
!goalindica un achievement goal, cioè qualcosa da ottenere;?goalindica un test goal, cioè una richiesta di conoscenza;- la guardia dopo
:seleziona quando il piano è applicabile; - i piani sono scelti tramite unificazione logica;
;separa sottogoal e azioni, mentre.termina il piano.
Jason supporta ricorsione, while, for, if-then-else e gestione dei fallimenti. La ricorsione resta però il mattone concettuale per comportamenti lunghi.
Esempio
Un agente può contare ricorsivamente da 0 a 10 usando due piani: uno per il caso base e uno per il passo ricorsivo. Le guardie decidono quale piano è selezionabile.
Belief Base e Test Goals
Definizione
La belief base è l’insieme di credenze e regole logiche che l’agente usa per ragionare.
Le credenze possono essere aggiornate con operazioni come aggiunta, rimozione e aggiornamento atomico. I test goal interrogano la belief base o attivano piani specifici per ottenere informazione.
Un pattern ricorrente è usare la belief base come memoria. Nell’esercizio Fibonacci, ad esempio, si suggerisce di salvare valori già calcolati per evitare ricalcoli inefficienti.
Interazione tra Agenti
Definizione
L’interazione in Jason avviene tramite messaggi con forza illocutoria, cioè un’etichetta che specifica il significato pragmatico del messaggio.
Azioni interne principali:
.send/3e.send/5per messaggi punto-a-punto;.broadcast/2per inviare a tutti;.waitper sospendere un’intenzione fino a un evento, una query o un timeout.
Forze illocutorie importanti:
tell: il mittente vuole che il ricevente creda un fatto;untell: il mittente vuole rimuovere una credenza;achieve: il mittente chiede di perseguire un goal;askOneeaskAll: il mittente chiede risposte a query;tellHoweaskHow: scambio di piani.
Esempio
Nel ping-pong asincrono, un agente invia
ballcon.send(Receiver, tell, ball). Il ricevente vede una credenza annotata consource(Sender)e può rispondere con un altro messaggio.
Percezione e Attuazione
Definizione
In Jason, la percezione è gestita come aggiornamento automatico di credenze, mentre l’attuazione avviene tramite azioni che l’ambiente implementa.
I percetti hanno forma logica, ad esempio:
temperature(19.7)[source(percept)]Dal punto di vista dell’agente sono credenze normali. Dal punto di vista dell’ambiente, bisogna decidere quali percetti ogni agente può vedere e quando.
Le azioni sono termini nei piani, ad esempio spray_air(hot). Se l’ambiente riconosce l’azione, può eseguirla e produrre effetti; se non la riconosce o fallisce, il piano fallisce.
Esempio
Nel termostato, l’agente percepisce
temperature(T)e scegliespray_air(cold)ospray_air(hot)per mantenersi vicino a 20 gradi. Non serve un loop esplicito: i nuovi percetti generano nuovi eventi.
Esercizi Significativi
Gli esercizi coprono:
- programmazione pura AgentSpeak(L) con ricorsione e guardie;
- gestione dei fallimenti con piani
-!goal; - più intenzioni concorrenti nello stesso agente;
- messaggi asincroni, sincroni e request-response;
- broadcast e scoperta di agenti;
- ambienti custom in Java;
- scenario “Rescue the Lost Robot” con percezioni, vincoli di comunicazione, movimento e coordinate relative.
Punto Critico
Le intenzioni Jason non sono thread Java. Sono unità di esecuzione interne all’agente, schedulate in modo cooperativo. Questo evita una parte della complessità, ma richiede di ragionare bene su eventi, piani e interleaving.
Prossimi Argomenti
Continueremo con:
- STRIPS - planning simbolico in Prolog e rappresentazione di azioni con precondizioni ed effetti.
- Agent Explainability - spiegazione di comportamenti agentivi e intenzioni attribuite.
- About Lab - regole operative, esercizi e progetto finale.