Programování. s omezujícími podmínkami. Roman Barták. rová hranová konzistence

Podobné dokumenty
Programování. s omezujícími podmínkami. Roman Barták. roman.bartak@mff.cuni.cz

Hranová konzistence. Arc consistency AC. Nejprve se zabýváme binárními CSP. podmínka odpovídá hraně v grafu podmínek

Automatizované řešení úloh s omezeními

Jak oslabit PC, aby algoritmus: neměl paměťové nároky PC, povede k vyřazení hodnoty z domény proměnné! e f. e f. a b. a b. byl silnější než AC?

Optimalizace & soft omezení: algoritmy

5 Orientované grafy, Toky v sítích

Paralelní grafové algoritmy

Binární vyhledávací stromy pokročilé partie

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

Umělá inteligence I. Roman Barták, KTIML.

Grafové algoritmy. Programovací techniky

prochází částečná konzistentní ohodnocení dokud nenajde úplné (konzistentní) ohodnocení Základní princip prohledávání s navracení při řešení CSP:

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Úvod do teorie grafů

V každém kroku se a + b zmenší o min(a, b), tedy vždy alespoň o 1. Jestliže jsme na začátku dostali 2

NPRG030 Programování I, 2018/19 1 / :03:07

Lineární algebra : Násobení matic a inverzní matice

Hledáme efektivní řešení úloh na grafu

4 Stromy a les. Definice a základní vlastnosti stromů. Kostry grafů a jejich počet.

Vraťme se k základům: DFS = Depth First Search

TGH09 - Barvení grafů

Grafové algoritmy. Programovací techniky

Vzdálenost uzlů v neorientovaném grafu

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1

Lineární algebra : Násobení matic a inverzní matice

Heuristické řešení problémů. Seminář APS Tomáš Müller

Stromové rozklady. Definice 1. Stromový rozklad grafu G je dvojice (T, β) taková, že T je strom,

Vrcholová barevnost grafu

TGH05 - aplikace DFS, průchod do šířky

IB108 Sada 1, Příklad 1 Vypracovali: Tomáš Krajča (255676), Martin Milata (256615)

Algoritmus pro hledání nejkratší cesty orientovaným grafem

Union-Find problém. Kapitola 1

GRAFY A GRAFOVÉ ALGORITMY

Jan Březina. 7. března 2017

TGH06 - Hledání nejkratší cesty

Použití dalších heuristik

Úvod do informatiky. Miroslav Kolařík. Zpracováno dle učebního textu R. Bělohlávka: Úvod do informatiky, KMI UPOL, Olomouc 2008.

DobSort. Úvod do programování. DobSort Implementace 1/3. DobSort Implementace 2/3. DobSort - Příklad. DobSort Implementace 3/3

u odpovědí typu A, B, C, D, E: Obsah: jako 0) CLP Constraint Logic Programming

Obsah prezentace. Základní pojmy v teorii o grafech Úlohy a prohledávání grafů Hledání nejkratších cest

NEJKRATŠÍ CESTY I. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

Výroková a predikátová logika - VII

bfs, dfs, fronta, zásobník, prioritní fronta, halda

Hledání v textu algoritmem Boyer Moore

Dynamické programování

Ukážeme si lineární algoritmus, který pro pevné k rozhodne, zda vstupní. stromový rozklad. Poznamenejme, že je-li k součástí vstupu, pak rozhodnout

Konstrukce relace. Postupně konstruujeme na množině všech stavů Q relace i,

Algoritmizace prostorových úloh

ORIENTOVANÉ GRAFY, REPREZENTACE GRAFŮ

bfs, dfs, fronta, zásobník, prioritní fronta, halda

Dynamické datové struktury III.

Grafy. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 13.

TGH05 - aplikace DFS, průchod do šířky

Výhody a nevýhody jednotlivých reprezentací jsou shrnuty na konci kapitoly.

Maticí typu (m, n), kde m, n jsou přirozená čísla, se rozumí soubor mn veličin a jk zapsaných do m řádků a n sloupců tvaru:

Úvod do informatiky. Miroslav Kolařík

Dijkstrův algoritmus

Výroková a predikátová logika - X

TOKY V SÍTÍCH II. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

Základy maticového počtu Matice, determinant, definitnost

Algoritmy na ohodnoceném grafu

Matice. Přednáška MATEMATIKA č. 2. Jiří Neubauer. Katedra ekonometrie FEM UO Brno kancelář 69a, tel

Předmět: Algoritmizace praktické aplikace

