DISTRIBUTED CONSTRAINT SATISFACTION
PROBLEM E ARC-CONSISTENZA
Applicazioni di Intelligenza Artificiale LS
Reti di Calcolatori LS
Francesca Nocerino
Matricola 171107
Constraint Satisfaction Problem
Un problema di soddisfacimento di vincoli è definito da:
• un insieme di n variabili (X1,X2…Xn);
• un dominio discreto per ogni variabile (D1,D2…Dn);
• un insieme di vincoli su queste variabili.
La soluzione di un problema di soddisfacimento di vincoli è un
assegnamento di valori alle variabili consistente con i vincoli.
Senza perdita di generalità si può supporre che tutti i vincoli siano
binari.
Un problema di soddisfacimento di vincoli si può rappresentare con
un grafo detto constraintgraph, in cui alle variabili corrispondono i
nodi e ai vincoli gli (iper)-archi.
CSP - Esempio
[1..10]
=
[1..10] X1
[1,2,5..33]
>
X2
=
X4
>
[1..5,9,10]
<
>
>
≥
[1..10,50] X5
X3
[1,5]
<
X6
X7
[1..5,10..15]
≠
[1..5]
X8
≤
≥
X9
≥
X10
[1..5]
[1..5]
Variables
x1::[1..10]
x2::[1..10]
x3::[1,5]
x4::[1,2,5..33]
x5::[1..10,50]
x6::[1..5,9,10]
x7::[1..5,10..15]
x8::[1..5]
x9::[1..5]
x10::[1..5]
Constraints
x1=x2
x1>x3
x2>x3
x2>x4
x3<x8
x4<x5
x4=x6
x5>=x7
x6>x7
x7!=x9
x8<=x9
x8>=x10
x9>=x10
CSP - Esempio
alfabeto:={natural, string, =, !=, >, <, >=, <=, ::, [, ], ,, .. , Variables,
Constraint, External Constraint}
natural rappresenta un numero naturale.
[1..10]
[1,2,5..33]
[1..5,9,10]
string è una stringa
alfanumerica che inizia con un carattere.
>
=
X2 essere definiti mediante un’altra
X4semplice X6
natural e string possono
=
grammatica.
[1..10] Constraints,
> External Constraints sono parole
< chiave.
>
Variables,
X1
>
≥
Variables
[1..10,50] X5
X7
<variableList>
[1,5]
[1..5,10..15]
Constraints
<
≠
[1..5]
<constraintList>
≤
<variableList>::= <variable> | <variable>
<X9
variableList >
X8
[1..5]
<variable>::= <varName> :: <domain>
≥
<varName>::=string
≥
<domain>::= [<domContent>]
X10
<domContent>::= <domElem>| <domElem>,<domContent>
[1..5]
<domElem>::= natural|natural..natural
< constraintList > ::= <constraint> | <constraint> < constraintList >
<constraint>::=<varName><op>< varName >
<op>::= =|!=| >| <| >=| <=
<constraintProblem>::=
X3
Variables
x1::[1..10]
x2::[1..10]
x3::[1,5]
x4::[1,2,5..33]
x5::[1..10,50]
x6::[1..5,9,10]
x7::[1..5,10..15]
x8::[1..5]
x9::[1..5]
x10::[1..5]
Constraints
x1=x2
x1>x3
x2>x3
x2>x4
x3<x8
x4<x5
x4=x6
x5>=x7
x6>x7
x7!=x9
x8<=x9
x8>=x10
x9>=x10
Arc-consistency
Un arco A(i,j) è consistente se per ogni valore a appartenente a Di
esiste almeno un valore b appartenente a Dj tale che il vincolo tra i e j
sia soddisfatto. Un constraintgraph è arc-consistente se ogni suo arco
è consistente.
[1..10] [3..10]
=
[1..10] X1
[3..10]
[2,5,9] [1,2,5..33]
>
X2
<
>
X3
[1,5]
[1] <
=
X4
>
[1..5,9,10]
[2,5,9]
>
≥
[1..10,50] X5
[2..10,50]
X7
[1..5]
[1..5,10..15]
[2..5]
[1..5]
X8
X6
≠
≤
≥
X9
≥
X10
[1..5]
[1..5]
[2..5]
Distributed CSP (1)
Un CSP può essere partizionato su k agenti.
X2
X4
X6
X2
X4
X6
X3
X5
X7
X1
X1
X3
X5
X8
X7
X8
X9
X9
X10
X10
k=1
k=n
X2
X4
X6
X3
X5
X7
X1
X8
X9
X10
1≤k≤ n
Distributed CSP (2)
• Ogni variabile è associata a uno e un solo agente e tale agente è detto
responsabile di quella variabile.
• I vincoli riguardanti due variabili appartenenti allo stesso agente sono
associati unicamente a tale agente e sono chiamati internal constraint.
• Un vincolo che coinvolge due variabili legate a due agenti diversi è
associato ad entrambi gli agenti e viene definito external constraint.
• Se due agenti A1 e A2 condividono un vincolo esterno si dice che A1
è vicino (o neighbour) di A2 e viceversa.
• Il neighbourhood di un agente è quindi definito come l’insieme di
tutti i suoi vicini.
• Ad ogni agente è associato un CSP costituito dalle variabili di cui è
responsabile e dai vincoli interni.
• Ogni agente deve essere in grado di rendere il grafo di vincoli
corrispondente a tale CSP arc-consistente.
DCSP – Esempio (1)
=
A1
>
X2
>
X1
=
X4
<
>
>
X3
≥
X5
<
≠
X8
A3
≤
≥
X9
≥
X10
X6
X7
A2
Agente 1
Variables
x1::[1..10]
x2::[1..10]
x3::[1,5]
Constraints
x1=x2
x1>x3
x2>x3
External Constraints
x2>x4
x3<x8
DCSP – Esempio (1)
=
A1
>
X2
X4
>
X1
=
X6
<
>
X3
X5
<distributedConstraintProblem>::=
A3
≤
≥
X9
≥
X10
≥
X7
<constraintProblem>
External Constraints
≠
< constraintList
>
<
X8
>
A2
Agente 1
Variables
x1::[1..10]
x2::[1..10]
x3::[1,5]
Constraints
x1=x2
x1>x3
x2>x3
External Constraints
x2>x4
x3<x8
DCSP – Esempio (2)
=
A1
>
X2
>
X1
=
X4
<
>
>
X3
≥
X5
<
≠
X8
A3
≤
≥
X9
≥
X10
X6
X7
A2
Agente 2
Variables
x4::[1,2,5..33]
x5::[1..10,50]
x6::[1..5,9,10]
x7::[1..5,10..15]
Constraints
x4<x5
x4=x6
x5>=x7
x6>x7
External Constraints
x4<x2
x7!=x9
DCSP – Esempio (3)
=
A1
>
X2
>
X1
=
X4
<
>
>
X3
≥
X5
<
≠
X8
A3
≤
≥
X9
≥
X10
X6
X7
A2
Agente 3
Variables
x8::[1..5]
x9::[1..5]
x10::[1..5]
Constraints
x8<=x9
x8>=x10
x9>=x10
External Constraints
x8>x3
x9!=x7
Distributed CSP (3)
Sulla struttura della rete costituita dagli agenti non vengono posti
vincoli di nessun tipo:
• non c’è un ordinamento tra gli agenti;
• si possono presentare dei cicli;
• la rete di agenti può non essere completamente connessa.
Ogni agente deve conoscere tutti i suoi vicini e, per ognuno di essi,
sapere quali sono le variabili di cui questo è responsabile e che sono
coinvolte in un vincolo esterno con una delle sua variabili locali.
Gli agenti comunicano attraverso lo scambio di messaggi.
Si è scelto di usare TCP\IP per avere la garanzia che i messaggi
arrivino al più una volta e nell’ordine in cui sono stati inviati.
A1
A2
A3
A1
A2
A3
A4
Messaggi
Esistono nove tipi di messaggi che gli agenti possono scambiarsi:
• arc-information X1 Dom1 X2 Dom2 ...
• arc-no-solution
• arc-first-marker num-mess-ricevuti numero-iniziativa
• arc-first-waiting my-id numero-iniziativa
• arc-waiting init-id numero-iniziativa
• arc-not-waiting init-id numero-iniziativa
• arc-message-travelling init-id numero-iniziativa
• arc-marker num-mess-ricevuti init-id numero-iniziativa
• arc-consistency
Inizializzazione (1)
Inizialmente ogni agente effettua la propagazione localmente.
[2..10]
[2..10]
[1..10] X1
[1..10]
[2,5,9,10]
[1,2,5..33]
X2
X4
=
>
[2,5,9,10]
[1..5,9,10]
[1..5]
X6
X8
>
≥
=
<
>
X3
X5
[1,5]
[1..10,50]
≤
X7
[1..5]
[1..5,10..15]
[1..5]
A2
X9
≥
X10
≥
[3..10,50]
A1
[1..5]
A3
Inizializzazione (2)
In seguito invia a ciascun vicino un messaggio
arc-information X1 Dom1 X2 Dom2 ...
contenente le informazioni su tutte le variabili locali coinvolte in un
vincolo esterno con tale vicino.
arc-information x2 [2..10]
A2
A1
arc-information x3 [1,5]
A3
Inizializzazione (2)
In seguito invia a ciascun vicino un messaggio
arc-information X1 Dom1 X2 Dom2 ...
contenente le informazioni su tutte le variabili locali coinvolte in un
vincolo esterno con tale vicino.
arc-information x4 [2,5,9,10]
A2
A1
arc-information x7 [1..5]
A3
Inizializzazione (2)
In seguito invia a ciascun vicino un messaggio
arc-information X1 Dom1 X2 Dom2 ...
contenente le informazioni su tutte le variabili locali coinvolte in un
vincolo esterno con tale vicino.
A2
A1
arc-information x9 [1..5]
arc-information x8 [1..5]
A3
Propagazione (1)
Alla ricezione dei messaggi arc-information ogni agente propaga di
nuovo localmente, ma tenendo conto dei vincoli esterni relativi alle
variabili di cui ha ricevuto informazioni.
[1..10]
X2
=
[1..10] X1
Es.: A1 riceve
arc-information
>
>
<
X3
[1,5]
[1]
A1
X8
[1..5]
x8
come primo messaggio.
[1..5]
Propagazione (2)
In seguito a ogni propagazione ciascun agente può aver modificato il
dominio di alcune delle sue variabili locali. Ad ogni vicino coinvolto
in almeno un vincolo esterno la cui variabile locale è stata modificata
viene mandato un nuovo messaggio arc-information.
A2
A1
arc-information x3 [1]
A3
Stati degli agenti (1)
Ogni agente ha uno stato, i possibili stati in cui può trovarsi un agente
sono:
• waiting: l’agente non sta effettuando localmente alcuna
propagazione ed è in attesa che gli arrivino dei messaggi arcinformation dai vicini;
• not waiting: l’agente sta propagando localmente o inviando ai vicini
dei messaggi arc-information;
• consistent: in questo stato l’agente sa che è stata raggiunta la
consistenza;
• impossible: in questo stato l’agente sa che il problema non ammette
soluzione.
Stati degli agenti (2)
NW not-waiting
W waiting
IMP impossible
C consistent
C
ricezione
arc-consistency
ricezione arc-information
NW
W
propagazione locale senza
modifiche rilevanti per i vicini
ricezione
arc-no-solution
IM
P
ricezione
arc-no-solution
ricezione arc-no-solution
o fallimento locale
Terminazione
Gli agenti possono terminare per due ragioni:
• il problema non ammette alcuna soluzione, cioè almeno un agente si
accorge che il dominio di almeno una delle variabili di cui è
responsabile è vuoto;
• l’arc-consistenza è stata raggiunta, cioè non è più possibile, per
nessun agente, eliminare dei valori dal dominio di nessuna variabile.
Problema impossibile
Se durante la propagazione locale un agente si accorge che non c’è
soluzione invia a tutti i suoi vicini il messaggio arc-no-solution
dopo aver aggiornato il suo stato, che diventa impossible, e prima di
terminare.
Alla ricezione di un messaggio arc-no-solution ogni agente, se il
suo stato non è già impossible, cambia il suo stato, avvisa i vicini e
termina a sua volta.
Alle ricezione di un arc-no-solution è necessario che un agente
verifichi il proprio stato, per evitare di mandare messaggi inutili,
infatti:
• la conclusione che il problema è impossibile può essere raggiunta da
più agenti autonomamente;
• non essendo stati imposti vincoli strutturali alla rete, un stesso agente
può essere avvisato da più di un vicino.
Arc-consistenza (1)
Dire che l’arc-consistenza è stata raggiunta significa dire che tutti gli
agenti si trovano in stato di waiting.
Per rilevare questo stato globale si usa un algoritmo di global state
detection del tipo proposto da Chandy e Lamport e si introduce un
nuovo agente, detto Monitor .
Il Monitor memorizza lo stato di tutti gli agenti e, appena si accorge
che essi si trovano tutti contemporaneamente nello stato di waiting, li
avvisa che è stata raggiunta la consistenza col messaggio arcconsistency, alla ricezione del quale ogni agente sa che può
terminare.
Arc-consistenza (2)
Quando un agente, in seguito alla propagazione locale, non deve
mandare arc-information a nessuno esegue le seguenti operazioni:
• prende l’iniziativa di registrare il suo stato, che è waiting;
• invia ai suoi vicini il messaggio
arc-first-marker num-mess-ricevuti numero-iniziativa
per informarli che per lui potrebbe essere stata raggiunta la
consistenza;
• invia al Monitor il messaggio
arc-first-waiting my-id numero-iniziativa
Arc-consistenza (3)
Alla ricezione di un arc-first-marker un agente esegue le seguenti
operazioni:
• se i messaggi che ha inviato sono stati tutti ricevuti ed è anche lui in
stato di waiting invia al Monitor un messaggio
arc-waiting init-id numero-iniziativa
• se i messaggi che ha inviato sono stati tutti ricevuti, ma lui non è in
stato di waiting invia al Monitor un messaggio
arc-not-waiting init-id numero-iniziativa
• se i messaggi che ha inviato non sono stati tutti ricevuti invia al
Monitor il messaggio
arc-message-travelling init-id numero-iniziativa
• invia a ogni suo vicino un messaggio
arc-marker num-mess-ricevuti init-id numero-iniziativa
Arc-consistenza (4)
Alla ricezione di un arc-marker ogni agente si comporta come alla
ricezione di un arc-first-marker, rispettando la seguentea regola:
• memorizzare i marker inviati e non inviare mai due volte un marker
con gli stessi init-id e numero-iniziativa; ciò serve per evitare un
loop infinito in cui gli agenti continuano a far girare marker nella rete,
in quanto, non essendo stati posti vincoli di nessun tipo sulla struttura
della rete, un agente potrebbe ricevere due volte lo stesso marker da
due vicini diversi.
Arc-consistenza (5)
A2
arc-first-marker 3 3
A1
arc-first-waiting A1 3
A1 A2 A3
W NW W
A1
...
W
arc-first-marker 2 3
Monitor
A3
Arc-consistenza (5)
A2
arc-waiting A1 3
arc-marker 2 A1 3
A1 A2 A3
W NW W
A1
A1
...
W
W
arc-marker 1 A1 3
Monitor
A3
Arc-consistenza (5)
A2
A1 A2 A3
W NW W
arc-marker 2 A1 3
A1
A1
...
W
W
W
Monitor
arc-marker 1 A1 3
arc-first-waiting A1 3
A3
Arc-consistenza (5)
A2
arc-consistency
A1 A2 A3
W NW W
arc-consistency
A1
A1
...
W W W
arc-consistency
Monitor
A3
Conclusioni
Rendere un constraintgraph arc-consistente…
[2,5,9]
[3..10]
=
>
X2
X4
>
[3..10] X1
=
X6
<
>
>
X3
X5
[1]
[2..10,50]
<
A1
[2,5,9]
[2..5]
X8
[2..5]
≤
≥
X9
≥
X10
[1..5]
A3
≥
X7
[1..5]
≠
A2
Conclusioni
… non vuol dire risolvere il problema corrispondente.
10
=
10
5
>
X2
X4
>
X1
X3
A1
=
X6
<
>
>
1
5
X5
<
≥
X7
10
3
X8
4
≤
≥
X9
≥
X10
2
A3
2
≠
A2
Scarica

presentazione