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

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

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

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

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

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

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

Optimalizace & soft omezení: algoritmy

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

ROZHODOVACÍ PROCEDURY A VERIFIKACE PAVEL SURYNEK, KTIML

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

7. Heuristické metody

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)

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.

SEMESTRÁLNÍ ÚLOHY S PROGRAMY V PROLOGU (zadání úloh)

Řešení: PŘENESVĚŽ (N, A, B, C) = přenes N disků z A na B pomocí C

SEMESTRÁLNÍ ÚLOHY S PROGRAMY V PROLOGU (zadání úloh)

PG 9.5 novinky ve vývoji aplikací

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)

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

State Space Search Step Run Editace úloh Task1 Task2 Init Clear Node Goal Add Shift Remove Add Node Goal Node Shift Remove, Add Node

5 Rekurze a zásobník. Rekurzivní volání metody

Binární soubory (datové, typované)

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

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

Rekurzivní algoritmy

Základy vytěžování dat

Základy umělé inteligence

Algoritmy. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 15. dubna / 39

Metody návrhu algoritmů, příklady. IB111 Programování a algoritmizace

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

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

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

Implementace LL(1) překladů

PROHLEDÁVÁNÍ GRAFŮ. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

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

Časová a prostorová složitost algoritmů

Grafové algoritmy. Programovací techniky

Metoda hrubé sily, backtracking a branch-and-bound

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

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

Úvod do teoretické informatiky(2017/2018) cvičení 11 1

Vzdálenost uzlů v neorientovaném grafu

Plánování v prostoru plánů

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

Prohledávání do šířky a do hloubky. Jan Hnilica Počítačové modelování 15

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

Rekurze. IB111 Úvod do programování skrze Python

Algoritmy na ohodnoceném grafu

1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1

TGH09 - Barvení grafů

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

Znalosti budeme nejčastěji vyjadřovat v predikátové logice prvního řádu. Metody:

Unbounded Model Checking

Přednáška 3. Rekurze 1

Dynamické programování

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

Slepé prohledávání do šířky Algoritmus prohledávání do šířky Při tomto způsobu prohledávání máme jistotu, že vždy nalezneme koncový stav, musíme ale p

Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

bfs, dfs, fronta, zásobník

Jan Pavĺık. FSI VUT v Brně

Volné stromy. Úvod do programování. Kořenové stromy a seřazené stromy. Volné stromy

Binární vyhledávací stromy II

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

Grafové algoritmy. Programovací techniky

Klasifikace a predikce. Roman LUKÁŠ

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

Programujeme v softwaru Statistica - příklady

Testování a spolehlivost. 1. Laboratoř Poruchy v číslicových obvodech

Hanojská věž. T2: prohledávání stavového prostoru. zadání [1 1 1] řešení [3 3 3] dva možné první tahy: [1 1 2] [1 1 3]

Umělá inteligence. UI (AI) - součást informatiky s průniky mimo obor Stručná historie UI. Letošní cena nadace Vize Joseph Weizenbaum

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

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

Algoritmizace prostorových úloh

Předmět: Algoritmizace praktické aplikace

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Paralelní grafové algoritmy

ALG 04. Zásobník Fronta Operace Enqueue, Dequeue, Front, Empty... Cyklická implementace fronty. Průchod stromem do šířky

Dolování asociačních pravidel

Použití dalších heuristik

Základy algoritmizace c2005, 2007 Michal Krátký, Jiří Dvorský1/39

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.

12. Globální metody MI-PAA

Zadání semestrálního projektu Algoritmy I. zimní semestr 2018/2019

Paradigmata programování II Korutiny a nedeterminismus

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

Metodický koncept k efektivní podpoře klíčových odborných kompetencí s využitím cizího jazyka ATCZ62 - CLIL jako výuková strategie na vysoké škole

CODE BOOK NEISS 8. A code book is an identification tool that allows the customer to perform a test result evaluation using a numeric code.

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

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

6. Tahy / Kostry / Nejkratší cesty

PL/SQL. Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd.

V praxi je běžné, že se ovlivňuje více prvků navzájem. Tady už si s jednou globální proměnnou nevystačíme.

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

Datové typy v Javě. Tomáš Pitner, upravil Marek Šabo

Náznak ukázky syntaxe a sémantiky pro projekt. 1 Syntaktické prvky. Poslední aktualizace: 8.

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

AUTOMATY A GRAMATIKY. Pavel Surynek. Kontextové uzávěrové vlastnosti Turingův stroj Rekurzivně spočetné jazyky Kódování, enumerace

