Programování. s omezujícími podmínkami. Roman Barták. roman.bartak@mff.cuni.cz http://ktiml.mff.cuni.cz/~bartak



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

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

Optimalizace & soft omezení: algoritmy

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

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:

Grafové algoritmy. Programovací techniky

Použití dalších heuristik

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

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

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

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

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

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

Paralelní grafové algoritmy

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

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

Stromy, haldy, prioritní fronty

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

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

Úvod do teorie grafů

Binární vyhledávací stromy II

Dynamické datové struktury III.

Vzdálenost uzlů v neorientovaném grafu

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

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

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

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

Unbounded Model Checking

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

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

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

IV113 Validace a verifikace. Převod LTL formule na Büchi automat. Jiří Barnat

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

Algoritmy a datové struktury

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.

TGH07 - Chytré stromové datové struktury

Algoritmy na ohodnoceném grafu

Algoritmus Minimax. Tomáš Kühr. Projektový seminář 1

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

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

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

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

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

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

bfs, dfs, fronta, zásobník

TGH06 - Hledání nejkratší cesty

Časová a prostorová složitost algoritmů

Algoritmizace prostorových úloh

Jednoznačné a nejednoznačné gramatiky

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

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

TGH06 - Hledání nejkratší cesty

Hledání v textu algoritmem Boyer Moore

Dynamické programování

Stromy. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol.

Předmět: Algoritmizace praktické aplikace

1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1

TGH07 - Chytré stromové datové struktury

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

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

Dynamické programování

Jan Pavĺık. FSI VUT v Brně

Úvod do informatiky. Miroslav Kolařík

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

Teorie grafů. Kostra grafu. Obsah. Radim Farana Podklady pro výuku pro akademický rok 2013/2014

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

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?

STROMOVE ALGORITMY Prohledavani do sirky (level-order) Po vodorovnejch carach fronta

Jan Březina. Technical University of Liberec. 30. dubna 2013

Databázové systémy. * relační kalkuly. Tomáš Skopal. - relační model

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

Úloha ve stavovém prostoru SP je <s 0, C>, kde s 0 je počáteční stav C je množina požadovaných cílových stavů

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5

Digitální učební materiál

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

Základní datové struktury

Seminář z IVT Algoritmizace. Slovanské gymnázium Olomouc Tomáš Kühr

Dijkstrův algoritmus

Programování 3. hodina. RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015

12. Globální metody MI-PAA

TGH08 - Optimální kostry

6 Ordinální informace o kritériích

GRAFY A GRAFOVÉ ALGORITMY

Jan Březina. Technical University of Liberec. 21. dubna 2015

Výroková logika - opakování

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

Pokročilé haldy. prof. Ing. Pavel Tvrdík CSc. Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010

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

Tento text je stručným shrnutím těch tvrzení Ramseyovy teorie, která zazněla

Pokročilá algoritmizace amortizovaná složitost, Fibonacciho halda, počítačová aritmetika

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

Datové typy a struktury

Dynamické programování

Obecná informatika. Matematicko-fyzikální fakulta Univerzity Karlovy v Praze. Podzim 2012

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

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

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

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

Algoritmy výpočetní geometrie

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 Konzistenční techniky Dosud jsme podmínky používali jen pasivně (jako test) maximálně jsme analyzovali důvod jejich nesplnění. Nešlo by podmínky používat aktivněji? Příklad: A in 3..7, B in 1..5 domény proměnných A<B z domén lze řadu hodnot vyřadit bez ztráty řešení dostaneme A in 3..4, B in 4..5 Poznámka: ne všechny zbývající kombinace jsou konzistentní (například A=4, B=4) Jak odstranit nekonzistentní hodnoty z domén proměnných v síti podmínek?

Vrcholová konzistence Unární podmínky převedeme do domén proměnných. Definice: Vrchol reprezentující proměnnou X je vrcholově konzistentní (node consistent), právě když každá hodnota z aktuální domény D x splňuje všechny unární podmínky na X. CSP je vrcholově konzistentní, právě když je každý jeho vrchol vrcholově konzistentní. Algoritmus NC procedure NC(G) for each variable X in nodes(g) do for each value V in the domain D X do if unary constraint on X is inconsistent with V then delete V from D X end NC Nadále se budeme zabývat jen binárními CSP tedy podmínka odpovídá hraně v grafu podmínek. Hranová konzistence Definice: Hrana (V i,v j ) je hranově konzistentní (arc consistent), právě když pro každou hodnotu x z aktuální domény D i existuje hodnota y v aktuální doméně D j tak, že ohodnocení V i =x a V j = y splňuje všechny binární podmínky nad V i, V j. Poznámka: Koncept hranové konzistence je směrový, tj. konzistence hrany (V i,v j ) nezaručuje automaticky konzistenci hrany (V j,v i ). CSP je hranově konzistentní, právě když je každá jeho hrana (V i,v j ) hranově konzistentní (v obou směrech). Příklad: A A<B 3..7 1..5 B A A<B 3..4 1..5 B (A,B) i (B,A) jsou konzistentní A<B 3..4 4..5 A B není hranově konzistentní (A,B) je konzistentní

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 žádná hodnota y v D j tak, aby ohodnocení V i = x, V j = y splňovalo všechny binární podmínky mezi V i a V j ). Algoritmus revize hrany procedure REVISE((i,j)) DELETED false for each X in D i do if there is no such Y in D j such that (X,Y) is consistent, i.e., (X,Y) satisfies all the constraints on V i, V j then delete X from D i DELETED true Je end if Je vhodné také takéoznámit, pokud pokud došlo došlo k vymazání nějaké nějakéhodnoty. return DELETED end REVISE Jak udělat CSP hranově konzistentní? Provedeme revizi každé hrany. Algoritmus AC-1 Pozor, to nestačí! Pokud revize hrany zmenší doménu, mohou se již zrevidované hrany stát nekonzistentní. A<B, B<C: (3..7,1..5,1..5) (3..4,1..5,1..5) (3..4,4..5,1..5) (3..4,4,1..5) (3..4,4,5) (3,4,5) Revize tedy budeme opakovat tak dlouho, dokud dochází ke zmenšení nějaké domény. Algoritmus AC-1 procedure AC-1(G) repeat CHANGED false for each arc (i,j) in G do CHANGED REVISE((i,j)) or CHANGED if D i = then stop with fail until not(changed) end AC-1