Agent pracující v částečně pozorovatelném prostředí udržuje na základě senzorického modelu odhaduje, jak se svět může vyvíjet.

Dijkstrův algoritmus (připomenutí)

Matematika 1 MA1. 2 Determinant. 3 Adjungovaná matice. 4 Cramerovo pravidlo. 11. přednáška ( ) Matematika 1 1 / 29

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Stromy, haldy, prioritní fronty

Programování. s omezujícími podmínkami. SAT a lokáln. Algoritmus GSAT. Algoritmus GSAT. Roman Barták

VYSOKÁ ŠKOLA EKONOMICKÁ V PRAZE. Optimalizace trasy při revizích elektrospotřebičů

Evoluční algoritmy. Podmínka zastavení počet iterací kvalita nejlepšího jedince v populaci změna kvality nejlepšího jedince mezi iteracemi

Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz

Kapitola 7: Návrh relačních databází. Nástrahy relačního návrhu. Příklad. Rozklad (dekompozice)

Základní datové struktury III: Stromy, haldy

Zadání a řešení testu z matematiky a zpráva o výsledcích přijímacího řízení do magisterského navazujícího studia od podzimu 2014

Úvod do vybíravosti grafů, Nullstellensatz, polynomiální metoda

Plánováníá a rozvrhování

Algoritmy a datové struktury

Výroková a predikátová logika - V

Aproximativní algoritmy UIN009 Efektivní algoritmy 1

8 Přednáška z

13. Lineární programování

TGH06 - Hledání nejkratší cesty

Pracovní listy - programování (algoritmy v jazyce Visual Basic) Algoritmus

Informatika navazující magisterské studium Přijímací zkouška z informatiky 2018 varianta A

Základy informatiky. Teorie grafů. Zpracoval: Pavel Děrgel Úprava: Daniela Szturcová

TGH07 - Chytré stromové datové struktury

Dynamické programování

Relační datový model. Integritní omezení. Normální formy Návrh IS. funkční závislosti multizávislosti inkluzní závislosti

Vyberte oblečení tak, aby navzájem ladilo. Proměnné: shirt: {red, white}

Modely Herbrandovské interpretace

[1] Determinant. det A = 0 pro singulární matici, det A 0 pro regulární matici

Unbounded Model Checking

B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11

autoři: Rudolf Bayer, Ed McCreight všechny vnější uzly (listy) mají stejnou hloubku ADS (abstraktní datové struktury)

TGH07 - Chytré stromové datové struktury

10 Důkazové postupy pro algoritmy

Kombinatorika, výpočty

Select sort: krok 1: krok 2: krok 3: atd. celkem porovnání. výběr nejmenšího klíče z n prvků vyžaduje 1 porovnání

Transkript:

Programování s omezujícími podmínkami Roman Barták Katedra teoretické informatiky a matematické logiky roman.bartak@mff.cuni.cz http://ktiml.mff.cuni.cz/~bartak Směrov rová hranová konzistence Definice: CSP je směrově hranově konzistentní (directional arc consistent) při daném uspořádání proměnných, právě když každá hrana (i,j), kde i<j, je hranově konzistentní. Opět kontrolujeme každou hranu, tentokrát v jednom směru. Pokud hrany projdeme v dobrém pořadí, nemusíme revize opakovat! Algoritmus DAC-1 procedure DAC-1(G) for j = nodes(g) to 1 by -1 do for each arc (i,j) in G such that i<j do REVISE((i,j)) if D i = then stop with fail end DAC-1

Pozorování: Vztah DAC k AC CSP je hranově konzistentní, jestliže pro dané uspořádání proměnných je směrově hranově konzistentní v obou směrech. Můžeme AC dosáhnout tak, že aplikujeme DAC v obou směrech? Obecně NE, ale Příklad: X in {1,2}, Y in {1}, Z in {1,2}, při uspořádání X,Y,Z se domény nezmění X Z {1,2} Z Y<Z X Z,Y<Z při uspořádání Z,Y,X se změní pouze Z, ale nedostane AC {2} X Z Z Y<Z {1,2} X Y {1} {1,2} X Y {1} Pokud ale jako první zvolíme uspořádání Z,Y,X, dostaneme AC. Od DAC k AC pro stromové CSP Pokud je DAC aplikováno na stromové CSP nejprve pro uspořádání vrcholů od kořene a po té v obráceném pořadí, potom získáme (plnou) hranovou konzistenci. Důkaz: po prvním běhu DAC zajistíme, že pro každou hodnotu rodičovského vrcholu najdeme podporu (konzistentní hodnotu) u všech potomků p q r a b 3 2 5 4 a b c 1 u v pokud je při druhém běhu DAC (v opačném pořadí) vyřazena nějaká hodnota, potom tato hodnota nebyla podporou žádné hodnoty rodičovského uzlu (tj. hodnoty v rodičovském uzlu neztratily své podpory) a b 5 p q r u v a b c 3 4 1 2 dohromady: každá hodnota má podporu ve všech potomcích (první běh) i v rodiči (druhý běh), tj. jedná se o AC

