Torna alla Home Page del corsoPrecedente
BLACKBOX
Documentazione del Programma
 
Blackbox è un pianificatore che elabora problemi di pianificazione specificati nel linguaggio STRIPS. Esso utilizza GraphPlan per trovare una soluzione e se questa non viene trovata in un tempo accettabile (o definito dai parametri in input), converte il Planning Graph in forma CNF (forma normale congiuntiva) e, per trovare la soluzione, utilizza uno o più motori di ricerca tra i più noti: SatZ, Walksat, Relsat, Compact. Il nome 'blackbox' deriva dal fatto che il generatore del piano non vede e non si preoccupa del motore con il quale il piano stesso verrà risolto, e viceversa: l'uno é una 'scatola nera', una 'blackbox' per l'altro. L'utente che utilizza blackbox ha a disposizione tutta una serie di comandi e opzioni che permettono di modificare i parametri per ogni singolo motore di ricerca, di limitare il lavoro di un singolo motore ad un tempo predefinito per passare poi al motore successivo, ecc.. All'interno di questa pagina è possibile trovare anche esempi esplicativi di utilizzo di blackbox.



 
Come installare Blackbox

Il file contenente le sorgenti di Blackbox, attualmente giunto alla versione 3.4, é scaricabile dalla seguente pagina di Internet: 

    http://www.research.att.com/~kautz/blackbox/index.html

Una volta ottenuto il file, eseguire i seguenti comandi:

    uudecode blackbox3_4_tar_Z.uu
    uncompress blackbox3.4.tar.Z 
    tar -xvfo blackbox3.4.tar

per decomprimere il file. Verrà creata la apposita cartella che contiene i files sorgenti da compilare e i files di esempio. Per compilare eseguire: 

    cd blackbox-ver3.4 
    make

Nella cartella ci sarà ora il file eseguibile 'blackbox'. 


Come utilizzare Blackbox

Nella sottocartella Examples é contenuta una serie di problemi classici già specificati nel linguaggio PDDL (Planning Domain Definition Language), un linguaggio conforme a STRIPS utilizzato per dare l'input a Blackbox.
Sono presenti, tra gli altri, Rocket_a, Rocket_b, Logistic_a, Logistic_b, Logistic_c, Logistic_d.
Per analizzare un problema con Blackbox è innanzitutto indispensabile specificare, sulla linea di comando, i files da cui prendere gli operatori e i fatti del problema stesso. Per esempio:

    blackbox –o domain.pddl –f prob004-log-a.pddl

In aggiunta a questi può essere utile, per ottenere risultati personalizzati o per migliorare le prestazioni, specificare altre opzioni e parametri: ne segue la lista completa. 

-o <op file>     per specificare il file degli operatori (per esempio '-o domain.pddl') 
-f <fact file>   per specificare il file dei fatti (per esempio '-f prob004-log-a.pddl')
-g <output file> per specificare il file dove scrivere la soluzione al problema e gli output desiderati
-t <integer>     per specificare un numero fissato di livelli a cui espandere il grafo del piano.
-i <info level>  per specificare che dettaglio d'informazione si vuole prodotto durante l'esecuzione(0 di default, 1 o 2)
-n          vengono implicitamente aggiunti al piano fatti negativi
-printlit   stampa wff (le proposizioni booleane) in forma letterale
-printcnf   stampa wff in forma proposizionale (.cnf)
-printmap   stampa la corrispondenza tra la forma letterale e le proposizioni
-printmodel stampa il modello restituito dal risolutore
-printexit  esce dal programma dopo aver stampato il wff
-nopretty   stampa il piano della soluzione in notazione letterale invece che in notazione LISP
-h          per ottenere l'help
-M <integer>      numero massimo di nodi per ogni livello del grafico (default 2048)
-maxfail <integer> ferma se il pianificatore fallisce N volte nella ricerca della soluzione (default 4)
-maxtimeout <int>  ferma se il pianificatore va in timeout N volte durante la ricerca (default 8)
-maxauto <integer> ferma quando il piano ha raggiunto lunghezza N (default 50)
-noexcl           genera solamente un minimo insieme di fatti mutuamente esclusivi
-axioms <integer>  default (7), compressed (31), expanded (63), action (129).
-solver <SPEC> {-then <SPEC>}*  sequenza di risolutori: deve essere l’ultimo argomento!

Per <SPEC> posso avere:

<SPEC>{-maxit N}{-maxsec F}<COMMAND>{opzioni specifiche di 'solver'} 

<COMMAND> graphplan || satz || walksat || relsat || compact
-maxsec F  Esegue il risolutore solo per F secondi
-maxit N   Esegue il risolutore solo per N iterazioni (flips, backtracks o recursions)

Se maxsec o maxit non vengono specificati, verrà utilizzato il valore settato più recentemente.
Di default viene assegnato il valore 0, che corrisponde a non mettere limiti.
 

Seguono le opzioni per ogni singolo risolutore, ottenibili anche con il comando

    blackbox -help -solver <COMMAND>
 

Opzioni di GraphPlan

-O <lista di opzioni> dove
I = analizza fatti irrilevanti 
L = il più basso limite di tempo richiesto per il calcolo dei passi 
B = costruisce fino ai Goals 
E = non agisce sulle mutue esclusioni (per il testing) 
S = esamina i sottoinsiemi 
 

Opzioni di SatZ (satz-rand)

-seed N     inizializza a N il seme per la funzione random 
-cutoff N   ferma la ricerca dopo N backtracks, e, se possibile, riparte 
-restart N  riparte fino a N volte o fino a quando viene trovata la soluzione 
-numsol N   continua a provare finché il problema è stato risolto N volte (default 1) 
-noise F    disturba la scelta delle variabili euristiche per aumentare la casualità prima di ripartire: 1.0 = random, 0.0 =senza noise; default = 0.4 se restart > 1, altrimenti default = 0.0 
-nofirstk   non crea espansioni solo su operatori variabili 
 

