Capitolo 3:
Vincoli a dominio finito
1
Vincoli a dominio finito
Problemi di soddisfazione di vincoli
 Un risolutore con backtracking
 Consistenza su nodi e archi
 Consistenza sui limiti
 Consistenza generalizzata
 Ottimizzazione per vincoli aritmetici

2
Vincoli a dominio finito
Una classe importante di problemi con
vincoli
 Usati per moellare problemi con vincoli che
hanno a che fare con delle scelte:

 es.:

Scheduling, routing and timetabling
Il piu’ grande impatto industriale della
programmazione con vincoli e’ stato su
questi problemi
3
Problemi di soddisfazione con
vincoli

Un problema di soddisfazione con vincoli
(CSP) consiste di:
 Un
vincolo C su variabli x1,..., xn
 Un dominio D che mappa ogni variabile xi ad
un insieme finito di possibili valori d(xi)

E’ inteso come il vincolo
C  x1  D( x1) xn  D( xn)
4
Colorazione di mappe
Un CSP classico e’ il problema della colorazione di
mappe in modo che regioni adiacenti non abbiamo lo
tesso colore.
Es.: puo’ la mappa
dell’Australia essere colorata
con 3 colori?
NT
Q
WA  NT  WA  SA  NT  SA 
NT  Q  SA  Q  SA  NSW 
SA  V  Q  NSW  NSW  V
D(WA)  D( NT )  D( SA)  D(Q) 
D( NSW )  D(V )  D(T ) 
{red , yellow, blue}
WA
SA
NSW
V
T
5
4-regine
Piazzare 4 regine su una scacchiera 4 x 4 in modo che
non si attacchino.
Q1
Q2
Q3
Q4
Quattro variabili Q1, Q2,
1
Q3, Q4 che
rappresentano la riga
2
della regine in ogni
colonna. Dominio di ogni
3
variabile: {1,2,3,4}
One solution! -->
4
6
4-regine
I vincoli:
Non sulla stessa riga:
Q1  Q2  Q1  Q3  Q1  Q4 
Q2  Q3  Q2  Q4  Q3  Q4 
Non nella stessa diagonale Q1  Q2  1  Q1  Q3  2  Q1  Q4  3 
up:
Q2  Q3  1  Q2  Q4  2  Q3  Q4  1 
Not nella stessa diagonale Q1  Q2  1  Q1  Q3  2  Q1  Q4  3 
down:
Q2  Q3  1  Q2  Q4  2  Q3  Q4  1
7
Lo zaino del ladro
Un ladro ha uno zaino con capacita’ 9, e deve
scegliere cose da rubare in modo da fare un
profitto di almeno 30
object
whiskey
profit
15
size
4
perfume
cigarretes
10
7
3
2
4W  3P  2C  9  15W  10 P  7C  30
Quale dovrebbe essere il dominio delle variabili?
8
Risolutore con backtracking


Il modo piu’ semplice per risolvere csps e’ di
enumerare le possibili soluzioni
Il risolutore con backtracking:



Enumera i valori per una variabile alla volta
Ad ogni passo, controlla che nessun vincolo primitivo
sia violato
Assumiamo che satisfiable(c) ritorna false quando
il vincolo primitivo c senza variabili e’ non
soddisfacibile
9
Partial Satisfiable
Controlla se un vincolo e’ non
soddisfacibile a causa di un vincolo
primitivo senza variabili
 Partial_satisfiable(c)

 For
ogni vincolo primitivo c in C
 If vars(c) e’ vuoto
 If satisfiable(c) = false return false
 Return true
10
Backtrack Solve

Back_solve(c,d)
vars(c) e’ vuoto return partial_satisfiable(c)
 Sceglie x in vars(c)
 For ogni valore d in d(x)
 Sia C1 uguale a C con x rimpiazzato da d
 If partial_satisfiable(c1) then
 If back_solve(c1,d) then return true
 Return false
 If