Je AC dostatečné? Použitím AC odstraníme mnoho nekompatibilních hodnot. Dostaneme potom řešení problému? Víme alespoň zda řešení existuje? NE a NE! Příklad: X Y Y X {1,2} X Z Z {1,2} Y Z {1,2} CSP je hranově konzistentní a přesto nemá žádné řešení K čemu tedy AC je? někdy dá řešení přímo nějaká doména se vyprázdní řešení neexistuje všechny domény jsou jednoprvkové máme řešení v obecném případě alespoň zmenší prohledávaný prostor Konzistence po cestě Jak posílit konzistenci? Budeme se zabývat několika podmínkami najednou! Definice: Cesta (V 0,V 1,, V m ) je konzistentní (path consistent), právě když pro každou dvojici hodnot x D 0 a y D m splňující binární podmínky na 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 i,v i+1 jsou splněny. CSP je konzistentní po cestě, právě když všechny cesty jsou konzistentní. Pozor! Definice PC nezaručuje, že jsou splněny všechny podmínky nad vrcholy cesty, zabývá se pouze podmínkami mezi sousedy. V 4 V 0 V 1 V 2 V 3???

Montanari PC a cesty délky d 2 Zjišťovat konzistenci všech cest není moc praktické. Naštěstí nám stačí prozkoumat pouze cesty délky 2! Tvrzení: CSP je PC, právě 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 1 a) N=2 triviálně platí b) N+1 (za předpokladu, že N platí) i) vezmeme libovolných N+2 vrcholů V 0,V 1,, V 0 n+1 ii) vezmeme libovolné dvě kompatibilní hodnoty x 0 D 0 a x n+1 D n+1 iii) podle a) najdeme hodnotu x n D n tž. P 0,n a P n,n+1 platí iv) podle indukčního kroku najdeme zbylé hodnoty na cestě V 0,V 1,, V n n n+1 Vztah PC a AC Je AC pokryto pomocí PC (je-li CSP PC, potom je i AC)? hrana (i, j) je konzistentní (AC), pokud je cesta (i,j,i) konzistentní (PC) PC tedy implikuje AC Je PC silnější než AC (existuje CSP, které je AC a není PC)? Příklad: X in {1,2}, Y in {1,2}, Z in {1,2}, X Z, X Y, Y Z je AC, ale není PC (X=1, Z=2 nelze rozšířit po cestě X,Y,Z) AC vyřazuje nekompatibilní prvky z domén proměnných. Co bude dělat PC? PC vyřazuje dvojice hodnot PC dělá všechny relace implicitní (A<B,B<C A+1<C) unární podmínka = doména proměnné

Reprezentace podmínek V PC potřebujeme vyřazovat jednotlivé dvojice hodnot je potřeba pamatovat si podmínky explicitně Binární podmínka = {0,1}-matice 0 - hodnoty nejsou kompatibilní 1- hodnoty jsou kompatibilní Příklad (problém 5-ti dam) podmínka mezi dámami i a j má tvar: r(i) r(j) & i-j r(i)-r(j) maticový záznam pro dámy A(1) a B(2) 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 1 2 3 4 5 A B C D E maticový záznam pro dámy A(1) a C(3) 0 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 0 Operace s podmínkami Průnik podmínek R ij &R ij AND po odpovídajících polích A<B & A B-1 B-1 A<B 011 110 010 001 & 111 = 001 000 111 000 Složení podmínek R ik *R kj R ij binární násobení matic A<B * B<C A<C-1 011 011 001 001 * 001 = 000 000 000 000 Indukovaná podmínka se spojuje s původní podmínkou R ij &(R ik *R kj ) R ij R 25 & (R 21 * R 15 ) R 25 01101 00111 01110 01101 10110 00011 10111 10110 11011 & 10001 * 11011 = 01010 01101 11000 11101 01101 10110 11100 01110 10110 1 2 3 4 5 Poznámky: R ij = R T ji, R ii je diagonální matice reprezentující doménu REVISE((i,j)) z AC algoritmů dělá R ii R ii &(R ij *R jj *R ji ) A B C D E