Rozhodovací procedury a verifikace Pavel Surynek, KTIML

Dnešní program odvozování v Bayesovských sítích exaktní metody (enumerace, eliminace proměnných) aproximační metody y( (vzorkovací techniky)

Kapitola 6: Omezení integrity. Omezení domény

Transkript:

Backtracking 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 prochází částečná konzistentní ohodnocení dokud nenajde úplné (konzistentní) ohodnocení oproti metodě generuj a testuj je fáze testování splnění podmínek realizována v průběhu generování pokud můžeme test provést nad částečně vygenerovaným kandidátem řešením, je BT vždy lepší než GT, protože nemusí procházet všechny kandidáty Základní princip prohledávání s navracení při řešení SP:. postupně p ohodnocuj jproměnné. po každém ohodnocení otestuj podmínky, jejichž všechny proměnné ě éjiž mají jíhodnotu thrashing Problémy backtrackingu neumí využít informace o důvodu (zdroji) konfliktu Příklad: A,B,,,E::..0, A>E vyzkouší všechny možnosti pro B,,, než odhalí, že A Řešení: backjumping (skok na původce chyby) redundantní práce Look Back nepamatuje si již odhalené konflikty mezi přiřazením proměnných Příklad: A,B,,,E::..0, 0 B+8<, =*E při hledání hodnot pro a E, stále zkouší přiřadit do hodnoty,..,9 Řešení: backmarking (pamatuje si dobrá/chybná přiřazení) pozdní odhalení chyby nesplnění podmínky odhalí teprve, když ohodnotí její proměnné Příklad: A,B,,,E::..0, A=*E odhalí že A>, až při ohodnocování proměnné E Řešení: forward checking (kontrola podmínek dopředu) Look Ahead je metoda pro odstranění thrashingu Jak? ) identifikuj důvod neúspěchu (nelze přiřadit hodnotu proměnné) ) skoč až na konfliktní proměnnou Stejný dopředný ř d běh jako u backtrackingu, ki pouze zpět skáčeme dále, tj. odstraníme prohledávání nerelevantních kombinací hodnot! Jak zjistíme kam až skočit? o je důvodem d neúspěchu? ě vyber podmínky, které obsahují ohodnocovanou proměnnou a jsou testovány na splnění z těchto podmínek zjisti nejbližší (v pořadí prohledávání) proměnnou, kterou obsahují Grafem řízený backjumping (graph-directed backjuping) x 4

řízený grafem Uvažujme problém barvení grafu, kde barvy přiřazujeme v pořadí x, x,, x7. Kam skočíme, pokud neobarvíme x4? x Kam skočíme, pokud neobarvíme x? x4 A co když už nelze obarvit ani x4? x Vypadá to, že když nelze obarvit vrchol, můžeme skočit na jeho nejbližšího předka, ale Kam skočíme, pokud neobarvíme x7? x Acokdyžužnelzeobarvitanix? obarvit ani x4 A co když už nelze obarvit ani x4? x řízený grafem Při skoku zpět stačí uvolnit některý slepý uzel (slepý uzel = uzel, kde nelze vybrat hodnotu proměnné). z listu x skočíme na nejbližšího předchůdce x v grafu podmínek (x7 x, x4, x, x) z vnitřního vrcholu x skočíme na nejbližšího předchůdce ale všech slepých uzlů, přes které jsme do x doskákali (x7 x, x4, x, x x4, x, x x, x) označme anc(x) předchůdce proměnné x v grafu podmínek uspořádaném dle pořadí při ohodnocování (lze nastavit před prohledáváním dle struktury grafu) anc(x7) = {x, x4, x, x} nechť jsme se do uzlu x vrátili z uzlů y,,yk anechť pro proměnnou x nemáme další hodnotu kompatibilní s předchůdci potom skočíme na nejbližší proměnnou z anc(x) anc(y) anc(yk) {x,y,,yk}, BJ řízený grafem rekurzivně procedure GraphBJ(X:variables, V:assignment, :constraints) if X = {} then return V x select a not-yet assigned variable from X conflict anc(x) for each value h from the domain of x do if constraints are consistent with V {x/h} then R GraphBJ(X {x}, V {x/h}, ) if R = fail(jumpset) then % skok zpět (backjump) if x JumpSet then return R % na proměnnou před x conflict conflict JumpSet {x} %nax return R % řešení nalezeno return fail(conflict) end GraphBJ volá se GraphBJ(X, {}, ) BJ řízený grafem procedure GraphBJ(X:variables, :constraints) i, i i, l i anc(x i ) while i n do instantiate_and_check(i, ti t ) if x i = null then iprev i, i latest index in l i,l i l i l iprev {x i } i i +, i i, l i anc(x i ) if i = 0 then return fail return {x,,, x n n} procedure instantiate_and_check(i, and :constraints) end GraphBJ while i is not empty do select and delete some element b from i x i b iterativně if constraints consistent with {x,, x i } then return x i null end instantiate_and_check

