330 likes | 473 Views
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:
E N D
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.
> = = [1..10] [1,2,5..33] [1..5,9,10] X2 X4 X6 > < > > ≥ [1..10] X1 X3 X5 X7 [1..10,50] ≠ [1,5] [1..5,10..15] ≤ < [1..5] ≥ ≥ X8 X9 [1..5] X10 [1..5] CSP - Esempio 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
> = = [1..10] [1,2,5..33] [1..5,9,10] X2 X4 X6 > < > > ≥ [1..10] X1 X3 X5 X7 [1..10,50] ≠ [1,5] [1..5,10..15] ≤ < [1..5] ≥ ≥ X8 X9 [1..5] X10 [1..5] CSP - Esempio alfabeto:={natural, string, =, !=, >, <, >=, <=, ::, [, ], ,, .. , Variables, Constraint, External Constraint} natural rappresenta un numero naturale. string è una stringa alfanumerica che inizia con un carattere. natural e string possono essere definiti mediante un’altra semplice grammatica. Variables, Constraints, External Constraints sono parole chiave. <constraintProblem>::= Variables <variableList> Constraints <constraintList> <variableList>::= <variable> | <variable> < variableList > <variable>::= <varName> :: <domain> <varName>::=string <domain>::= [<domContent>] <domContent>::= <domElem>| <domElem>,<domContent> <domElem>::= natural|natural..natural < constraintList > ::= <constraint> | <constraint> < constraintList > <constraint>::=<varName><op>< varName > <op>::= =|!=| >| <| >=| <= 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
[1..10] [1,2,5..33] [1..5,9,10] [3..10] [2,5,9] > = [2,5,9] X2 X4 X6 = [1..10] X1 > < > [3..10] > ≥ X3 X5 X7 [1..10,50] [1..5] [2..10,50] [1,5] [1..5,10..15] [2..5] [1] < ≠ [1..5] ≤ X8 X9 [1..5] [2..5] ≥ ≥ X10 [1..5] 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.
X2 X2 X2 X4 X4 X4 X6 X6 X6 X1 X1 X1 X3 X3 X3 X5 X5 X5 X7 X7 X7 k = 1 k = n X8 X8 X8 X9 X9 X9 X10 X10 X10 1 ≤k ≤n Distributed CSP (1) Un CSP può essere partizionato su k agenti.
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) > = X2 X4 X6 = A1 A2 X1 > < > > ≥ X3 X5 X7 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 < ≠ ≤ X8 X9 A3 ≥ ≥ X10
DCSP – Esempio (1) > = X2 X4 X6 = A1 A2 X1 > < > > ≥ X3 X5 X7 <distributedConstraintProblem>::= <constraintProblem> External Constraints < constraintList > 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 < ≠ ≤ X8 X9 A3 ≥ ≥ X10
DCSP – Esempio (2) > = X2 X4 X6 = A1 A2 X1 > < > > ≥ X3 X5 X7 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 < ≠ ≤ X8 X9 A3 ≥ ≥ X10
DCSP – Esempio (3) > = X2 X4 X6 = A1 A2 X1 > < > > ≥ X3 X5 X7 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 < ≠ ≤ X8 X9 A3 ≥ ≥ X10
A1 A2 A1 A2 A3 A3 A4 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.
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
[1..10] [1..5] [1..5] [1,2,5..33] [1..5,9,10] = ≤ X2 X4 X6 X8 X9 = ≥ ≥ [1..10] X1 > < > X10 > ≥ X3 X5 X7 [1..5] [1,5] [1..10,50] [1..5,10..15] A1 A2 A3 Inizializzazione (1) Inizialmente ogni agente effettua la propagazione localmente. [2..10] [2,5,9,10] [2,5,9,10] [2..10] [3..10,50] [1..5]
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
[1..10] X2 = [1..10] X1 > > < X3 X8 [1,5] [1..5] A1 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. Es.: A1 riceve arc-information x8 [1..5]come primo messaggio. [1]
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 arc-informationdai 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 NW ricezione arc-information W propagazione locale senza modifiche rilevanti per i vicini ricezione arc-no-solution o fallimento locale ricezione arc-no-solution IMP ricezione arc-no-solution
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-solutiondopo 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 arc-consistency, 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 A2 A3 W NW W A1 arc-first-waiting A1 3 . . . 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 arc-marker 2 A1 3 W NW W 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 A1 arc-consistency . . . A1 W W W arc-consistency Monitor A3
[2,5,9] [2,5,9] [3..10] = > X2 X4 X6 = X1 > < > [3..10] > ≥ X3 X5 X7 [1] [2..10,50] [1..5] < ≠ [2..5] [2..5] A1 ≤ X8 X9 A2 ≥ ≥ X10 [1..5] A3 Conclusioni Rendere un constraintgraph arc-consistente…
10 5 5 = > X2 X4 X6 = 10 X1 > < > > ≥ X3 X5 X7 10 2 1 < 3 4 ≠ A1 ≤ X8 X9 A2 ≥ ≥ X10 2 A3 Conclusioni … non vuol dire risolvere il problema corrispondente.