intelligenza artificiale - dii.unisi.ittrentin/csp_costruttivi.pdf · si parte da uno stato privo...
TRANSCRIPT
Intelligenza ArtificialeIntelligenza Artificiale
Ing. Tiziano PapiniIng. Tiziano PapiniEmail: [email protected]
Web: http://www.dii.unisi.it/~papinit
Intelligenza Artificiale - CSP Tiziano Papini - 2011 2
Constraint SatisfactionConstraint Satisfactionmetodi costruttivimetodi costruttivi
Intelligenza Artificiale - CSP Tiziano Papini - 2011 3
Metodi Costruttivi
Si parte da uno stato privo di assegnamenti e si cerca di immettere valori senza violare i vincoli.
In questo caso si formalizza un CSP come un PS e si risolve attraverso tecniche di Search.
Stato: assegnamento di valori dal dominio Di a variabili Xi
X0: assegnamento vuoto {}
Successor function: un valore per ogni var non assegnata consistente con quelle già assegnate
Goal test: assegnamento completo senza violazione di vincoli Costo di cammino: costante per ogni step
Intelligenza Artificiale - CSP Tiziano Papini - 2011 4
Metodi Costruttivi – vantaggi
Commutatività del CSP: l’ordine degli assegnamenti è indifferente (non interessa il percorso), quindi:
Op: genera nodi da una sola variabile (qualsiasi) Non c’è bisogno di memorizzare il cammino Non c’è bisogno di calcolare il costo di cammino
La profondità dell’albero è finita e conosciuta: d = numero di variabili da assegnare Gli algoritmi depth-first sono i più usati
Le soluzioni proposte non violano i vincoli
Grosso problema: le grandi dimensioni che può assumere Di che definisce il branching factor
… e svantaggi
Intelligenza Artificiale - CSP Tiziano Papini - 2011 5
Backtracking Search
E’ una ricerca Depth-First (per problemi CSP) in cui si espande facendo assegnamenti ad una sola variabile per volta.
E’ l’algoritmo base per i CSP.
1. assignment = {}; 2. STACK.insert(assignment);3. do
if (STACK.isEmpty()) return failure;assignment = STACK.remove();if (complete(assignment)) return assignment;STACK.insertAll (expand(assignment));
while (true);
Intelligenza Artificiale - CSP Tiziano Papini - 2011 6
Backtracking - simulazione
Empty assignment
1st variable
2nd variable
3rd variable
Assignment = {}Assignment = {(X1=v11)}Assignment = {(X1=v11),(X2=v21)}Assignment = {(X1=v11),(X2=v21),(X3=v31)}Assignment = {(X1=v11),(X2=v21)}Assignment = {(X1=v11),(X2=v21),(X3=v32)}Assignment = {(X1=v11),(X2=v21)}Assignment = {(X1=v11)} Assignment = {(X1=v11),(X2=v22)}
Intelligenza Artificiale - CSP Tiziano Papini - 2011 8
Migliorare il backtracking (I)
Il framework CSP permette di ottenere euristiche generali problem-independent considerando il concetto di espansione.
Espandere vuol dire assegnare dei valori ad una variabile a scelta senza violare i vincoli.
La ricerca Depth-First semplice non è molto efficiente. (Come già visto in PS).
Nel PS si introduce un’informazione problem-specific (euristiche) per migliorare le prestazioni della ricerca.
Intelligenza Artificiale - CSP Tiziano Papini - 2011 9
Dal concetto di espansione:
La scelta della variabile da espandere è determinante!L’ordine d’inserimento dei valori nello STACK è determinante!
Le euristiche general-purpose del Constraint Programming rispondono quindi alle seguenti domande:
1. Quale variabile scegliere per l’espansione?2. In che ordine provare i valori?3. E’ possibile scoprire in anticipo dei fallimenti?
Migliorare il backtracking (II)
Intelligenza Artificiale - CSP Tiziano Papini - 2011 10
Scelta della Variabile (I)
Minimum Remaining Values (MRV) Heuristic:
Si sceglie la variabile con il minor numero di valori legali (non viola nessun vincolo) rimanenti.
MRV è anche detta: Most Constrained Variable Heuristic Fail First Heuristic Cheapest First Heuristic
Vantaggi: Riduce il branching factor (da cui cheapest first) Porta più facilmente ad un fallimento superficiale (da cui fail first) con
conseguente backtracking e quindi aiuta a potare l’albero.
Intelligenza Artificiale - CSP Tiziano Papini - 2011 11
Scelta della Variabile (II)
L’euristica del grado (o ”most constraining variable”) Heuristic:
In alcuni casi conviene scegliere la variabile coinvolta in più vincoli
Riduce il branching factor delle scelte future
Degree Heuristic ed è spesso associata a MRV (come un tie-breaker perchè è meno informativa di MRV).
Intelligenza Artificiale - CSP Tiziano Papini - 2011 12
Scelta del Valore
Least Constraining Value (LCV) Heuristic:
Preferisci i valori che lasciano il più grande sottoinsieme di valori legali per le variabili non assegnate (numero di scelte possibili rispetto alle variabili adiacenti).
E’ il criterio di ordinamento dell’espansione
L’euristica LCV può permettere di arrivare più in fretta ad una soluzione
Se una soluzione non c’è, o se ci serve trovarle tutte, l’euristica LCV non ha alcuna utilità;
L’idea è che si danno maggiori possibilità alla ricerca di trovare futuri assegnamenti legali.
Intelligenza Artificiale - CSP Tiziano Papini - 2011 13
Evitare i fallimenti
La LCV Heuristic richiede il controllo previo del numero di valori rimanenti per variabile.
Per fare questo si adotta il forward checking.
Il Forward checking può essere utilizzato contemporaneamente per anticipare i dead-end.
Per ogni variabile non-assegnata si tiene traccia del subset di valori ancora legali.
Ogni volta che v è assegnato a Xi: per ogni variabile non ass. Xj connessa a Xi da un vincolo si
cancella dal dominio Dj ogni valore inconsistente con v
Intelligenza Artificiale - CSP Tiziano Papini - 2011 14
E’ applicabile all’interno dell’algoritmo di backtracking come tecnica per stabilire quando tornare indietro.
Ogni volta che si raggiunge uno stato non-consistente (con almeno una variabile priva di valori rimasti node-consistency) si effettua il backtracking.
Forward Checking
Intelligenza Artificiale - CSP Tiziano Papini - 2011 15
WA NT Q NSW V SA T
RGB RGB RGB RGB RGB RGB RGB
TWA
NT
SA
Q
NSW
V
Forward Checking(es: colorazione grafo)
Nell’esempio nonvengono adottatele altre euristiche
Intelligenza Artificiale - CSP Tiziano Papini - 2011 16
WA NT Q NSW V SA T
RGB RGB RGB RGB RGB RGB RGB
R RGB RGB RGB RGB RGB RGB
TWA
NT
SA
Q
NSW
V
Forward checking rimuove il RED da NT e da SA
Forward Checking(es: colorazione grafo)
Nell’esempio nonvengono adottatele altre euristiche
Intelligenza Artificiale - CSP Tiziano Papini - 2011 17
WA NT Q NSW V SA T
RGB RGB RGB RGB RGB RGB RGB
R GB RGB RGB RGB GB RGB
R GB G RGB RGB GB RGB
TWA
NT
SA
Q
NSW
V
Forward Checking(es: colorazione grafo)
Nell’esempio nonvengono adottatele altre euristiche
Intelligenza Artificiale - CSP Tiziano Papini - 2011 18
WA NT Q NSW V SA T
RGB RGB RGB RGB RGB RGB RGB
R GB RGB RGB RGB GB RGB
R B G RB RGB B RGB
R B G RB B B RGB
TWA
NT
SA
Q
NSW
V
Forward Checking(es: colorazione grafo)
Nell’esempio nonvengono adottatele altre euristiche
Intelligenza Artificiale - CSP Tiziano Papini - 2011 19
WA NT Q NSW V SA T
RGB RGB RGB RGB RGB RGB RGB
R GB RGB RGB RGB GB RGB
R GB G RGB RG GB RGB
TWA
NT
SA
Q
NSW
V
Forward Checking(es: colorazione grafo)
Nell’esempio nonvengono adottatele altre euristiche
Intelligenza Artificiale - CSP Tiziano Papini - 2011 20
TWA
NT
SA
Q
NSW
V
Forward Checking(es: colorazione grafo)
WA NT Q NSW V SA T
RGB RGB RGB RGB RGB RGB RGB
R GB RGB RGB RGB GB RGB
R B G RB RGB B RGB
R B G RB G B RGB
TWA
NT
SA
Q
NSW
V
Nell’esempio nonvengono adottatele altre euristiche
Intelligenza Artificiale - CSP Tiziano Papini - 2011 21
Arc Consistency(Waltz, ’72)
Il metodo dell’arc-consistency usa un constraint graph orientato;
Un arco (X,Y ) è detto ‘consistente’ se per ogni valore legale di X esiste un valore legale di Y ;
L’idea dell’arco-consistenza è di far sì che ogni arco (orientato) nel grafo dei vincoli sia consistente;
Si procede per eliminazione dei valori che generano inconsistenze. Se si elimina un valore di una variabile X, occorre ricontrollare tutti gli archi (Y ,X);
L’arc consistency può essere usata o in fase di preprocessing, o dopo ciascuna assegnazione durante una ricerca incrementale.
Intelligenza Artificiale - CSP Tiziano Papini - 2011 22
Arc Consistency(Waltz, ’72)
Forward Checking stabilisce un criterio di stop, ma non prevede i fallimenti con anticipo.
In figura, per esempio, NT e SA sono entrambe Blu: nessuna soluzione è raggiungibile!
Arc-consistency: per evitare di dead-end ci dobbiamo assicurare che, per ogni vincolo, rimanga un insieme di valori assegnabili alle variabili vincolate.
Intelligenza Artificiale - CSP Tiziano Papini - 2011 23
Contraint Propagation
Arc-consistency può essere usato come controllo a supporto del backtracking dopo ogni assegnamento. Individua i dead-end prima di Forward Checking.
Contraint Propagation: L’approccio può però essere generalizzato facendo ripetutamente il controllo di arc-consistency, rimuovendo i valori che non la garantiscono.
Intelligenza Artificiale - CSP Tiziano Papini - 2011 25
Algoritmi di Arc Consistency
Invece di affrontare un CSP facendo search sulle variabili, si effettua un search sui vincoli (gli archi della CN).
Si parte da una configurazione con i domini delle variabili “pieni”.
Se un arco è inconsistente lo si rende consistente rimuovendo i valori inconsistenti.
L’arco xi xj (arco diretto) è definito consistente
iff: ∀v ∈ Di ∃v’ ∈ Dj cioè per ogni valore di Vi esiste un assegnamento legale di Vj.
Quando si è reso consistente ogni arco allora si ritorna l’assegnamento delle variabili come soluzione.
Intelligenza Artificiale - CSP Tiziano Papini - 2011 26
AC-3(Mackworth, ’77)
ARCS = {tutti gli archi della CN}; while (!ARCS.isEmpty())
(Xi,Xj) ARCS.remove();if (REMOVE-INC-VALUES(Xi,Xj)==true)
for all Xk in NEIGHBORS[Xi]ARCS.put(Xk, Xi);
boolean removed = false; for all v in DOMAIN(Xi)
if no value v’ in DOMAIN(Xj) satisfies (Xi,Xj)DOMAIN(Xi).remove(v);removed = true;
return removed;
REMOVE-INC-VALUES(Xi,Xj)
AC-3
Intelligenza Artificiale - CSP Tiziano Papini - 2011 27
L’algoritmo AC-3: Complessità di calcolo
Un CSP binario ha al massimo O(n2) archi;
Se d è la massima cardinalità dei domini delle variabili, ogni arco (X,Y ) può essere inserito in coda al massimo d volte (perché Y ha al massimo d valori da cancellare);
La consistenza di un arco si può controllare in tempo O(d2);
La complessità di calcolo di AC-3 è O(n2d3).
Intelligenza Artificiale - CSP Tiziano Papini - 2011 28
K-Consistency
Generalizzazione del concetto di arc-consistency da coppie a gruppi di variabili:
Un grafo è K-consistente se per ogni assegnamento legale di K-1 variabili esiste sempre un valore legale per ogni K-esima variabile Vk nel grafo dei vincoli.Strong k-consistency = i-consistency per ogni i da 1 a kNode-consistency = strong 1-consistencyArc-consistency = strong 2-consistencyPath-consistency = strong 3-consistency
Un CSP con N variabili che sia strongly N-consistent, è risolvibile senza backtracking.
Un CSP strongly K-consistent, è risolvibile senza backtracking se si trova l’ordinamento di variabili appropriato.
Intelligenza Artificiale - CSP Tiziano Papini - 2011 29
Abbiamo sin qui visto tecniche di look-ahead che mirano ad evitare i dead-end (profondi).
Possiamo anche migliorare il backtracking con tecniche di look-back:
BackjumpConstraint recording
Backtracking: si torna indietro alla variabile precedentemente assegnata
Backjumping: si torna indietro direttamente alla variabile che a creato problemi.
Migliorare il backtracking (III)
Intelligenza Artificiale - CSP Tiziano Papini - 2011 30
Backjumping
Motivazione: il motivo di un fallimento non si trova per forza nell’ultima coppia di assegnamenti, ma in assegnamenti precedenti.
Backjumping = non-chronological backtracking.
x1
x2
x3
x4
x5
x6
x7
x8
1 2 3 4 5 6 7 8
Fare backtracking a x5 non cambia niente. Si rimane in un dead-end.
Per un backtracking efficace va scelta un’altra variabile (secondo un criterio a scelta es: conflict set).
Intelligenza Artificiale - CSP Tiziano Papini - 2011 31
Conflict Set
Si tiene traccia in CS[xi] delle variabili assegnate, anche una sola, che entrano in conflitto con qualche valore presente in Di. Nogood variables.
Directed-conflict Backtracking
torna direttamente all’assegnamento (+ recente) causa del dead-end.si rimuovono le decisioni intermedie e si aggiorna CS[]
{} x1
{1} 1 1 x2
{1,2} 1 2 1 2 x3
{1,2,3} 1 2 1 2 3 X4
{1,2,3,4} 1 4 2 1 2 3 x5
{1,2,3,4} 1 3 2 4 3 1 2 3 x6
x7
x8
1 2 3 4 5 6 7 8
1
3
524
Directed-conflict Backtracking
Ha il vantaggiodi accelerare il
processo di backtracking
Intelligenza Artificiale - CSP Tiziano Papini - 2011 32
Dynamic Backtracking(Ginsberg, ’90, ’92)
E’ un non-chronological backtracking (backjumping) che: torna alla variabile nogood causa del dead-end NON rimuove le decisioni intermedie, ma ricostruisce l’albero
eliminando un solo assegnamento
X1 = 1
X2 = 3
X3 = 5
X4 = 2
X5 = 4
X1 = 1
X2 = 3
X3 = 5
X5 = 4
Stabilire la variabile“effettivamente”
causa del dead-endnon è sempre ovvio
Intelligenza Artificiale - CSP Tiziano Papini - 2011 33
Dynamic Backtracking(es: crossword generation)
1I 2N3 U 4
5L
1I 2N3 4
5
1I 2N3F U 4
5L
1A 3A 5A 1D 2D 4D
AS FUN GO IT NAG NO
IN TAD TO IF SAG DO
IS LA AT NUT
NUL
1 2
3 4
5
1I 2N3F U 4 N
5L
1I 2N3F U 4 N
5T O1A 2D 1D 3A 5A
Intelligenza Artificiale - CSP Tiziano Papini - 2011 34
Dynamic Backtracking (es: crossword generation)
(Ginsberg, ’90) ha usato:
euristica MRV (cheapest-first)
euristica LCV
min-look = 10 sul backtracking
Schema di hashing (degli ingressi del dizionario) per calcolare rapidamente il dominio (matching dei pattern)
Schemi grandi (15x15) riempiti in pochi secondi!
1° position 2° position 3° position4°
position
A 11110000000… 00100010100…01001000001
……
B 00000001100… 10001100000… … …
C 00000000011… 00010001001… … …
10001100000… il valore k è alto se l’ingresso k del dizionario contiene la data lettera i alla data posizione j
Intelligenza Artificiale - CSP Tiziano Papini - 2011 35
Euristiche e “discrepanze”
In molti problemi reali lo spazio di ricerca è talmente vasto che si deve far ricorso a delle euristiche:
Suggeriscono un assegnamento da fare Dipendono strettamente dal problema (es: nella generazione di
cruciverba → preferire le parole con vocali o lettere comuni).
Gli algoritmi devono gestire l’errore dell’euristica: seguire sempre l’euristica può portare ad una inconsistenza gli errori si verificano più spesso nelle prime fasi della ricerca Il numero di errori dell’euristica è tipicamente ridotto
Si usa il concetto di “discrepanza”: assegnamento per il quale non viene seguito il suggerimento dell’euristica.
L’idea è che seguendo le indicazioni dell’euristica, tranne in poche occasioni (discrepanze), si può arrivare rapidamente ad una soluzione.