Problém N-dam 4 6 7 A B E F G H,4, 4,, zjemnění skoků ámy přiřazujeme po řádcích, tj. pro každou dámu hledáme sloupec. ámu v řádku 6 nelze přiřadit!. o políčka zapisujeme čísla konfliktních dam.. V každém políčku vybereme nejvzdálenější dámu. 8. Mezi políčky vybereme nejbližší dámu a tam skočíme. Poznámka: grafem řízený backjumping se zde chová stejně jako chronologický backtracking (graf podmínek je úplný)! Pořadí oh hodnocen ní Konfliktní proměnné Jak obecně ě najdeme konfliktní proměnnou? ě Situace: ohodnocujeme proměnnou č. 7 (možné hodnoty 0 a ) symbol vyznačuje jaké proměnné jsou zahrnuty v konfliktní (nesplněné) podmínce 4 6 7 konflikt s hodnotou 0 konflikt s hodnotou Sedmé proměnné nelze přiřadit žádnou z hodnot 0,!. U každé nesplněné podmínky najdeme nejbližší proměnnou (o).. Z nesplněných podmínek pro hodnotu vybereme vzdálenější z těchto proměnných ( ).. Z proměnných získaných pro jednotlivé hodnoty zvolíme tu nejbližší a na ní skočíme. Test konzistence Gaschnigův backjumping kromě testování konzistence podmínek také počítáme konfliktní úroveň procedure consistent(labelled, onstraints, Level) J Level % úroveň, kam skákat Noonflict true % identifikace konfliktu for each in onstraints do if all variables from are Labelled then if is not satisfied by Labelled then Noonflict false J min {J, max{l X vars() & X/V/L in Labelled & L<Level}} V je hodnota proměnné X L je pořadové číslo (úroveň) proměnné X při if Noonflict then return true ohodnocování return fail(j) end consistent Gaschnigův backjumping procedure GBJ(Unlabelled, Labelled, onstraints, PreviousLevel) if Unlabelled = {} then return Labelled pick first X from Unlabelled Level PreviousLevel+ Jump 0 for each value V from X do consistent({x/v/level} Labelled, onstraints, Level) if = fail(j) then Jump max {Jump, J} Jump PreviousLevel R GBJ(Unlabelled-{X},{X/V/Level} / } Labelled,onstraints,, Level) if R fail(level) then return R % úspěch nebo skok dál return fail(jump) % skok ke konfliktní proměnné end GBJ volá se GBJ(Variables,{},onstraints,0)

Gaschnigův backjumping procedure GBJ(X:variables, :constraints) i, i i, jump i 0 while i n do x i select_value(i, l ) if x i = null then i jump i procedure select_value(i, :constraints) while i is not empty do i i + select and delete some element b from i i consistent true i jump i 0 if i = 0 then return fail return {x,, x n } end GBJ iterativně k while k<i and consistent do if k>jump i then jump i k if x i =b consistent with {x,, x k }inthen k k + consistent false if consistent then return b return null end instantiate_and_check Grafem řízený ý backjumping řídí se pouze strukturou sítě podmínek (nebere v úvahu splnění/nesplnění p konkrétní podmínky) umí realizovat několik zpětných skoků krátké shrnutí Gaschnigův backjumping bere v úvahu, které podmínky skutečně způsobily konflikt skočí pouze jeden skok (pokud se do proměnné podaří přiřadit hodnotu, jde se zpět pouze o jednu úroveň jako v chronologickém backtrackingu) Konfliktem řízený ý backjumping (BJ) můžeme spojit výhody obou metod (upřesnění kam skočit přes nesplněné podmínky a několik skoků) při návratu budeme vracet nalezenou konfliktní množinu, která si využije při dalším skoku (pokud nenajdeme novou hodnotu proměnné, na kterou jsme skočili) přenášíme důvod konfliktu k již ohodnoceným proměnným Problémy backjumpingu Při skoku k zpět ě zapomíná (zahazuje) již udělanou práci! Příklad: obarvěte graf třemi barvami tak, že sousední vrcholy mají různou barvu A uzel barva B A B E E Při druhém průchodu (ohodnocení) děláme zbytečnou práci, stačilo nechat původní hodnotu, změnou B se nic neporušilo. ynamický backtracking Stejný graf (A,B,,,E), stejné barvy (,,) ale jiný postup. A E B + pamatování si důvodu konfliktu + přenos důvodu konfliktu + změna pořadí proměnných = YNAMIKÝ BAKTRAKING uzel uzel uzel B B B A A B A B AB E A B E A B E A vybraná barva AB důvod konfliktu skok zpět skok zpět + přenos důvodu chyby + přenos důvodu chyby + změna pořadí B, Vrchol (respektive celý graf, který na něm případně visel ) není potřeba přebarvovat. příklad

