1 / 53

Intelligenza Artificiale

Gennaio – Aprile 2007. Intelligenza Artificiale. marco ernandes email: ernandes@dii.unisi.it. Constraint Satisfaction. PS vs. CSP. Nel PS tutto ruota intorno al concetto di stato. Nel PS tutto è problem-specific (o state-specific) SCS( n ), g ( n ), h ( n ), t ( n ), S 0 .

hiroko
Download Presentation

Intelligenza Artificiale

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Gennaio – Aprile 2007 Intelligenza Artificiale marco ernandes email: ernandes@dii.unisi.it

  2. Constraint Satisfaction

  3. PS vs. CSP • Nel PS tutto ruota intorno al concetto di stato. • Nel PS tutto è problem-specific (o state-specific) • SCS(n), g(n), h(n), t(n), S0. • Gli stati sono dei veri “black box” senza struttura interna. • La terminazione controlla se lo stato COINCIDE COMPLETAMENTE con uno degli stati finali. • Il CSP invece cerca di “aprire” gli stati e generalizzarne la rappresentazione interna.

  4. CSP vs. PS • Il CSP si occupa, tipicamente di Problemi di assegnazione  CONSTRAINT SATISFACTION PROBLEMS • Nei problemi di assegnazione • non c’è l’interesse di ottenere un percorso risolvente • non c’è (generalmente) un costo associato ad ogni passo • non si possiede uno stato obiettivo (possedere uno stato obiettivo coincide con l’aver risolto il problema) • Il PS fornisce un framework per affrontare problemi di percorso, il CSP fornisce tecniche per problemi di assegnazione:  CONSTRAINT SATISFACTION PROGRAMMING

  5. otto + due dieci Esempi di CSP

  6. CSP(problems & programming) CS-Problems Tipologia di problemi (CS) CSP La differenza tra PS e CSP può essere sfumata: un CSP può al limite essere formalizzato come PS e attaccato di conseguenza. CS-Programming Metodo per formalizzare e attaccare un problema CS.

  7. Definizione di CSP • Un problema di CSP (soddisfacimento vincoli) è definito da: • un set di variabili: X1, X2,…, Xn • un set di vincoli (constraints): C1, C2,…, Cm • ogni variabile Xi è associata ad un dominio Didi valori ammissibili v • ogni vincolo Ci agisce su di un subset di variabili e specifica le combinazioni di assegnamenti legali. • La soluzione di un CSP è data da un assegnamento completo (per ogni variabile Xi c’è un valore estratto da Di) senza violazione dei vincoli.

  8. CSP es: 8-Regine (I) • Variabili: • 64  Xij con i = da 1 a 8, j = da 1 a 8 • Dominio delle variabili • D = {1,0} • Vincoli: • Xij = 1 SEXik = 0 per tutti k da 1 a 8, k  j () • Xij = 1 SE Xkj = 0 per tutti k da 1 a 8, k  i () • Xij = 1 SE Xi+h,j+h = 0, Xi-h,j-h = 0 per tutti ih () da 1 a 8, h  0 xi,1 xi,2 xi,3 xi,4 xi,5 xi,6 xi,7 xi,8 x1,j x2,j x3,j x4,j x5,j x6,j x7,j x8,j

  9. CSP es: 8-Regine (II) • Variabili: • 8  Xi con i = da 1 a 8 • Dominio delle variabili • D = {1,2,…,8} • Vincoli: • Xi = kSE Xj k per tutti j da 1 a 8, j  i () • Xi = kSE Xih kh per tutti ih da 1 a 8, h  0 () D = 1 2 3 4 5 6 7 8 x1 x2 x3 x4 x5 x6 x7 x8

  10. CSP es: Colorazione Mappe • Variabili: WA, NT, Q, NSW, V, SA, T • Domini Di= {red, green, blue} • Vincoli: regioni adiacenti devono avere colori diversi: • es 1: color(WA) ≠ color(NT), • es 2: color(WA,NT) da {(red,green), (red,blue), (green,red), (green,blue), (blue,red), (blue,green)}

  11. two + two four CSP es: Criptoaritmetica • Variabili: F, T, U, W, R, O (+ Xd, Xc, Xm,i riporti) • Domini Di= {1,2,3,4,5,6,7,8,9,0} • Vincoli: ogni lettera deve essere associata ad un valore diverso e la somma tra due lettere in colonna (+ il riporto della somma precedente) deve essere uguale al valore della lettera “risultato” • Alldiff(F, T, U, W, R, O) • O+O = R +10 * Xd • Xd +W+W = U + 10 * Xc • Xm = F

  12. CSP es: Soddisfacibilità (SAT) • Variabili: x1,x2,x3 • Domini Di= {true,false} • Vincoli: il valore di ogni clausola deve essere TRUE • (x1 x2 x3) = TRUE • (x1 x2 x3) = TRUE • (x1 x2) = TRUE (x1 x2 x3)  (x1 x2 x3)  (x1 x2 )

  13. CSP e vincoli • Constraint Network (CN): la rete di relazioni che coinvolge vincoli, variabili e valori. • Arità dei vincoli  k(C) • Vincoli unari: k(C) = 1, il vincolo agisce solo su una variabile • Vincoli binari: k(C) = 2, il vincolo agisce su una coppia di variabili • Vincoli n-ari: k(C) = n, il vincolo agisce su più variabili contemporaneamente (es: N-Regine  ogni variabile con valore ) • CSP-binari possiedono al max. vincoli binari e si possono descrivere con un grafo dei vincoli. I CSP di ordine maggiore si descrivono con ipergrafi.

  14. CSP e complessità • CSP finiti: dominio finito di valori • CSP infiniti: dominio infinito di valori (problemi affrontati dalla programmazione lineare) • SAT: il SAT è un problema CSP finito e ogni CSP è riducibile al SAT, quindi: • La complessità dei CSP finiti è esponenziale (es: Knapsack Problem  2n)

  15. Intro al CS-Programming • Il Constraint Programming: insieme di metodologie che mirano alla risoluzione dei CSP e richiede 3 scelte progettuali • modello (definito con framework CSP) • algoritmo • euristica • Ognuna di queste scelte influenza l’efficienza della risoluzione (es: il modello fa aumentare o diminuire le dimensioni della CN). • Gli algoritmi si dividono in 2 categorie: • Metodi Costruttivi • Metodi Riparativi

  16. 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 Dia 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

  17. … e svantaggi  Grosso problema: le grandi dimensioni che può assumere Diche definisce il branching factor Metodi Costruttivi – vantaggi • Commutatività del CSP: l’ordine degli assegnamenti è indifferente (non interessa il percorso), quindi: • SCS: 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

  18. 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. • assignment = {}; • STACK.insert(assignment); • do • if (STACK.isEmpty()) returnfailure; • assignment = STACK.remove(); • if (complete(assignment)) returnassignment; • STACK.insertAll (expand(assignment)); • while (true);

  19. Backtracking - simulazione Empty assignment 1st variable 2nd variable 3rd variable Assignment = {(X1=v11),(X2=v22)} Assignment = {} 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)}

  20. Migliorare il backtracking (I) • 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. • 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.

  21. Migliorare il backtracking (II) • 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: • Quale variabile scegliere per l’espansione? • In che ordine provare i valori? • E’ possibile scoprire in anticipo dei fallimenti?

  22. Scelta della Variabile (I) • Minimum Remaining Values (MRV) Heuristic: • Si sceglie la variabile con il minor numero di valori legali 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.

  23. Scelta della Variabile (II) • Allo stato X0 di questo esempio ogni variabile ha lo stesso numero di valori legali. • In questo caso conviene scegliere la variabile coinvolta in più vincoli • Riduce il branching factor delle scelte future • Si chiama Degree Heuristic ed è spesso associata a MRV (funge da tie-breaker).

  24. 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. • E’ il criterio di ordinamento dell’espansione • L’idea è che si danno maggiori possibilità alla ricerca di trovare futuri assegnamenti legali. Mantiene 1 valore per SA Mantiene 0 valori per SA

  25. 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

  26. Forward Checking • 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.

  27. NT Q WA T NSW SA V Forward Checking(es: colorazione grafo) Nell’esempio non vengono adottate le altre euristiche

  28. NT Q WA T NSW SA V Forward checking rimuove il RED da NT e da SA Forward Checking(es: colorazione grafo) Nell’esempio non vengono adottate le altre euristiche

  29. NT Q WA T NSW SA V Forward Checking(es: colorazione grafo) Nell’esempio non vengono adottate le altre euristiche

  30. NT Q WA T NSW SA V Forward Checking(es: colorazione grafo) Nell’esempio non vengono adottate le altre euristiche

  31. NT Q WA T NSW SA V Forward Checking(es: colorazione grafo) Nell’esempio non vengono adottate le altre euristiche

  32. NT NT Q Q WA WA T T NSW NSW SA SA V V Forward Checking(es: colorazione grafo) Nell’esempio non vengono adottate le altre euristiche

  33. 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.

  34. 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.

  35. 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.

  36. 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 Viesiste un assegnamento legale di Vj. • Quando si è reso consistente ogni arco allora si ritorna l’assegnamento delle variabili come soluzione.

  37. AC-3(Mackworth, ’86) AC-3 ARCS = {tutti gli archi della CN}; while (!ARCS.isEmpty()) (Xi,Xj)  ARCS.remove(); if (REMOVE-INC-VALUES(Xi,Xj)==true) for allXk in NEIGHBORS[Xi] ARCS.put(Xk, Xi); REMOVE-INC-VALUES(Xi,Xj) 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;

  38. 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 k • Node-consistency = strong 1-consistency • Arc-consistency = strong 2-consistency • Path-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.

  39. Migliorare il backtracking (III) • 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: • Backjump • Constraint recording • Backtracking: si torna indietro alla variabile precedentemente assegnata • Backjumping: si torna indietro direttamente alla variabile che a creato problemi.

  40. 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. • 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).

  41. 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[] 1 Directed-conflict Backtracking Ha il vantaggio di accelerare il processo di backtracking 3 5 2 4

  42. X1 = 1 X2 = 3 X3 = 5 X5 = 4 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 Stabilire la variabile “effettivamente” causa del dead-end non è sempre ovvio X2 = 3 X3 = 5 X4 = 2 X5 = 4

  43. Dynamic Backtracking(es: crossword generation) O 1D 2A 5A 1A 2D

  44. Dynamic Backtracking (es: crossword generation) • (Ginsberg, ’90) ha usato: • euristica MRV (cheapest-first): • euristica LCV nella formula: • 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! 10001100000…  il valore k è alto se l’ingresso k del dizionario contiene la data lettera i alla data posizione j

  45. 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.

  46. (Harvey, Ginsberg ‘95) Limited Discrepancy Search • LDS è un algoritmo iterativo. • Ad ogni iterazione viene associato un numero massimo di discrepanze d. • Se ad una iterazione non è stato possibile trovare una soluzione, la soglia di discrepanze d viene aumentata e si riparte. • Ad ogni iterazione si effettuano tutte le ricerche con d discrepanze, iniziando con quelle che hanno le discrepanze più superficiali. Euristica = “go left”

  47. Metodi Riparativi(Ricerca Locale) • Si parte da uno stato “pieno”: cioè con tutte le variabili assegnate. • Per rientrare nel framework CSP: • Si consentono stati con violazione dei vincoli • Gli operatori sono di riassegnamento di valori a variabili e non di assegnamento. • Si usano tecniche di ottimizzazione locale: • Min-Conflicts • Hill-climbing • Tabu Search • Simulated annealing • Algoritmi Genetici

  48. Metodi Riparativi vs. Costruttivi • Gli algoritmi costruttivi funzionano bene soprattutto su CSP-binari (o con pochi vincoli e pochi valori): • Es: complex di AC-3 = O(nk3) dipende da k=valori e n=archi • Diventano poco gestibili con Constraint Networks ad arità maggiore e con molti valori. • Es: N-regine con N > 106. • Gli algoritmi riparativi, locali, forniscono meno garanzie teoriche, ma nel caso di problemi molto complessi risultano efficienti nella pratica. • Gli algoritmi riparativi non sono completi. Si tratta infatti di algoritmi “locali”.

  49. 1 2 2 0 3 2 3 2 2 2 2 2 3 2 Min-Conflicts(Minton, ‘92) • Si sceglie una configurazione iniziale (random) • Ripeti: • Prendi una variabile xi in conflitto (random) • Assegna a xi il valore che minimizza il numero di conflitti • Se la configurazione è valida allora RETURN ASSEGNAZIONE, altrimenti CONTINUE

  50. Min-Conflicts - vantaggi • E’ estremamente efficace per problemi come quello delle n-regine. Risolti problemi di milioni di regine (con solo ~50 iterazioni partendo da assegn. random!). Con algoritmi costruttivi è impossibile. • E’ estremamente utile (ed efficace) in problemi CSP “reali”, come quelli di scheduling: • Perché se c’è una variazione nei vincoli (es: cambio di orario di un professore nel problema del Class Scheduling) non si deve ricominciare da capo. • E’ quindi un sistema che può far fronte ad un ambiente dinamico: online-CSP. • Ha risolto il problema dello scheduling delle osservazioni del Telescopio Hubble. • Può essere usato in forma iterativa o in associazione con algoritmi locali come simulated-annealing

More Related