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
:-
['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.