ynamický backtracking procedure B(Variables, onstraints) Labelled {}; Unlabelled Variables while Unlabelled {} do select X in Unlabelled Values X X - {values inconsistent with Labelled using onstraints} if Values X = {} then let E be an explanation of the conflict (set of conflicting variables) if E = {} then failure let Y be the most recent variable in E unassign Y (from Labelled) with eliminating i explanation E-{Y} remove all the explanations involving Y select V in Values X Unlabelled Unlabelled - {X} Labelled Labelled {X/V} return Labelled end B o je to redundantní práce? Redundance backtrackingu opakování výpočtu, jehož výsledek už máme k dispozici Příklad: A,B,, ::..0, A+8<, B=* B A= A Redundantní výpočty: není potřeba znova procházet, protože změna B neovlivňuje hodnotu B= B= B= B=4 B=............ = =0 = =0 = =0 = =0 = =0 = =0 = =0 = =0 = =0 = Základní princip i (pracujeme s binárním SP): Základy backmarkingu Mark(X,V) u každé hodnoty V z domény proměnné X si pamatujeme nejvzdálenější j konflikt (nejvzdálenější j proměnnou) BackTo(X) u každé proměnné X si pamatujeme místo nejvzdálenějšího návratu (od chvíle posledního ohodnocení X) Situace (Mark<BackTo) X=a X BackTo(Y) Mark(Y,b) BackTo(Y) Mark(Y,b) Situace (Mark BackTo) X X=a X=? zde je Y/b v pořádku Y Y Y/b je nekonzistentní Y/b je s X/a stále Y/b je nekonzistentní s X/a (ale je konzistentní se vším předtím) s X/a (konzistentní se vším nad X) nekonzistentní, nemusíme kontrolovat zde je potřeba Y/b znovu zkontrolovat Problém N-dam 4 6 7 8 A B E F G H Backmarking - příklad. ámy přiřazujeme po řádcích, tj. pro každou dámu hledáme sloupec.. Vedle šachovnice píšeme úrovně návratu (BackTo). Na začátku všude.. o políčka zapisujeme čísla nejvzdálenějších j konfliktních dam (Mark). Na začátku všude. 4 4. ámu v řádku 6 nelze přiřadit! 4. Vracíme se na, opravíme BackTo. 6. Když znova přijdeme na 6, všechny pozice jsou stále špatné (Mark<BackTo). Poznámka: backmarking lze kombinovat s backjumpingem (a máme to zadarmo)

Test konzistence backmarking testování konzistence jen u podmínek, kde došlo ke změně, plus počítání nejvzdálenější konfliktní úrovně procedure consistent(x/v, Labelled, onstraints, Level) for each Y/VY/LY in Labelled such that LY BackTo(X) do % bereme pouze proměnné Y, které se mohly změnit % jdeme v rostoucím pořadí podle LY (od nejstarší) if X/V is not compatible with Y/VY using onstraints then Mark(X,V) LY return fail Není potřeba znovu testovat (víme, že platí) Mark(X,V) Level- return true end consistent BackTo 4 6 Backmarking algoritmus procedure BM(Unlabelled, Labelled, onstraints, Level) if Unlabelled = {} then return Labelled pick first X from Unlabelled %pořadí proměnných je pevné for each value V from X do if Mark(X,V) BackTo(X) then % hodnota se musí znova kontrolovat if consistent(x/v, it t(x/v Labelled, Lblld onstraints, it Level) l)then R BM(Unlabelled-{X}, Labelled {X/V/Level}, onstraints, Level+) if R fail then return R % řešení nalezeno BackTo(X) Level- % budeme se vracet k předch. proměnné for each Y in Unlabelled do % řekni všem o návratu BackTo(Y) min {Level-, BackTo(Y)} return fail % návrat k předchozí proměnné end BM