Torna alla Home Page del corsoPrecedente
IPP 3.3
Documentazione del Programma
Esistono in rete diversi programmi di pianificazione che funzionano basandosi sui concetti teorici di Graphplan e che, analizzando la quadrupla P(D,I,G,O), forniscono in uscita la pianificazione di tutte le azioni da eseguire per risolvere P dove D indica il dominio, I i fatti iniziali, G lo stato goal e O l'insieme degli operatori del problema. Vediamo quindi come funziona uno di questi , il pianificatore IPP versione 3.3 (Albert Ludwigs University Freiburg, Institute of Computer Science), attraverso i principali parametri d'ingresso che devo fornire al programma.
Primi per ordine di importanza sono -o e -f che servono per indicare al pianificatore quali sono i files in cui sono contenuti gli operatori e i fatti (c'è anche un parametro –p che serve per specificare il path di questi files):

    ipp -o operators -f facts -p path

È importante notare che i files di specifica degli operatori e dei fatti (che dopo analizzeremo in dettaglio) hanno come estensione caratteristica, rispettivamente, .ops e .fct anche se questo non deve essere specificata perché viene aggiunta automaticamente durante l'esecuzione. 

Analizziamo ora la sintassi per specificare i fatti e gli operatori del mio problema commentando i files tratti dal dominio del mondo dei razzi Rocketsworld. 

    Rocket.ops 'File degli operatori'

 
Load ------------> 'nome che chiarisce la funzione dell'operatore (Carica l'oggetto cargo nel razzo da trasporto rocket entrambi situati a place)'
:v 'object cargo 'rocket rocket 'place place ------------> 'specifica degli oggetti o variabili su cui agisce l'operatore Struttura: 'nome_oggetto tipo_oggetto'
:p at('rocket 'place) at('object 'place)
------------>
'precondizioni sotto le quali l'operatore può essere applicato cioè applico l'operatore se e solo se nel planning graph sono presenti questi fatti al suo stesso livello'
:e ADD in('object 'rocket)
------------>
'effetto additivo: aggiunge al grafo il fatto specificato'
DEL at('object 'place)
------------>
'effetto cancellante: indica nel grafo che il fatto specificato non è più vero'
Unload
------------>
'altro operatore (Scarica a place l'oggetto cargo del razzo rocket)'
:v 'object cargo 'rocket rocket 'place place
:p at('rocket 'place) in('object 'rocket)
:e ADD at('object 'place)
DEL in('object 'rocket).

 
È bene ricordare che l'operatore speciale NO-OP non deve essere aggiunto in questi files perché il pianificatore lo utilizza comunque.

    Rocket_a.fct 'File dei fatti' 

'Questa prima parte specifica di quali oggetti (e a quale tipo appartengono) è composto il mio mondo o dominio' 


 
place: london paris jfk bos;
 ------------>
'tipo: oggetto oggetto ….;'
rocket: r1 r2;
 ------------>
'r1 e r2 sono 2 oggetti di tipo rocket'
cargo: mxf avrim alex jason pencil paper april michelle betty lisa;

 
'La seconda parte specifica della situazione iniziale I attraverso la lista dei fatti veri in quel momento'

initial: at(r1 jfk)
at(r2 bos) 
has-fuel(r1) 
has-fuel(r2) 
at(mxf paris) at(avrim paris)at(alex paris)at(jason jfk) 
at(pencil london) at(paper london)at(michelle london) 
at(april london) at(betty london) at(lisa london); 

'specifica lo stato goal che deve essere raggiunto dalla situazione iniziale applicando una sequenza di operatori' 

goal:at(mxf bos) at(avrim jfk) at(pencil bos) at(alex jfk) 
at(april bos) at(lisa paris) at(michelle jfk) at(jason bos) 
at(paper paris) at(betty jfk); 

Un altro importante parametro è -m MAX che indica al programma il numero massimo di operatori possibili per ogni livello del grafico. MAX è la quantità di
memoria da allocare per la gestione degli operatori del dominio in analisi.
Come regola pratica di utilizzo, si lancia il programma senza utilizzare questo parametro (che è per default a impostato a 256) e poi se Ipp restituisce il
segnale di errore “ipp: too many operators. increase max_nodes” nei successivi lanci del programma specificherò il parametro -m ad un valore tale da non avere più il messaggio di errore: 

ipp -o operators -f facts -p path -m 512 
ipp -o operators -f facts -p path -m 1024 

Passiamo ora ad argomenti d'ingresso non fondamentali in quando il programma per funzionare correttamente non necessita di essi, ma possono sempre essere utili per analisi approfondite del problema in questione: 

-i<num>: specifica l'output a video da restituire durante l'esecuzione di Ipp. 

    <num> è un intero da 0 a 6 che indica un grado crescente di informazioni da visualizzare (1 per default) 

   0: Informazioni sul tempo di CPU e sul numero delle azioni 
   1: Informazioni sul tempo di pianificazione(costruzione grafo e ricerca soluzione) e azioni del piano soluzione 
   2: Informazioni sulla percentuale di successo del memoizing 
   3: Informazioni sugli operatori caricati e i fatti 
   4: Informazioni sugli operatori istanziati 
   5: Informazioni su tutte le possibili istanziazioni degli operatori 
   6: Informazioni sull'inerzia rimossa 

-W: segnala a Ipp che alla fine dell'esecuzione deve creare 2 files contenenti il grafo completo del mio problema. Ipp restituisce graph.opers e graph.facts che contengono livello per livello tutti gli operatori e tutti i fatti del grafo. 

-n<string> : cambia il nome graphin<string> quando Ipp genera i files del grafo ( con -W) 

Manca ora un accenno sugli ultimi 5 parametri d'ingresso non necessari per l'uso di base del programma,la cui conoscenza approfondita, però, potrebbe senz'altro servire per l'ottimizzazione dei problemi di pianificazione: 

-t <num>: numero del livello minimo del graph 

-I: non rimuovere l'inerzia dal problema 

-h <num> : fornire un'euristica di ordinamento degli archi di collegamenti fra fatti e operatori 

-rr<num> : Rifo :rimuovere fatti e operatori irrilevanti 

-S: non fare il check sul memoizing 

Vediamo brevemente, per concludere, l'output che fornisce il programma, durante e alla fine della sua esecuzione.Le informazionifornite sono veramente molte, e grazie alla modalità di distribuzione di Ipp,vengono fornitenel Web le sorgentiin C da compilare, tante altre possono essere estratte modificando il codice del programma.La prima operazione che il pianificatore esegue è la costruzione del planning Graph,fornendo a video livello per livello il numero di fatti e delle coppie mutuamente esclusive: 

time:1,21 facts and30 exclusive pairs 
time:2,30 facts and120 exclusive pairs 
time:3,36 facts and189 exclusive pairs 
time:4,54 facts and612 exclusive pairs 
time:5,65 facts and837 exclusive pairs 
time:6, 100 facts and2508 exclusive pairs 
time:7, 108 facts and2234 exclusive pairs 
time:8, 142 facts and3859 exclusive pairs 
time:9, 144 facts and2632 exclusive pairs 
time:10, 144 facts and1692 exclusive pairs 
ipp: goals first reachable in 10 time steps 

L'ultima riga indica a che livello è stata raggiunta la prima situazione di goal G. Ora comincia la ricerca lungo il grafo costruito, caratterizzata da un numero variabile di backtracks, ossia tornare indietro ed eseguire una nuova scelta quando raggiungo un ramo che non porta a nessuna soluzione. A questo punto non resta che aspettare che il programma abbia trovato la soluzione e fornisca in uscita il piano delle azione necessarie per la corretta risoluzione del problema P fornito: 

ipp: found plan as follows 
time step0:move_r2_bos_paris 
move_r1_jfk_london 
time step1: load_avrim_r2_paris 
load_april_r1_london 
load_michelle_r1_london 
time step2: move_r2_paris_jfk 
move_r1_london_jfk 
time step3: unload_april_r1_jfk 
unload_michelle_r1_jfk 
unload_alex_r2_jfk 
time step4: move_r1_jfk_paris 
load_april_r2_jfk 
unload_avrim_r2_jfk 
time step5: unload_paper_r1_paris 
move_r2_jfk_bos 
time step6: unload_mxf_r2_bos 
unload_jason_r2_bos

Restano ora solo informazioni sui tempi impiegati per la creazione del grafico e per la ricerca della soluzione,sul numero di azioni provate dal pianificatore e sulla occupazione di memoria del programma: 

ipp: number of actions tried:1141981 
ipp: spent 0.31 seconds initial building graph 
ipp: spent 22.28 seconds searching for plan 
ipp: spent 22.59 seconds total time 
memory use for graph: 8747.5 Kbytes 
memory use for memoizing: 12774.9 Kbytes

Una breve nota per segnalare che esiste, disponibile in rete, un visualizzatore grafico del piano trovato, XGV (fornito come sorgente o eseguibile per ambiente X di Unix), per averne una visione più chiara e per comprendere a fondo il funzionamento di Ipp

Precedente