• No results found

Diagram použitých tříd

Aby bylo možné s aplikací pracovat i v průběhu analýzy a nedocházelo k momentům, kdy aplikace neodpovídá, byla v programu použita třída

„BackgroundWorker“. Tato třída umožňuje spouštět funkce v programu v jiném vlákně.

Grafické rozhraní a spuštěný algoritmus pro analýzu tak běží ve dvou odlišných

naměřenou hodnotu v podobě počtu instrukčních cyklů procesoru, nebo tuto hodnotu v závislosti na typu procesoru převést na jednotku času.

2.5 Časové a výkonnostní srovnání

2.5.1 Asymptotická složitost

Asymptotická složitost je ve výpočetní technice nástroj, který slouží pro popsání efektivity a rychlosti výpočetních algoritmů. Jedná se o způsob popisu, který určuje, jakým způsobem se bude chovat algoritmus při změně velikosti vstupních dat.

Ford-Fulkersonův algoritmus

Hlavní vnější cyklus algoritmu hledá postupně vylepšující cesty. Po použití každé vylepšující cesty je minimálně jedna hrana odebrána. Tento cyklus řeší problém s časovou složitostí ( ). Uvnitř tohoto cyklu je algoritmus pro hledání nejkratší cesty v grafu. Hledání nejkratší cesty probíhá pomocí průchodu grafem do šířky. Algoritmus pro hledání nejkratší cesty v grafu pracuje se složitostí ( ). Složitost celého algoritmu je ( ).

Dinicův algoritmus

Hlavní cyklus algoritmu hledá cesty ze zdroje do spotřebiče délky právě d. Tato délka je nejkratší nezpracovaná vzdálenost cesty v grafu. Počet opakování tohoto cyklu je nejvýše n. Proto je složitost tohoto cyklu ( ). Uvnitř cyklu probíhá algoritmus pro hledání blokujících toků. Tento vnitřní algoritmus pracuje s asymptotickou časovou složitostí ( ). Časová složitost celého algoritmu je ( ).

Golbergův push-relabel algoritmus

Vnější cyklus probíhá, dokud existuje v úloze aktivní vrchol. Maximální počet zvednutí vrcholu je n-1 krát. Za předpokladu, že proběhne nejhorší možný scénář algoritmu, bude potřeba každý vrchol zvednout na maximální hodnotu. Z toho vyplývá, že časová složitost tohoto cyklu je ( ). Vnitřní cyklus algoritmu protlačuje přebytek z aktivního vrcholu po přípustných hranách do sousedících vrcholů. Vzhledem k rozdílným výškám vrcholů v grafu proběhne tento cyklus nejvíce √ krát.

Asymptotická složitost celého algoritmu bude ( √ ) .

Tabulka 1: Asymptotické složitosti algoritmů

2.5.2 Výkonnostní srovnání

Výkonnostní srovnání algoritmů porovnává všechny tři algoritmy podle doby trvání analýzy. Tato hodnota je odečtena vždy z výsledného výpisu v softwaru na konci každého algoritmu. Údaj použitý pro porovnání výsledků byl počet provedených instrukčních cyklů procesu v průběhu analýzy. Pro přesnější měření byla spuštěna analýza bez volby podrobného výpisu. Protože hustota jednotlivých podrobných výpisů je u každého algoritmu rozdílná a samotný výpis je časově náročnou operací, byly by výsledky se spuštěnou touto volbou velmi zkreslené.

Pro výkonnostní srovnání všech tří algoritmů byly vybrány následující velikosti grafu:

 10 vrcholů.

 100 vrcholů.

 1 000 vrcholů.

 10 000 vrcholů.

Grafy byly vytvořeny pomocí generátoru náhodných grafů, který je součástí vytvořeného softwaru (viz kapitola 2.7.1). Graf každé velikosti byl vygenerován s minimálním a poté maximálním počtem hran. Měření probíhalo na obou těchto grafech. V případě nejmenšího grafu s deseti vrcholy byly označeny dva náhodné vrcholy jako zdroje o produkci 50 a dva spotřebiče o stejném požadavku. Důvodem zvolení hodnoty 50 byl fakt, že generátor ohodnocuje každou hranu v grafu náhodnou kapacitou o velikosti mezi číslem 1 a 100 a proto je zaručeno, že některé hrany se nasytí

Tabulka 2: Výsledky rychlostních testů

Vrcholy, Hrany 10, 29 10, 76 100, 417 100, 417 1 000, 3 994 1 000, 16 199 10 000, 40 300 10 000, 40 300

