Hranová konzistence Arc consistency AC Nejprve se zabýváme binárními CSP podmínka odpovídá hraně v grafu podmínek Hrana (V i, V j ) je hranově konzistentní, právě když pro každou hodnotu x z aktuální domény D i existuje hodnota y v D j tak, že ohodnocení [V i = x, V j = y] splňuje všechny binární podmínky nad V i, V j. Programování s omezujícími podmínkami I, 9. října 2003 1 Propagace omezení
Hranová konzistence Arc consistency AC Nejprve se zabýváme binárními CSP podmínka odpovídá hraně v grafu podmínek Hrana (V i, V j ) je hranově konzistentní, právě když pro každou hodnotu x z aktuální domény D i existuje hodnota y v D j tak, že ohodnocení [V i = x, V j = y] splňuje všechny binární podmínky nad V i, V j. Hranová konzistence je směrová konzistence hrany (V i, V j ) nezaručuje konzistenci hrany (V j, V i ) A 3..7 A<B 1..5 B A 3..4 A<B 1..5 B A 3..4 A<B 4..5 B konzistence (A,B) konzistence (A,B) i (B,A) Programování s omezujícími podmínkami I, 9. října 2003 1 Propagace omezení
Hranová konzistence Arc consistency AC Nejprve se zabýváme binárními CSP podmínka odpovídá hraně v grafu podmínek Hrana (V i, V j ) je hranově konzistentní, právě když pro každou hodnotu x z aktuální domény D i existuje hodnota y v D j tak, že ohodnocení [V i = x, V j = y] splňuje všechny binární podmínky nad V i, V j. Hranová konzistence je směrová konzistence hrany (V i, V j ) nezaručuje konzistenci hrany (V j, V i ) A 3..7 A<B 1..5 B A 3..4 A<B 1..5 B A 3..4 A<B 4..5 B konzistence (A,B) konzistence (A,B) i (B,A) CSP problém je hranově konzistentní, právě když jsou všechny jeho hrany (v obou směrech) hranově konzistentní. Programování s omezujícími podmínkami I, 9. října 2003 1 Propagace omezení
Algoritmus revize hrany Jak udělat hranu (V i, V j ) hranově konzistentní? Z domény D i vyřadím takové hodnoty x, které nejsou konzistentní s aktuální doménou D j (pro x neexistuje žádá hodnoty y v d j tak, aby ohodnocení V i = x a V j = y splňovalo všechny binární podmínky mezi V i a V j ) Programování s omezujícími podmínkami I, 9. října 2003 2 Propagace omezení
Algoritmus revize hrany Jak udělat hranu (V i, V j ) hranově konzistentní? Z domény D i vyřadím takové hodnoty x, které nejsou konzistentní s aktuální doménou D j (pro x neexistuje žádá hodnoty y v d j tak, aby ohodnocení V i = x a V j = y splňovalo všechny binární podmínky mezi V i a V j ) procedure revise((i, j)) Deleted := false for x D i do if neexistuje y D j then D i := D i {x} takové, že (x, y) je konzistentní Deleted := true domain([v 1, V 2 ],2,4), V 1 #< V 2 end if revise((1,2)) smaže 4 z D 1 return Deleted D 2 se nezmění end revise Programování s omezujícími podmínkami I, 9. října 2003 2 Propagace omezení
Algoritmus revize hrany Jak udělat hranu (V i, V j ) hranově konzistentní? Z domény D i vyřadím takové hodnoty x, které nejsou konzistentní s aktuální doménou D j (pro x neexistuje žádá hodnoty y v d j tak, aby ohodnocení V i = x a V j = y splňovalo všechny binární podmínky mezi V i a V j ) procedure revise((i, j)) Deleted := false for x D i do if neexistuje y D j then D i := D i {x} takové, že (x, y) je konzistentní Deleted := true domain([v 1, V 2 ],2,4), V 1 #< V 2 end if revise((1,2)) smaže 4 z D 1 return Deleted D 2 se nezmění end revise Složitost O(k 2 ) (k maximální velikost domény) = dva cykly: x D i a y D j Programování s omezujícími podmínkami I, 9. října 2003 2 Propagace omezení
Algoritmus AC-1 Jak udělat CSP hranově konzistentní? Provedeme revizi každé hrany Programování s omezujícími podmínkami I, 9. října 2003 3 Propagace omezení
Algoritmus AC-1 Jak udělat CSP hranově konzistentní? Provedeme revizi každé hrany Revize hrany zmenší doménu již zrevidované hrany opět nekonzistentní Programování s omezujícími podmínkami I, 9. října 2003 3 Propagace omezení
Algoritmus AC-1 Jak udělat CSP hranově konzistentní? Provedeme revizi každé hrany Revize hrany zmenší doménu již zrevidované hrany opět nekonzistentní A<B, B<C: (3..7,1..5,1..5) A<B B<C A B C Programování s omezujícími podmínkami I, 9. října 2003 3 Propagace omezení
Algoritmus AC-1 Jak udělat CSP hranově konzistentní? Provedeme revizi každé hrany Revize hrany zmenší doménu již zrevidované hrany opět nekonzistentní A A<B A<B, B<C: (3..7,1..5,1..5) AB B B<C C Programování s omezujícími podmínkami I, 9. října 2003 3 Propagace omezení
Algoritmus AC-1 Jak udělat CSP hranově konzistentní? Provedeme revizi každé hrany Revize hrany zmenší doménu již zrevidované hrany opět nekonzistentní A A<B B B<C A<B, B<C: (3..7,1..5,1..5) AB (3..4,1..5,1..5) BA C Programování s omezujícími podmínkami I, 9. října 2003 3 Propagace omezení
Algoritmus AC-1 Jak udělat CSP hranově konzistentní? Provedeme revizi každé hrany Revize hrany zmenší doménu již zrevidované hrany opět nekonzistentní A A<B B B<C A<B, B<C: (3..7,1..5,1..5) AB (3..4,1..5,1..5) BA (3..4,4..5,1..5) BC C Programování s omezujícími podmínkami I, 9. října 2003 3 Propagace omezení
Algoritmus AC-1 Jak udělat CSP hranově konzistentní? Provedeme revizi každé hrany Revize hrany zmenší doménu již zrevidované hrany opět nekonzistentní A A<B B B<C A<B, B<C: (3..7,1..5,1..5) AB (3..4,1..5,1..5) BA (3..4,4..5,1..5) BC (3..4,4,1..5) CB C Programování s omezujícími podmínkami I, 9. října 2003 3 Propagace omezení
Algoritmus AC-1 Jak udělat CSP hranově konzistentní? Provedeme revizi každé hrany Revize hrany zmenší doménu již zrevidované hrany opět nekonzistentní A A<B B B<C A<B, B<C: (3..7,1..5,1..5) AB (3..4,1..5,1..5) BA (3..4,4..5,1..5) BC (3..4,4,1..5) CB (3..4,4,5) AB C Programování s omezujícími podmínkami I, 9. října 2003 3 Propagace omezení
Algoritmus AC-1 Jak udělat CSP hranově konzistentní? Provedeme revizi každé hrany Revize hrany zmenší doménu již zrevidované hrany opět nekonzistentní A A<B B B<C A<B, B<C: (3..7,1..5,1..5) AB (3..4,1..5,1..5) BA (3..4,4..5,1..5) BC (3..4,4,1..5) CB (3..4,4,5) AB (3,4,5) C Programování s omezujícími podmínkami I, 9. října 2003 3 Propagace omezení
Algoritmus AC-1 Jak udělat CSP hranově konzistentní? Provedeme revizi každé hrany Revize hrany zmenší doménu již zrevidované hrany opět nekonzistentní A A<B B B<C A<B, B<C: (3..7,1..5,1..5) AB (3..4,1..5,1..5) BA (3..4,4..5,1..5) BC (3..4,4,1..5) CB (3..4,4,5) AB (3,4,5) C Revize hrany opakujeme, dokud dochází ke zmenšení nějaké domény procedure AC-1(G) repeat Changed := false for hranu (i, j) G do Changed := revise((i, j)) or Changed until not(changed) end AC-1 Programování s omezujícími podmínkami I, 9. října 2003 3 Propagace omezení
Algoritmus AC-1 Jak udělat CSP hranově konzistentní? Provedeme revizi každé hrany Revize hrany zmenší doménu již zrevidované hrany opět nekonzistentní A A<B B B<C A<B, B<C: (3..7,1..5,1..5) AB (3..4,1..5,1..5) BA (3..4,4..5,1..5) BC (3..4,4,1..5) CB (3..4,4,5) AB (3,4,5) C Revize hrany opakujeme, dokud dochází ke zmenšení nějaké domény procedure AC-1(G) repeat Changed := false for hranu (i, j) G do Changed := revise((i, j)) or Changed until not(changed) end AC-1 AB, BA, BC, CB, Programování s omezujícími podmínkami I, 9. října 2003 3 Propagace omezení
Algoritmus AC-1 Jak udělat CSP hranově konzistentní? Provedeme revizi každé hrany Revize hrany zmenší doménu již zrevidované hrany opět nekonzistentní A A<B B B<C A<B, B<C: (3..7,1..5,1..5) AB (3..4,1..5,1..5) BA (3..4,4..5,1..5) BC (3..4,4,1..5) CB (3..4,4,5) AB (3,4,5) C Revize hrany opakujeme, dokud dochází ke zmenšení nějaké domény procedure AC-1(G) repeat Changed := false for hranu (i, j) G do Changed := revise((i, j)) or Changed until not(changed) end AC-1 AB, BA, BC, CB, AB, BA, BC, CB, Programování s omezujícími podmínkami I, 9. října 2003 3 Propagace omezení
Algoritmus AC-1 Jak udělat CSP hranově konzistentní? Provedeme revizi každé hrany Revize hrany zmenší doménu již zrevidované hrany opět nekonzistentní A A<B B B<C A<B, B<C: (3..7,1..5,1..5) AB (3..4,1..5,1..5) BA (3..4,4..5,1..5) BC (3..4,4,1..5) CB (3..4,4,5) AB (3,4,5) C Revize hrany opakujeme, dokud dochází ke zmenšení nějaké domény procedure AC-1(G) repeat Changed := false for hranu (i, j) G do Changed := revise((i, j)) or Changed until not(changed) end AC-1 AB, BA, BC, CB, AB, BA, BC, CB, AB, BA, BC, CB Programování s omezujícími podmínkami I, 9. října 2003 3 Propagace omezení
Algoritmus AC-3 opakování revizí můžeme dělat pomocí fronty stačí jediná fronta hran, které je potřeba (znova) zrevidovat do fronty přidáváme jen hrany, jejichž konzistence mohla být narušena zmenšením domény V k V m Programování s omezujícími podmínkami I, 9. října 2003 4 Propagace omezení
Algoritmus AC-3 opakování revizí můžeme dělat pomocí fronty stačí jediná fronta hran, které je potřeba (znova) zrevidovat do fronty přidáváme jen hrany, jejichž konzistence mohla být narušena zmenšením domény procedure AC-3(G) Q := {(i, j) (i, j) hrany(g), i j} while Q non empty do vyber a smaž (k, m) z Q if revise((k, m)) then V k V m Q := Q {(i, k) hrany(g), i k, i m} end while end AC-3 // seznam hran pro revizi Programování s omezujícími podmínkami I, 9. října 2003 4 Propagace omezení
Algoritmus AC-3 opakování revizí můžeme dělat pomocí fronty stačí jediná fronta hran, které je potřeba (znova) zrevidovat do fronty přidáváme jen hrany, jejichž konzistence mohla být narušena zmenšením domény procedure AC-3(G) Q := {(i, j) (i, j) hrany(g), i j} while Q non empty do vyber a smaž (k, m) z Q if revise((k, m)) then end while end AC-3 V k V m Q := Q {(i, k) hrany(g), i k, i m} A<B B<C A B C // seznam hran pro revizi AB, BA, BC, CB, AB Programování s omezujícími podmínkami I, 9. října 2003 4 Propagace omezení
Algoritmus AC-3 opakování revizí můžeme dělat pomocí fronty stačí jediná fronta hran, které je potřeba (znova) zrevidovat do fronty přidáváme jen hrany, jejichž konzistence mohla být narušena zmenšením domény procedure AC-3(G) Q := {(i, j) (i, j) hrany(g), i j} while Q non empty do vyber a smaž (k, m) z Q if revise((k, m)) then end while end AC-3 V k V m Q := Q {(i, k) hrany(g), i k, i m} A<B B<C A B C // seznam hran pro revizi technika AC-3 je dnes asi nejpoužívánější, ale stále není optimální AB, BA, BC, CB, AB Programování s omezujícími podmínkami I, 9. října 2003 4 Propagace omezení
Algoritmus AC-3 opakování revizí můžeme dělat pomocí fronty stačí jediná fronta hran, které je potřeba (znova) zrevidovat do fronty přidáváme jen hrany, jejichž konzistence mohla být narušena zmenšením domény procedure AC-3(G) Q := {(i, j) (i, j) hrany(g), i j} while Q non empty do vyber a smaž (k, m) z Q if revise((k, m)) then end while end AC-3 V k V m Q := Q {(i, k) hrany(g), i k, i m} A<B B<C A B C // seznam hran pro revizi technika AC-3 je dnes asi nejpoužívánější, ale stále není optimální AB, BA, BC, CB, AB Jaké budou domény A,B,C po AC-3 pro: domain([a,b,c],1,10), A #= B + 1, C #< B Programování s omezujícími podmínkami I, 9. října 2003 4 Propagace omezení
Konzistence po cestě (PC path consistency) Jak posílit konzistenci? Budeme se zabývat několika podmínkami najednou. Příklad: A,B,C {0,1}, A B, B C, A C Cesta (V 0, V 1,..., V m ) je konzistentní právě tehdy, když pro každou dvojici hodnot x D 0 a y D m splňující binární podmínky na hraně V 0, V m existuje ohodnocení proměnných V 1,... V m 1 takové, že všechny binární podmínky mezi sousedy V j, V j+1 jsou splněny CSP je konzistentní po cestě, právě když jsou všechny cesty konzistentní Programování s omezujícími podmínkami I, 9. října 2003 5 Propagace omezení
Konzistence po cestě (PC path consistency) Jak posílit konzistenci? Budeme se zabývat několika podmínkami najednou. Příklad: A,B,C {0,1}, A B, B C, A C Cesta (V 0, V 1,..., V m ) je konzistentní právě tehdy, když pro každou dvojici hodnot x D 0 a y D m splňující binární podmínky na hraně V 0, V m existuje ohodnocení proměnných V 1,... V m 1 takové, že všechny binární podmínky mezi sousedy V j, V j+1 jsou splněny CSP je konzistentní po cestě, právě když jsou všechny cesty konzistentní Definice PC nezaručuje, že jsou splněny všechny podmínky nad vrcholy cesty, zabývá se pouze podmínkami mezi sousedy V 0 V 2 V 4 V 1??? V 3 Programování s omezujícími podmínkami I, 9. října 2003 5 Propagace omezení
PC a cesty délky 2 Zjišt ování konzistence všech cest není efektivní Stačí ověřit konzistenci cest délky 2 Věta: CSP je PC právě tehdy, když každá cesta délky 2 je PC. Programování s omezujícími podmínkami I, 9. října 2003 6 Propagace omezení
PC a cesty délky 2 Zjišt ování konzistence všech cest není efektivní Stačí ověřit konzistenci cest délky 2 Věta: CSP je PC právě tehdy, když každá cesta délky 2 je PC. Důkaz: 1) PC cesty délky 2 jsou PC 2) cesty délky 2 jsou PC n cesty délky n jsou PC PC indukcí podle délky cesty a) n = 2 platí triviálně b) n + 1 (za předpokladu, že platí pro n) i) vezmeme libovolných n + 1 vrcholů V 0, V 1,..., V n ii) vezmeme libovolné dvě kompatibilní hodnoty x 0 D 0 a x n D n iii) podle a) najdeme x n 1 D n 1 tak, že (x 0, x n 1 ) a (x n 1, x n ) platí iv) podle indukčního kroku najdeme zbylé hodnoty na cestě V 0, V 1,..., V n 1 Programování s omezujícími podmínkami I, 9. října 2003 6 Propagace omezení
Vztah PC a AC PC AC hrana (i, j) je hranově konzistentní, pokud je (i, j, i) konzistentní po cestě Programování s omezujícími podmínkami I, 9. října 2003 7 Propagace omezení
Vztah PC a AC PC AC hrana (i, j) je hranově konzistentní, pokud je (i, j, i) konzistentní po cestě AC PC příklad: A,B,C {0,1}, A B, B C, A C je AC, ale není PC, A=1, B=2 nelze rozšířít po cestě (A,C,B) Programování s omezujícími podmínkami I, 9. října 2003 7 Propagace omezení
Vztah PC a AC PC AC hrana (i, j) je hranově konzistentní, pokud je (i, j, i) konzistentní po cestě AC PC příklad: A,B,C {0,1}, A B, B C, A C je AC, ale není PC, A=1, B=2 nelze rozšířít po cestě (A,C,B) AC vyřazuje nekompatibilní prvky z domény proměnných. Co dělá PC? PC vyřazuje dvojice hodnot PC si pamatuje podmínky explicitně PC si pamatuje, které dvojice hodnot jsou v relaci PC dělá všechny relace implicitní (A<B,B<C A+1<C) Programování s omezujícími podmínkami I, 9. října 2003 7 Propagace omezení
Příklad: barvení grafu Nalezněte obarvení vrcholů grafu, aby sousední vrcholy neměly stejnou barvu. Programování s omezujícími podmínkami I, 9. října 2003 8 Propagace omezení
Příklad: barvení grafu Nalezněte obarvení vrcholů grafu, aby sousední vrcholy neměly stejnou barvu. není PC konzistentní lze přiřadit x 1 = r, x 3 = b je PC konzistentní Programování s omezujícími podmínkami I, 9. října 2003 8 Propagace omezení
Algoritmus revize cesty Jak udělat každou cestu z V i do V j přes V m konzistentní? Pro dvojici proměnných V i a V j aktualizuji prvky relace R ij Vyřadím dvojici (a, b) z R ij, pokud neexistuje taková hodnota c V m, že (a, c) je kozistentní pro R im a (c, b) je kozistentní pro R mj Programování s omezujícími podmínkami I, 9. října 2003 9 Propagace omezení
Algoritmus revize cesty Jak udělat každou cestu z V i do V j přes V m konzistentní? Pro dvojici proměnných V i a V j aktualizuji prvky relace R ij Vyřadím dvojici (a, b) z R ij, pokud neexistuje taková hodnota c V m, že (a, c) je kozistentní pro R im a (c, b) je kozistentní pro R mj procedure revise-3((i, j), m) Deleted := false for (a, b) R ij do if neexistuje c D j takové, že (a, c) R im a (c, b) R mj then smaž (a, b) z R ij Deleted := true return Deleted V 1, V 2 {a, b}, V 3 {a, b, c}, V 1 V 2, V 2 V 3, V 1 V 3 end revise-3 revise-3((1, 3), 2) Programování s omezujícími podmínkami I, 9. října 2003 9 Propagace omezení
Algoritmus revize cesty Jak udělat každou cestu z V i do V j přes V m konzistentní? Pro dvojici proměnných V i a V j aktualizuji prvky relace R ij Vyřadím dvojici (a, b) z R ij, pokud neexistuje taková hodnota c V m, že (a, c) je kozistentní pro R im a (c, b) je kozistentní pro R mj procedure revise-3((i, j), m) Deleted := false for (a, b) R ij do if neexistuje c D j takové, že (a, c) R im a (c, b) R mj then smaž (a, b) z R ij Deleted := true return Deleted V 1, V 2 {a, b}, V 3 {a, b, c}, V 1 V 2, V 2 V 3, V 1 V 3 end revise-3 revise-3((1, 3), 2) Složitost O(k 3 ) (k maximální velikost domény) = cyklus pro každou dvojici (a, b): O(k 2 ), vnitřní cyklus přes c D j : O(k) Programování s omezujícími podmínkami I, 9. října 2003 9 Propagace omezení
Algoritmus PC-1 Jak udělat CSP konzistentní po cestě? Provedeme revizi každé cesty délky 2 Revize cesty odstraní dvojice již zrevidované cesty opět nekonzistentní Revize cesty opakujeme dokud jsou nějaké dvojice smazány Princip je podobný jako u AC-1 procedure PC-1(G) repeat Changed := false for m := 1 to n for i := 1 to n for j := 1 to n Changed := revise-3((i, j), m) or Changed until not(changed) end PC-1 Programování s omezujícími podmínkami I, 9. října 2003 10 Propagace omezení
Složitost algoritmu PC-1 Celková složitost O(n 5 k 5 ) odvození podobné jako pro AC-1 3 cykly pro trojice hodnot O(n 3 ) revise-3 O(k 3 ) O(n 2 k 2 ) počet opakování repeat cyklu jeden cyklus smaže (v nejhorším případě) právě jednu dvojici hodnot celkem n 2 k 2 hodnot (n 2 dvojic proměnných, k 2 dvojic hodnot pro každou dvojici proměnných) Programování s omezujícími podmínkami I, 9. října 2003 11 Propagace omezení
Složitost algoritmu PC-1 Celková složitost O(n 5 k 5 ) odvození podobné jako pro AC-1 3 cykly pro trojice hodnot O(n 3 ) revise-3 O(k 3 ) O(n 2 k 2 ) počet opakování repeat cyklu jeden cyklus smaže (v nejhorším případě) právě jednu dvojici hodnot celkem n 2 k 2 hodnot (n 2 dvojic proměnných, k 2 dvojic hodnot pro každou dvojici proměnných) Neefektivita PC-1 opakovaná revize všech cest, i když pro ně nedošlo k žádné změně při revizi stačí kontrolovat jen zasažené cesty podobně jako pro PC-1 Programování s omezujícími podmínkami I, 9. října 2003 11 Propagace omezení
Složitost algoritmu PC-1 Celková složitost O(n 5 k 5 ) odvození podobné jako pro AC-1 3 cykly pro trojice hodnot O(n 3 ) revise-3 O(k 3 ) O(n 2 k 2 ) počet opakování repeat cyklu jeden cyklus smaže (v nejhorším případě) právě jednu dvojici hodnot celkem n 2 k 2 hodnot (n 2 dvojic proměnných, k 2 dvojic hodnot pro každou dvojici proměnných) Neefektivita PC-1 opakovaná revize všech cest, i když pro ně nedošlo k žádné změně při revizi stačí kontrolovat jen zasažené cesty podobně jako pro PC-1 cesty stačí brát pouze s jednou orientací... R ij je totéž co R ji příklad: V 1, V 2 {a, b}, V 3 {a, b, c}, V 1 V 2, V 2 V, 3 V 1 V 3 důsledek revise-3((1, 3), 2) a revise-3((3, 1), 2)? Programování s omezujícími podmínkami I, 9. října 2003 11 Propagace omezení
Algoritmus PC-2 Cesty beru pouze s jednou orientací aktualizuji pouze jednu z R ij, R ji Do fronty dávám pouze zasažené cesty podobná modifikace jako AC-3 revise-3((i, j), m) mění R ij, stačí tedy aktualizovat R lj a R li Programování s omezujícími podmínkami I, 9. října 2003 12 Propagace omezení
Algoritmus PC-2 Cesty beru pouze s jednou orientací aktualizuji pouze jednu z R ij, R ji Do fronty dávám pouze zasažené cesty podobná modifikace jako AC-3 revise-3((i, j), m) mění R ij, stačí tedy aktualizovat R lj a R li procedure PC-2(G) Q := {(i, m, j) 1 i < j n, 1 m n, m i, m j} //seznam cest pro revizi while Q non empty do vyber a smaž trojici (i, m, j) z Q if revise-3((i, j), m) then Q := Q {(l, i, j)(l, j, i) 1 l n, l i, l j} end while end PC-2 Programování s omezujícími podmínkami I, 9. října 2003 12 Propagace omezení
Složitost algoritmu PC-2 Složitost O(n 3 k 5 ) každé (i, m, j) může být ve frontě maximálně k 2 krát = O(k 2 ) když je (i, m, j) přidáno do fronty, R ij bylo redukováno alespoň o jednu hodnotu celkem n 3 trojic (i, m, j) = O(n 3 ) revise-3 O(k 3 ) Programování s omezujícími podmínkami I, 9. října 2003 13 Propagace omezení
Složitost algoritmu PC-2 Složitost O(n 3 k 5 ) každé (i, m, j) může být ve frontě maximálně k 2 krát = O(k 2 ) když je (i, m, j) přidáno do fronty, R ij bylo redukováno alespoň o jednu hodnotu celkem n 3 trojic (i, m, j) = O(n 3 ) revise-3 O(k 3 ) Algoritmus není optimální podobně jako AC-3 existuje algoritmus PC-4 založen na počítání podpor složitost PC-4 je O(n 3 k 3 ), tj. optimální Programování s omezujícími podmínkami I, 9. října 2003 13 Propagace omezení
Na půli cesty od AC k PC Jak oslabit PC, aby algoritmus: neměl pamět ové nároky PC neměnil graf podmínek byl silnější než AC? Programování s omezujícími podmínkami I, 9. října 2003 14 Propagace omezení
Na půli cesty od AC k PC Jak oslabit PC, aby algoritmus: neměl pamět ové nároky PC neměnil graf podmínek byl silnější než AC? Omezená konzistence po cestě testujeme PC jen v případě, když je šance, že to povede k vyřazení hodnoty z domény proměnné Příklad: V 1, V 2 {a, b}, V 3 {a, b, c}, V 1 V 2, V 2 V 3, V 1 V 3 je AC ale není PC RPC odstraní z domény V 3 hodnoty a, b Programování s omezujícími podmínkami I, 9. října 2003 14 Propagace omezení
Omezená konzistence po cestě PC hrany se testuje pouze tehdy, pokud vyřazení dvojice může vést k vyřazení některého z prvků z domény příslušné proměnné Jak to poznáme? Jedná se o jedinou vzájemnou podporu Proměnná V i je omezeně konzistentní po cestě (restricted path consistent): každá hrana vedoucí z V i je hranově konzistentní pro každé a D i platí: je-li b jediná podpora a ve vrcholu j, potom v každém vrcholu k (spojenem s i a j) existuje hodnota c tak, že (a, c) a (b, c) jsou kompatibilní s příslušnými podmínkami Algoritmus: založen na AC-4 + seznam cest pro PC (viz Barták přednáška) Programování s omezujícími podmínkami I, 9. října 2003 15 Propagace omezení
k-konzistence mají AC a PC něco společného? AC: rozšiřujeme jednu hodnotu do druhé proměnné PC: rozšířujeme dvojici hodnot do třetí proměnné... můžeme pokračovat Programování s omezujícími podmínkami I, 9. října 2003 16 Propagace omezení
k-konzistence mají AC a PC něco společného? AC: rozšiřujeme jednu hodnotu do druhé proměnné PC: rozšířujeme dvojici hodnot do třetí proměnné... můžeme pokračovat CSP je k-konzistentní právě tehdy, když můžeme libovolné konzistentní ohodnocení (k-1) různých proměnných rozšířit do libovolné k-té proměnné Programování s omezujícími podmínkami I, 9. října 2003 16 Propagace omezení
k-konzistence mají AC a PC něco společného? AC: rozšiřujeme jednu hodnotu do druhé proměnné PC: rozšířujeme dvojici hodnot do třetí proměnné... můžeme pokračovat CSP je k-konzistentní právě tehdy, když můžeme libovolné konzistentní ohodnocení (k-1) různých proměnných rozšířit do libovolné k-té proměnné = 1,2,3 = 1,2,3 = 1,2,3 = 4 = 4-konzistentní graf Programování s omezujícími podmínkami I, 9. října 2003 16 Propagace omezení
Silná k-konzistence 3-konzistentní graf A 1,2 B C = 1,2 = 1,2,3 není 2-konzistentní = Programování s omezujícími podmínkami I, 9. října 2003 17 Propagace omezení
3-konzistentní graf Silná k-konzistence A 1,2 B C = 1,2 = 1,2,3 = není 2-konzistentní (1, 1) lze rozšířit na (1, 1, 1) (3) nelze rozšířit (2, 2) lze rozšířit na (2, 2, 2) (1, 3) ani (2, 3) nejsou konzistentní dvojice (nerozšiřujeme je) Programování s omezujícími podmínkami I, 9. října 2003 17 Propagace omezení
3-konzistentní graf Silná k-konzistence A 1,2 B C = 1,2 = 1,2,3 = není 2-konzistentní (1, 1) lze rozšířit na (1, 1, 1) (3) nelze rozšířit (2, 2) lze rozšířit na (2, 2, 2) (1, 3) ani (2, 3) nejsou konzistentní dvojice (nerozšiřujeme je) CSP je silně k-konzistentní právě tehdy, když je j-konzistentní pro každé j k Programování s omezujícími podmínkami I, 9. října 2003 17 Propagace omezení
3-konzistentní graf Silná k-konzistence A 1,2 B C = 1,2 = 1,2,3 = není 2-konzistentní (1, 1) lze rozšířit na (1, 1, 1) (3) nelze rozšířit (2, 2) lze rozšířit na (2, 2, 2) (1, 3) ani (2, 3) nejsou konzistentní dvojice (nerozšiřujeme je) CSP je silně k-konzistentní právě tehdy, když je j-konzistentní pro každé j k Silná k-konzistence k-konzistence Silná k-konzistence j-konzistence j k k-konzistence silná k-konzistence Programování s omezujícími podmínkami I, 9. října 2003 17 Propagace omezení
3-konzistentní graf Silná k-konzistence A 1,2 B C = 1,2 = 1,2,3 = není 2-konzistentní (1, 1) lze rozšířit na (1, 1, 1) (3) nelze rozšířit (2, 2) lze rozšířit na (2, 2, 2) (1, 3) ani (2, 3) nejsou konzistentní dvojice (nerozšiřujeme je) CSP je silně k-konzistentní právě tehdy, když je j-konzistentní pro každé j k Silná k-konzistence k-konzistence Silná k-konzistence j-konzistence j k k-konzistence silná k-konzistence NC = silná 1-konzistence = 1-konzistence AC = (silná) 2-konzistence PC = (silná) 3-konzistence Programování s omezujícími podmínkami I, 9. října 2003 17 Propagace omezení
Konzistence pro nalezení řešení Máme-li graf s n vrcholy, jak silnou konzistenci potřebujeme, abychom přímo našli řešení? silná n-konzistence je nutná pro graf s n vrcholy Programování s omezujícími podmínkami I, 9. října 2003 18 Propagace omezení
Konzistence pro nalezení řešení Máme-li graf s n vrcholy, jak silnou konzistenci potřebujeme, abychom přímo našli řešení? silná n-konzistence je nutná pro graf s n vrcholy n-konzistence nestačí (viz předchozí příklad) Programování s omezujícími podmínkami I, 9. října 2003 18 Propagace omezení
Konzistence pro nalezení řešení Máme-li graf s n vrcholy, jak silnou konzistenci potřebujeme, abychom přímo našli řešení? silná n-konzistence je nutná pro graf s n vrcholy n-konzistence nestačí (viz předchozí příklad) silná k-konzistence pro k<n také nestačí 1,2,...,n 1 = = = = 1,2,...,n 1 = = = = = 1,2,...,n 1 = 1,2,...,n 1 graf s n vrcholy domény 1..(n-1) Programování s omezujícími podmínkami I, 9. října 2003 18 Propagace omezení
Konzistence pro nalezení řešení Máme-li graf s n vrcholy, jak silnou konzistenci potřebujeme, abychom přímo našli řešení? silná n-konzistence je nutná pro graf s n vrcholy n-konzistence nestačí (viz předchozí příklad) silná k-konzistence pro k<n také nestačí 1,2,...,n 1 = = = = 1,2,...,n 1 = = = = = 1,2,...,n 1 = 1,2,...,n 1 graf s n vrcholy domény 1..(n-1) silně k-konzistentní pro každé k<n přesto nemá řešení Programování s omezujícími podmínkami I, 9. října 2003 18 Propagace omezení
Obecné algoritmy pro dosažení k-konzistence Rozšíření revize hrany a revize cesty postupně odstraňujeme prvky z relace nad (k-1) proměnnými Aktualizujeme relace nad každou (k-1)-ticí proměnných musíme si pamatovat (k-1)-tice hodnot Programování s omezujícími podmínkami I, 9. října 2003 19 Propagace omezení
Obecné algoritmy pro dosažení k-konzistence Rozšíření revize hrany a revize cesty postupně odstraňujeme prvky z relace nad (k-1) proměnnými Aktualizujeme relace nad každou (k-1)-ticí proměnných musíme si pamatovat (k-1)-tice hodnot Obecný algoritmus rozšíření AC-1 a PC-1 opakování revizí nad (k-1)-ticemi dokud dochází ke změnám Velká pamět ová i časová složitost v praxi se pro vyšší k nepoužívá Algoritmy i složitost viz Dechter: Constraint Processing Programování s omezujícími podmínkami I, 9. října 2003 19 Propagace omezení
Konzistence pro nebinární omezení
Pojmy a značení Rozsah omezení scope(c): množina proměnných, na kterých je C definováno k-tice t hodnot patřících do C: t C Proměnná x scope(c), k-tice t C: t[x] je hodnota proměnné x v t Příklad: A,B,C {0,1,2}, A<B Programování s omezujícími podmínkami I, 9. října 2003 21 Propagace omezení
Domain consistency Doménová konzistence zobecnění hranové konzistence, nazývána také generalized arc-consistency Hodnota a proměnné x scope(c) má doménovou podporu t v C, jestliže t C a platí a = t[x] pro každé y scope(c) platí t[y] D y Programování s omezujícími podmínkami I, 9. října 2003 22 Propagace omezení
Domain consistency Doménová konzistence zobecnění hranové konzistence, nazývána také generalized arc-consistency Hodnota a proměnné x scope(c) má doménovou podporu t v C, jestliže t C a platí a = t[x] pro každé y scope(c) platí t[y] D y Princip doménové podpory stejný jako u dřívější podpory v kontextu AC Programování s omezujícími podmínkami I, 9. října 2003 22 Propagace omezení
Domain consistency Doménová konzistence zobecnění hranové konzistence, nazývána také generalized arc-consistency Hodnota a proměnné x scope(c) má doménovou podporu t v C, jestliže t C a platí a = t[x] pro každé y scope(c) platí t[y] D y Princip doménové podpory stejný jako u dřívější podpory v kontextu AC Příklad: A,B {0, 1}, C {1, 2}, A #= B+C, 0 u A nemá podporu, 1 u A má podporu (1,0,1) Programování s omezujícími podmínkami I, 9. října 2003 22 Propagace omezení
Domain consistency Doménová konzistence zobecnění hranové konzistence, nazývána také generalized arc-consistency Hodnota a proměnné x scope(c) má doménovou podporu t v C, jestliže t C a platí a = t[x] pro každé y scope(c) platí t[y] D y Princip doménové podpory stejný jako u dřívější podpory v kontextu AC Příklad: A,B {0, 1}, C {1, 2}, A #= B+C, 0 u A nemá podporu, 1 u A má podporu (1,0,1) Omezení je doménově konzistentní, jestliže každá hodnota a proměnné x scope(c) má doménovou podporu v C CSP je doménově konzistentní, jestliže jsou všechny jeho omezení doménově konzistentní. Příklad (pokračování): po provedení doménové konzistence dostaneme A=1, B=0, C=1 Programování s omezujícími podmínkami I, 9. října 2003 22 Propagace omezení
Konzistence mezí Bounds consistency BC: slabší než doménová konzistence propagace pouze při změně minimální nebo maximální hodnoty v doméně proměnné tedy došlo ke změně mezí domény proměnné Programování s omezujícími podmínkami I, 9. října 2003 23 Propagace omezení
Konzistence mezí Bounds consistency BC: slabší než doménová konzistence propagace pouze při změně minimální nebo maximální hodnoty v doméně proměnné tedy došlo ke změně mezí domény proměnné Konzistence mezí pro nerovnice A #> B => min(a) = min(b)+1, max(b) = max(a)-1 příklad: A in 4..10, B in 6..18, A #> B min(a) = 6+1 A in 7..10 max(b) = 10-1 B in 6..9 podobně: A #< B, A #>= B, A #=< B Jak je to tedy pro nebinární omezení? Programování s omezujícími podmínkami I, 9. října 2003 23 Propagace omezení
Konzistence mezí a aritmetická omezení A #= B + C => min(a) = min(b)+min(c), max(a) = max(b)+max(c) min(b) = min(a)-max(c), max(b) = max(a)-min(c) min(c) = min(a)-max(b), max(c) = max(a)-min(b) Programování s omezujícími podmínkami I, 9. října 2003 24 Propagace omezení
Konzistence mezí a aritmetická omezení A #= B + C => min(a) = min(b)+min(c), max(a) = max(b)+max(c) min(b) = min(a)-max(c), max(b) = max(a)-min(c) min(c) = min(a)-max(b), max(c) = max(a)-min(b) Změna min(a)vyvolá pouze změnu min(b) a min(c) Změna max(a)vyvolá pouze změnu max(b) a max(c),... Programování s omezujícími podmínkami I, 9. října 2003 24 Propagace omezení
Konzistence mezí a aritmetická omezení A #= B + C => min(a) = min(b)+min(c), max(a) = max(b)+max(c) min(b) = min(a)-max(c), max(b) = max(a)-min(c) min(c) = min(a)-max(b), max(c) = max(a)-min(b) Změna min(a)vyvolá pouze změnu min(b) a min(c) Změna max(a)vyvolá pouze změnu max(b) a max(c),... příklad: A in 1..10, B in 1..10, A #= B + 2, A #> 5, A #\= 8 Programování s omezujícími podmínkami I, 9. října 2003 24 Propagace omezení
Konzistence mezí a aritmetická omezení A #= B + C => min(a) = min(b)+min(c), max(a) = max(b)+max(c) min(b) = min(a)-max(c), max(b) = max(a)-min(c) min(c) = min(a)-max(b), max(c) = max(a)-min(b) Změna min(a)vyvolá pouze změnu min(b) a min(c) Změna max(a)vyvolá pouze změnu max(b) a max(c),... příklad: A in 1..10, B in 1..10, A #= B + 2, A #> 5, A #\= 8 A #= B + 2 Programování s omezujícími podmínkami I, 9. října 2003 24 Propagace omezení
Konzistence mezí a aritmetická omezení A #= B + C => min(a) = min(b)+min(c), max(a) = max(b)+max(c) min(b) = min(a)-max(c), max(b) = max(a)-min(c) min(c) = min(a)-max(b), max(c) = max(a)-min(b) Změna min(a)vyvolá pouze změnu min(b) a min(c) Změna max(a)vyvolá pouze změnu max(b) a max(c),... příklad: A in 1..10, B in 1..10, A #= B + 2, A #> 5, A #\= 8 A #= B + 2 min(a)=1+2, max(a)=10+2 A in 3..10 Programování s omezujícími podmínkami I, 9. října 2003 24 Propagace omezení
Konzistence mezí a aritmetická omezení A #= B + C => min(a) = min(b)+min(c), max(a) = max(b)+max(c) min(b) = min(a)-max(c), max(b) = max(a)-min(c) min(c) = min(a)-max(b), max(c) = max(a)-min(b) Změna min(a)vyvolá pouze změnu min(b) a min(c) Změna max(a)vyvolá pouze změnu max(b) a max(c),... příklad: A in 1..10, B in 1..10, A #= B + 2, A #> 5, A #\= 8 A #= B + 2 min(a)=1+2, max(a)=10+2 A in 3..10 min(b)=1-2, max(b)=10-2 B in 1..8 Programování s omezujícími podmínkami I, 9. října 2003 24 Propagace omezení
Konzistence mezí a aritmetická omezení A #= B + C => min(a) = min(b)+min(c), max(a) = max(b)+max(c) min(b) = min(a)-max(c), max(b) = max(a)-min(c) min(c) = min(a)-max(b), max(c) = max(a)-min(b) Změna min(a)vyvolá pouze změnu min(b) a min(c) Změna max(a)vyvolá pouze změnu max(b) a max(c),... příklad: A in 1..10, B in 1..10, A #= B + 2, A #> 5, A #\= 8 A #= B + 2 min(a)=1+2, max(a)=10+2 A in 3..10 min(b)=1-2, max(b)=10-2 B in 1..8 A #> 5 min(a)=6 A in 6..10 Programování s omezujícími podmínkami I, 9. října 2003 24 Propagace omezení
Konzistence mezí a aritmetická omezení A #= B + C => min(a) = min(b)+min(c), max(a) = max(b)+max(c) min(b) = min(a)-max(c), max(b) = max(a)-min(c) min(c) = min(a)-max(b), max(c) = max(a)-min(b) Změna min(a)vyvolá pouze změnu min(b) a min(c) Změna max(a)vyvolá pouze změnu max(b) a max(c),... příklad: A in 1..10, B in 1..10, A #= B + 2, A #> 5, A #\= 8 A #= B + 2 min(a)=1+2, max(a)=10+2 A in 3..10 min(b)=1-2, max(b)=10-2 B in 1..8 A #> 5 min(a)=6 A in 6..10 min(b)=6-2 B in 4..8 Programování s omezujícími podmínkami I, 9. října 2003 24 Propagace omezení
Konzistence mezí a aritmetická omezení A #= B + C => min(a) = min(b)+min(c), max(a) = max(b)+max(c) min(b) = min(a)-max(c), max(b) = max(a)-min(c) min(c) = min(a)-max(b), max(c) = max(a)-min(b) Změna min(a)vyvolá pouze změnu min(b) a min(c) Změna max(a)vyvolá pouze změnu max(b) a max(c),... příklad: A in 1..10, B in 1..10, A #= B + 2, A #> 5, A #\= 8 A #= B + 2 min(a)=1+2, max(a)=10+2 A in 3..10 min(b)=1-2, max(b)=10-2 B in 1..8 A #> 5 min(a)=6 A in 6..10 min(b)=6-2 B in 4..8 A #\= 8 A in (6..7) \/ (9..10) Programování s omezujícími podmínkami I, 9. října 2003 24 Propagace omezení
Konzistence mezí a aritmetická omezení A #= B + C => min(a) = min(b)+min(c), max(a) = max(b)+max(c) min(b) = min(a)-max(c), max(b) = max(a)-min(c) min(c) = min(a)-max(b), max(c) = max(a)-min(b) Změna min(a)vyvolá pouze změnu min(b) a min(c) Změna max(a)vyvolá pouze změnu max(b) a max(c),... příklad: A in 1..10, B in 1..10, A #= B + 2, A #> 5, A #\= 8 A #= B + 2 min(a)=1+2, max(a)=10+2 A in 3..10 min(b)=1-2, max(b)=10-2 B in 1..8 A #> 5 min(a)=6 A in 6..10 min(b)=6-2 B in 4..8 A #\= 8 A in (6..7) \/ (9..10) Vyzkoušejte si: A #= B - C, A #>= B + C Programování s omezujícími podmínkami I, 9. října 2003 24 Propagace omezení
Definice konzistence mezí Hodnota a proměnné x scope(c) má intervalovou podporu t v C, jestliže t C a platí a = t[x] pro každé y scope(c) platí t[y] [min(d y ), max(d y )] Programování s omezujícími podmínkami I, 9. října 2003 25 Propagace omezení
Definice konzistence mezí Hodnota a proměnné x scope(c) má intervalovou podporu t v C, jestliže t C a platí a = t[x] pro každé y scope(c) platí t[y] [min(d y ), max(d y )] tato podmínka byla u doménové podpory ve tvaru: pro každé y scope(c) platí t[y] D y Programování s omezujícími podmínkami I, 9. října 2003 25 Propagace omezení
Definice konzistence mezí Hodnota a proměnné x scope(c) má intervalovou podporu t v C, jestliže t C a platí a = t[x] pro každé y scope(c) platí t[y] [min(d y ), max(d y )] tato podmínka byla u doménové podpory ve tvaru: pro každé y scope(c) platí t[y] D y Příklad: A in (6..7)\/(9..10), B in 4..8, A #= B + 2 Programování s omezujícími podmínkami I, 9. října 2003 25 Propagace omezení
Definice konzistence mezí Hodnota a proměnné x scope(c) má intervalovou podporu t v C, jestliže t C a platí a = t[x] pro každé y scope(c) platí t[y] [min(d y ), max(d y )] tato podmínka byla u doménové podpory ve tvaru: pro každé y scope(c) platí t[y] D y Příklad: A in (6..7)\/(9..10), B in 4..8, A #= B + 2 hodnota 6 proměnné B má intervalovou podporu (8,6) ale nemá doménovou podporu Programování s omezujícími podmínkami I, 9. října 2003 25 Propagace omezení
Definice konzistence mezí Hodnota a proměnné x scope(c) má intervalovou podporu t v C, jestliže t C a platí a = t[x] pro každé y scope(c) platí t[y] [min(d y ), max(d y )] tato podmínka byla u doménové podpory ve tvaru: pro každé y scope(c) platí t[y] D y Příklad: A in (6..7)\/(9..10), B in 4..8, A #= B + 2 hodnota 6 proměnné B má intervalovou podporu (8,6) ale nemá doménovou podporu Omezení má konzistentní meze, jestliže každá hodnota a proměnné x scope(c) má intervalovou podporu v C CSP má konzistentní meze, jestliže všechna jeho omezení mají konzistentní meze. Programování s omezujícími podmínkami I, 9. října 2003 25 Propagace omezení