Intelligenza Artificiale - dii.unisi.ittrentin/CSP_costruttivi.pdf · Si parte da uno stato privo...

35
Intelligenza Artificiale Intelligenza Artificiale Ing. Tiziano Papini Ing. Tiziano Papini Email: [email protected] Web: http://www.dii.unisi.it/~papinit

Transcript of Intelligenza Artificiale - dii.unisi.ittrentin/CSP_costruttivi.pdf · Si parte da uno stato privo...

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 7

Backtracking - simulazione

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 24

Contraint Propagation

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.