Opzioni di Walksat

-seed N -cutoff N
-restart N     (come -tries N
-noise F       (quando0.0 <= F <= 1.0) 
-noise N M     (come -noise N/M
-noise N       (dove N > 1, come -noise N/100
-numsol N      si ferma dopo aver trovato N soluzioni 
-init FILE     inizializza le variabili non incluse in FILE come false 
-target N      (ferma se trova N clausole non soddisfatte) 
-partial FILE  inizializza random le variabili non incluse in FILE 

Heuristics:
-random -best -tabu N -novelty -rnovelty
-noise N or -noise N M (default M = 100) 

Printing: 
-hamming TARGET_FILE DATA_FILE SAMPLE_FREQUENCY 
-trace N  stampa le statistiche ogni N flips 
-assign N stampa gli assegnamenti ai flip N, 2N, ... 
-sol      stampa gli assegnamenti che soddisfano i goal (le soluzioni) 
-low      stampa la soluzione più breve 
-bad      stampa le clausole non soddisfatte 
-tail N   assume l’inizio della coda a nvars*N 
-solcnf   stampa gli assegnamenti che soddisfano le clausole in formato CNF ed esci 
-sample N mostra il livello di noise ogni N flips 
 

Opzioni di Compact

compact -l (unary) -b (binary) -s (singleton) -p (pure) -d (dump)
        -i N (binary iteration limit, default 2)
 

Opzioni di RelSat 

-seed N       inizializza a N il seme per la funzione random 
-numsol N     si ferma quando il problema viene risolto N volte. Default = 1. 
-nosol        quando selezionato, non produce in uscita il piano della soluzione (se trovata). 
-maxbt N      concludi la prova dopo N backtracks. N=0 non esegue backtracks. Default = 1000000 
-trials N     prova a risolvere la formula N volte 

-learnorder N lunghezza massima delle clausole che devono essere 'permanentemente' acquisite durante la prova.Ognuna di esse corrisponde a un punto di backtrack e viene derivato dall’originale wff. Default = 3 

-norelevance se selezionato, non esegue la limitazione dell’ordine sull’acquisizione delle clausole.Altrimenti, i punti di backtrack che corrispondono alle clausole derivate che sono più lunghe del 'learnorder' vengono temporaneamente aggiunte al wff fino a che i backtrack variano l’assegnamento delle altre variabili nelle clausole. Vedi '-dump

-dump         se selezionato, le clausole acquisite vengono messe su due files in output.Se il wff in input ha nome FOO.cnf, questi files saranno nominati FOO-perm.f e FOO-temp.f, rispettivamente per le clausole size-bounded e relevance-bounded .Se vengono eseguite più prove, le clausoler vengono aggiunte agli stessi file, pertanto potrebbero esistere poi dei duplicati. Le clausole vengono stampate una per linea, con *no* trailing 0. 

-fudge N A B  Il fudge-factors viene utilizzato per 'degradare' la scelta delle variabili euristiche. Nel primo passo della scelta della variabile di branch (ramo da percorrere), ad ogni variabile viene assegnato un valorepari al numero delle volte che appare nelle clausole binarie.Oltre le N variabili che sono entro le A volte, viene scelto il miglior valore. Quindi, ad ognuna di queste N variabili viene riassegnato un valore da quante singole propagazioni vengono attuate se la variabile è settata. Durante questo passaggio, se si scopre che un particolare valore assegnato alla variabile porta ad una inconsistenza, allora viene immediatamente scelto.Altrimenti, per l’insieme di tutte le variabili che sono state riassegnate e che sono entro le B volte,viene determinato il miglior valore di riassegnamento e viene scelta a caso una variabile da questo insieme. Default = 10 .8 .9 

Torna a capo


Esempi di utilizzo di Blackbox



1)
blackbox -o foo.ops -f bar.facts -solver -maxsec 10 graphplan -then -maxsec 0 satz 

Esegue graphplan per 10 secondi, quindi satz per un tempo illimitato. 

2)
blackbox -o foo.ops -t 8 -f bar.facts -solver -maxit 100 graphplan -then satz

Lavora solo su piani di lunghezza 8. Esegue graphplan fino a 100 ricorsioni, quindi satz fino a 100 backtracks. 

3)
blackbox -o foo.ops -f bar.facts -solver -maxsec 100 satz -cutoff 20 -restart 40

Esegue satz per 100 secondi.Quando raggiunge i 20 backtracks, riavvia Satz: ripete il tutto 40 volte. Se viene specificato un valore per il riavvio di Satz, viene automaticamente introdotto un valore di noise a 0.4 nella scelta euristica 

4)
blackbox -o foo.ops -f bar.facts -solver -maxit 100 satz -cutoff 20 -restart 40

Esegue Satz per un totale di 100 backtracks.Il pianificatore viene riavviato ogni 20 backtracks: l'opzionerestart 40 non verrà sfruttata, poiché il limite di 40 non potrá mai essere raggiunto: la linea di comando é dunque equivalente alla seguente: 
blackbox -o foo.ops -f bar.facts -solver satz -cutoff 20 -restart 5

5)
blackbox -o foo.ops -f bar.facts -solver walksat -seed 123 -noise 0.4 -numsol 10 -restart 100

Inizializza il seme per la funzione random di walksat a 123, ed esegue il pianificatore per 100 riavvii con un livello di noise pari a 0.4. Continua a lavorare finché il problema viene risolto 10 volte (per ottenere una stima più accurata della durata media del tempo di ricerca).

Torna a capo

Precedente