11
Backtracking Solve
X  Y Y  Z
D( X )  D(Y )  D( Z )  {1,2}
X  Y Y  Z
Choose
Variablevar
var
X YZ
X
Y
Sceglie
domain
domain {1,2}
{1,2}
dominio
{1,2}
X 1
X 2
2  Y Y  Z
1 Y Y  Z
Y 1
Y 2
1  1 1  Z
1 2 2  Z
partial_satisfiable false Z  1
Nessuna variabile,
e false
1 2 2 1
2  1 1  Z
Z 2
2  22  Z
Nessuna variabile,
e false
1 2 2  2
12
Consistenza sui nodi e sugli
archi




Idea di base: trovare un CSP equivalente
all’originale con domini delle variabili piu’ piccoli
Esamina 1 vincolo primitivo alla volta
Node consistency: (vars(c)={x}) rimuove dal
dominio di x ogni valore che non soddisfa c
Arc consistency: (vars(c)={x,y}) rimuove da d(x)
valori per cui non c’e’ nessun valore in d(y) tale
che (x,y) soddisfa c, e vice versa
13
Node Consistency

Un vincolo primitivo c e’ node consistent
con dominio D se |vars(c)| !=1 o
 Se
vars(c) = {x} allora per ogni d in d(x)
 X assegnato a d e’ una soluzione di c

Un CSP e’ consistente sui nodi se ogni
vincolo primitivo e’ consistente sui nodi
14
Esempi
CSP che non e’ consistente sui nodi (vedere Z):
X  Y Y  Z  Z  2
D( X )  D(Y )  D( Z )  {1,2,3,4}
CSP che e’ consistente sui nodi:
X  Y Y  Z  Z  2
D( X )  D(Y )  {1,2,3,4}, D( Z )  {1,2}
Il problema della colorazione della mappa e
quello delle 4 regine sono consistenti sui nodi.
15
Ottenere la consistenza sui
nodi


Node_consistent(c,d)
 For ogni vincolo primitivo c in C
 D := node_consistent_primitive(c, D)
 Return D
Node_consistent_primitive(c, D)
 If |vars(c)| =1 then
 Sia {x} = vars(c)