Počet zdrojů * tok 2*50 2*50 5*50 5*50 20*50 20*50 10*50 10*50

Počet spot. * tok 2*50 2*50 5*50 5*50 20*50 20*50 10*50 10*50

Ford-Fulkerson 14 000 883 22 000 19 000 332 000 1 234 000 3 968 000 16 439 000

Dinic 7 283 743 19 000 32 000 1 725 000 4 084 000 116 275 000 419 920 000

G: push-relabel 2 395 360 7 000 4 500 18 846 000 113 000 1,8 mld. 1 988 000

Vyřízen požadavek ne ano ano ano ne ano ne ano

Graf

Výsledky (počet instrukčních cyklů procesoru)

Z tabulky je možné vyčíst rozdílné chování jednotlivých algoritmů vzhledem ke změně vstupních dat. Pro každý graf je zeleně zvýrazněno pole s nejlepším výsledkem. Nejhorší výsledek je označen šedě.

Na první pohled je možné konstatovat, že Golbergův push-relabel algoritmus je nejrychlejším algoritmem ze tří zvolených. Ovšem rychlost každého algoritmu je v porovnání s ostatními výkonný či nikoliv v závislosti na podobě vstupních dat. měla více hran a tak měla řešení, délka analýzy byla 770 milisekund. Při stejném počtu vrcholů ale menším množství hran úloha nevedla ke splnění požadavku a analýza trvala necelých 15 minut.

Dále je z tabulky 22 zřejmé, že Dinicův algoritmus vykazuje nižší výkonnost při zvyšování složitosti grafu než Ford-Fulkersonův i Golbergův algoritmus. Tento jev je důsledkem implementace v softwaru. Dinicův algoritmus hledá blokující toky na očištěné síti (viz. kapitola 1.3.2) a měl by tak být rychlejší než Ford-Fulkersonův postup. Při složitém grafu dochází velmi často k očišťování sítě a součástí tohoto procesu je vytváření kopie sítě rezerv. Toto cyklické vytváření nových instancí třídy graf je v důsledku použité implementace pomalé a značně ovlivňuje výkonnost algoritmu. Proto se stává při zvyšování počtu vrcholů vždy nejpomalejším algoritmem.

Obecně je možné z měřených údajů konstatovat, že výběr ideálního algoritmu z hlediska rychlosti není jednoznačně možné zvolit před použitím algoritmu. Rychlosti

analýzy jsou totiž ovlivněny výsledkem úlohy. Lze tedy pouze vycházet z předpokladů, jak by výsledek mohl dopadnout vzhledem k charakteristice grafu.

2.6 Popis souboru pro import a export

Pro import a export vytvořeného grafu se používají soubory s příponou XMG (XML graf). Tento soubor vychází ze značkovacího jazyka XML. Důvodem byl přehledný hierarchický způsob zápisu dat v XML. Zároveň XML značky zastupují objekty přímo v programu a umožňují tak jednoduchý a kvalitní import a export vytvořených objektů. Zpracování XML souborů je podporováno řadou nástrojů a programovacích jazyků. Vzniká tak i možné rozhraní pro další programy, které by s grafem pracovaly. Například pro grafickou interpretaci grafu a následné porovnávání zbytkových grafů s původními.

Soubor XMG popisuje kompletní graf v programu. V hlavičce souboru je definována verze a znakový formát. Program využívá XML verzi 1.0 a znakovou sadu UTF-8. Kořenovou značkou je značka <Uloha>. Celý graf je také zapouzdřen mezi značky <puvodniGraf>. Značka původní graf je nutná z důvodu, že se jedná o algoritmem neovlivněný úplný graf.

Značka <Vrchol> představuje každý vrchol v grafu a je nutné uvést uvnitř značky parametr idVrchol. Uvnitř každého definovaného vrcholu musí být uvedeno, o jaký typ vrcholu se jedná. Typ vrcholu uvádí, zda se jedná o zdroj (<typVrcholu>1</typVrcholu>) nebo spotřebič je hodnota mezi značkami bude „2“.

Pokud vrchol není zdrojem ani spotřebičem tato hodnota je „0“.

Sousedé každého vrcholu se definují uvnitř vrcholu mezi značky <Sousede>.

Každý soused se zapisuje hranou ve formátu <Hrana kapacita="100" idVrcholu="1" />.

Při vytváření nového XMG souboru pro import je potřeba počítat také s vrcholy „s“

s

3

4

1

2

t

1

1 1 1

1

3 3

Related documents