Univerzita Karlova v Praze Matematicko-fyzikální fakulta. Vedoucí práce: RNDr. Martin Pergel, Ph.D.
|
|
- Lubomír Bednář
- před 8 lety
- Počet zobrazení:
Transkript
1 Univerzita Karlova v Praze Matematicko-fyzikální fakulta SVOČ 2011 Jindřich Ivánek Heuristikou řízené hledání optima v NP-těžkých úlohách Vedoucí práce: RNDr. Martin Pergel, Ph.D.
2 Obsah 1 Úvod 3 2 Algoritmus A* Úloha nejkratší cesty Popis A* Vlastnosti A* Aproximace Vybrané optimalizační NP-úplné problémy a jejich řešení pomocí A* Problém obchodního cestujícího (TSP) Zadání Heuristiky Aproximace Funkce pro A* Vrcholové pokrytí (VP) Zadání Heuristika Aproximace Funkce pro A* Problém batohu (PB) Zadání Heuristika Aproximace Funkce pro A* Rozvrhování úloh (RU) Zadání Heuristika Aproximace Funkce pro A* Implementace - uživatelská dokumentace Instalace a spuštění grafického rozhraní Výběr optimalizačního problému a zadání vstupních dat
3 Problém obchodního cestujícího Vrcholové pokrytí Problém batohu Rozvrhování úloh Parametry Průběžné informace o výpočtu a výsledné řešení Implementace - programátorská dokumentace Instalace a spuštění Ovládání programu z příkazové řádky Formát vstupních souborů Kompilace Datové struktury Halda a hrábě B-strom Popis řešených optimalizačních problémů Zdrojové soubory Porovnání heuristik a aproximací na příkladech Porovnání heuristik na souboru příkladů Problém obchodního cestujícího Vrcholové pokrytí Problém batohu Rozvrhování úloh Porovnání aproximací na příkladech Problém obchodního cestujícího Vrcholové pokrytí Problém batohu Rozvrhování úloh Závěr 44 Literatura 45
4 Kapitola 1 Úvod Předmětem předkládané práce je studium možností aplikace heuristikou řízeného prohledávání algoritmem A* na hledání optimálních řešení některých NP-těžkých problémů. Vycházíme z monografie N. J. Nilssona Problem-Solving Methods in Artificial Intelligence z roku 1971 [9], která popisuje použití A* na řešení problémů. Práce navazuje a dále rozšiřuje postup popsaný v článku [6], kde se využívá A* na řešení problému obchodního cestujícího. V práci zobecňujeme tento postup tak, aby šel využít na řešení různých typů optimalizačních úloh. Dalším přínosem je jeho vylepšení (např. ořezávání prohledávaného prostoru pomocí aproximace). Pro vybrané NP-úplné optimalizační problémy byl navržen převod na problém hledání nejkratší cesty a heuristiky a aproximace, které A* využívá. Popsaná metoda společně s vybranými problémy byla naimplementována, přičemž byl kladen důraz na prostorovou a časovou efektivitu. Vytvořené programové prostředí včetně zdrojových kódů je ke stažení na adrese 3
5 Kapitola 2 Algoritmus A* A* je algoritmus na hledání minimální cesty s použitím tzv. heuristiky. Heuristikou zde rozumíme dolní odhad délky zbývající cesty. Např. v grafu reprezentující vzdálenosti objektů na euklidovské rovině, může být taková heuristika vzdušná vzdálenost do cíle. Metody heuristikou řízeného prohledávání byly vyvinuty v 50. a 60. letech minulého století v rámci výzkumu umělé inteligence. Jejich obecnou teorii shrnuje monografie N. J. Nilssona Problem-Solving Methods in Artificial Intelligence z roku 1971 [9], z níž ve své práci také vycházíme. Popis heuristikou řízeného algoritmu A* a jeho vlastností je též součástí každého přehledu výzkumu umělé inteligence, viz například [11]. 2.1 Úloha nejkratší cesty V následující části formálně zadefinujeme pojmy, které jsou nezbytné pro popis algoritmu A*. Najprve zavedeme A*-graf, který bude reprezentovat stavový prostor v němž se hledá minimální cesta z počátečního do koncového stavu. Dále budeme definovat heuristickou funkci, kterou A* využívá jako dolní odhad pro řízené prohledávání. K heuristikám přidáme podmínku konzistence, jejíž splnění nám dá jisté záruky o chování algoritmu A*. Definice 2.1 (A*-graf). Bud G = V, E, c vážený orientovaný konečný graf s nezáporným ohodnocením hran c : E R + 0 (kde R + 0 označuje množinu nezáporných reálných čísel). Bud s V, T V, T takové, že v V existuje cesta z s do v a v V \ T existuje cesta z v do alespoň jednoho t T. Pětici V, E, c, s, T budeme nazývat A*-graf, V množina stavů, s startovní stav a T množina cílových stavů. Termín stav zde zavádíme pro odlišení od termínu vrchol, který budeme používat v zadání některých řešených optimalizačních problémů grafového charakteru v další kapitole (a také v souvislosti s tím, že algoritmus A* byl původně konstruován pro řízené prohledávání stavového prostoru v úlohách umělé inteligence). V dalším textu budeme symboly V, E, c, s, T značit příslušné součásti nějakého A*-grafu. 4
6 5 Definice 2.2 (Minimální cesta). Minimální cestou do stavu v V rozumíme cestu s minimální délkou ze všech cest z s do v. Délku takové cesty budeme označovat g(v). Minimální cestou v A*-grafu rozumíme cestu z s do nějakého cílového stavu t T délky min{g(t) t T }. Této délce budeme říkat optimum. Definice 2.3 (Heuristika). Heuristika je funkce h : V R + 0, která je vždy menší nebo rovna délce minimální cesty z v V jako startovního stavu do T. Perfektní heuristika je taková heuristika, která je rovna délce minimální cesty. Tuto heuristiku budeme označovat h. Pro každou heuristiku platí: v V : h(v) h (v). Definice 2.4 (Konzistentní heuristika). Konzistentní heuristika je heuristika h, pro kterou platí: v, w E : h(v) c ( v, w ) + h(w). (2.1) Tedy konzistentní heuristika je dolní odhad, který se postupným přibližováním k cíli nezhoršuje. Lemma 2.5 (Konzistence a dolní mez). Pokud funkce h : V R + 0, splňuje nerovnost (2.1) a platí t T : h(t) = 0, pak je h konzistentní heuristika, tj. splňuje též podmínku v V : h(v) h (v). Důkaz. Pro libovolný stav v V uvažujme minimální cestu do T. Tato cesta v, v 1,..., v k, t má délku h (v). Chceme dokázat, že h(v) h (v). Pro všechny hrany w, z minimální cesty podle (2.1) platí: h(w) h(z) c ( w, z ). Pokud všechny tyto nerovnosti sečteme, získáme: h(v) h(t) h (v). Definice 2.6 (Silnější heuristika). Řekneme, že heuristika h 1 je silnější než heuristika h 2, pokud v V : h 1 (v) h 2 (v). Lemma 2.7 (Maximum heuristik). Jsou-li h 1,..., h n konzistentní heuristiky, pak funkce h(v) = max(h 1 (v),..., h n (v)), v V dává konzistentní heuristiku, která je silnější než h 1,..., h n.
7 6 Důkaz. Stačí ukázat, že h je konzistentní. Necht v, w V jsou libovolné stavy takové, že v, w E. Protože i {1,..., n} : h(v) = h i (v) a h i je konzistentní heuristika, musí platit h(v) = h i (v) c (v, w) + h i (w) c (v, w) + h(w). Definice 2.8 (Odhad). Funkci f : V R + 0, v V : f(v) = g(v) + h(v), kde h je heuristika, budeme nazývat odhad (délky minimální cesty z s do T přes stav v). Perfektní odhad budeme označovat f, v V : f (v) = g(v) + h (v). Platí: t T : g(t) = h (s ), toto g(t) je optimum délka hledané minimální cesty. Pro všechny stavy v na této hledané cestě musí platit f (v) = h (s ). 2.2 Popis A* Nyní můžeme přistoupit k popisu samotného algoritmu A*. Vzhledem k navrženým aplikacím se omezíme na variantu algoritmu A* pro konzistentní heuristiky. Algoritmus A* v A*-grafu najde (s využitím libovolné konzistentní heuristiky h) minimální cestu ze startovního stavu s do množiny cílových stavů T. Pro použití algoritmu A* není třeba zadávat celý vstupní graf, nebot A* prohledává vstupní graf (generuje jeho potřebnou část) s použitím následujících funkcí: Definice 2.9 (A*-graf zadaný funkcemi). Pro A*-graf V, E, c, s, T definujme funkce: start() = s. cil(v) rozhodne, zda platí v T. naslednici(v) = množina následníků stavu v, tj. {w V v, w E }. ohodnoceni(v, w) = c ( v, w ). Z definice 2.9 A*-grafu zadaného funkcemi plyne, že lze vygenerovat množiny V, E pomocí funkce naslednici ze startovního stavu s = start() (protože všechny stavy jsou z s dosažitelné). Pokud T a v, w E : ohodnoceni(v, w) R + 0, vyhovuje tento graf definici 2.1. Vstupem pro algoritmus A* je A*-graf zadaný funkcemi a konzistentní heuristika (zadaná funkcí heuristika()). A* si pro každý (vygenerovaný) stav pamatuje délku aktuálně nejkratší cesty ze startovního stavu s.
8 7 Definice 2.10 (delka, odhad). Aktuální (z hlediska běhu A*) délku nejkratší cesty ze startovního stavu do v V budeme značit delka(v). Aktuální (z hlediska běhu A*) odhad délky nejkratší cesty ze startovního stavu do T přes v V je odhad(v) = delka(v) + h(v). Cílem algoritmu A* je tedy postupně generovat stavy a přibližovat hodnotu delka hodnotě g. Na závěr musí najít takový cílový stav t, jehož g(t) je minimální, a přitom má zajistit, že g(t) =delka(t). Popis práce algoritmu A*: A* používá ke své práci množinu otevřených stavů open a množinu uzavřených stavů closed. Na začátku je v open startovní stav s. V každém kroku A* vyjme z open stav s minimální hodnotou odhad a vloží ho do closed (tedy uzavře tento stav). Pak spočte hodnoty delka a odhad pro všechny jeho následníky (generované funkcí naslednici) a vloží je do open (tomu budeme říkat expanze). Výpočet hodnoty delka probíhá podobně jako v Dijkstrově algoritmu. Algoritmus 2.1 (A*). I. Inicializace s := start() delka(s ) := 0 odhad(s ) := heuristika(w) open := {s } closed := II. Hlavní cyklus while open do II.a) Selekce v := x open takové, že odhad(x) = min w open {odhad(w)} open := open \ {v} closed := closed {v} II.b) Terminalita if cil(v) then print Nalezeno optimum (delka(v))! KONEC end if II.c) Expanze for all w naslednici(v) do if w / closed & w / open then delka(w) := delka(v) + ohodnoceni(v, w) odhad(w) := delka(w) + heuristika(w) open := open {w} end if if w / closed & w open then
9 8 if delka(w) > delka(v) + ohodnoceni(v, w) then odhad(w) := odhad(w) delka(w) + delka(v) + ohodnoceni(v, w) delka(w) := delka(v) + ohodnoceni(v, w) end if end if end for end while Poznámka 2.11 (Složitost algoritmu 2.1). Počet průchodů hlavním cyklem (a tedy počet expanzí) může být v nejhorším případě stejný jako počet necílových stavů A*-grafu. Při každém průchodu cyklem musíme vyhledat minimální prvek v open, zařadit ho do closed a dále vygenerovat jeho následníky, u každého z nich zjistit, zda se nenachází v open nebo closed a pokud je nový, vypočítat heuristiku. Důležité je pozorování, že heuristiku počítáme pro každý stav pouze jednou, a to když ho vygenerujeme poprvé. Vyhledání přítomnosti prvku v open nebo closed musíme ale provádět opakovaně, v nejhorším případě pro každou hranu A*-grafu. Složitost A* je tedy O( V (selekce + heuristika) + E vyhledani). Pokud by A*-graf měl tu vlastnost, že by pro stupně všech stavů platilo v V : deg(v) log( V ), (2.2) pak by se v každé expanzi vygenerovalo maximálně log( V ) následníků. To znamená, že by se celková složitost zlepšila na O( V (selekce + heuristika + log( V ) vyhledani)). Poznamenejme, že všechny A*-grafy řešených problémů (uvedených v kapitole 3) tuto vlastnost mají. 2.3 Vlastnosti A* Uved me nyní několik důležitých pozorování o chování A*: Lemma 2.12 (O uzavírání stavů). Ve chvíli, kdy A* uzavírá stav v (vybere jej z open a zařadí do closed), je delka(v) = g(v). Důkaz. viz [9], str. 63, lemma 3-2. Pokud by byla heuristika nekonzistentní, lemma 2.12 neplatí! Důsledek Pokud se poprvé uzavírá cílový stav t T, neexistuje cesta menší délky do jiného z cílových stavů.
10 9 Věta 2.14 (Korektnost A*). Výsledek A* je vždy optimum délka minimální cesty z s do T. Důkaz. Vyplývá z důsledku Poznámka 2.15 (Dijkstrův algoritmus). Pokud v A* použijeme nulovou heuristiku ( v V : h 0 (v) = 0), chová se A* stejně jako Dijkstrův algoritmus. (Až na to, že nepočítá minimální cesty do všech stavů, ale pouze minimální cestu do množiny cílových stavů a do těch stavů, do nichž je cesta kratší než toto optimum.) Lemma 2.16 (O monotónnosti odhadů uzavíraných stavů). Hodnota min {odhad(w)}, během práce algoritmu A* neklesá a blíží se (zdola) k hodnotě w open optima. Důkaz. viz [9], str. 64, lemma 3-3 a pozorování, že díky konzistenci heuristiky nejsou odhady stavů zařazovaných do open menší, než byl odhad uzavíraného stavu. Lemma 2.17 (Síla heuristiky). Silnější heuristika umožňuje získat optimum prohledáním (vygenerováním) menší části grafu (za předpokladu, že stavy se stejným odhadem jsou uzavírány vždy ve stejném pořadí). Důkaz. viz [9], str. 64, theorem Aproximace Algoritmus A* při své práci probírá hodně stavů, které nemají šanci na úspěch (jejich ohodnocení je větší než optimum, tudíž nebudou součástí řešení). Pokud by se nám podařilo o nějakém stavu rozhodnout, že nemůže být součástí optimálního řešení, může algoritmus A* jeho expanzi přeskočit a tím svůj běh značně urychlit. V následující části definujeme aproximaci, což je vlastně horní odhad optima, a dokážeme, že přeskočení stavů, jejichž ohodnocení je větší než aproximace, neovlivní korektnost algoritmu A*. Tento postup v použité literatuře kupodivu není zmiňován. Definice 2.18 (Aproximace). Dílčí aproximace a : V R + 0 je duální funkce k heuristice. Pro daný stav v dá horní odhad délky nejkratší cesty do cílového stavu. Pro dílčí aproximaci a tedy platí v V : a(v) h (v). Hodnotu g(v) + a(v) budeme nazývat aproximací (minimální cesty z s do T přes stav v). Poznámka 2.19 (Heuristikou generovaná aproximace). Heuristikou generovanou dílčí aproximaci lze definovat na obecném grafu pro A* s danou heuristikou, a to hladovým procházením do hloubky podle minimálního odhadu následníků.
11 10 Poznamenejme, že tato aproximace nemusí být polynomiální, i když daná heuristika polynomiální je. Heuristika se při výpočtu této aproximace může totiž v nejhorším případě volat i E -krát. Následující dvě standartní definice umožnují ohodnotit kvalitu aproximací a navzájem je porovnávat: Definice 2.20 (Poměrová chyba). Řekneme, že algoritmus řeší problém s poměrovou chybou ρ(n), pokud pro každé zadání velikosti n platí: { opt max apr, apr } ρ(n) opt Definice 2.21 (Relativní chyba). Řekneme, že algoritmus řeší problém s relativní chybou ε(n), pokud pro každé zadání velikosti n platí: apr opt ε(n) opt Lemma 2.22 (Aproximace může být optimum). Pokud je v nějakém kroku algoritmu A* hodnota nejmenší známé aproximace stejná jako {odhad(w)}, pak je tato aproximace optimem. min w open Důkaz. Plyne z toho, že podle lemmatu 2.16 vždy platí min {odhad(w)} opt apr. w open Z důkazu lemmatu 2.22 též plyne, že v každém kroku algoritmu lze aktuální poměrovou chybu nejmenší známé aproximace shora omezit poměrem: apr opt apr min {odhad(w)}, w open a tak posoudit kvalitu dosaženého řešení například při přerušení výpočtu. Lemma 2.23 (Ořezávání stavů pomocí aproximace). Stavy, jejichž odhad je větší než (nejmenší známá) aproximace, nemusíme vůbec brát v úvahu (tj. A* je nemusí zařazovat do open ani closed). I pak zůstane A* korektní. Navíc, pokud si budeme pamatovat hodnotu (a příslušnou cestu) pro nejmenší známou aproximaci, nemusíme brát v úvahu ani stavy, které mají stejný odhad. Důkaz. Podle lemmatu 2.16 jsou uzavírány pouze ty stavy v V, jejichž odhad(v) opt apr. Tudíž by na stavy, jejichž odhad je větší než aproximace, stejně nedošla řada.
12 11 Pokud se odhad stavu rovná aproximaci, pak bud je to optimum, a tedy jedno z řešení my už ale jedno řešení známe (tím je ta aproximace), a to nám stačí 1. Pokud aproximace není optimum, znamená to, že odhad stavu je větší než optimum, a tudíž nás nemusí zajímat. Algoritmus 2.2 (A* s aproximací). I. Inicializace s := start() delka(s ) := 0 odhad(s ) := heuristika(s ) open := {s } closed := apr := aproximace(s ) II. Hlavní cyklus while open do II.a) Selekce v := x open takové, že odhad(x) = min w open {odhad(w)} open := open \ {v} closed := closed {v} II.b) Aproximace if delka(v) + aproximace(v) < apr then apr = delka(v) + aproximace(v) end if II.c) Terminalita if odhad(v) = apr then print Nalezeno optimum - aproximace (apr)! KONEC end if if cil(v) then print Nalezeno optimum (delka(v))! KONEC end if II.d) Expanze for all w naslednici(v) do if w / closed & w / open then delka(w) := delka(v) + ohodnoceni(v, w) odhad(w) := delka(w) + heuristika(w) if odhad(w) < apr then open := open {w} end if end if if w / closed & w open then if delka(w) > delka(v) + ohodnoceni(v, w) then 1 Kdybychom ovšem chtěli vypočítat všechna optimální řešení, tak tento přístup použít nemůžeme
13 12 odhad(w) := odhad(w) delka(w) + delka(v) + ohodnoceni(v, w) delka(w) := delka(v) + ohodnoceni(v, w) end if end if end for II.e) Terminalita if open = then print Nalezeno optimum - aproximace (apr)! KONEC end if end while V algoritmu 2.2 jsou oproti algoritmu 2.1 navíc části II.b) a II.e); část II.c) je rozšířena o kontrolu, zda aproximace není optimum, a část II.d) je rozšířena o kontrolu, zda odhad prvku není větší nebo roven aproximaci. Aproximaci není nutno volat v každé iteraci algoritmu, ale například jen za určitých podmínek (důsledek lemmatu 2.23). Poznámka 2.24 (Složitost algoritmu 2.2). Složitost A* se změní pouze tak, že pro každý stav spočítáme aproximaci. Složitost A* s aproximací je tedy O( V (selekce + heuristika + aproximace) + E vyhledani). Podobně jako pro algoritmus 2.1, pokud by A*-graf splňoval vlastnost (2.2), byla by složitost algoritmu A* s aproximací O( V (selekce + heuristika + aproximace + log( V ) vyhledani)).
14 Kapitola 3 Vybrané optimalizační NP-úplné problémy a jejich řešení pomocí A* Přehled NP-úplných problémů a algoritmů pro jejich řešení lze nalézt v řadě monografií, například [2, 3, 4, 5, 7]; kde jsou též podrobně definovány a studovány jejich vlastnosti. Výběr čtyř optimalizačních NP-těžkých problémů pro demonstraci řešení pomocí A* byl veden snahou zahrnout různorodé problémy, které by alespoň zčásti reprezentovaly spektrum lišících se typů. Vybrány byly: problém obchodního cestujícího, problém vrcholového pokrytí, problém batohu a problém rozvržení úloh. Pro každý zvolený problém je definováno jeho převedení na A*-graf a úlohu minimální cesty, jsou navrženy heuristiky s důkazy jejich konzistence a možné aproximace. Shrnutí pak obsahuje funkce pro zadání aplikace A* ve vyvinutém programovém prostředí. Je nutno podotknout, že heuristiky a aproximace mají pro využití v algoritmu A* smysl pouze tehdy, pokud mají polynomiální složitost. 13
15 Problém obchodního cestujícího (TSP) Zadání Graf s nezáporným ohodnocením hran G = V, E, c, hledáme nejkratší hamiltonovskou kružnici. Důkaz NP-úplnosti problému viz [5] str , (Theorem 3.4). Problém obchodního cestujícího (TSP) je standardním příkladem NP-úplného problému, který zůstává NP-úplný i při omezení na ohodnocení splňující trojúhelníkovou nerovnost nebo na ohodnocení hran pouze hodnotami 1 a 2, viz např [5]. To je důsledek toho, že TSP je silně NP-úplný. Pro jeho řešení byla zkonstruována nepřeberná řada algoritmů viz například [7], kap. 21. Převod na A*-graf vychází z principů dynamického programování [3], [6]. Definice 3.1 (A*-graf pro problém TSP). Zvolme libovolně startovní vrchol s V a definujme: V = { M, v M V, s M, v V \ M} {, s, V, s }, E = { M, v, M {v}, w v, w E, M, v, M {v}, w V }, c ( M, v, M {v}, w ) = c( v, w ), s =, s, T = { V, s }. Každá dvojice M, v ; M V, s M, v (V \ M) představuje podúlohu nalezení nejkratší cesty, která začíná ve startovním vrcholu s, projde všechny ostatní vrcholy z M právě jednou a končí ve vrcholu v. Mimoto dvojice, s představuje startovní stav a dvojice V, s představuje celkovou úlohu nalezení nejkratší hamiltonovské kružnice. Lemma 3.2 (Převod TSP na A*-graf). Nalezení minimální cesty v A*-grafu V, E, c, s, T je ekvivalentní s nalezením nejkratší hamiltonovské kružnice v grafu G s ohodnocením c. Důkaz. Každá cesta v A*-grafu z s do T, s, {s}, v 1, {s, v 1 }, v 2,..., M k, v k,..., V \ {v n 1 }, v n 1, V, s odpovídá hamiltonovské kružnici s, v 1,..., v n 1 v grafu G, přičemž délka této cesty je délkou kružnice n 2 c( s, v 1 ) + c( v i, v i+1 ) + c( v n 1, s ). i=1 Naopak každé hamiltonovské kružnici v G odpovídá taková cesta v A*-grafu. Poznámka 3.3 (Velikost A*-grafu pro TSP). Pro graf G s n vrcholy má příslušný A*-graf problému obchodního cestujícího 2 + (n 1) 2 n 2 stavů (viz [6]).
16 Heuristiky Definice 3.4 (1. heuristika pro TSP). U každého vrcholu, ze kterého obchodní cestující ještě nevyšel, vybereme hranu s minimálním ohodnocením. Součet těchto ohodnocení je heuristika. Formálně h ( V, s ) = 0 a pro M V h ( M, x ) = v V \M Tvrzení 3.5. Funkce h je konzistentní heuristika. min{c( v, w ) w (V \ (M {x})) {s}}. Důkaz. Stačí pro všechny stavy M, v V dokázat h ( M, x ) h ( M {x}, y ) + c( x, y ) Z definice heuristiky h plyne: h ( M, x ) h ( M {x}, y ) = = min{c( v, w ) w (V \ (M {x})) {s}} protože v V \M v V \(M {x}) min{c( v, w ) w (V \ (M {x, y})) {s}} min{c( x, w ) w (V \ (M {x})) {s}} c( x, y ) (V \ M) \ (V \ (M {x})) = {x}. Společně s tím, že h ( V, s ) = 0, je podle lemmatu 2.5 funkce h konzistentní heuristika. Definice 3.6 (2. heuristika pro TSP). U každého vrcholu, kam obchodní cestující ještě nevstoupil, vybereme hranu s minimálním ohodnocením. Součet těchto ohodnocení je heuristika. Formálně h ( V, s ) = 0 a pro M V h ( M, x ) = min{c( v, w ) v V \ M}. w (V \(M {x})) {s} Tvrzení 3.7. Funkce h je konzistentní heuristika.
17 16 Důkaz. Důkaz konzistence je analogický předchozímu. Pozorování 3.8. Heuristika h není silnější než heuristika h a heuristika h není silnější než heuristika h. Důkaz. Jako protipříklad uvažujme toto zadání problému obchodního cestujícího: úplný graf V, E, c s ohodnocením s, v E : c( s, v ) = 1, kde s V je startovní vrchol, c( v, w ) = 2 jinde. Pak pro startovní stav, s je h (, s ) = 2 ( V 1) + 1, h (, s ) = V, takže h není silnější než h. Analogický protipříklad ukáže, že také h není silnější než h. Definice 3.9 (3. heuristika pro TSP). Kombinací obou heuristik získáme silnější heuristiku, která vede k větší redukci prohledané části A*-grafu (viz lemma 2.17): h(x) = max{ h (x), h (x)} Aproximace Hladově po minimálních hranách (horší aproximace než heuristikou generovaná): Doplňujeme cestu na hamiltonovskou kružnici tak, že u každého vrcholu vybereme hranu, která má nejmenší ohodnocení z hran, které vedou do vrcholů, kde obchodní cestující ještě nebyl Funkce pro A* start() = (, s). cil(x) uspěje pokud x = V, s. naslednici( M, v ) = { M {v}, w v, w E, w / M} pro M {v} V, = { V, s } jinak. oceneni( M, v, M {v}, w ) = c( v, w ). heuristika(x) viz aproximace(x) viz 3.1.3
18 Vrcholové pokrytí (VP) Zadání Pro neorientovaný graf G = V, E hledáme množinu vrcholů X V takovou, že každá hrana z E je pokrytá alespoň jedním vrcholem z X. Chceme, aby tato množina pokrývajících vrcholů byla co nejmenší. Důkaz NP-úplnosti problému viz [5] str (Theorem 3.3). Vrcholové pokrytí bylo vybráno jako klasická NP-úplná úloha z teorie grafů, která je minimalizační (je duální k úloze hledání maximální nezávislé množiny vrcholů). Na rozdíl od ostatních v této práci řešených problémů je u vrcholového pokrytí uniformní ohodnocení hran. V příslušném A*-grafu tak mají všechny cesty z počátečního do libovolného stavu stejnou délku. Třída cílových stavů (pokrývajících množin vrcholů) může být rozsáhlá je uzavřená na nadmnožiny, které ovšem nebudou algoritmem A* generovány. Pro VP existuje 2-aproximační algoritmus, tj. aproximace, která má poměrovou chybu ρ(n) = 2, viz aproximace ( ). Definice 3.10 (A*-graf pro problém VP). Pro každou množinu vrcholů X V označme množinu nepokrytých hran: Definujme: N(X) = {{v, w} E X {v, w} = } V = {X X V } = P(V ), E = { X, X {v} v V \ X}, c ( X, X {v} ) = 1, s =, T = {X N(X) = }. Lemma 3.11 (Převod VP na A*). Nalezení minimální cesty v A*-grafu V, E, c, s, T je ekvivalentní s nalezením minimálního vrcholového pokrytí v grafu G. Důkaz. Každému vrcholovému pokrytí X V grafu G odpovídá cílový stav X T v A*-grafu. Libovolná cesta z s do X má přitom délku X Heuristika Definice 3.12 (1. heuristika pro VP). Bud G N (X) podgraf G, který obsahuje pouze hrany v N(X). Heuristikou h(x) je nejmenší k N takové, že k (deg GN(X) (v i )) N(X), i=1
19 18 kde v 1,..., v k jsou vrcholy z G N (X), seřazené sestupně podle deg GN(X). Pro cílový stav X G, N(X) = definujeme h(x) = 0. To znamená: z vrcholů, které jsou v G N (X), vybíráme vrcholy, dokud součet jejich stupňů nedosáhne N(X). Minimální počet takových vrcholů je heuristika, nebot přinejmenším takový počet vrcholů bude nutno zařadit do libovolného pokrytí zbývajících hran. Tvrzení Funkce h je konzistentní heuristika. Důkaz. Je třeba ukázat, že X V, v V \ X platí h(x) 1 + h(x {v}). Necht X V, v V \ X. Označme N(X) = n 1, N(X {v}) = n 2, w X : d(w) = deg GN(X) (w), d (w) = deg GN(X {v}) (w). Zřejmě platí n 2 = n 1 d(v). Necht h(x {v}) = k a b 1,..., b k jsou vrcholy v G N(X {v}) takové, že platí d (b 1 ) d (b k ) N(X {v}) = n 2. Uvažujme vrcholy b 1,..., b k v grafu G N(X). Definujme d + (b i ) = d (b i )+1, pokud {b i, v} E a d + (b i ) = d (b i ) jinak. Pak d + (b 1 ),..., d + (b k ) jsou stupně vrcholů b 1,..., b k v grafu G N(X). Platí d + (b 1 ) d + (b k ) + d(v) d (b 1 ) d (b k ) + d(v) n 2 + d(v) = n 1, tedy h(x) nemůže být větší než k + 1, takže h(x) 1 + h(x {v}). Společně s tím, že h(x) = 0 pro X T, je podle lemmatu 2.5 funkce h konzistentní heuristika Aproximace 1. Hladová: Ze zbylých vrcholů z G N(X) vybereme do pokrytí vrchol s největším stupněm a iterujeme, dokud zbývá nějaká nepokrytá hrana. 2. Hranová (2-aproximace): Z N(X) vybereme libovolnou hranu. Do pokrytí přidáme oba její vrcholy a iterujeme Funkce pro A* start() =. cil(x) uspěje, pokud N(X) =. naslednici(x) = {X {v} v (V \ X)}. oceneni(x, X {v}) = 1. heuristika(x) viz aproximace(x) viz 3.3.3
20 Problém batohu (PB) Zadání Máme n předmětů o objemu o i > 0 a ceně c i > 0 a batoh o objemu K > 0. Chceme vybrat takové předměty, které se do batohu vejdou ( o i K) a jejichž součet cen je co největší. Důkaz NP-úplnosti problému viz [5] str. 247 MP9. Pro problém batohu existuje úplně polynomiální aproximační schéma. Protože maximalizační problém nevyhovuje pro aplikaci A*, budeme řešit opačný problém: hledáme ty předměty, které do batohu nedáme, a chceme, aby jejich cena byla co nejmenší. Proto začneme s přeplněným batohem, kde budou všechny předměty, a budeme z něj předměty postupně odebírat, tak, aby se tam zbytek vešel. Stavem bude množina indexů předmětů v batohu. Startovní stav bude obsahovat všechny předměty, cílové stavy budou reprezentovat množiny předmětů, které se již vejdou do batohu. Třída cílových stavů je tak uzavřena na podmnožiny, které ovšem nebudou algoritmem A* dále generovány. Definice 3.14 (A*-graf pro problém PB). Označme I = {1,..., n} množinu indexů všech předmětů a definujme: V = {X X I} = P(I), E = { X, X \ {i} i X}, c ( X, X \ {i} ) = c i, s = I, T = {X V o i K}. i X Lemma 3.15 (Převod PB na A*). Nalezení minimální cesty v A*-grafu V, E, c, s, T je ekvivalentní s vyřešením problému batohu. Důkaz. Každý cílový stav X T představuje jedno přípustné řešení daného problému batohu. Délka každé cesty z s do X v A*-grafu je součtem cen předmětů, které do batohu nedáme (tj. předmětů s indexy I \ X). Minimální cesta v A*-grafu tak dává maximální cenu předmětů, které se do batohu vejdou Heuristika Definice 3.16 (1. heuristika pro PB). Počítáme, jako kdyby šlo předměty dělit. Bereme předměty z X sestupně podle o i c i a odebereme jich tolik (případně z posledního jen část), aby se objem zbylých předmětů rovnal objemu batohu. Cena takto vyhozených předmětů (z posledního jen patřičná část) je heuristika h(x). Formálně: Přečíslujme předměty z X tak, aby byly seřazeny sestupně podle o i c i, tedy o 1 c 1 o 2 c 2... on c n. Definujme přebytečný objem v batohu K (X) = i X o i K. Pak objem
21 20 odebíraných předmětů je o o k 1 +p o k = K (X) a jejich cena c c k 1 +p c k = h(x), kde p je poměr rozdělení posledního předmětu: 0 p = K (X) (o o k 1 ) o k 1. Pokud je K (X) 0, jde o cílový stav a h(x) = 0. Tvrzení Funkce h je konzistentní heuristika. Důkaz. Je třeba ukázat, že X I, y X platí h(x) c y + h(x \ {y}). Necht X I, y X; x 1,..., x n jsou patřičně seřazené předměty. Platí: K (X \ {y}) = i X o i o y K = K (X) o y. 1. Pokud y {x 1,..., x k 1 }, pak h(x \ {y}) = c c k 1 + p c k c y = h(x) c y. 2. Jinak y = x k nebo y / {x 1,..., x k }. Pro oba případy označme l počet předmětů odebraných heuristikou h(x \ {y}) a p poměr pro rozdělení posledního odebíraného předmětu v téže heuristice. Tedy h(x \ {y}) = c c l 1 + p c l, K (X \ {y}) = o o l 1 + p o l. Víme, že rozdíl přebytečného objemu je Ale také K (X) K (X \ {y}) = o y. K (X) K (X \ {y}) = = (o o k 1 + p o k ) (o o l 1 + p o l ) = = (1 p ) o l + o l o k 1 + p o k. Označme c h rozdíl obou heuristik: c h = h(x) h(x \ {y}) = = (c c k 1 + p c k ) (c c l 1 + p c l ) = = (1 p ) c l + c l c k 1 + p c k. Díky seřazení předmětů platí: o y c y o k c k o k 1 c k 1... o l+1 c l+1 o l c l.
22 21 Protože pro kladná čísla platí x a b c d x a+c b+d, dostáváme: Tedy o y c y p o k + o k o l+1 + (1 p ) o l p c k + c k c l+1 + (1 p ) c l c y c h = h(x) h(x \ {y}). = o y c h. Společně s tím, že h(x) = 0 pro X T, je podle lemmatu 2.5 funkce h konzistentní heuristika Aproximace Stejně jako heuristika, ale poslední předmět nedělíme, odstraníme ho celý Funkce pro A* start() = I. cil(x) uspěje, pokud i X o i K. naslednici(x) = {X \ {i} i X}. oceneni(x, X \ {i}) = c i. heuristika(x) viz aproximace(x) viz Rozvrhování úloh (RU) Zadání Máme n úloh daných hodnotami c i, t i, p i, r i R + 0, kde c i určuje čas potřebný na provedení úlohy, t i určuje čas požadovaného ukončení úlohy, penále p i určuje postih za nestihnutí úlohy v požadovaném čase a konečně r i je koeficient růstu penalizace. Definujme nákladovou funkci: f i : R + 0 R + 0, f i (t) = p i + r i (t t i ) pro t > t i, f i (t) = 0 jinak. Chceme seřadit úlohy tak, aby součet jejich nákladových funkcí v čase ukončení úlohy byl co nejmenší. Jinými slovy hledáme permutaci q(i) takovou, aby minimalizovala celkové náklady f i (s i + c i ), kde s i = c j je začátek provádění úlohy i. q(j)<q(i) Důkaz NP-úplnosti problému viz [5] str , SS3.
23 22 Zvolená varianta problému rozvrhování úloh je jedna z jednodušších, avšak vystihuje kombinatorickou podstatu problémů rozvrhování [14] a je NP-úplná. Heuristické odhady jsou zde obtížné vzhledem k tomu, že nákladové funkce závisí na čase. Pro důkazy konzistence námi navržených odhadů stačí, že nákladové funkce jsou neklesající. Definice 3.18 (A*-graf pro problém RU). Označme I = {1,..., n} množinu všech indexů úloh, stav bude podmnožina X I, která představuje podproblém rozvržení úloh z X. Pro X I označme součet časů úloh z této podmnožiny c X = c i. Definujme: i X V = {X X I} = P(I), E = { X, X {i} i I \ X}, c ( X, X {i} ) = f i (c X + c i ), s =, T = {I}. Lemma 3.19 (Převod RU na A*). Nalezení minimální cesty v A*-grafu (V, E, c, s, T ) je ekvivalentní s vyřešením problému rozvrhování úloh. Důkaz. Každá cesta z s do T v A*-grafu představuje jednu permutaci (rozvržení úloh). Délka této cesty je součet nákladových funkcí pro toto rozvržení Heuristika Definice 3.20 (1. heuristika pro RU). Sečteme nákladové funkce zbývajících úloh, kdyby byly rozvrženy jako první: h 1 (X) = h 1 (I) = 0. i (I\X) f i (c X + c i ) pro X I, Tvrzení Funkce h 1 je konzistentní heuristika. Důkaz. Je třeba ukázat že pro každé X I, y I \ X platí h 1 (X) f y (c X + c y ) + h 1 (X {y}). Díky tomu, že nákladové funkce jsou neklesající, pro i I \ (X {y}) platí: f i (c X + c i ) f i (c (X {y}) + c i ) = f i (c X + c y + c i ).
24 23 Odtud získáme i (I\X) f i (c X + c i ) f y (c X + c y ) + i (I\(X {y})) f i (c (X {y}) + c i ). Společně s tím, že h 1 (I) = 0, je h 1 podle lemmatu 2.5 konzistentní heuristika. Definice 3.22 (2. heuristika pro RU). Bud c seznam časů zbývajících úloh seřazených do neklesající posloupnosti podle jejich času. V každém bodě, kde by končila nějaká úloha podle tohoto rozvržení, určíme minimální nákladovou funkci přes všechny zbývající úlohy. Heuristika bude součet těchto minim. h 2 (X) = h 2 (I) = 0. I\X i=1 min f j(c X + j (I\X) i c k) pro X I, k=1 Tvrzení Funkce h 2 je konzistentní heuristika. Důkaz. Je třeba ukázat, že pro každé X I, y I \ X platí h 2 (X) f y (c X + c y ) + h 2 (X {y}). Necht X I, y I \ X. Pro libovolné časy t 1, t 2 platí: t 1 t 2 min f j (t 1 ) min f j (t 2 ), j I\X j I\(X {y}) protože nákladové funkce f j jsou neklesající. Označme n = I \ X, dále m takový index, že c m = c y, a pro všechna i {1,..., n} : c i = i k=1 c k,. Označme T rozvržení časů podle heuristiky h 2(X) a T rozvržení, které začíná časem úlohy y a pak následuje rozvržení podle heuristiky h 2 (X {y}): T = c X + c 1, c X + c 2,..., c X + c m, c X + c m+1,..., c X + c n, T = c X + c m, c X + c m + c 1,..., c X + c m + c m 1, c X + c m+1,..., c X + c n. Pak stačí ukázat, že i {1,..., n} : T i T i. To je ale pravda, protože platí i {1,..., m} : c i c m + c i 1 a pro i > m : T i = T i. Odtud plyne n min f j(t i ) f y (T 1) + j (I\X) i=1 n min f j(t i ), j (I\(X {y})) i=2
25 24 tedy I\X i=1 min j (I\X) f j (c X + i c k ) f y (c X + c y ) + k=1 I\X {y} i=1 min j (I\(X {y})) f j (c (X {y}) + i c k ). Společně s tím, že h 2 (I) = 0, je h 2 podle lemmatu 2.5 konzistentní heuristika. Pozorování Heuristika h 1 není silnější než heuristika h 2 a heuristika h 2 není silnější než heuristika h 1. Důkaz. Jako první protipříklad uvažujme zadání RU se dvěma úlohami s hodnotami c 1 = c 2 > 0, t 1 = t 2 = 0, p 1 > p 2 > 0, r 1 = r 2 = 0. Pak h 1 ( ) = p 1 + p 2, h 2 ( ) = 2 p 2, tedy h 2 není silnější než h 1. Druhý protipříklad bude mít stejné zadání až na to, že stanovíme t 1 = t 2 = c 1 = c 2 > 0. Pak h 1 ( ) = 0, h 2 ( ) = p 2, tedy h 1 není silnější než h 2. Definice 3.25 (3. heuristika pro RU). Kombinací obou heuristik získáme silnější heuristiku, která vede k větší redukci prohledané části A*-grafu (viz lemma 2.17): h 3 (X) = max{h 1 (X), h 2 (X)} pro X I Aproximace 1. Zbylé úlohy seřadíme sestupně podle nákladové funkce v čase, když by byla tato úloha rozvržena jako hned následující. Vybereme úlohu s nejdražším penále a iterujeme. Pro stav X tedy vybereme úlohu s max f i(c X + c i ). i I\X 2. Podobně jako předchozí, akorát vybíráme podle průměru nákladových funkcí při rozvržení na začátku a na konci. Pro stav X tedy vybereme úlohu s max i I\X f i (c X + c i ) + f i (c I ) Funkce pro A* start() =. cil(x) uspěje, pokud X = I. naslednici(x) = {X {i} i I \ X}. oceneni(x, X {i}) = f i (c X + c i ). heuristika(x) viz aproximace(x) viz k=1
26 Kapitola 4 Implementace - uživatelská dokumentace Jako uživatelské rozhraní pro vytvořený programový systém bylo vyvinuto jednoduché grafické prostředí. Po výběru řešeného optimalizačního problému následuje jeho zadání, kde může uživatel zvolit načtení dat ze souboru, nebo náhodné generování dat. Možná je též úprava aktuálního zadání a jeho uložení do souboru pro opakované spuštění (například s jinými parametry). Balík s programovým prostředím je ke stažení na adrese Obrázek 4.1: Výběr řešeného optimalizačního problému 4.1 Instalace a spuštění grafického rozhraní Grafické rozhraní bylo napsáno v programovacím jazyce Python s využitím grafické knihovny Tkinter. Protože programový systém požaduje platformu Linux, není zatím použití jiné platformy možné (viz sekce 5.1). Spuštění grafického rozhraní tak vyžaduje programovací jazyk Python, grafickou knihovnu Tk, a její podporu pro Python: python-tk (v distribuci Debian splní všechny tyto požadavky instalace balíku python-tk). 25
27 26 K instalaci stačí překopírovat obsah balíku do libovolného adresáře na pevném disku. Při výpočtu větších zadání může program vyžadovat poměrně velké místo na pevném disku, je proto vhodné na něm mít dost volného místa. Spuštění grafického rozhraní se provede spuštěním skriptu onp-star-gui. Adresářová struktura: bin spustitelné soubory programového systému (pro každý řešený optimalizační problém jeden, jsou to tsp, vp, pb, ru), gui grafické rozhraní, src zdrojové kódy, examples ukázková zadání, tyto lze pomocí uživatelského prostředí načíst. 4.2 Výběr optimalizačního problému a zadání vstupních dat Je možno zvolit jeden ze čtyř implementovaných optimalizačních NP-úplných problémů popsaných v kapitole 3 - viz obrázek 4.1. Pro jednotlivé optimalizační problémy se zadávají vstupní data v různé struktuře. Vždy lze zadání načíst z připraveného souboru, nebo je náhodně generovat. Takto připravená data lze libovolně upravovat a případně uložit. Při generování dat se použije zadaná velikost úlohy, a objeví se dialog, ve kterém je možné nastavit rozmezí generovaných čísel. Velikost úlohy lze kdykoliv změnit, přičemž tato změna není destruktivní, tedy při zmenšení velikosti zůstane zachována patřičná počáteční část dat. Některá předpřipravená zadání lze nalézt v adresáři examples. Pokud si zadání zapomenete uložit, nic se neděje, program automaticky ukládá poslední zadání do souboru examples/last Problém obchodního cestujícího Zadání ohodnoceného grafu pro problém obchodního cestujícího probíhá pomocí matice, viz obrázek 4.2. Políčko v řádku i a sloupci j určuje ohodnocení hrany z vrcholu i do vrcholu j. Zadáním jakékoli záporné hodnoty se příslušná hrana odstraní z grafu. Je ovšem třeba upozornit, že program nijak nekontroluje, zda v zadaném grafu existuje hamiltonovská kružnice. V případě, že neexistuje, chování programu není definované Vrcholové pokrytí Neorientovaný graf pro vrcholové pokrytí se zadává pomocí trojúhelníkové matice sousednosti, reprezentované zaškrtávacími políčky, viz obrázek 4.3. Zaškrtnutím políčka na i-tém řádku a j-tém sloupci označíme přítomnost hrany mezi vrcholy i a j v grafu.
28 27 Obrázek 4.2: Zadání TSP maticí ohodnocených hran Obrázek 4.3: Zadání grafu pro VP trojúhelníkovou maticí sousednosti Problém batohu Předměty pro zadání problému batohu se zadávají do tabulky, kde každý řádek představuje jeden předmět, viz obrázek 4.4. Navíc se určuje objem batohu. Všechny tyto hodnoty musí být nezáporné.
29 Rozvrhování úloh Obrázek 4.4: Zadání objemů a cen předmětů pro PB Úlohy pro zadání rozvrhování úloh se zadávají do tabulky, kde každý řádek představuje jednu úlohu, viz obrázek 4.5. Všechny tyto hodnoty musí být nezáporné. 4.3 Parametry Parametry běhu A* jsou dvojího druhu (viz obrázek 4.6. Nejprve může uživatel volit heuristiku a aproximaci z nabídky uvedené v textu k vybranému optimalizačnímu problému (viz kapitola 3). Heuristika 0 znamená použití nulové heuristiky (viz poznámka 2.15). Aproximace 0 znamená použití heuristikou generované aproximace (viz poznámka 2.19). Dále jsou zadávány technické parametry týkající se rozsahu haldy a B-stromu (tyto parametry mimo jiné ovlivňují množství použité paměti při výpočtu). V zadání parametrů jsou nabízeny vhodné předdefinované hodnoty.
30 29 Obrázek 4.5: Zadání úloh pro RU 4.4 Průběžné informace o výpočtu a výsledné řešení Po spuštění probíhá vlastní výpočet (viz obrázek 4.7), jehož průběh je zobrazován ve formě údajů o dosaženém dolním odhadu optima (vycházející z použité heuristiky postupně roste), horním odhadu optima (vycházející z použité aproximace při nalezení lepší aproximace klesne) a jemu odpovídajícímu nejlepšímu známému řešení. Poměr mezi oběma odhady ukazuje, jak se běh algoritmu přibližuje k cíli. Další informace se týkají rozsahu provedeného prohledávání (počet expanzí) a aktuální velikosti haldy. U rozsáhlejších zadání dochází k překročení maximálního zadaného rozměru haldy, což vede k odkládání části položek do vnější paměti (viz údaje o odkládací mezi počtu odložených položek a obsazené paměti). Tyto údaje během výpočtu kolísají. Po úspěšném zakončení běhu se objeví výsledné optimum, nalezené optimální řešení a celkový počet expanzí (viz obrázek 4.8), který dokumentuje složitost provedeného výpočtu. Poznamenejme, že při řešení jednoho příkladu lze použít různé heuristiky a aproximace. Výsledkem však musí být stejné optimum. Lišit se může nalezené optimální řešení (může se to to stát v případě že existuje více optimálních řešení běžné třeba u VP). Výrazně se může lišit počet expanzí v závislosti na síle použité heuristiky ve vztahu k danému zadání úlohy.
31 30 Obrázek 4.6: Zadání parametrů běhu algoritmu A* Obrázek 4.7: Průběžné výsledky Obrázek 4.8: Výsledné řešení
32 Kapitola 5 Implementace - programátorská dokumentace Implementován je algoritmus A* s aproximací (algoritmus 2.2). Program je napsán obecně a využívá funkcí z definice 2.9, které reprezentují A*-graf pro optimalizační problém (ne nutně NP-úplný). Implementace je provedena v jazyce C, který byl vybrán pro svoji rychlost. Při psaní programu byl brán zřetel na šetření pamětí a rychlost. Také z tohoto důvodu nejsou použity žádné externí knihovny a všechny datové struktury jsou napsány s přihlédnutím ke specifickým požadavkům algoritmu A*. Algoritmus A* při své práci volá funkce, které definují jednotlivé optimalizační problémy. Přiřazením zdrojového kódu pro daný problém ke kódu pro A* vznikne samostatný spustitelný program. 5.1 Instalace a spuštění K instalaci stačí překopírovat obsah instalačního balíku do libovolného adresáře na pevném disku. Spustitelné soubory pro platformu Linux jsou v adresáři bin Ovládání programu z příkazové řádky Základní program nepoužívá žádné grafické prostředí, volby pro běh programu lze zadat použitím voleb na příkazové řádce. Grafický program popsaný v kapitole 4 je pouze jeho grafickou nadstavbou, která spustí program pro daný problém s příslušnými volbami a interpretuje jeho výstup. Na příkazové řádce lze využít následující volby: -v ovládá upovídanost programu. Očekává nezáporné celé číslo. Základní hodnota je 1, možnosti jsou f specifikuje soubor, který obsahuje zadání. 31
33 32 -s pokud není určen soubor se zadáním, specifikuje velikost náhodně vygenerovaného problému, který se použije. Pokud je určen soubor se zadáním pomocí parametru -f, hodnota -s se ignoruje. Musí být kladné celé číslo. Základní hodnota: 20. -h specifikuje číslo použité heuristiky. 0 označuje nulovou heuristiku. Základní hodnota je vždy nejvyšší přípustné číslo (podle počtu heuristik pro daný problém). -a stejné jako -h, ale pro aproximace. 0 označuje použití heuristikou generované aproximace. -u specifikuje hodnotu heapmax, tedy maximální velikost haldy. Podrobnosti v sekci 5.2. Základní hodnota: d specifikuje hodnotu heapmin, tedy velikost haldy, na kterou se zmenší, pokud dojde k překročení heapmax. Podrobnosti v sekci 5.2. Základní hodnota: m velikost paměti v MB pro cache B-stromu. Základní hodnota: 100. Přípustné volby jsou pro všechny čtyři spustitelné soubory stejné Formát vstupních souborů Formát zadání jednotlivých problémů (tedy souborů předaných parametrem -f) je následující. Pro zadání problému obchodního cestujícího a problému vrcholového pokrytí je formát jednotný: na prvním řádku je přirozené číslo označující počet vrcholů n = V grafu; na dalších řádcích je graf zadaný maticí ohodnocení hran. Matice musí být zadaná jako n n desetinných čísel oddělených mezerou nebo novým řádkem. Tyto hodnoty jsou použity pro vyplnění matice n n po řádcích. Každá hodnota může být celé nebo desetinné číslo. Jakákoliv záporná hodnota znamená, že se příslušná hrana nebude v grafu vyskytovat. Hodnoty na diagonále se ignorují, program se chová tak, jako kdyby tam byla záporná hodnota. U zadání problému batohu je na prvním řádku desetinné číslo určující objem batohu. Na druhém řádku je přirozené číslo n určující počet předmětů. Následuje n řádků se dvěma desetinnými čísly oddělenými mezerou, které určují objem a cenu předmětu. Všechna čísla v zadání musí být nezáporná. U zadání problému rozvrhování úloh je na prvním řádku přirozené číslo n určující počet úloh. Následuje n řádků se čtyřmi desetinnými čísly oddělenými mezerou, které určují postupně čas úlohy, čas požadovaného skončení úlohy, penále za nestihnutí a koeficient růstu penále. Všechna čísla v zadání musí být nezáporná. Místo jakéhokoliv desetinného čísla může být číslo celé (které bude programem převedeno na desetinné). Při nesplnění některého z požadavků program vypíše chybové hlášení a skončí.
34 Kompilace Program byl vyvíjen v operačním systému Linux s použitím kompilátoru gcc. Pro zkompilování programu stačí spustit příkaz make v adresáři src. Tím by se měly vytvořit spustitelné soubory tsp, vp, pb, ru v adresáři bin. 5.2 Datové struktury Algoritmus A* používá ke své práci dvě množiny prvků: open a closed. V každém kroku algoritmu se z open vybere minimální prvek a ten se z open odstraní (a přesune se do closed). Struktura starající se o open musí také umět zmenšit hodnotu nějakého prvku, aniž by se porušila jednoduchost výběru prvku minimálního. Dále je potřeba v open i closed rychle vyhledat přítomnost nějakého prvku. Pokud je nalezen, tak zjistit, jestli se nachází v open nebo closed. S vědomím těchto předpokladů byly zvoleny následující datové struktury: K implementaci open je použita minimální halda (tedy halda s minimem v kořeni, viz [10], str. 35). Tato halda navíc implementuje funkci HeapDecreaseKey, která umožňuje po zmenšení hodnoty prvku jeho správné přeřazení uvnitř haldy. Dále halda podporuje volání zadané funkce vždy, když se změní pozice prvku v haldě (volání HeapDecreaseKey vyžaduje pozici prvku v haldě). K uložení všech prvků (tj. uzavřené prvky množina closed a prvky v haldě množina open) a jejich vyhledávání jsou použity tzv. hrábě, tedy hashovací tabulka, kde každý záznam v tabulce představuje seznam prvků. Protože při řešení větších zadání velikost haldy neúměrně roste a s ní i pamět ové nároky, odkládá se část dat do souboru. Toto odkládání je řízeno dvěma parametry: heapmax (maximální velikost haldy, která se nemůže překročit) a heapmin (velikost, na kterou se zmenší velikost haldy při překročení heapmax). Pokud velikost haldy překročí heapmax, zmenší se velikost haldy na heapmin odložením prvků z haldy do souboru. Zároveň se nastaví parametr odkladlimit na hodnotu posledního prvku haldy. Při vkládání nového prvku do haldy se nejprve porovná s parametrem odkladlimit; pokud je hodnota prvku větší, prvek se do haldy nevloží, ale odloží se do souboru. Tím pádem dříve nebo později dojde k vyprázdnění haldy. Ve chvíli, kdy se to stane, naplníme haldu prvky ze souboru na velikost heapmin. Může se stát, že v odkládacím souboru bude nějaký prvek vícekrát (vygeneruje se stejný stav). Toto se řeší při načítání prvků ze souboru, kdy se kontrolují duplicity a do haldy se dá prvek s nejmenším odhadem. Také je možné, že se v odkládacím souboru vyskytují prvky s odhadem větším nebo rovným aproximaci. Tyto prvky prostě při načítání nezařadíme do haldy. K odkládání do souboru se používá B-strom (viz [10], sekce 5.1). Díky tomu můžeme odložené prvky řadit za běhu a není třeba při načítání prvků z odkládacího souboru všechny projít (což by bylo značně neefektivní).
35 Halda a hrábě Je použita binární halda. Halda zaručuje operace vložení prvku, vyjmutí minimálního prvku a zmenšení hodnoty nějakého prvku v čase O(log n). Implementace haldy je napsána obecně, umožňuje pracovat s jakoukoliv strukturou, k porovnávání jednotlivých prvků používá dodanou porovnávací funkci. Hrábě se skládají z hashovací tabulky, jejíž každý řádek obsahuje seznam prvků, které mají stejný hash. Podrobnější popis takových struktur lze nalézt například v [13], sekce 6.8. Hashovací funkce musí být definována v závislosti na řešeném problému, protože A* nic neví o datech, která jsou pro optimalizační problém používána k reprezentaci stavů. Čas potřebný k vyhledání daného prvku záleží na kvalitě hashovací funkce: pokud by hashovací funkce zaručovala rovnoměrné rozdělení, byl by to O(n/hashMax), kde hashmax je velikost hashovací tabulky B-strom Jako sekundární pamět algoritmu A* byla použita lehce modifikovaná varianta tzv. redundantního B + -stromu, kdy nelistové uzly mohou obsahovat více položek než listové uzly: Definice 5.1 (B-strom pro A*). Redundantní B + -strom řádu (n, m) je orientovaný strom, který splňuje následující požadavky: 1. Kořen má nejméně 2 potomky, pokud není listem. 2. Každý nekořenový nelistový uzel má nejméně n a nejvýše n potomků Každý list má nejméně m a nejvýše m datových záznamů Všechny cesty z kořene do listu jsou stejně dlouhé. 5. Data v nelistovém uzlu jsou organizována následovně: p 0, (k 1, p 1 ), (k 2, p 2 ),..., (k l, p l ) kde p i jsou ukazatele na potomky, k i jsou klíče, které jsou uspořádány vzestupně. 6. Data v listovém uzlu jsou organizována následovně: p r, (k 1, d 1 ), (k 2, d 2 ),..., (k l, d l ) kde p r je ukazatel na pravého souseda (listový uzel nejblíže vpravo), k i jsou klíče, které jsou uspořádány vzestupně, d i jsou ke klíči asociovaná data, (k i, d i ) představuje jeden datový záznam. 7. Odpovídá-li ukazateli p i podstrom U(p i ), potom pro všechny nelistové uzly a všechny i {1,... n} platí:
zejména Dijkstrův algoritmus pro hledání minimální cesty a hladový algoritmus pro hledání minimální kostry.
Kapitola Ohodnocené grafy V praktických aplikacích teorie grafů zpravidla graf slouží jako nástroj k popisu nějaké struktury. Jednotlivé prvky této struktury mají často přiřazeny nějaké hodnoty (může jít
VíceKapitola 11. Vzdálenost v grafech. 11.1 Matice sousednosti a počty sledů
Kapitola 11 Vzdálenost v grafech V každém grafu lze přirozeným způsobem definovat vzdálenost libovolné dvojice vrcholů. Hlavním výsledkem této kapitoly je překvapivé tvrzení, podle kterého lze vzdálenosti
VíceGRAFY A GRAFOVÉ ALGORITMY
KATEDRA INFORMATIKY PŘÍRODOVĚDECKÁ FAKULTA UNIVERZITA PALACKÉHO GRAFY A GRAFOVÉ ALGORITMY ARNOŠT VEČERKA VÝVOJ TOHOTO UČEBNÍHO TEXTU JE SPOLUFINANCOVÁN EVROPSKÝM SOCIÁLNÍM FONDEM A STÁTNÍM ROZPOČTEM ČESKÉ
VíceIntervalové stromy. Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme. 1. Změna jednoho čísla v posloupnosti.
Intervalové stromy Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme průběžně provádět tyto dvě operace: 1. Změna jednoho čísla v posloupnosti. 2. Zjištění součtu čísel
Více12. Aproximační algoritmy
12. Aproximační algoritmy (F.Haško,J.enda,.areš, ichal Kozák, Vojta Tůma) Na minulých přednáškách jsme se zabývali různými těžkými rozhodovacími problémy. Tato se zabývá postupy, jak se v praxi vypořádat
Více5 Rekurze a zásobník. Rekurzivní volání metody
5 Rekurze a zásobník Při volání metody z metody main() se do zásobníku uloží aktivační záznam obsahující - parametry - návratovou adresu, tedy adresu, kde bude program pokračovat v metodě main () po skončení
VíceČasto potřebujeme hledat mezi dvěma vrcholy grafu cestu, která je v nějakém
1. Nejkrat¹í cesty Často potřebujeme hledat mezi dvěma vrcholy grafu cestu, která je v nějakém smyslu optimální typicky nejkratší možná. Už víme, že prohledávání do šířky najde cestu s nejmenším počtem
VíceDijkstrův algoritmus
Dijkstrův algoritmus Hledání nejkratší cesty v nezáporně hranově ohodnoceném grafu Necht je dán orientovaný graf G = (V, H) a funkce, která každé hraně h = (u, v) H přiřadí nezáporné reálné číslo označované
Více1. Minimální kostry. 1.1. Od mìsteèka ke kostøe
. Minimální kostry Napadl sníh a přikryl peřinou celé městečko. Po ulicích lze sotva projít pěšky, natož projet autem. Které ulice prohrneme, aby šlo dojet odkudkoliv kamkoliv, a přitom nám házení sněhu
VíceVYSOKÁ ŠKOLA EKONOMICKÁ V PRAZE. Optimalizace trasy při revizích elektrospotřebičů
VYSOKÁ ŠKOLA EKONOMICKÁ V PRAZE FAKULTA INFORMATIKY A STATISTIKY Hlavní specializace: Ekonometrie a operační výzkum Název diplomové práce Optimalizace trasy při revizích elektrospotřebičů Diplomant: Vedoucí
Vícepřirozený algoritmus seřadí prvky 1,3,2,8,9,7 a prvky 4,5,6 nechává Metody řazení se dělí:
Metody řazení ve vnitřní a vnější paměti. Algoritmy řazení výběrem, vkládáním a zaměňováním. Heapsort, Shell-sort, Radix-sort, Quicksort. Řazení sekvenčních souborů. Řazení souborů s přímým přístupem.
VíceSoučin matice A a čísla α definujeme jako matici αa = (d ij ) typu m n, kde d ij = αa ij pro libovolné indexy i, j.
Kapitola 3 Počítání s maticemi Matice stejného typu můžeme sčítat a násobit reálným číslem podobně jako vektory téže dimenze. Definice 3.1 Jsou-li A (a ij ) a B (b ij ) dvě matice stejného typu m n, pak
VíceUmělá inteligence. UI (AI) - součást informatiky s průniky mimo obor Stručná historie UI. Letošní cena nadace Vize 2000 - Joseph Weizenbaum
Umělá inteligence UI (AI) - součást informatiky s průniky mimo obor Stručná historie UI 1943-56 začátky (modelování neuronů a sítí na počítači) 1952-69 velká očekávání (GPS, Lisp, microworlds) 1966-74
VíceTGH05 - aplikace DFS, průchod do šířky
TGH05 - aplikace DFS, průchod do šířky Jan Březina Technical University of Liberec 28. března 2017 Grafová formulace CPM (critical path method) Orientovaný acyklický graf (DAG) je orientovaný graf neobsahující
VíceSTROMOVE ALGORITMY Prohledavani do sirky (level-order) Po vodorovnejch carach fronta
STROMOVE ALGORITMY Prohledavani do sirky (level-order) Po vodorovnejch carach vlož do fronty kořen opakuj, dokud není fronta prázdná 1. vyber uzel z fronty a zpracuj jej 2. vlož do fronty levého následníka
VíceTento text je stručným shrnutím těch tvrzení Ramseyovy teorie, která zazněla
Ramseyovy věty Martin Mareš Tento text je stručným shrnutím těch tvrzení Ramseyovy teorie, která zazněla na mé letošní přednášce z Kombinatoriky a grafů I Předpokládá, že čtenář se již seznámil se základní
VíceIB108 Sada 1, Příklad 1 Vypracovali: Tomáš Krajča (255676), Martin Milata (256615)
IB108 Sada 1, Příklad 1 ( ) Složitost třídícího algoritmu 1/-Sort je v O n log O (n.71 ). Necht n = j i (velikost pole, které je vstupním parametrem funkce 1/-Sort). Lehce spočítáme, že velikost pole předávaná
VíceTGH05 - aplikace DFS, průchod do šířky
TGH05 - aplikace DFS, průchod do šířky Jan Březina Technical University of Liberec 31. března 2015 Grafová formulace CPM (critical path method) Orientovaný acyklický graf (DAG) je orientovaný graf neobsahující
VíceBAKALÁŘSKÁ PRÁCE. Numerické metody jednorozměrné minimalizace
UNIVERZITA PALACKÉHO V OLOMOUCI PŘÍRODOVĚDECKÁ FAKULTA KATEDRA MATEMATICKÉ ANALÝZY A APLIKACÍ MATEMATIKY BAKALÁŘSKÁ PRÁCE Numerické metody jednorozměrné minimalizace Vedoucí bakalářské práce: RNDr. Horymír
VíceAlgoritmus pro hledání nejkratší cesty orientovaným grafem
1.1 Úvod Algoritmus pro hledání nejkratší cesty orientovaným grafem Naprogramoval jsem v Matlabu funkci, která dokáže určit nejkratší cestu v orientovaném grafu mezi libovolnými dvěma vrcholy. Nastudoval
VíceVrcholová barevnost grafu
Vrcholová barevnost grafu Definice: Necht G = (V, E) je obyčejný graf a k N. Zobrazení φ : V {1, 2,..., k} nazýváme k-vrcholovým obarvením grafu G. Pokud φ(u) φ(v) pro každou hranu {u, v} E, nazveme k-vrcholové
VíceJarníkův algoritmus. Obsah. Popis
1 z 6 28/05/2015 11:44 Jarníkův algoritmus Z Wikipedie, otevřené encyklopedie Jarníkův algoritmus (v zahraničí známý jako Primův algoritmus) je v teorii grafů algoritmus hledající minimální kostru ohodnoceného
VíceZdůvodněte, proč funkce n lg(n) roste alespoň stejně rychle nebo rychleji než než funkce lg(n!). Symbolem lg značíme logaritmus o základu 2.
1 3 4 5 6 7 8 9 10 11 1 13 14 15 16 17 18 19 0 1 3 4 5 6 7 8 9 30 31 3 Zdůvodněte, proč funkce f(n) = n log(n) 1 n 1/ roste rychleji než funkce g(n) = n. Zdůvodněte, proč funkce f(n) = n 3/ log(n) roste
VíceSkalární součin je nástroj, jak měřit velikost vektorů a úhly mezi vektory v reálných a komplexních vektorových prostorech.
Kapitola 9 Skalární součin Skalární součin je nástroj, jak měřit velikost vektorů a úhly mezi vektory v reálných a komplexních vektorových prostorech. Definice 9.1 Je-li x = (x 1,..., x n ) T R n 1 reálný
VíceJazyk matematiky. 2.1. Matematická logika. 2.2. Množinové operace. 2.3. Zobrazení. 2.4. Rozšířená číslená osa
2. Jazyk matematiky 2.1. Matematická logika 2.2. Množinové operace 2.3. Zobrazení 2.4. Rozšířená číslená osa 1 2.1 Matematická logika 2.1.1 Výrokový počet logická operace zapisujeme čteme česky negace
VíceAlgoritmizace prostorových úloh
INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Grafové úlohy Daniela Szturcová Tento
VíceH {{u, v} : u,v U u v }
Obyčejný graf Obyčejný graf je dvojice G= U, H, kde U je konečná množina uzlů (vrcholů) a H {{u, v} : u,v U u v } je (konečná) množina hran. O hraně h={u, v} říkáme, že je incidentní s uzly u a v nebo
VíceImplementace numerických metod v jazyce C a Python
Fakulta elektrotechnická Katedra matematiky Dokumentace k semestrální práci Implementace numerických metod v jazyce C a Python 2013/14 Michal Horáček a Petr Zemek Vyučující: Mgr. Zbyněk Vastl Předmět:
VícePŘEDNÁŠKA 2 POSLOUPNOSTI
PŘEDNÁŠKA 2 POSLOUPNOSTI 2.1 Zobrazení 2 Definice 1. Uvažujme libovolné neprázdné množiny A, B. Zobrazení množiny A do množiny B je definováno jako množina F uspořádaných dvojic (x, y A B, kde ke každému
VíceStromy, haldy, prioritní fronty
Stromy, haldy, prioritní fronty prof. Ing. Pavel Tvrdík CSc. Katedra počítačů FEL České vysoké učení technické DSA, ZS 2008/9, Přednáška 6 http://service.felk.cvut.cz/courses/x36dsa/ prof. Pavel Tvrdík
VíceNPRG030 Programování I 3/2 Z --- NPRG031 Programování II --- 2/2 Z, Zk
NPRG030 Programování I 3/2 Z --- NPRG031 Programování II --- 2/2 Z, Zk Pavel Töpfer Katedra softwaru a výuky informatiky MFF UK MFF Malostranské nám., 4. patro, pracovna 404 pavel.topfer@mff.cuni.cz http://ksvi.mff.cuni.cz/~topfer
VíceLineární programování
Lineární programování Úlohy LP patří mezi takové úlohy matematického programování, ve kterých jsou jak kriteriální funkce, tak i všechny rovnice a nerovnice podmínek výhradně tvořeny lineárními výrazy.
Více3. Matice a determinanty
. Matice a determinanty Teorie matic a determinantů představuje úvod do lineární algebry. Nejrozsáhlejší aplikace mají matice a determinanty při řešení systémů lineárních rovnic. Pojem determinantu zavedl
Více10 Přednáška ze
10 Přednáška ze 17. 12. 2003 Věta: G = (V, E) lze nakreslit jedním uzavřeným tahem G je souvislý a má všechny stupně sudé. Důkaz G je souvislý. Necht v je libovolný vrchol v G. A mějme uzavřený eurelovský
Více13. Třídící algoritmy a násobení matic
13. Třídící algoritmy a násobení matic Minulou přednášku jsme probírali QuickSort, jeden z historicky prvních třídících algoritmů, které překonaly kvadratickou složitost aspoň v průměrném případě. Proč
VíceDnešní program odvozování v Bayesovských sítích exaktní metody (enumerace, eliminace proměnných) aproximační metody y( (vzorkovací techniky)
Umělá inteligence II Roman Barták, KTIML roman.bartak@mff.cuni.cz http://ktiml.mff.cuni.cz/~bartak Bayesovská síť zachycuje závislosti mezi náhodnými proměnnými Pro zopakování orientovaný acyklický graf
VíceŘešení problému batohu dynamickým programováním, metodou větví a hranic a aproximativním algoritmem
2. 1. 213 MI-PAA úkol č. 2 Antonín Daněk Řešení problému batohu dynamickým programováním, metodou větví a hranic a aproximativním algoritmem 1 SPECIFIKACE ÚLOHY Cílem tohoto úkolu bylo naprogramovat řešení
VíceTGH06 - Hledání nejkratší cesty
TGH06 - Hledání nejkratší cesty Jan Březina Technical University of Liberec 26. března 2013 Motivační problémy Silniční sít reprezentovaná grafem. Najdi nejkratší/nejrychlejší cestu z místa A do místa
VíceJan Březina. 7. března 2017
TGH03 - stromy, ukládání grafů Jan Březina Technical University of Liberec 7. března 2017 Kružnice - C n V = {1, 2,..., n} E = {{1, 2}, {2, 3},..., {i, i + 1},..., {n 1, n}, {n, 1}} Cesta - P n V = {1,
Více8. Geometrie vrací úder (sepsal Pavel Klavík)
8. Geometrie vrací úder (sepsal Pavel Klavík) Když s geometrickými problémy pořádně nezametete, ony vám to vrátí! Ale když užzametat,takurčitěnepodkoberecamístosmetákupoužijtepřímku.vtéto přednášce nás
VíceVýroková a predikátová logika - IV
Výroková a predikátová logika - IV Petr Gregor KTIML MFF UK ZS 2018/2019 Petr Gregor (KTIML MFF UK) Výroková a predikátová logika - IV ZS 2018/2019 1 / 17 Tablo metoda Tablo Tablo - příklady F (((p q)
VíceRámcový manuál pro práci s programem TopoL pro Windows
Rámcový manuál pro práci s programem TopoL pro Windows Příkazy v nabídce Předmět Volba rastru rychlá klávesa F4 Příkaz otevře vybraný rastr; tj. zobrazí ho v předmětu zájmu. Po vyvolání příkazu se objeví
VícePlánování úloh na jednom stroji
Plánování úloh na jednom stroji 15. dubna 2015 1 Úvod 2 Řídící pravidla 3 Metoda větví a mezí 4 Paprskové prohledávání Jeden stroj a paralelní stroj Dekompoziční problémy pro složité (flexible) job shop
VíceKMA/PDB. Karel Janečka. Tvorba materiálů byla podpořena z prostředků projektu FRVŠ č. F0584/2011/F1d
KMA/PDB Prostorové spojení Karel Janečka Tvorba materiálů byla podpořena z prostředků projektu FRVŠ č. F0584/2011/F1d Obsah Prostorové spojení pomocí hnízděných cyklů. Prostorové spojení pomocí R-stromů.
Více2 Spojité modely rozhodování
2 Spojité modely rozhodování Jak již víme z přednášky, diskrétní model rozhodování lze zapsat ve tvaru úlohy hodnocení variant: f(a i ) max, a i A = {a 1, a 2,... a p }, kde f je kriteriální funkce a A
Více8) Jaké jsou důvody pro použití víceprůchodového překladače Dříve hlavně kvůli úspoře paměti, dnes spíše z důvodu optimalizace
1) Charakterizujte křížový překladač Překlad programu probíhá na jiném procesoru, než exekuce. Hlavním důvodem je náročnost překladače na cílovém stroji by ho nemuselo být možné rozběhnout. 2. Objasněte
VíceJak pracovat s absolutními hodnotami
Jak pracovat s absolutními hodnotami Petr Matyáš 1 Co to je absolutní hodnota Absolutní hodnota čísla a, dále ji budeme označovat výrazem a, je jeho vzdálenost od nuly na ose x, tedy je to vždy číslo kladné.
VíceAproximativní algoritmy UIN009 Efektivní algoritmy 1
Aproximativní algoritmy. 14.4.2005 UIN009 Efektivní algoritmy 1 Jak nakládat s NP-těžkými úlohami? Speciální případy Aproximativní algoritmy Pravděpodobnostní algoritmy Exponenciální algoritmy pro data
VíceV 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
Euklidův algoritmus Doprovodný materiál pro cvičení Programování I. NPRM044 Autor: Markéta Popelová Datum: 31.10.2010 Euklidův algoritmus verze 1.0 Zadání: Určete největšího společného dělitele dvou zadaných
VíceGrafové algoritmy. Programovací techniky
Grafové algoritmy Programovací techniky Grafy Úvod - Terminologie Graf je datová struktura, skládá se z množiny vrcholů V a množiny hran mezi vrcholy E Počet vrcholů a hran musí být konečný a nesmí být
VíceNa začátku rozdělíme práci a určíme, které podproblémy je potřeba vyřešit. Tyto
Kapitola 1 Rozděl a panuj Rozděl a panuj je programovací metoda. Často se označuje latinsky Divide et Empera nebo anglicky Divide and Conquer. Vychází z toho, že umíme zadaný problém rozložit na menší
VíceNěkolik poznámek na téma lineární algebry pro studenty fyzikální chemie
Několik poznámek na téma lineární algebry pro studenty fyzikální chemie Jiří Kolafa Vektory. Vektorový prostor Vektor je často zaveden jako n-tice čísel, (v,..., v n ), v i R (pro reálný vektorový prostor);
VíceUmělá inteligence I. Roman Barták, KTIML. roman.bartak@mff.cuni.cz http://ktiml.mff.cuni.cz/~bartak
Umělá inteligence I Roman Barták, KTIML roman.bartak@mff.cuni.cz http://ktiml.mff.cuni.cz/~bartak Na úvod Agent s reflexy pouze převádí současný vjem na jednu akci. Agent s cílem umí plánovat několik akcí
VíceVícekriteriální hodnocení variant metody
Katedra aplikované matematiky a informatiky Jihočeská Univerzita v Českých Budějovicích, Ekonomická fakulta 2010 Metody vícekriteriální hodnocení variant (VHV) Jak jsme již zmiňovali, VHV obecně neposkytuje
VíceDalší NP-úplné problémy
Další NP-úplné problémy Známe SAT, CNF, 3CNF, k-klika... a ještě následující easy NP-úplný problém: Existence Certifikátu (CERT ) Instance: M, x, t, kde M je DTS, x je řetězec, t číslo zakódované jako
Víceopakování reprezentace grafů, dijkstra, bellman-ford, johnson
opakování reprezentace grafů, dijkstra, bellman-ford, johnson Petr Ryšavý 19. září 2016 Katedra počítačů, FEL, ČVUT opakování reprezentace grafů Graf Definice (Graf) Graf G je uspořádaná dvojice G = (V,
VíceAlgoritmy na ohodnoceném grafu
Algoritmy na ohodnoceném grafu Dvě základní optimalizační úlohy: Jak najít nejkratší cestu mezi dvěma vrcholy? Dijkstrův algoritmus s t Jak najít minimální kostru grafu? Jarníkův a Kruskalův algoritmus
VíceTGH06 - Hledání nejkratší cesty
TGH06 - Hledání nejkratší cesty Jan Březina Technical University of Liberec 31. března 2015 Motivační problémy Silniční sít reprezentovaná grafem. Ohodnocené hrany - délky silnic. Najdi nejkratší/nejrychlejší
VíceObsah prezentace. Základní pojmy v teorii o grafech Úlohy a prohledávání grafů Hledání nejkratších cest
Obsah prezentace Základní pojmy v teorii o grafech Úlohy a prohledávání grafů Hledání nejkratších cest 1 Základní pojmy Vrchol grafu: {množina V} Je to styčná vazba v grafu, nazývá se též uzlem, prvkem
VíceVektorové podprostory, lineární nezávislost, báze, dimenze a souřadnice
Vektorové podprostory, lineární nezávislost, báze, dimenze a souřadnice Vektorové podprostory K množina reálných nebo komplexních čísel, U vektorový prostor nad K. Lineární kombinace vektorů u 1, u 2,...,u
VíceLineární algebra : Báze a dimenze
Lineární algebra : Báze a dimenze (5. přednáška) František Štampach, Karel Klouda LS 2013/2014 vytvořeno: 9. dubna 2014, 13:33 1 2 5.1 Báze lineárního prostoru Definice 1. O množině vektorů M z LP V řekneme,
VíceMETODY REPREZENTACE A ZPRACOVÁNÍ ZNALOSTÍ V UMĚLÉ INTELIGENCI
METODY REPREZENTACE A ZPRACOVÁNÍ ZNALOSTÍ V UMĚLÉ INTELIGENCI Radim Jiroušek 2 Obsah 0 Úvod 7 1 Řešení úloh ve stavových prostorech 9 1.1 Definice stavového prostoru........................ 9 1.2 Příklad....................................
Více0. Lineární rekurence Martin Mareš, 2010-07-04
0 Lineární rekurence Martin Mareš, 2010-07-04 V tomto krátkém textu se budeme zabývat lineárními rekurencemi, tj posloupnostmi definovanými rekurentní rovnicí typu A n+k = c 0 A n + c 1 A n+1 + + c k 1
VícePokud nebude na příkazové řádce uveden právě jeden argument, vypište chybové hlášení a stručný
KIV/PC ZS 2015/2016 Zadání ZADÁNÍ SEMESTRÁLNÍ PRÁCE ŘEŠENÍ KOLIZÍ FREKVENCÍ SÍTĚ VYSÍLAČŮ VARIANTA 2 (REx) Naprogramujte v ANSI C přenositelnou 1 konzolovou aplikaci, která jako vstup načte z parametru
VíceUživatelská příručka Evidence příchozí a odchozí pošty a elektronický archiv. V prostředí společnosti. Pražská vodohospodářská společnost a.s.
Uživatelská příručka Evidence příchozí a odchozí pošty a elektronický archiv V prostředí společnosti Pražská vodohospodářská společnost a.s. Obsah 1. ÚVOD... 5 2. PROSTŘEDÍ WORKSPACE... 5 2.1 TECHNOLOGIE
VíceGrafové algoritmy. Programovací techniky
Grafové algoritmy Programovací techniky Grafy Úvod - Terminologie Graf je datová struktura, skládá se z množiny vrcholů V a množiny hran mezi vrcholy E Počet vrcholů a hran musí být konečný a nesmí být
VíceLineární programování
Lineární programování Petr Tichý 19. prosince 2012 1 Outline 1 Lineární programování 2 Optimalita a dualita 3 Geometrie úlohy 4 Simplexová metoda 2 Lineární programování Lineární program (1) min f(x) za
VíceUkážeme si lineární algoritmus, který pro pevné k rozhodne, zda vstupní. stromový rozklad. Poznamenejme, že je-li k součástí vstupu, pak rozhodnout
Ukážeme si lineární algoritmus, který pro pevné k rozhodne, zda vstupní graf má stromovou šířku nejvýše k, a je-li tomu tak, také vrátí příslušný stromový rozklad. Poznamenejme, že je-li k součástí vstupu,
VíceMatematika pro studenty ekonomie
w w w g r a d a c z vydání upravené a doplněné vydání Armstrong Grada Publishing as U Průhonu 7 Praha 7 tel: + fax: + e-mail: obchod@gradacz wwwgradacz Matematika pro studenty ekonomie MATEMATIKA PRO STUDENTY
VíceNEJKRATŠÍ CESTY I. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze
NEJKRATŠÍ CESTY I Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze BI-GRA, LS 2010/2011, Lekce 7 Evropský sociální fond Praha & EU: Investujeme do vaší
VíceNEXIS 32 rel. 3.50. Generátor fází výstavby TDA mikro
SCIA CZ, s. r. o. Slavíčkova 1a 638 00 Brno tel. 545 193 526 545 193 535 fax 545 193 533 E-mail info.brno@scia.cz www.scia.cz Systém programů pro projektování prutových a stěnodeskových konstrukcí NEXIS
VíceDYNAMICKÉ PROGRAMOVÁNÍ A PROBLÉM BATOHU
ČVUT V PRAZE FAKULTA INFORMAČNÍCH TECHNOLOGIÍ JAN SCHMIDT A PETR FIŠER MI-PAA DYNAMICKÉ PROGRAMOVÁNÍ A PROBLÉM BATOHU EVROPSKÝ SOCIÁLNÍ FOND PRAHA A EU: INVESTUJEME DO VAŠÍ BUDOUCNOSTI Dynamické programování
Více3. ročník, 2013/ 2014 Mezinárodní korespondenční seminář iks
Řešení 3. série Úloha C3. Rovnostranný trojúhelník o straně délky n je vyplněný jednotkovou trojúhelníčkovou mřížkou. Uzavřená lomená čára vede podél této mřížky a každý vrchol mřížky potká právě jednou.
VíceŘešení problému vážené splnitelnosti booleovské formule pokročilou iterativní metodou
Řešení problému vážené splnitelnosti booleovské formule pokročilou iterativní metodou 1 SPECIFIKACE ÚLOHY Cílem této úlohy bylo použít vybranou pokročilou iterativní metodou pro řešení problému vážené
VíceHledáme efektivní řešení úloh na grafu
Hledáme efektivní řešení úloh na grafu Mějme dán graf následující úlohy: G = ( V, E), chceme algoritmicky vyřešit Je daný vrchol t dosažitelný z vrcholu s? Pokud ano, jaká nejkratší cesta tyto vrcholy
VíceMária Sadloňová. Fajn MATIKA. 150 řešených příkladů (vzorek)
Mária adloňová Fajn MATIKA (nejen) na přijímačky 50 řešených příkladů (vorek) 0 Mgr. Mária adloňová FajnMATIKA (nejen) na přijímačky 50 řešených příkladů (reklamní vorek) Mgr. Mária adloňová, 0 Vydavatel
VíceProblém obchodního cestujícího(tsp) Vstup: Množina n měst a vzdálenosti mezi nimi. Výstup: Nejkratší okružní cesta procházející všemi městy.
Problém obchodního cestujícího(tsp) Vstup: Množina n měst a vzdálenosti mezi nimi. Výstup: Nejkratší okružní cesta procházející všemi městy. Poznámka:Slovem okružní myslíme,žecestakončívestejném městě,
VíceA0M15EZS Elektrické zdroje a soustavy ZS 2011/2012 cvičení 1. Jednotková matice na hlavní diagonále jsou jedničky, všude jinde nuly
Matice Matice typu (m, n) je uspořádaná m-tice prvků z řádky matice.. Jednotlivé složky této m-tice nazýváme Matice se zapisují Speciální typy matic Nulová matice všechny prvky matice jsou nulové Jednotková
VíceTeorie informace a kódování (KMI/TIK)
Teorie informace a kódování (KMI/TIK) Bezpečnostní kódy Lukáš Havrlant Univerzita Palackého 13. listopadu 2012 Konzultace V pracovně 5.076. Každý čtvrtek 9.00 11.00. Emaily: lukas@havrlant.cz lukas.havrlant@upol.cz
VíceInterpolace Uvažujme třídu funkcí jedné proměnné ψ(x; a 0,..., a n ), kde a 0,..., a n jsou parametry, které popisují jednotlivé funkce této třídy. Mějme dány body x 0, x 1,..., x n, x i x k, i, k = 0,
VíceLenka Zalabová. Ústav matematiky a biomatematiky, Přírodovědecká fakulta, Jihočeská univerzita. zima 2012
Algebra - třetí díl Lenka Zalabová Ústav matematiky a biomatematiky, Přírodovědecká fakulta, Jihočeská univerzita v Českých Budějovicích zima 2012 Obsah 1 Dělitelnost 2 Grupy zbytkových tříd 3 Jedna z
VíceImplementace A* algoritmu na konkrétní problém orientace v prostoru budov
Implementace A* algoritmu na konkrétní problém orientace v prostoru budov Popis problému Orientaci ve známém prostředí lze převést na problém nalezení cesty z místa A do místa B. Obecně platí, že robot
VícePRÉCIS STRUKTUROVANÁ DATABÁZE JAKO ODPOVĚĎ NA NESTRUKTUROVANÝ DOTAZ. Dominik Fišer, Jiří Schejbal http://www.doser.cz
PRÉCIS STRUKTUROVANÁ DATABÁZE JAKO ODPOVĚĎ NA NESTRUKTUROVANÝ DOTAZ (c) Dominik Fišer, Jiří Schejbal 2009 Dominik Fišer, Jiří Schejbal http://www.doser.cz Obsah část 1 přednáší Dominik Fišer Co je to Précis?
VíceOperační systémy Linux, Mac OS X a jejich srovnání
5 5.1 Operační systémy Linux, Mac OS X a jejich srovnání Popište výhody programů OpenSource, čím se vyznačují OpenSource programy se vyznačují tím, že se dodávají i se zdrojovým kódem. S tímto kódem může
VíceDijkstrův algoritmus (připomenutí)
Dijkstrův algoritmus (připomenutí) Základní předpoklad w : H R + (nezáporné délky hran) Upravený algoritmus prohledávání do šířky Dijkstra(G,s,w) 1 InitPaths(G,s) 2 S:= ; InitQueue(Q) 3 for každý uzel
VíceFunkce zadané implicitně
Kapitola 8 Funkce zadané implicitně Začneme několika příklady. Prvním je známá rovnice pro jednotkovou kružnici x 2 + y 2 1 = 0. Tato rovnice popisuje křivku, kterou si však nelze představit jako graf
VíceTGH09 - Barvení grafů
TGH09 - Barvení grafů Jan Březina Technical University of Liberec 15. dubna 2013 Problém: Najít obarvení států na mapě tak, aby žádné sousední státy neměli stejnou barvu. Motivační problém Problém: Najít
VíceTeorie grafů a diskrétní optimalizace 1
KMA/TGD1 Teorie grafů a diskrétní optimalizace 1 Pracovní texty přednášek Obsahem předmětu KMA/TGD1 jsou základy algoritmické teorie grafů a výpočetní složitosti Kapitoly 1 5 rozšiřují a prohlubují předchozí
VíceGrafy. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 13.
Grafy doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 13. března 2017 Jiří Dvorský (VŠB TUO) Grafy 104 / 309 Osnova přednášky Grafy
VíceAnotace. Dynamické programování, diskrétní simulace.
Anotace Dynamické programování, diskrétní simulace. Problémy, které byly Přednášející jde tentokrát do M1, počet platných uzávorkování pomocí n párů závorek, počet rozkladů přirozeného čísla na součet
VíceManuál administrátora FMS...2
Manuál administrátora Manuál administrátora FMS...2 Úvod... 2 Schéma aplikace Form Management System... 2 Úvod do správy FMS... 3 Správa uživatelů... 3 Práva uživatelů a skupin... 3 Zástupci... 4 Avíza
VíceAlgoritmizace I. Ak. rok 2015/2016 vbp 1. ze 132
Ak. rok 2015/2016 vbp 1. ze 132 Ing. Vladimír Beneš, Ph.D. vedoucí katedry Petrovický K101 katedra informatiky a kvantitativních metod E-mail: vbenes@bivs.cz Telefon: 251 114 534, 731 425 276 Konzultační
VíceUŽIV ATELSKÁ PŘÍRUČKA
UŽIVATELSKÁ PŘÍRUČKA Autor: Marek Klimša Úprava: Stanislav Chromý Verze dokumentu: 1.1 Poslední aktualizace: 11. května 2012 Obsah 1. Začínáme 3 1.1 Co je to ADVOKÁTNÍ SPIS 3 1.2 Po prvním spuštění 3 1.3
VíceVýhody a nevýhody jednotlivých reprezentací jsou shrnuty na konci kapitoly.
Kapitola Reprezentace grafu V kapitole?? jsme se dozvěděli, co to jsou grafy a k čemu jsou dobré. rzo budeme chtít napsat nějaký program, který s grafy pracuje. le jak si takový graf uložit do počítače?
VíceKapitola 1. Úvod. 1.1 Značení. 1.2 Výroky - opakování. N... přirozená čísla (1, 2, 3,...). Q... racionální čísla ( p, kde p Z a q N) R...
Kapitola 1 Úvod 1.1 Značení N... přirozená čísla (1, 2, 3,...). Z... celá čísla ( 3, 2, 1, 0, 1, 2,...). Q... racionální čísla ( p, kde p Z a q N) q R... reálná čísla C... komplexní čísla 1.2 Výroky -
VícePráce s velkými sestavami
Práce s velkými sestavami Číslo publikace spse01650 Práce s velkými sestavami Číslo publikace spse01650 Poznámky a omezení vlastnických práv Tento software a související dokumentace je majetkem společnosti
VíceKATEDRA INFORMATIKY UNIVERZITA PALACKÉHO LINEÁRNÍ ALGEBRA 1 OLGA KRUPKOVÁ VÝVOJ TOHOTO UČEBNÍHO TEXTU JE SPOLUFINANCOVÁN
KATEDRA INFORMATIKY PŘÍRODOVĚDECKÁ FAKULTA UNIVERZITA PALACKÉHO LINEÁRNÍ ALGEBRA 1 OLGA KRUPKOVÁ VÝVOJ TOHOTO UČEBNÍHO TEXTU JE SPOLUFINANCOVÁN EVROPSKÝM SOCIÁLNÍM FONDEM A STÁTNÍM ROZPOČTEM ČESKÉ REPUBLIKY
VícePaměti a jejich organizace
Kapitola 5 Paměti a jejich organizace 5.1 Vnitřní a vnější paměti, vlastnosti jednotlivých typů Vnější paměti Jsou umístěny mimo základní jednotku. Lze je zařadit mezi periferní zařízení. Zápis a čtení
Více= je prostý orientovaný graf., formálně c ( u, v) 0. dva speciální uzly: zdrojový uzel s a cílový uzel t. Dále budeme bez
Síť Síť je čtveřice N = ( G, s, t, c) kde G ( V, A) = je prostý orientovaný graf a každé orientované hraně ( u, v) je přiřazeno nezáporné číslo, které se nazývá kapacita hrany ( u, v), formálně c ( u,
VíceDeterminant. Definice determinantu. Permutace. Permutace, vlastnosti. Definice: Necht A = (a i,j ) R n,n je čtvercová matice.
[] Definice determinantu BI-LIN, determinant, 9, P Olšák [2] Determinant je číslo jistým způsobem charakterizující čtvercovou matici det A 0 pro singulární matici, det A 0 pro regulární matici používá
Více