ALIAS (Abductive LogIc Agent SiStem)

 

ALIAS è un sistema ad agenti intelligenti. Ogni agente ha capacità abduttive e deduttive e può lavorare singolarmente o interagire con altri. Il comportamento locale è gestito dal metainterprete ARM (Abductive Reasoning Module), mentre l'interazione gli altri dal metainterprete ABM (Agent Behavior Module). Ogni agente avrà inoltre una propria base di conoscenza.

 

I file relativi sono:

ABM-interpreter.pro: prima parte del metainterprete ABM. Con backtracking.

ABM-interpreterPar.pro: come ABM-interpreter.pro ma con collaborazione e competizione in parallelo. Senza backtracking.

Consistency.pro: E' la seconda parte dell'ABM, che si occupa della derivazione di consistenza. Con backtracking.

ConsistencyPar.pro: come Consistency.pro ma la verifica di consistenza è parallela. Senza backtracking.

Kakas-mancarella.pro: metainterprete ABM realizzato con l'algoritmo di Kakas e Mancarella.

Kakas-mancarellaDelta.pro: variazione di Kakas-mancarella.pro con verifica globale dei delta.
Versione dell’algoritmo di Kakas-Mancarella nella quale per primi sono esplorati gli atomi dei vincoli presenti nel resto della lista da abdurre. Nella verifica di consistenza di un insieme di abdotti (delta) si richiede l'utilizzo dell'algoritmo per il down-reflection. Usando questa variante la consistenza dei delta è verificata in modo complessivo e non un atomo alla volta. Questo permette di ottenere un insieme minimo di atomi abdotti: se ad esempio devo controllare la consistenza del delta = [a, not(c)] ed ho il vincolo ic([a, b, c]), cercando di far fallire prima c che b ottengo deltaOut = [a, not(c)] invece che [a, not(b), not(c)].

 

Le basi di conoscenza fornite sono organizzate nel seguente modo:

Il file KB-dottore14.pro, ad esempio, indica la conoscenza dell'agente "dottore1" nell'esempio 4.

Il file KB-dottore35.pro, invece, indica la conoscenza dell'agente "dottore3" nell'esempio 5.

La base di conoscenza dell'agente contiene conoscenza relativa all'ARM, all'ABM e anche tutte le informazioni relative alla localizzazione, in termini di host e porta, degli agenti con i quali si può comunicare. Ogni agente può infatti trovarsi su una diversa macchina (individuata da un indirizzo IP) e comunicare attraverso una data porta. La rete che interconnette i singoli agenti deve supportare il protocollo TCP/IP.

 

Lo strumento utilizzato per implementare ALIAS è Jinni, un interprete Prolog scritto in Java.

Ogni agente ALIAS sarà creato mettendo in esecuzione uno di questi interpreti Prolog su una java virtual machine. Il comando usato sarà del tipo: 

java JinniMain

ed è già inserito nel file batch Jinni.bat. Per ogni agente che si vuole creare sarà necessario lanciare uno di questi file batch. Si otterranno così altrettante finestre di dialogo. Una volta attivato l'interprete Prolog, è possibile procedere al caricamento dei metainterpreti e delle basi di conoscenza di ARM e ABM con comandi Prolog del tipo:

:- ['Kakas-mancarella'].           Carica il metainterprete dell'ARM.                                  

:- ['ABM-interpreter'].              Carica la prima parte del metainterprete dell'ABM.

:- ['Consistency'].                     Carica la seconda parte del metainterprete dell'ABM .

:- ['KB-dottore13'].                  Carica la base di conoscenza dell'agente "dottore1" nell'esempio 3.

E' ora possibile avviare il metainterprete dell'ABM e metterlo in ricezione di eventuali query poste sulla blackboard. Questo tramite il comando:

:- start.

Per gli esempi forniti è possibile eseguire tutti questi comandi automaticamente, tramite i file Startxxx.pro. Successivamente si vedrà come.

 

Per interagire con l'agente si possono mettere sulla relativa blackboard, tramite out(), le query in linguaggio LAILA.  Le eventuali risposte si ricevono, oltre che a video, utilizzando  in().

Se si vuole ad esempio che l'agente A0 richieda, tramite una comunicazione ad A1, di risolvere il goal G, si dovrà fare:

out(laila_query('A0', ask('A1', G), []))

inserendo la query sulla blackboard di A0.

Una risposta si otterrà, oltre che a video, con:

in(answer('A0', ask('A1', G), [], Answer))

L'insieme vuoto [] indica che non ho abdotti iniziali per la query.

Anche se l'interazione avviene solo con l'ABM, sarà quest'ultimo che eventualmente chiamerà l'ARM.

 

Si possono anche utilizzare gli esempi forniti. Se si vuole provare l'esempio 4 dei 3 agenti-dottori si dovrà:

-  lanciare 3 volte Jinni.bat, una per ogni agente.

Nel prompt della prima finestra scrivere ['Startdot14'] + Invio. In quello della seconda ['Startdot24'] + Invio e in quello della terza ['Startdot34'] + Invio. In questo modo si carica tutto il necessario nei 3 agenti per provare l'esempio 4.

A questo punto è possibile inserire le query volute, ad esempio scrivendo sulla finestra di "dottore1"

bg(out(laila_query('dottore1',sintomi(febbre),[]))) + Invio

si inserirà la query sulla blackboard di questo agente. Il server in ascolto la intercetterà e la risolverà. Si usa bg() per mandare la richiesta in background. La risposta è sia fornita a video che inserita sulla blackboard. Per accedere a quest'ultima è necessaria una in() che metterà la soluzione in Answer:

bg(in(answer('dottore1',sintomi(febbre),[],Answer))) + Invio

E' anche possibile utilizzare le query di esempio, caricate con la conoscenza di ogni agente. In questo caso al prompt degli agenti inserire ad esempio:

km + Invio

Per vedere in dettaglio di che query si tratta basta accedere alla base di conoscenza dell'agente.

 

Per provare con le altre versioni dei 3 file principali:

ABM-interpreterPar.pro: come ABM-interpreter.pro ma con collaborazione e competizione in parallelo. Senza backtracking.

ConsistencyPar.pro: come Consistency.pro ma parallela. Senza backtracking.

Kakas-mancarellaDelta.pro: variazione di Kakas-mancarella.pro con verifica globale dei delta.

è sufficiente caricare queste al posto delle altre versioni.