Skládáme podmínky A,B,C in {1,2,3}, B>1 A<C, A=B, B>C-2 A A=B A<C B>1 C B>C-2 011 001 000 100 000 & 010 * 010 * 001 001 110 111 111 = 000 001 000 Jak udělat cestu (i,k,j) konzistentní? R ij R ij &(R ik *R kk *R kj ) Jak udělat CSP konzistentní? Algoritmus PC-1 opakovat konzistenci všech cest (délky 2) dokud se mění domény Algoritmus PC-1 procedure PC-1(Vars,Constraints) n Vars, Y n Constraints repeat Pokud Y 0 Y n zde použijeme for k = 1 to n do dostaneme AC-1 for i = 1 to n do for j = 1 to n do Y k ij Y k-1 ij &(Y k-1 ik *Y k-1 kk *Y k-1 kj) until Y n =Y 0 Constraints Y 0 end PC-1 Y k ii ii Yk-1 Yk-1 ii ii &(Yk-1 &(Yk-1 ik ik *Yk-1 *Yk-1 kk kk *Yk-1 *Yk-1 ki ) ki )

Je snad na PC-1 něco neefektivního? pár drobností není potřeba držet všechny kopie Y k stačí jedna kopie a indikátor změny některé výpočty nemají žádný efekt (Y k kk = Y k-1 kk) polovinu výpočtů lze ušetřit (Y ji = Y T ij) zásadní problém Jak zlepšit PC-1? při změně domény podmínky se znova revidují všechny cesty ale stačí procházet jen cesty ovlivněné revizí procedure REVISE_PATH((i,k,j)) Z Y ij &(Y ik *Y kk *Y kj ) if Z=Y ij then return false Y ij Z return true end REVISE_PATH Pokud dojde ke ke změně budeme re-revidovat zasažené cesty Algoritmus revize cesty Cesty ovlivněné revizí Protože Y ji = Y T ij, stačí brát pouze cesty (i,k,j) pro i j. Nechť při revizi cesty (i,k,j) došlo ke změně domény podmínky (i,j) Situace a: i<j je potřeba znova revidovat cesty obsahující (i,j) nebo (j,i) cesty (i,j,j) a (i,i,j) není potřeba revidovat (REVISE zde nic nezmění) S a (i,j) = {(i,j,m) i m n & m j} {(m,i,j) 1 m j & m i} {(j,i,m) j < m n} {(m,j,i) 1 m < i} i j S a (i,j) = 2n-2 Situace b: i=j je potřeba znova revidovat cesty obsahující i uvnitř cesty (i,i,i) a (k,i,k) není potřeba revidovat S b (i,j) = {(p,i,m) 1 m n & 1 p m} - {(i,i,i),(k,i,k)} S b (i,j) = n*(n+1)/2-2

Algoritmus PC-2 Cesty bereme jen s jednou orientací (pozor neplést s DPC) Po revizi kontrolujeme jen zasažené cesty Algoritmus PC-2 procedure PC-2(G) n nodes(g) Q {(i,k,j) 1 i j n & i k & j k} while Q non empty do select and delete (i,k,j) from Q if REVISE_PATH((i,k,j)) then Q Q RELATED_PATHS((i,k,j)) end while end PC-2 procedure RELATED_PATHS((i,k,j)) if i<j then return S a (i,j) else return S b (i,j) end RELATED_PATHS Další PC algoritmy PC-3 (Mohr, Henderson - 1986) založen na principu počítání podpor (jako AC-4) algoritmus je chybný! Pokud zjistí, že dvojice (a,b) nemá na hraně (i,j) podporu u další proměnné, vyřadí a z D i a b z D j. PC-4 (Han, Lee - 1988) opravuje PC-3 algoritmus založen na počítání podpor pro dvojice (b,c) hrany (i,j) PC-5 (Singh - 1995) využívá myšlenky AC-6 pamatuje si pouze jednu podporu a při její ztrátě hledá další

Směrov rová konzistence po cestě Podobně jako u AC můžeme i složitost PC algoritmů zmenšit zavedením směrovosti cesty. Definice: CSP je směrově konzistentní po cestě (directional path consistent) při daném uspořádání proměnných, právě když všechny cesty (i,k,j), takové, že i k a j k, jsou konzistentní. Poznámky: Pozor podmínky i k a j k jsou jiné než i j použité pro odstranění symetrie! Podmínku i j můžeme použít i u DPC. i j k k i j Algoritmus DPC-1 Podobně jako u DAC-1, každou cestu procházíme právě jednou (jdeme od konce). Navíc můžeme ušetřit díky symetrii podmínek (i j). procedure DPC-1(Vars,Constraints) n Vars, E { (i,j) i<j & C i,j Constraints} for k = n to 1 by -1 do for i = 1 to k do for j = i to k do if (i,k) E & (j,k) E then C ij C ij &(C ik *C kk *C kj ) E E {(i,j)} end DPC-1 Algoritmus DPC-1