D( x) : {d  D( x) | {x  d} e' una soluzione di c}

Return D
16
Consistenza sugli archi

Un vincolo primitivo c e’ consistente sugli
archi con dominio D se |vars{c}| != 2 o
 Vars(c)
= {x,y} e per ogni d in d(x) esiste e in
d(y) tale che
{x  d , y  e} e' una soluzione di c
E

in modo simile per y
Un CSP e’ consistente sugli archi se ogni
vincolo primitivo e’ consistente sugli archi
17
Esempi
CSP consiste sui nodi ma non sugli archi:
X  Y Y  Z  Z  2
D( X )  D(Y )  {1,2,3,4}, D( Z )  {1,2}
Esempio: il valore 4 per X e X < Y.
CSP equivalente ma consistente sugli archi:
X  Y Y  Z  Z  2
D( X )  D(Y )  D( Z )  
La colorazione della mappa e le 4 regine sono
consistenti sugli archi.
18
Ottenere la consistenza sugli
archi

Arc_consistent_primitive(c, D)

If |vars(c)| = 2 then
D( x) : {d  D( x) | esiste e  D( y ),
{x  d , y  e} e' una sol. di c}
D( y ) : {e  D( y ) | esiste d  D( x),
{x  d , y  e} e' una sol. di c}


Return D
Rimuove valori che non sono arc-onsistent con c
19
Ottenere la consistenza sugli
archi

Arc_consistent(c,d)
 Repeat
W
:= d
 For ogni vincolo primitivo c in C
 D := arc_consistent_primitive(c,d)
 Until W = D
 Return D

Una versione molto naive
20
Usare la consistenza ui nodi e
sugli archi


Possiamo costruire risolutori basati sui metodi di
consistenza
Due tipi importanti di dominio:



False domain: alcune variabili hanno il dominio vuoto
Valuation domain: ogni variabile ha un solo valore nel
dominio
 Estendere satisfiable a CSP con domini
valutazione
21
Risolutore basato su
consistenza su nodi e archi
D := node_consistent(C,D)
 D := arc_consistent(C,D)
 if D e’ un dominio falso

 return

if D e’ un dominio valutazione
 return

false
satisfiable(C,D)
return unknown
22
Esempio
Colorare l’Australia: con vincoli
WA  red  NT  yellow
WA NT SA
Q NSW V
T
Consistenza
sui nodi
WA  NT
WA  SA
NT  SA
NT  Q
SA  V
SA  Q
Q  NSW
SA  NSW
NSW  V
23
Esempio
Colorare l’Australia: con vincoli
WA  red  NT  yellow
WA NT SA
Q NSW V
T
Consistenza
sugli archi
WA  NT
WA  SA
NT  SA
NT  Q
SA  V
SA  Q
Q  NSW
SA  NSW
NSW  V
24
Esempio
Colorare l’Australia: con vincoli
WA  red  NT  yellow
WA NT SA
Q NSW V
T
Consistenza
sugli archi
WA  NT
WA  SA
NT  SA
NT  Q
SA  V
SA  Q
Q  NSW
SA  NSW
NSW  V
25
Esempio
Colorare l’Australia: con vincoli
WA  red  NT  yellow
WA NT SA
Q NSW V
T
Consistenza
sugli archi
Risposta:
unknown
WA  NT
WA  SA
NT  SA
NT  Q
SA  V
SA  Q
Q  NSW
SA  NSW
NSW  V
26
Risolutore con backtracking
Possiamo combinare la consistenza con il
backtracking
 Applichiamo la consistenza sui nodi e sugli
archi prima di iniziare la ricerca con
backtracking, e dopo ogni assegnamento di
un valore ad una variabile

27
Esempio di risolutore con
backtracking
Q1
Nessun
valore
Quindi,
puo’
essere
dobbiamo
assegnatouna
scegliere
Q3valore
in
altro
questo
caso!
per Q2.
Q2
Q3
Q4
1
2
3
4
28
Esempio
Q1
Q2
Q3
Q4
1
backtracking,
Backtracking…
Non
possiamo
backtracking,
2
trovare nessun
Trovo
un
Trovo
unQ4
valore
per
Trovo
un
altro
valore
3
altroin
valore
altro
valore
per
per Q1?
Q3?
questo
caso!
per
Q2?
No!
4
No!
Si, Q1 = 2
29
Esempio
Q1
Q2
Q3
Q4
1
2
3
4
30
Esempio
Q1
Q2
Q3
Q4
1
2
3
4
31
Esempio
Colorare l’Australia: con vincoli
WA  red  NT  yellow
WA NT SA
Q NSW V
T
Enumerazione
con
backtracking
Seleziona una var. con dominio con piu’ di 1 valore, T
Aggiunge il vincolo T
Answer: true
 red
Applica la consistenza
32
Consistenza sui limiti
E I vincoli primitivi con piu’ di 2 variabili?
 hyper-arc consistency: estende la
consistenza sugli archi per un numero
arbitrario di variabili
 Sfortunatamente determinare la hyper-arc
consistency e’ NP-hard
 Qual e’ la soluzione?

33
Consistenza sui limiti
CSP aritmetici: i vincoli sono interi
 range: [l..u] rappresenta l’insieme degli
interi {l, l+1, ..., u}
 Idea: usare la consistenza sui numeri reali e
guardare solo i punti finali (limiti superiori
e inferiori) del dominio di ogni variabile
 Definire min(D,x) come il minimo elemento
nel dominio di x, simile per max(D,x)

34
Consistenza sui limiti

Un vincolo primitivo c e’ consistente sui limiti
con dominio D se per ogni var x in vars(c)

Esistono numeri reali d1, ..., dk per le rimanenti
variabili x1, ..., xk tali che
{x  min( D, x), x1  d 1, xk  dk}



e’ una soluzione di c
E simile per {x  max( D, x)}
Un CSP aritmetico e’ consistente sui limiti se lo
sono tutti i vincoli primitivi
35
Scarica

Vincoli 3