Neefektivita AC-1 Pokud zmenšíme jedinou doménu, provádí se stejně revize všech hran, i když změnou domény nejsou vůbec zasaženy. Jaké hrany se mají tedy zrevidovat po zmenšení domény? Hrany, jejichž konzistence může být zmenšením domény proměnné narušena. Jedná se o hrany vedoucí do inkriminované proměnné. Můžeme ještě ušetřit! Hranu vedoucí z proměnné, která zmenšení domény způsobila, není potřeba revidovat (změna se jí nedotkne). Proměnná se zmenšenou doménou Podmínka, při jejíž revizi došlo ke zmenšení domény Algoritmus AC-2 Zobecněná verze Waltzova ohodnocovacího algoritmu V každém kroku vyřídí hrany vedoucí z daného vrcholu do již prošlých vrcholů (tj. podgraf z již navštívených vrcholů udržujeme AC). Algoritmus AC-2 procedure AC-2(G) for i 1 to n do % n je počet proměnných Q {(i,j) (i,j) arcs(g), j<i} % hrany pro první revizi Q {(j,i) (i,j) arcs(g), j<i} % hrany pro re-revizi while Q non empty do while Q non empty do select and delete (k,m) from Q if REVISE((k,m)) then Q Q {(p,k) (p,k) arcs(g), p i, p m } if D k = then stop with fail Q Q ; Q empty end AC-2

Algoritmus AC-3 Opakování revizí můžeme dělat elegantněji než AC-2 1. stačí jediná fronta hran, které je potřeba zrevidovat (znova zrevidovat) 2. do fronty přidáváme jen hrany, jejichž konzistence mohla být narušena zmenšením domény (jako AC-2) procedure AC-3(G) Q {(i,j) (i,j) arcs(g), i j} % seznam hran pro revizi while Q non empty do select and delete (k,m) from Q if REVISE((k,m)) then if D k = then stop with fail Q Q {(i,k) (i,k) arcs(g), i k, i m} end if end AC-3 Algoritmus AC-3 Technika AC-3 je dnes asi nejpoužívanější, ale pořád není optimální! Fakt (AC-3): Při každé revizi hrany testujeme množství dvojic hodnot na konzistenci vzhledem k podmínce. Tyto testy znova opakujeme při každé další revizi hrany. a b 1 a b a b c c c d d 2 d V 1 V 2 V 3 Podpory 1. Při revizi hrany V 2,V 1 vyřadíme hodnotu a z domény proměnné V 2. 2. Nyní musíme prozkoumat doménu proměnné V 3, zda některá z hodnot a, b, c, d neztratila svoji podporu ve V 2. Pozorování: Hodnoty a, b, c není potřeba znova kontrolovat, protože mají ve V 2 také jinou podporu než a. Podpora pro a D i je {<j,b> b D j, (a,b) C i,j } Nemohli bychom podpory spočítat pouze jednou a při opakovaných revizích jich využívat?