Vztah DPC k PC a AC Zřejmě platí, že PC implikuje DPC. Platí to také naopak? Příklad: A::{1,2,3} A<B {(1,2),(1,3),(2,3)} B::{1,2,3} B<C {(1,2),(1,3),(2,3)} C::{1,2,3} Graf je DPC, ale není PC! Dokonce není ani AC. A<C {(1,2),(1,3),(2,3)} PC a AC graf A<B {(1,2)} B<C {(2,3)} A::{1} B::{2} C::{3} A<C {(1,3)} Paměťové nároky Omezení PC algoritmů protože PC eliminuje dvojice hodnot z podmínek, potřebuje používat extenzionální reprezentaci podmínky ({0,1}-matice) Poměr výkon/cena PC eliminuje více (nebo stejně) nekonzistencí jako AC, poměr výkonu ke zjednodušení problému je ale mnohem horší než u AC Změny grafu podmínek PC přidává hrany (podmínky) i tam, kde původně nebyly a mění tak konektivitu grafu to vadí při dalším řešení problému, kdy se nemohou používat heuristiky odvozené od grafu (resp. dané původním problémem) PC stejně není dostatečné A,B,C,D in {1,2,3} A B, A C, A D, B C, B D, C D je PC a přesto nemá řešení 1,2,3 1,2,3 1,2,3 1,2,3

Jak oslabit PC, aby algoritmus: neměl paměťové nároky PC, neměnil graf podmínek, byl silnější než AC? Na půli p cesty od AC k PC Testujeme PC jen v případě, když je šance, že to povede k vyřazení hodnoty z domény proměnné! Příklad: a b e f d c a b e f d c 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. Definice: Vrchol i je omezeně konzistentní po cestě (restricted path consistent) právě když: každá hrana vedoucí z i je hranově konzistentní (AC) pro každé a D i platí: je-li b jediná podpora a ve vrcholu j, potom v každém vrcholu k (spojeném s i a j) existuje hodnota c tak, že (a,c) a (b,c) jsou kompatibilní s příslušnými podmínkami (PC). a b i j c k

Založeno na AC-4: počítání podpor + seznam cest pro PC Algoritmus RPC inicializace procedure INITIALIZE(G) Q AC {}, Q PC {}, S {} % vyprázdnění datových struktur for each (i,j) arcs(g) do for each a D i do total 0 for each b D j do if (a,b) is consistent according to the constraint C i,j then total total + 1, S j,b S j,b {<i,a>} counter[(i,j),a] total if counter[(i,j),a] = 0 then Q AC Q AC {<i,a>}, delete a from D i else if counter[(i,j),a] = 1 then for each k such that (i,k) arcs(g) & (k,j) arcs(g) do Q PC Q PC {(<i,a>,j,k)} end if return (Q AC, Q PC ) end INITIALIZE Algoritmus RPC kontrola AC procedure PRUNE(Q AC, Q PC ) while Q AC non empty do select and delete any pair <j,b> from Q AC for each <i,a> from S j,b do counter[(i,j),a] counter[(i,j),a] - 1 if counter[(i,j),a] = 0 & "a" is still in D i then delete "a" from D i Q AC Q AC {<i,a>} else if counter[(i,j),a] = 1 then for each k such that (i,k) arcs(g) & (k,j) arcs(g) do Q PC Q PC {(<i,a>,j,k)} else for each k such that (i,k) arcs(g) & (k,j) arcs(g) do if counter[(i,k),a] = 1 then Q PC Q PC {(<i,a>,k,j)} end if end while return Q PC end PRUNE

Algoritmus RPC Nejprve uděláme AC a potom testuje vybrané PC, případně se vracíme k AC. procedure RPC(G) (Q AC, Q PC ) INITIALIZE(G) Q PC PRUNE(Q AC, Q PC ) % první běh AC while Q PC non empty do select and delete any triple (<i,a>,j,k) from Q PC if a D i then {<j,b>} {<j,x> S ia x D j } % jediná podpora pro a if {<k,c> S ia S jb c D k }= then counter[(i,j),a] 0 delete "a" from D i Q PC PRUNE({<i,a>}, Q PC ) % opakujeme AC end if end if end while end RPC