N půli esty od AC k PC Progrmování s omezujíími podmínkmi Jk oslit PC, y lgoritmus: neměl pměťové nároky PC, neměnil grf podmínek, yl silnější než AC? Testujeme PC jen v přípdě, když je šne, že to povede k vyřzení hodnoty z domény proměnné! Příkld: Romn Brták Ktedr teoretiké informtiky mtemtiké logiky romn.rtk@mff.uni.z http://ktiml.mff.uni.z/~rtk e f d e f d d Omezená konzistene po estě PC hrny se testuje pouze tehdy, pokud vyřzení dvojie může vést k vyřzení některého z prvků z domény příslušné proměnné. Jk to poznáme? Jedná se o jedinou vzájemnou podporu. Vrhol i je omezeně konzistentní po estě (restrited pth onsistent) právě když: kždá hrn vedouí z i je hrnově konzistentní (AC) pro kždé D i pltí: je-li jediná podpor ve vrholu j, potom v kždém vrholu k (spojeném s i j) existuje hodnot tk, že (,) (,) jsou komptiilní s příslušnými podmínkmi (PC). i k j Zloženo n AC-4: počítání podpor + seznm est pro PC Algoritmus RPC iniilize proedure INITIALIZE(G) Q AC {}, Q PC {}, S {} % vyprázdnění dtovýh struktur for eh (i,j) rs(g) do for eh D i do totl 0 for eh D j do if (,) is onsistent ording to the onstrint C i,j then totl totl + 1, S j, S j, {i,>} ounter[(i,j),] totl if ounter[(i,j),] = 0 then Q AC Q AC {i,>}, delete from D i else if ounter[(i,j),] = 1 then for eh k suh tht (i,k) rs(g) & (k,j) rs(g) do end dif return (Q AC, Q PC ) end INITIALIZE Q PC Q PC {(i,>,j,k)}
Algoritmus RPC kontrol AC proedure PRUNE(Q AC, Q PC ) while Q AC non empty do selet nd delete ny pir j,> from Q AC for eh i,> from S j, do ounter[(i,j),] ounter[(i,j),] - 1 if ounter[(i,j),] = 0&"" is still in D i then delete "" from D i Q AC Q AC {i,>} else if ounter[(i,j),] = 1 then for eh k suh tht (i,k) rs(g) & (k,j) rs(g) do Q PC Q PC {(i,>,j,k)} else for eh k suh tht (i,k) rs(g) & (k,j) rs(g) do if ounter[(i,k),] = 1 then Q PC Q PC {(i,>,k,j)} end while return Q PC end PRUNE Algoritmus RPC Nejprve uděláme AC potom testuje vyrné PC, přípdně ě se vríme k AC. proedure RPC(G) (Q AC, Q PC ) INITIALIZE(G) Q PC PRUNE(Q AC,Q PC ) %prvníěh AC while Q PC non empty do selet nd delete ny triple (i,>,j,k) from Q PC if D i then {j,>} {j,x> S i x D j } % jediná podpor pro if {k,> S i S j D k }= then ounter[(i,j),] 0 delete "" from D i Q PC PRUNE({i,>}, Q PC ) % opkujeme AC end while end RPC Mjí AC PC něo ě společného? č k-konzistenekonzistene AC: rozšiřujeme jednu hodnotu do druhé proměnné PC: rozšiřujeme dvojii hodnot do třetí proměnné můžeme pokrčovt CSP je k-konzistentní,,právě když liovolné konzistentní ohodnoení (k-1) různýh proměnnýh můžeme rozšířit do liovolné k-té proměnné. 4 4-konzistentní t grf 12 1,2 = 12 1,2 = 123 Silná k-konzistene konzistene 3-konzistentní grf není 2-konzistentní grf! = CSP je silně k-konzistentní, právě když je j-konzistentní pro kždé j k. Vlstnosti: Zřejmě: silná k-konzistene k-konzistene Dokone: silná k-konzistene j-konzistene j k Oeně nepltí: k-konzistene konzistene silná k-konzistene konzistene Pojmenování: NC = silná 1-konzistene = 1-konzistene AC = (silná) 2-konzistene PC = (silná) 3-konzistene někdy se říká silná konzistene po estě, pokud NC+AC+PC
Jk velké k potřeujeme? Máme-li grf s n vrholy, jk silnou konzisteni potřeujeme yhom přímo nšli řešení? Pro grf s n vrholy potřeujeme silnou n-konzisteni! n-konzistene nestčí - viz předhozí příkld silná k-konzistene pro kn tké nestčí A o tento grf? 1,2 =,, grf s n vrholy domény 1..(n-1) 1) silně k-konzistentní pro kždé kn přesto nemá řešení Stčí nám pouze (D)AC! 123 123 Protože se jedná o strom. Řešení ez nvrení CSP prolém vyřešíme ez nvrení, pokud při nějkém uspořádání proměnnýh můžeme pro kždou proměnnou vždy njít hodnotu komptiilní s již ohodnoenými proměnnými. 1, 2 = 1, 2 1, 2, 3 1, 2, 3 1 2 3 4 Jk zjistit úroveň konzistene potřenou pro dný grf? Pozorování: proměnná musí ýt komptiilní s již ohodnoenými proměnnými tj. s tolik proměnnými, kolik má zpětnýh hrn pro k zpětnýh hrn potřeujeme (k+1)-konzisteni je-li m mximum počtu zpětnýh hrn pro všehny vrholy, stčí nám silná (m+1)-konzistene při různém uspořádání vrholů je počet zpětnýh hrn různý smozřejmě hledáme uspořádání s nejmenším m Uspořádný grf je grf s lineárním uspořádáním vrholů. Šířk grfu Šířk vrholu v uspořádném grfu je počet hrn vedouíh z tohoto vrholu do předhozíh vrholů. Šířk uspořádného grfu je mximum z šířek jeho vrholů. Šířk grfu je minimum z šířek všeh jeho uspořádnýh grfů. Šířk grfu je 1. 1 1 1 2 1 2 proedure MinWidthOrdering((V,E)) Q {} while V not empty do N selet nd delete node with the smllest #edges from (V,E) enqueue N to Q return Q end MinWidthOrdering Šířk grfu stupeň konzistene Tvrzení: Pokud je grf podmínek silně k-konzistentní k>w, kde w je šířk grfu podmínek, potom existuje uspořádání proměnnýh pro vyřešení CSP ez nvrení. Důkz: grf má šířku w, tj. existuje uspořádný grf s touto šířkou speiálně, počet zpětnýh hrn pro kždou proměnnou je mx. w proměnné ohodnoujeme v pořdí uspořádání grfu nyní, pokud ohodnoujeme proměnnou: musíme njít hodnotu komptiilní se všemi již ohodnoenými proměnnými, které jsou s proměnnou spojené podmínkou (hrnou) nehť tkovýh proměnnýh je m, potom m w grf je (m+1)-konzistentní, tedy tková hodnot musí existovt 1 i j l mximálně w
Oená směrová konzistene AC (silná 2-konzistene) stčí n stromové grfy (šířk 1). Jk je to s PC vyššími typy konzistene? PC mění strukturu grfu - přidává nové hrny! Tedy, pokud vezmeme grf šířky 2 provedeme PC, můžeme zvětšit šířku grfu! Co s tím? Nově přidná hrn po PC Pozorování 1: n stromy nám stčí DAC (děláme ve směru ke kořenu) CSP je směrově k-konzistentní při nějkém uspořádání proměnnýh, právě když liovolné konzistentní ohodnoení (k-1) různýh proměnnýh můžeme rozšířit do liovolné k-té proměnné, která je v uspořádání z touto (k-1)-tií. Pozorování 2: Adptivní konzistene v elém grfu nepotřeujeme všude stejnou konzisteni Stčí AC Stčí PC Stčí AC Adptivní konzistene zjišťuje směrovou i-konzisteni, kde i se mění podle šířky zprovávného vrholu vrholy jsou zprovávány ve směru proti uspořádání grfu nové hrny přiývjí pouze v dosud nezprovné části výslednou topologii (šířku) grfu lze zjistit před spuštěním lgoritmu (i,j)-konzistene Při k-konzisteni kkonzisteni rozšiřujeme (k-1) proměnnýh o dlší proměnnou, tj. vyřzujeme (k-1)-tie, které nelze rozšířit n dlší proměnnou. Můžeme ještě zoenit! CSP je (i,j)-konzistentní, právě když liovolné konzistentní ohodnoení i různýh proměnnýh můžeme rozšířit do liovolné množiny j neo méně než j dlšíh proměnnýh. CSP je silně (i,j)-konzistentní, právě když je (k,j)-konzistentní pro kždé k i. k-konzistene AC PC = (k-1,1)-konzistene = (1,1)-konzistene = (2,1)-konzistene Inverzní konzistene Je-li v (i,j)-konzisteni i i i větší než 1, musíme provt s i-tiemi, i ož znmená velké pměťové nároky (viz PC). Co to zkusit nopk, tj. i neháme 1 zvětšujeme j? První náznk jsme již měli: RPC je (1,1)-konzistene očs (1,2)-konzistene (1,k)-konzisteni nzýváme inverzní konzistení. Pro dnou hodnotu hledáme podporu v dlšíh k proměnnýh. Pokud tková podpor hyí, vyřdíme hodnotu z domény. inverzní hrnová konzistene = hrnová konzistene inverzní konzistene po estě (PIC) = (1,2)-konzistene Nelze rozšířit do zylýh dvou proměnnýh.
(Neighourhood Inverse Consisteny) NIC Pozorování: Zjišťování inverzní konzistene má smysl, pokud je lespoň ň jedn testoví t proměnná svázná s dnou proměnnou. Můžeme zjišťovt konzisteni právě jen v okolí kždé proměnné. CSP je inverzně konzistentní pro okolí (NIC), právě když pro liovolnou hodnotu h liovolné proměnné X existuje řešení prolému vzniklého z okolí X, které [řešení] je konzistentní s h. proedure NIC((V,E)) Q V while Q not empty do V selet nd delete vrile from Q deleted flse for eh H in D V do if no solution for Neighourhood(X) omptile with H then remove H from D V deleted d true if D V empty then return fil if deleted then Q Q Neighourhood(X) return true end NIC Bodová konzistene Můžeme liovolnou lokální konzistenční tehniku dále posílit? ANO! Zkusíme, zd pro kždou hodnotu je zylý prolém konzistentní. CSP je odově A-konzistentní (singleton A-onsisteny), kde A je liovolná konzistenční tehnik, právě když pro liovolnou hodnotu h liovolné proměnné X je prolém omezený n X=h A-konzistentní. Vlstnosti: + podoně jkonicrpcodstrňuje odstrňuje jen hodnoty z domény proměnnýh + sndná implemente - může ýt čsově náročnější (používt optrně) 1) odová A-konzistene A-konzistene 2) A-konzistene B-konzistene odová A-konzistene odová B-konzistene 3) odová (i,j) j)-konzistene > (i,j+1) j+1)-konzistene (SAC>PIC) 4) silná (i+1,j)-konzistene > odová (i,j)-konzistene (PC>SAC) NC = 1-konzistene Přehled konzistenčníh tehnik AC = 2-konzistene = (1,1)-konzistene PC = 3-konzistene = (2,1)-konzistene PIC = (1,2)-konzistene NIC SRPC strong PC SAC PIC RPC AC silnější tehnik neporovntelné tehniky