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