Esempi di consistenza sui limiti X 3Y 5Z D( X ) [2..7], D(Y ) [0..2], D( Z ) [ 1..2] Non consistente sui limiti, considera Z=2, poi X-3Y=10 Ma il dominio qui sotto e’ consistente sui limiti: D( X ) [2..7], D(Y ) [0..2], D( Z ) [0..1] Confrontare con il dominio consistente sugli iper-archi: D( X ) {3,5,6}, D(Y ) {0,1,2}, D( Z ) {0,1} 1 Ottenere la consistenza sui limiti Dato un dominio D, vogliamo modificare i limiti dei domini in modod che sia consistente sui limiti Si usano delle regole di propagazione 2 Ottenere la consistenza sui limiti Consideriamo il vincolo primitivo X = Y + Z che e’ equivalente alle tre forme: X YZ Y X Z Z X Y Ragionando sui valori minimi e massimi: X min( D, Y ) min( D, Z ) X max( D, Y ) max( D, Z ) Y min( D, X ) max( D, Z ) Z min( D, X ) max( D, Y ) Y max( D, X ) min( D, Z ) Z max( D, X ) min( D, Y ) Regole di propagazione per il vincolo X = Y + Z 3 Ottenere la consistenza sui limiti X YZ D( X ) [4..8], D(Y ) [0..3], D( Z ) [2..2] Le regole di propagazione determinano che: ( 0 2 ) 2 X 5 ( 3 2) ( 4 2 ) 2 Y 6 ( 8 2) (4 3 ) 1 Z 8 ( 8 0) Quindi i domini possono essere ridotti a: D( X ) [4..5], D(Y ) [2..3], D( Z ) [2..2] 4 Altre regole di propagazione 4W 3 P 2C 9 9 3 2 W min( D, P) min( D, C ) 4 4 4 9 4 2 P min( D, W ) min( D, C ) 3 3 3 9 4 3 C min( D, W ) min( D, P) 2 2 2 Dato il dominio iniziale: D(W ) [0..9], D( P) [0..9], D(C) [0..9] Determiniamo che: W 9 , P 9 , C 9 4 3 2 Nuovo dominio:D(W ) [0..2], D( P) [0..3], D(C) [0..4] 5 Disequazioni Y Z Le disequazioni generano delle regole di propagazioni deboli: c’e’ propagazione solo quando una variabile ha un valore fisso che e’ uguale al minimo o massimo dell’altra variabile D(Y ) [2..4], D( Z ) [2..3] no propagation D(Y ) [2..4], D( Z ) [3..3] no propagation D(Y ) [2..4], D( Z ) [2..2] prop D(Y ) [ 3..4], D( Z ) [2..2] 6 Moltiplicazione X Y Z Se tutte le variabili sono positive, e’ semplice: X min( D, Y ) min( D, Z ) X max( D, Y ) max( D, Z ) Y min( D, X ) / max( D, Z ) Z min( D, X ) / max( D, Y ) Y max( D, X ) / min( D, Z ) Z max( D, X ) / min( D, Y ) Esempio: D( X ) [4..8], D(Y ) [1..2], D( Z ) [1..3] Diventa: D( X ) [4..6], D(Y ) [2..2], D( Z ) [2..3] Ma se le variabili possono essere 0 o negative? 7 Moltiplicazione X Y Z Calcolare i limiti di X esaminando i valori estremi: X minimum{min( D, Y ) min( D, Z ), min( D, Y ) max( D, Z ) max( D, Y ) min( D, Z ), max( D, Y ) max( D, Z )} Simile per limite superiore usando il massimo. Ma questo non funziona per Y e Z? Se min(D,Z) <0 e max(D,Z)>0 non c’e’ nessuna restrizione per Y X Y Z { X 4, Y d , Z 4 / d } Stiamo usando numeri reali (es. 4/d) 8 Moltiplicazione X Y Z Possiamo aspettare finche’ il range di Z e’ non negativo o non positivo e poi usare le regole Y minimum{min( D, X ) / min( D, Z ), min( D, X ) / max( D, Z ) max( D, X ) / min( D, Z ), max( D, X ) / max( D, Z )} Divisione per 0: ve 0 ve 0 0 0 9 Algoritmo per la consistenza sui limiti Applica ripetutamente le regole di propagazione ad ogni vincolo primitivo finche’ non viene modificato nessun dominio Non dobbiamo ri-esaminare un vincolo primitivo se i domini delle sue variabili non sono modificati 10 Esempio di consistenza sui limiti Problema dello zaino del ladro (senza whisky) capacity profit 4W 3 P 2C 9 15W 10 P 7C 30 1..39],],D D(W ) [0..0], D( P) [0 D((C C)) [[00....49]] 28/ 15 / 15 PP212 / 10 CC 0 /760 / 7 WW 102 / 10 W 9/4 P9/3 C9/2 Non c’e piu’ nessuna modifica. Notare che abbiamo dovuto riesaminare il vincolo di profitto. 11 Risolutore per la consistenza sui limiti D := bounds_consistent(C,D) if D e’ un dominio falso return if D e’ un dominio valutazione return false satisfiable(C,D) return unknown 12 Ricerca con backtracking combinata con la consistenza sui limiti Applicare la consistenza sui limiti prima di iniziare la ricerca con backtracking e dopo ogni assegnamento di un valore ad una variabile 13 Esempio Problema del ladro capacity profit 4W 3 P 2C 9 15W 10 P 7C 30 Dominio corrente: 1 D((W W)) [[00....9 1..3 00....349]]] 20], D( P) [0 D((C C)) [[3 D 9],],D Consistenza sui limiti iniziale: W=0 P=1 (0,1,3) Trovata una soluzione: return true 14 Esempio Problema del ladro capacity profit 4W 3 P 2C 9 15W 10 P 7C 30 Dominio corrente: DD },D (P ((C {[00}..4] D(W )(W 00], (P ) )[1{ ..33}, D C (W)[0)..{ ,D ,],DD (C ) )) Backtrack Backtrack Consistenza sui limiti iniziale: W=0 P=1 P=2 P=3 (0,1,3) false (0,3,0) W=1 W=2 (1,1,1) (2,0,0) 15 Non ci sono altre soluzioni Consistenza generalizzata Possiamo usare qualunque metodi di consistenza diversi su vincoli diversi, e comunicheranno attraverso I dimini delle variabili node consistency : per vincoli primitivi con 1 arc consistency: per vinoli primitivi con 2 var bounds consistency: altri vincoli primitivi A volte possiamo eliminare piu’ valori usando vincoli ‘’complessi’’ e metodi di consistenza specializzati 16 Alldifferent alldifferent({V1,...,Vn}) e’ soddisfatto quando ogni variabile V1,..,Vn ha un valore diverso alldifferent({X, Y, Z}) e’ equivalente a X Y X Z Y Z E’ consistente sugli archi con il dominio D( X ) {1,2}, D(Y ) {1,2}, D( Z ) {1,2} Ma non c’e’ soluzione! la consistenza specializzata per alldifferent puo’ scoprirlo 17 Alldifferent Consistency Sia c della forma alldifferent(V) while esiste v in V dove D(v) = {d} V := V - {v} for ogni v’ in V D(v’) := D(v’) - {d} DV := unione di tutti i D(v) per v in V if |DV| < |V| then return false domain return D 18 Alldifferent Examples alldifferent ({ X , Y , Z}) D( X ) {1,2}, D(Y ) {1,2}, D( Z ) {1,2} DV = {1,2}, V={X,Y,Z} quindi scopre la non soddisfacibilita’ alldifferent ({ X , Y , Z , T}) D( X ) {1,2}, D(Y ) {1,2}, D( Z ) {1,2}, D(T ) {2,3,4,5} DV = {1,2,3,4,5}, V={X,Y,Z,T} non la scopre Algoritmi basti Xsu matching massimo potrebbero scoprirla: Y Z T 1 2 3 4 5 19 Altri vincoli complessi cumulative([ S1 ,, Sn ],[ D1 ,, Dn ],[ R1 ,, Rn ], L) schedulare n lavori con tempi iniziali Si e durate Di che usano risorse Ri in cui L risorse sono disponibili in ogni momento element ( I ,[V1 ,,Vn ], X ) Accesso all’array: se I = i, allora X = Vi e se X != Vi allora I != i 20 Ottimizzazione per CSPs Dato che i domini sono finiti, possiamo usare un risolutore per costruire un ottimizzatore banale retry_int_opt(C, D, f, best) D2 := int_solv(C,D) if D2 e’ un dominio falso then return best sia sol la soluzione corrispondente a D2 return retry_int_opt(C /\ f < sol(f), D, f, sol) 21 Esempio Problema del ladro (ottimizzare il profitto) minimize minimize 15 15W W10 10PP77CCsubject subjectto to capacity profit capacity profit 44W W33PP22CC99 15 15W W10 10PP77CC30 30 15W D 15 W 10 D(W10 ) P[0..715 9C],W P [0 9],D (31 CP) 7[0C..9]32 ( 31 10) P 7..C D D((W W))[[00....99],],D D((PP))[[00....99],],D D((CC))[[00....99]] (W) )[0[1....01],],D D((PP)) [[11....11],],D D((C C)) [[31..1 Nessuna altra soluzione! 3] Next First solution solution found: found: DD(W sol{W {W 01 11, C , C 31}} , ,PP Corresponding Return la sol. migliore solution sol sol ( f ) 32 31 22 Backtracking + Ottimizzazione Dato che il risolutore puo’ usare la ricerca con backtracking, e’ meglio combinarla con l’ottimizzazione Ad ogni passo della ricerca con backtracking, se best e’ la soluzione ottima vista finora, aggiungi il vincolo f < best(f) 23 Esempio Problema del ladro capacity profitavailable) Smugglers knapsack problem (whiskey 4W capacity 3 P 2C 9 15W 10 P 7C 30 profit W 7C10P 31 7C 30 4W 3 P 2C15 W9 10 P15 Dominio corrente: 1 D((W W)) [[00....9 1..3 00....349]]] 20], D( P) [0 D((C C)) [[3 D 9],],D Consistenza sui limiti iniziale: W=0 P=1 (0,1,3) Soluzione trovata aggiungi il vincolo 24 Esempio Problema del ladro capacity profit 4W 3 P 2C 9 15W 10 P 7C 30 15W 10 P 7C 32 31 Consistenza sui limiti iniziale: W=0 P=1 P=2 P=3 (0,1,3) false false W=1 W=2 (1,1,1) false Modify constraint Return l’ultima sol (1,1,1) 25 Ottimizzazione con Branch and Bound Il metodo precedente, a differenza del simplesso, non usa la funzione obbiettivo per dirigere la ricerca Ottimizzazione branch and bound per (C,f) Usare il simplesso per trovare una soluzione reale Se la soluzione e’ intera, stop Altrimenti scegliere una var x con valore non intero d e esaminare I problemi (C x d , f ) (C x d , f ) Usare la soluzione ottima corrente per vincolare I problemi 26 Esempio Problema del ladro W 211 / 4, P 0, CW03} {W 10} {W P 20, P 1 / 3, CP false {C W 6 1/ 4, P W1, C2 0} 1 1 / 2{}W W 0 2, P 0C, C {W / 32, Cfalse 0} P 1,1P P5 {W 2, P 0, = C 30 0} Soluzione (2,0,0) { 1, C 1} W0, C2 Soluzione {W 1W } 1, P (1,1,1) = 32 17 / 4, P 3 5false {W 0, C / 2} C 21, P C Peggio della sol ottima 10, C 3} P W 03 / 4, W false {W 27 false false Finite Constraint Domains Summary CSPs form an important class of problems Solving of CSPs is essentially based on backtracking search Reduce the search using consistency methods node, arc, bound, generalized Optimization is based on repeated solving or using a real optimizer to guide the search 28