Hledání podpor Udržujeme seznam hodnot, které sami podporujeme (víme, komu říct, když zmizíme), a počet vlastních podpor (víme, co nám chybí) Naplnění datových struktur s podporami procedure INITIALIZE(G) Q {}, S {} % vyprázdnění datových struktur for each arc (V i,v j ) in arcs(g) do for each a in D i do total 0 for each b in 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>} end if S counter[(i,j),a] total j,b - j,b -množina množinadvojic <i,a>, <i,a>, pro if counter[(i,j),a] = 0 then pro které kteréje je <j,b> <j,b> podporou podporou delete a from D i counter[(i,j),a] Q Q {<i,a>} counter[(i,j),a] -počet -početpodpor, podpor, které end if kterémá máhodnota hodnotaa z z D i i u proměnné proměnnév j j return Q end INITIALIZE Hledání a využit ití podpor Situace: v algoritmu INITIALIAZE jsme právě zpracovali hranu (i,j) counter (i,j),_ 2 2 1 i a1 a2 a3 j b1 b2 b3 S j,_ <i,a1>,<i,a2> <i,a1> <i,a2>,<i,a3> Využití struktur s podporami: 1. Nechť z nějakého důvodu vyřadíme b3. 2. Podíváme se do S j,b3 na hodnoty, pro které je b3 podporou (tj. <i,a2>,<i,a3>). 3. U těchto hodnot snížíme counter (tj. odstraníme jim jednu podporu). 4. Pokud se některý counter vynuloval (a3), potom pokračujeme s příslušnou hodnotou od kroku 1. counter (i,j),_ 2 12 01 i a1 a2 a3 2 j b1 b2 b3 1 S j,_ <i,a1>,<i,a2> <i,a1> <i,a2>,<i,a3>

Algoritmus AC-4 Algoritmus AC-4 je optimální v nejhorším případě! procedure AC-4(G) Q INITIALIZE(G) while Q non empty do select and delete any pair <j,b> from Q 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 if D i = then stop with fail Q Q {<i,a>} end if end AC-4 Algoritmus AC-4 Bohužel v průměrném případě si tak dobře nevede navíc tady máme velkou paměťovou náročnost! AC-5 (Hentenryck, Deville, Teng) generický algoritmus pro hranovou konzistenci lze ho redukovat jak na AC-3 tak na AC-4 může využít sémantiku podmínek funkcionální, anti-funkcionální a monotónní podmínky AC-6 (Bessière, Cordier) zlepšuje paměťovou náročnost a průměrný čas AC-4 drží si pouze jednu podporu, další podporu hledá až při ztrátě aktuální podpory AC-7 (Bessière, Freuder, Régin) založen na podporách (jako AC-4 a AC-6) využívá dvousměrnosti podmínky Další AC algoritmy

Pozorování: Algoritmus AC-3.1 AC-3 není (teoreticky) optimální AC-4 je (teoreticky) optimální, ale (prakticky) pomalý AC-6/7 jsou (prakticky) rychlejší než AC-4, ale složité Co je na AC-3 neefektivní? optimáln lní algoritmus AC-3 Hledání podpor v REVISE, které začíná vždy od nuly! if there is no such Y in D j such that (X,Y) is consistent then AC-3.1 (Zhang, Yap) běh stejný jako u AC-3 pro každou hodnotu si pamatuje poslední nalezenou podporu (last) v každém směru a hledání začíná u ní procedure EXIST((i,x),j) y last((i,x),j) if y D j then return true while y next(y,d j ) & y nil do if (x,y) C(i,j) then last((i,x),j) y return true return false end EXIST Verze AC-3 s frontou proměnných (AC-8) Algoritmus AC-2001 optimáln lní algoritmus AC-3 procedure AC-2001(G) Q {i i nodes(g)} % seznam vrcholů pro revizi while Q non empty do select and delete j from Q for each i nodes(g) such that (i,j) arcs(g) do if REVISE2001(i,j) then if D i = then return fail procedure REVISE2001(i,j) Q Q {i} DELETED false false for foreach x in in D i do i do if iflast((i,x),j) D j then j then return true if if y D j y>last((i,x),j) j end AC-2001 & (x,y) C(i,j) then then last((i,x),j) y Poznámka: else else Algoritmus fakticky pracuje delete delete x from from D i i s rozdílovými množinami DELETED true true tj. pro každou proměnou end end if if end si pamatuje, jaké hodnoty for return byly smazány z domény return DELETED end endrevise2001 od poslední revize.

Směrov rová hranová konzistence Pozorování 1: AC má směrový charakter, ale CSP není směrové. Pozorování 2: AC musí opakovat revize hran a počet opakování závisí nejen na počtu hran, ale i na velikosti domén (while cyklus). Můžeme AC nějak oslabit, abychom každou hranu revidovali pouze jedenkrát? 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 Algoritmus DAC-1 1. Konzistenci hrany požadujeme jen v jednom směru 2. Proměnné jsou uspořádané žádný orientovaný cyklus hran! 6 1 2 3 4 5 Pokud hrany projdeme v dobrém pořadí, nemusíme revize opakovat! 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 5 4 3 2 1 Algoritmus DAC-1

Použit ití DAC AC zřejmě zahrnuje DAC (je-li CSP AC, pak je i DAC) Je DAC k něčemu dobré? DAC-1 je nepochybně efektivnější než AC-x existují problémy, kde DAC stačí Příklad: Pokud graf CSP tvoří strom, potom stačí aplikovat DAC, abychom problém vyřešili bez navracení. Jak uspořádáme vrcholy pro DAC? A jak uspořádáme vrcholy pro ohodnocování? 1. Aplikujeme DAC v uspořádání vrcholů od kořene. 2. Ohodnocujeme vrcholy v pořadí od kořene. DAC garantuje, že lze vždy najít hodnotu potomka kompatibilní s rodičem. 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ů a b p q r a b 3 2 5 4 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 p q r u v a b c 3 4 1 2 5 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