FAKULTA PRÍRODNÝCH VIED UNIVERZITA MATEJA BELA. Sieťové a vzdialenostné analýzy. Diplomová práca

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "FAKULTA PRÍRODNÝCH VIED UNIVERZITA MATEJA BELA. Sieťové a vzdialenostné analýzy. Diplomová práca"

Transcript

1 FAKULTA PRÍRODNÝCH VIED UNIVERZITA MATEJA BELA Sieťové a vzdialenostné analýzy Diplomová práca Jozef Zomborský 2006

2 Čestne prehlasujem, že som diplomovú prácu vypracoval samostatne, s použitím uvedenej literatúry. Banská Bystrica 25. február

3 Poďakovanie Týmito riadkami by som sa chcel poďakovať pedagogičke PaeDr. Miloslave Sudolskej za usmernenie pri práci, zároveň mojej manželke Stanke za neúnavné odpovede na otázky a názory, týkajúce sa tejto práce. 2

4 ABSTRAKT ZOMBORSKÝ Jozef: Sieťové a vzdialenostné analýzy [Diplomová práca] / Jozef Zomborský Univerzita Mateja Bela v Banskej Bystrici. Fakulta prírodných vied; Katedra Geografie. Školiteľ : PaedDr. Miloslava Sudolská, Banská Bystrica: FPV UMB, Táto práca ponúka komplexné riešenie sieťových analýz, na cestách Slovenskej republiky. Hlavnou časťou práce je program Sieťové analýzy. V texte sa podrobne popisujú údaje pre výpočet, algoritmy, ale aj objekty použité v programe. Prílohy obsahujú mapy, ktoré znázorňujú programové výstupy. Kľúčové slová: Grafy. Delphi. Sieťové analýzy. Cestná sieť Slovenska. ZOMBORSKÝ Jozef: Network and distance analyses [Diploma work] / Jozef Zomborský University of Matej Bel in Banská Bystrica. Faculty of Natural sciences; Consultant: PaedDr. Miloslava Sudolská, Banská Bystrica: FPV UMB, This work offers complex solution of network analyses of the roads in Slovak republic. The software Network analyses is the main part of the diploma work. There is a detailed description of data used for calculation, algorithms and the objects applied in software, in the text. Additions contain maps, which represent some software output. Pivotal words: Graph. Delphi. Network analyses. Roads network of Slovak republic 3

5 Obsah Úvod... 6 Cieľ práce... 7 Metodika Algoritmy sieťových analýz História teórie grafov Definovanie pojmov Klasifikácia sieťových algoritmov Hľadanie naslepo (blind - search) Hľadanie metódou rozdeľ a panuj (divide & conquer) Prehľadávanie do šírky (breadth first seach) Prehľadávanie do šírky v oboch smeroch Prehľadávanie do hĺbky (depth-first search) Prehľadávanie do hĺbky s postupným vnáraním Dijkstrov algoritmus Prehľadávanie čisto podľa heuristiky (Best-first search) Dijkstrov algoritmus s heuristikou (A*) Fordov algoritmus číslovanie uzlov Algoritmus vyhľadávania použitý v programe Štruktúra programu Sieťové analýzy Základ OOP v programovacom jazyku Delphi Hlavný formulár Mapový objekt Trieda TVyskySR Trieda TMapaVgi Trieda TObjektMapy Objekt vyhľadávania najrýchlejšej cesty Trieda prepočtu súradníc - TWGS84_SJTSK Databázový objekt Objekt zadávania hesla Spúšťanie aplikácie Analýzy v uzloch Údajový model pre výpočet najkratšej cesty

6 4.1 Základné údaje pre výpočet sieťových analýz Napĺňanie základnej tabuľky CestySR.dbf Výpočet dvojrozmernej a trojrozmernej dĺžky línie Výpočet priemerného prevýšenia ciest Výpočet percenta zastavanosti cesty Rýchlosť prechodu v sekundách Zhrnutie tvorby základných údajov Údaje o vrcholoch a hranách Databázové urýchľovacie údaje Predvypočítané binárne údaje Zhrnutie kapitoly Užívateľské prostredie programu a algoritmy analýz Analýzy v uzloch Pôsobnosť obcí Rozvoz tovaru Preťaženie ciest Časová vlna Záver Literárne zdroje Elektronické zdroje Zoznam príloh

7 Úvod Cenu tovaru určujú viaceré faktory. Jedným z nich (a pomerne dôležitým) sú aj náklady na jeho prepravu, ktorá závisí od efektivity využívania dopravných prostriedkov a ceny pohonných hmôt. Pretože ceny pohonných hmôt sú vysoké, neustále stúpajú a organizácie nemajú vplyv na ich pohyb, snažia sa o znižovanie dopravných nákladov vo všetkých ovplyvniteľných oblastiach. Finančné náklady prepravy tovaru neznižuje iba optimalizácia trás, ale aj znalosť dopravného monopolu, teda okolie podniku na ktoré sa má manažment zamerať, veľkosť regiónu, v ktorom je doprava realizovaná, počet potencionálnych zákazníkov ale aj veľkosť konkurenčného prostredia. Komplexné a racionálne riešenie problému s nákladmi na dopravu je veľmi náročné, preto je vhodné hľadať vhodné riešenia s pomocou modernej výpočtovej techniky a s využitím vyhľadávacích algoritmov. V tejto práci sa pokúsime načrtnúť jedno z možných riešení. Všetky analýzy, ktorým sa budeme venovať, si (aspoň približne) odborník dokáže určiť aj sám, na základe svojich skúseností. Výsledky v našich výpočtoch sa opierajú o matematické algoritmy, ktoré zároveň zabezpečujú nestrannosť výsledku. Vplyvom rozličnej kvality ciest sa priestorový vplyv miest značne deformuje. Tieto deformácie môžu ľudskému oku ľahko uniknúť, čoho výsledkom môže byť nesprávny úsudok. Základom našich analýz bude vyhľadanie najkratšej cesty v čase. Najkratšia cesta, určená podľa vzdialeností, nemá takú veľkú výpovednú hodnotu, pretože vôbec nezohľadňuje kvalitu ciest. Týmto by sa výsledok degradoval na meranie vzdialeností. V práci si ukážeme, že pri výpočtoch je možné zohľadňovať aj s ďalšie atribúty a čím sa môžeme čo najviac priblížiť skutočnému stavu. Súčasťou riešenia, je spôsob výpočtu cestných atribútov. Chceme zdôrazniť, že pri spracovávaní atribútových (databázových) údajov sme nevyužívali žiadne funkcie, ktoré sú súčasťou aplikácií Geografických informačných systémov (GIS) - (využívame program MicroStation pri príprave vstupných údajov - vektorizácii). Všetky výpočty údajov pre sieťové analýzy, ako napríklad dĺžka cesty, zastavanosť okolia cesty obcami, priemerný sklon, rýchlosť v km/h sa realizujú v programovacom jazyku Delphi. Pri prieskume GIS programov sme nezistili, že by podobné analýzy (okrem merania dĺžky) boli dostupné v komerčných GIS programoch. Chceme zdôrazniť skutočnosť, že pri spracovaní geografických dát, odborník na GIS nemusí byť závislý na komerčných programoch a môže pri spracovaní dát vyskúšať voľnosť riešení, aké mu prináša programovacie prostredie. 6

8 Cieľ práce Cieľom práce je vytvoriť GIS aplikáciu, pomocou ktorej bude možné vyhodnocovať sieťové analýzy zamerané na vzdialenostné a rýchlostné analýzy. Aplikácia bude vytvorená v programovom prostredí Delphi. 7

9 Metodika Diplomová práca si vyžiadala približne jeden rok intenzívnej práce. Základný cieľ opisovanej práce bol známy už v prvých fázach jej tvorby, keď ešte nebolo zrejmé, či sa ho vôbec podarí splniť. Preto označenie tejto práce ako diplomová dostala až potom, čo začala prinášať prvé výsledky. Poďme sa teda pozrieť na to, čo funkčné riešenie sieťových analýz obnáša. Všeobecne ho môžeme zatriediť do etáp nasledovne: prípravná, výskumná, záverečná etapa. V prípravnej etape bolo potrebné vytvoriť údaje pre výpočet najrýchlejšej cesty. Najrýchlejšej (v čase), čo znamená, že dĺžka cesty nestačila. V tejto etape sme museli zvážiť osnovu údajov, ktoré na čas prechodu cestou vplývajú, a ktoré vôbec dokážeme vypočítať. Základom pre vytváranie údajov pre výpočet sa stala vektorová mapa ciest a obcí, ktorá sa vytvárala v programe Micro Station. Paralelne s vektorizáciou sa programovali procedúry a funkcie, ktoré zabezpečovali vytváranie atribútových údajov. Ukončenie tejto etapy charakterizoval časový údaj prejazdu pre všetky cesty na Slovensku. Časový údaj vyšiel z atribútov: dĺžka, sklon, zastavanosť a typ cesty. Vo výskumnej etape sme sa zamerali na vývoj algoritmu vyhľadávania v sieťach. Bolo potrebné zistiť čo najviac informácií o používaných algoritmoch a vybrať najvhodnejší. Táto etapa bola najťažšia, pretože vyžadovala najviac duševnej práce a nebolo v nej isté, či sa dosiahne úspešný koniec. Sieťové algoritmy v učebnicových príkladoch používajú dvojciferný počet uzlov. Prípad, v ktorom nám do výpočtu vstupuje vyše 6000 uzlov je s použitím klasických metód časovo neriešiteľný (pokiaľ máme záruku najrýchlejšej cesty). Algoritmus sa podarilo úspešne vytvoriť vďaka dekompozícií problému. Za záverečnú etapu považujeme vytváranie analýz konkrétnych výpočtov, vypracovanie textovej časti a mapových príloh. V textovej časti sme sa každou kapitolou zameriavali na konkrétnu vec. V začiatočných kapitolách sme popísali niektoré vybrané algoritmy sieťových analýz. Pri ich popise bol kladený dôraz na jednoduchú pochopiteľnosť, preto sa v nich nepoužívali ich matematické definície. V ďalších častiach sme sa venovali vlastným algoritmom vytvorených v tejto práci. Za osobitne dôležitý môžeme považovať opis údajov, ktoré sa použili vo výpočtoch najrýchlejšej cesty. Čitateľ by si tu mal utvoriť obraz o ich správnosti. V poslednej kapitole sme sa venovali opisu programu Sieťové analýzy a ukázali sme si aj príklady ich využitia. 8

10 1 Algoritmy sieťových analýz Sieťové analýzy, založené na poznatkoch z oblasti teórie grafov, sú v aplikáciách GIS často využívané. Existuje množstvo algoritmov riešiacich sieťové analýzy. V tejto časti našej práce uvedieme prehľad niektorých z nich. Napriek tomu, že prehľadávanie cestnej siete je všeobecne zložitý problém, sú známe algoritmy pre skúmanie v statickej mape, ktoré sú známe a sú efektívne. Prehľad začneme od jednoduchých algoritmov, ktoré sa snažia iba slepo postupovať smerom k cieľu a postupne sa cez zložitejšie algoritmy a ich modifikácie dostaneme až k dnes bežne používaným postupom v praxi, ako napríklad algoritmy počítajúce s dôsledným prieskumom mapy a efektívnym využitím heuristiky. V úvode stručne opíšeme históriu ich vzniku a zoznámime sa so základnými pojmami. 1.1 História teórie grafov Vedeckou disciplínou, ktorú nazývame teória grafov, tvorí súbor poznatkov a metód, ktoré vznikli predovšetkým pri skúmaní praktických úloh a boli neskôr doplnené a zobecnené. Z tohto hľadiska teda teória grafov ucelenú teóriu netvorí, ale je skôr iba určitý súhrn znalostí a pojmov [7]. Základy teórie grafov môžeme hľadať v pomerne hlbokej histórii. Jednou z najznámejších je úloha, ktorá vznikla niekedy v 18.storočí v pruskom meste Königsbergu, kde obyvateľov zaujímala odpoveď na otázku: Môžu prejsť po uzavretom okruhu v meste tak, aby prešli všetkých sedem mostov a to každý z nich iba raz?" Situáciu v meste znázorňuje obr. 1. Obr. 1: Úloha sedem mostov [7]. 9

11 Touto úlohou sa zaoberal i známy matematik Euler, ktorého niektoré vety si pamätáme z matematickej analýzy, ktorou túto úlohu nielen matematicky sformuloval, ale i neskôr sám vyriešil [7]. Ďalšou dôležitou etapou v rozvoji teórie grafov bola etapa spojená s riešením matematickej úlohy, ktorá vznikla v 19.storočí v Anglicku. Ide o pomerne známu úlohu o štyroch farbách: Stačia nám štyri rôzne farby na vyfarbenie ľubovolnej zemepisnej mapy v rovine, alebo na sfére tak, aby v tejto mape neboli žiadne dve oblasti so spoločnou hranicou nenulovej dĺžky vyfarbené rovnakou farbou?" Na rozdiel od úlohy, ktorú riešil Euler, bola tato úloha vyriešená iba nedávno a to s využitím modernej výpočtovej techniky [7]. V našom storočí prešla teória grafov štádiom formovania a po publikácií knihy Königa v roku 1930 bola v podstate uznaná ako samostatná disciplína. Celkove je dnes teória grafov súčasťou širšej teórie, ktorú nazývame teória spoločnosti [7]. 1.2 Definovanie pojmov Vybrané pojmy z teórie grafov Orientovaný graf G je definovaný ako usporiadaná dvojica (V, E), kde V je nejaká množina vrcholov a E je množina usporiadaných dvojíc prvkov množiny V. Prvky V sa volajú vrcholy grafu a prvky množiny E orientované hrany grafu [8]. Vrchol grafu, ktorý nie je spojený so žiadnou hranou sa nazýva izolovaným vrcholom. Vrchol, ktorý je spojený práve s jednou hranou je koncovým vrcholom grafu [7]. Stupňom vrcholov nazývame počet hrán, ktoré sú spojené s týmto vrcholom. Násobnosti hrany alebo dvojice vrcholov sa nazýva počet hrán, spojených s týmito vrcholmi. Graf, v ktorom je násobnosť hrán vyššia ako jedna, sa nazýva multigrafom [7]. Cestou v grafe nazývame postupnosť na sebe naväzujúcich orientovaných hrán. Reťazcom nazývame postupnosť na seba naväzujúcich hrán grafu, bez ohľadu na orientáciu [7]. 10

12 Heuristika je pre nás funkcia h: V R + {+ { },} ktorá vrcholu V priraďuje predpokladanú vzdialenosť do cieľa. Presnejšie povedané odhaduje dĺžku najkratšej cesty z vrcholu v do cieľa. Heuristík sa používa celý rad podľa povahy mapy a problémov, ktoré riešime. V prípade 2D mapy sa najčastejšie používajú: H1 - Euklidovská vzdialenosť = vzdialenosť vzdušnou čiarou (Pythagorova veta) H2 - Manhattan súčet dx a dy H3 - Maximálna max(dx, dy) Pozn.: pre vrcholy [x1, y1] a [x2, y2] je dx= x1-x2 a dy= y1-y2 Po heuristike sa pri konkrétnych algoritmoch niekedy požadujú ďalšie vlastnosti. Pre konkrétne špeciálne úlohy je dobré premýšľať nad zlepšením heuristiky na základe nových vlastností úlohy, pretože heuristika je v algoritme spravidla volaná veľmi často. Zložitosť výpočtu heuristiky razantne ovplyvňuje časovú náročnosť algoritmu. Preto sa snažíme voliť heuristiku výpočtovo čo najjednoduchšiu, ale zároveň čo najsofistikovanejšiu. Zväčša je nutné experimentálne zvoliť kompromis medzi rýchlosťou a sofistikovanosťou heuristiky [8]. Vybrané pojmy z programovania Rekurzivita je volanie procedúry alebo funkcie samej sebou. Ponúka efektívny spôsob riešenia problémov [1]. Backtracking je programovacia technika používaná v rekurzívnych algoritmoch a vyjadruje prehľadávanie s návratom. 1.3 Klasifikácia sieťových algoritmov Rozdelenie podľa reprezentácie mapy Sieťové algoritmy sa využívajú v rôznych oblastiach, ako napríklad hľadanie cesty, zobrazenie výrobného procesu, hľadanie v matici (2D, 3D). Podľa typu riešeného problému sa používajú aj rôzne mapové reprezentácie. 11

13 Rozdelenie podľa kvality nájdenej cesty Či garantujú nájdenie najkratšej cesty. Ich cieľom môže byť aj zistenie existencie spojenia, alebo rýchle nájdenie približnej cesty pre heuristiku. Rozdelenie podľa toho, či plánujú celú cestu, alebo ju plánujú len do určitého výhľadu Pri určitom počte uzlov si môžeme mapu nejakým spôsobom rozložiť. Toto nám umožňuje riešiť veľkosťou neriešiteľné trasy. Rozdelenie podľa časovej a pamäťovej náročnosti Teda podľa potreby prostriedkov. Vo všeobecnosti algoritmy, ktoré garantujú nájdenú najkratšiu cestu, potrebujú viac týchto prostriedkov. Ďalšie rozdelenia: - Či pracujú len so statickou mapou, alebo sú schopné reflektovať dynamické zmeny v mape. - Rozdelenie podľa zložitosti implementácie. - Či využívajú plnú alebo len jednoduchú funkciu porovnávania trasy Hľadanie naslepo (blind - search) Tento algoritmus je založený na triviálnom postupe: Choď smerom k cieľu, pokiaľ narazíš na prekážku, zmeň smer a snaž sa postupovať popri hrane prekážky a obíď ju. Táto metóda je v angličtine známa pod pojmom blind-search. Tieto algoritmy pracujú s výhľadom jedného políčka a spravidla neberú do úvahy celú ohodnocujúcu funkciu, ale len jej dva stavy + alebo 1. Teda pracujú s jednoduchou ohodnocovacou funkciou, nepočítajú so znevýhodneniami cesty. Algoritmy negarantujú nájdenie najkratšej cesty. Nemusia cestu nájsť vôbec, pretože sa môžu zacykliť. Môžu byť použité pre špeciálne jednoduché mapy kvôli rýchlosti, pamäťovej nenáročnosti a jednoduchosti implementácie. Kvalita týchto algoritmov sa líši podľa toho, akým spôsobom sa snaží prekážky obísť [8]. 12

14 1.3.2 Hľadanie metódou rozdeľ a panuj (divide & conquer) Pre zaujímavosť uvedieme ešte jeden nedokonalý spôsob, ako riešiť prehľadávanie ciest. Je ním použitie známej rekurzívnej metódy rozdeľ a panuj: Pre nájdenie cesty z A do B nájdi prostredný bod, ktorý leží na úsečke A, B. Pokiaľ je jemu odpovedajúce X políčko prekážkou, použi metódu na nájdenie blízkeho voľného políčka (metóda špirály, náhodné testy, šírka, apod.). Potom spusť algoritmus na A,X a X,B. Pokiaľ sú nájdené, tak výsledné cesty spoj, inak vráť - neúspech. Metóda opäť neberie do úvahy ohodnotenie. Nemusí nájsť cestu napriek tomu, že cesta v mape existuje. Je vhodný na jednoduché mapy bez ťažko riešiteľných prekážok [8] Prehľadávanie do šírky (breadth first seach) Algoritmus začína v štartovacom políčku. V prvom cykle prehľadá jeho susedov, po nich prehľadá pozície vzdialené dve políčka od štartu, v ďalšom cykle pozície vzdialené tri políčka a tak pokračuje, pokiaľ nepríde v n - tom cykle k cieľu, alebo neprebádal všetky dostupné uzly. Nájdená cesta bude mať dĺžku n. Pokiaľ sa v priebehu algoritmu zaznamenávalo pri každom políčku políčko, odkiaľ bolo naň vstúpené, je možné spätne skonštruovať cestu z cieľa do štartu. V algoritme je teda ukladaná hodnota predchádzajúceho vrcholu. Toto sa používa aj u ďalších algoritmov [8]. Tento algoritmus dokáže korektne pracovať iba s jednoduchou ohodnocovacou funkciou, ktorá priraďuje každému priechodnému políčku rovnakú hodnotu (napríklad 1). Neberie teda do úvahy ohodnotenie hrán. Taktiež počet preskúmaných vrcholov je vysoký. Tento nedostatok sa snažia riešiť nižšie uvedené algoritmy s využitím heuristiky [8]. Pamäťová náročnosť je O(n) vzhľadom k počtu vrcholov mapy. Časová náročnosť je O(n) vzhľadom k počtu vrcholov mapy. Z toho vyplýva, že v najhoršom prípade musí algoritmus prejsť všetkými vrcholmi mapy a v každom previesť určitý počet operácií (počet susedných hrán) [8]. 13

15 1.3.4 Prehľadávanie do šírky v oboch smeroch To je jednoduché vylepšenie algoritmu prehľadávania do šírky, ktoré si všíma to, že počet preskúmaných vrcholov rastie kvadraticky s dĺžkou cesty. Preto rozbieha naraz dve prehľadávania do šírky. Jedno zo štartu, druhé z cieľa. Postupne prevádza jeden cyklus jednej a jeden cyklus druhej šírky. Vo chvíli, keď sa šírky spoja, je možné skonštruovať cestu zo štartu do cieľa. Pokiaľ jedna zo šíriek príde do stavu, keď už nemá nové vrcholy na preskúmanie, potom cesta v mape neexistuje a algoritmus môže skončiť [8]. Opäť sa tu pochopiteľne prejavia nedostatky prehľadávania do šírky. Jedná sa iba o optimalizáciu pôvodného algoritmu. Pokiaľ počet prehľadaných vrcholov klasickým prehľadávaním do šírky je n, potom na rovnakej mape prehľadávaním v oboch smeroch prehľadá typicky druhú odmocninu z n vrcholov (experimentálne zistené). Pamäťová náročnosť je O(n) vzhľadom k počtu vrcholov mapy. Časová náročnosť je O(n) vzhľadom k počtu vrcholov mapy [8] Prehľadávanie do hĺbky (depth-first search) Prehľadávanie do hĺbky je duálnym algoritmom k prehľadávaniu do šírky. Namiesto prehľadávania všetkých susedov pri hľadaní nástupcu hľadá opačne. Vždy sa najprv pustí do hĺbky a potom sa vracia a prehľadáva susedov. Z hľadiska implementácie sa dá jednoducho použiť kód prehľadávania do šírky, kde sa namiesto radu použije zásobník. Ďalej je nutné určiť zarážku, na ktorej sa algoritmus začne vracať. Inak by sa algoritmus vnáral stále hlbšie, až by pretiekol zásobník, alebo by sa nebol našiel cieľ. Zarážka bude pevne určená dĺžka cesty (prípadne počet vnorených vrcholov). Pri krátkej zarážke algoritmus nemusí dosiahnuť cieľ, dlhá však výpočet značne predlžuje. Okrem definovania zarážky narazíme ešte na niekoľko ďalších problémov: - algoritmus môže mnohokrát opakovane prehľadávať tie isté vrcholy, - algoritmus sa môže vracať na vrchol, z ktorého prišiel, - naťahovanie cesty prebieha chaoticky a nemieri rýchlo k cieľu, - cesta sa teoreticky môže krížiť [8]. Časť problémov sa dá riešiť pridaním ďalšej informácie ku každému vrcholu, ktorá hovorí o dĺžke dosiaľ najkratšej nájdenej cesty zo štartu do toho ktorého políčka. Je 14

16 zrejmé, že pre nezápornú ohodnocovaciu funkciu nie je nutné vstupovať na políčko, do ktorého algoritmus pozná efektívnejšiu cestu. Problém chaotického hľadania sa dá riešiť s využitím heuristiky. V každom kroku je z možných vrcholov pre vnorenie vybratý najprv ten, o ktorom heuristika hovorí že je najvhodnejší. Pokiaľ je heuristika dostatočne kvalitná, bude cesta naťahovaná prioritne smerom k cieľu. V ideálnom prípade, keď heuristika najkratšiu cestu do cieľa odhadne presne, pobeží algoritmus naisto a nájde cieľ bez návratu [8]. Prehľadávanie do hĺbky môže pracovať s vzdialenosťou ako aj s počtom vrcholov cesty, alebo môže pracovať s ohodnotenými hranami. Podľa toho musí byť použitá hĺbková zarážka [8]. Prehľadávanie do hĺbky s uvedenými vylepšeniami v priemernom prípade nachádza cestu pomerne rýchlo. Negarantuje však, že nájdená cesta je najkratšia možná, ak algoritmus využíva heuristiku [8]. Pamäťová náročnosť je O(n) vzhľadom k dĺžke cesty. Časová náročnosť je O(a n ) vzhľadom k dĺžke cesty. V najhoršom prípade, keď sklame heuristika a nebudú vyriešené ostatné problémy, môže algoritmus cieľovú cestu nájsť až v poslednom kroku. Vtedy prehľadá všetky cesty zo štartu o dĺžke n. V takomto prípade bude a rovné priemernému počtu vychádzajúcich hrán [8] Prehľadávanie do hĺbky s postupným vnáraním Kľúčovým bodom v prehľadávaní do hĺbky je správne určenie hĺbky zarážky. Pokiaľ povolíme dĺžku cesty príliš krátku, algoritmus do cieľa nedosiahne. Pokiaľ naopak ponecháme dĺžku príliš veľkú, budú sa zbytočne prehľadávať slepé neperspektívne trasy (v prípade, že heuristika nepomôže nájsť rýchle riešenie). To povedie ku značnému spomaleniu. Možným riešením je postupné zvyšovanie hranice zarážky. Najprv algoritmus vyskúša všetky cesty dĺžky 2, potom dĺžky 3, 4,... a tak ďalej, až nie je nájdený cieľ. Pokiaľ máme kvalitnú heuristiku, ktorá je dolným odhadom vzdialenosti, môžeme rovno začať so vzdialenosťou h(štart, cieľ). Toto riešenie môže byť v niektorých prípadoch efektívnejšie než klasické prehľadávanie do hĺbky (nie príliš členitá mapa, malá vzdialenosť štart cieľ = dobrý odhad hĺbky heuristikou) [8]. 15

17 1.3.7 Dijkstrov algoritmus Jednou zo základných úloh v teórií grafov je hľadanie najkratšej cesty v grafe. Úlohou je nájsť najkratšiu cestu medzi dvomi vrcholmi grafu. Táto úloha je v teórii grafov podrobne spracovaná vo viacerých metódach. Jednou z takýchto metód je Dijkstrov algoritmus (číta sa Dajkstrov ). Základom algoritmu je orientovaný graf G, nezáporne ohodnotené hrany a vrcholy. Výstupom algoritmu bude pre každý spracovaný vrchol V najmenšia vzdialenosť. V priebehu algoritmu bude pre každý vrchol prepočítavaná hodnota d(s - štart, v - vrchol), čím budeme mať zatiaľ najmenšiu nájdenú vzdialenosť z s do v. V priebehu algoritmu sa bude konštruovať množina definitívnych (Closed) a rozpracovaných vrcholov (Open). V každom kroku sa pre nejaký vrchol v hodnote d(s,v) prehlási za definitívny a v závislosti na tom sa prepočítajú vybrané vrcholy. Algoritmus končí vo chvíli, keď sú všetky vrcholy prehlásené za definitívne (teda hodnoty d(s,v) obsahujú najkratšie cesty z s do v pre všetky vrcholy). Na začiatku algoritmu množiny inicializujeme takto: d(v)=0 pre s=v a d(v)= inak. To odpovedá situácií, že na začiatku poznáme iba dĺžku cesty do prvého vrcholu a ostatné dĺžky sú neznáme. Množina Closed bude na začiatku prázdna a množina Open bude obsahovať vrchol s. V každom kroku algoritmu vyberieme vrchol n z Open, ktorý má najmenšiu d(v) a prehlásime ho za definitívny (presunieme ho do Closed). Ďalej urobíme aktualizáciu jeho susedov. Pre každého suseda n, prevedieme: Pokiaľ d(n)+vzdialenosť(n,n )<d(n ), potom položíme d(n )= d(n)+w(n,n ). To odpovedá situácií, keď sme do vrcholu n našli lepšiu cestu než bola dosiaľ najlepšia nájdená cesta do n [8] Prehľadávanie čisto podľa heuristiky (Best-first search) Tento algoritmus je alternatívou k Dijkstrovmu algoritmu. Postup je rovnaký ako v Dijkstrovom algoritme, ale miesto toho, aby boli políčka v Open ohodnocované podľa vzdialenosti od štartu, sú radené podľa predpokladanej vzdialenosti do cieľa, takže podľa hodnoty heuristiky. Tento algoritmus teda z princípu nerozlišuje ohodnotenie funkcie vzdialenosti, pokiaľ nie je započítaná v použitej heuristike. Algoritmus teda preskúma najprv vrcholy, o ktorých heuristika hovorí, že sú bližšie k cieľu. Týmto spôsobom sa dravo dostáva smerom k cieľu, ale neberie do úvahy ohodnotenie terénu. Iba rozlišuje nepriechodné prekážky. Algoritmus nachádza najkratšiu cestu iba v prípade, že je 16

18 heuristika dokonalá - teda odhaduje dĺžku najkratšej cesty presne. Pre niektoré heuristiky funguje algoritmus s prehľadaním najmenšieho množstva políčok [8] Dijkstrov algoritmus s heuristikou (A*) A* je prirodzeným zobecnením Dijkstrovho algoritmu a prehľadávania iba podľa heuristiky. V prvom prípade sa vrcholy v Open ohodnocujú vzdialenosti zo štartu túto funkciu nazveme g(x). A v druhom prípade sa ohodnocujú výhradne heuristikou, teda funkciou h(x). Je možné spojiť tieto dva algoritmy a pre ohodnotenie vrcholov použiť hodnoty oboch funkcií podľa vzorca: f(x) = c * g(x) + (1-c) * h(x), kde c je koeficient z intervalu <0,1> Koeficient určuje pomer zmiešania oboch algoritmov. Pre c=1.0 dostávame Dijkstrov algoritmus. Pre c=0.0 dostávame prehľadávanie podľa heuristiky. Pre c=0.5 a heuristiku h, ktorá je s dolným odhadom vzdialenosti sa algoritmus nazýva A*. Pokiaľ heuristika odhaduje dĺžku cesty vždy kratšiu než v skutočnosti je, tak A* nájde najkratšiu cestu zo štartu do cieľa [8] Fordov algoritmus číslovanie uzlov Prieskum sieťového grafu sa zjednoduší, keď splníme tieto dve požiadavky: 1. uzly očíslujeme súvislou celočíselnou postupnosťou 1, 2,, n 2. každá činnosť vedie z uzlu s nižším indexom do uzlu s indexom vyšším Algoritmus prečíslovania uzlov: Počiatočný uzol je u 0. Ide o uzol rádu 0 (žiadna činnosť nevstupuje). Vyškrtneme všetky činnosti, ktoré vychádzajú z u 0. Uzly, do ktorých nevstupuje žiadna činnosť, sú uzly 1. rádu. Očíslujeme ich 1, 2,, k. Vyškrtneme všetky činnosti, ktoré vychádzajú z uzlov (všetkých) prvého rádu. Uzly, do ktorých teraz nevstupujú žiadne činnosti, tzv. uzly 2. rádu, očíslujeme k+1,, l. Postup opakujeme až do vyčerpania všetkých uzlov [9]. 17

19 2 Algoritmus vyhľadávania použitý v programe V našom programe sa používa algoritmus hľadania do hĺbky, bez použitia heuristiky, teda prehľadáva všetky možnosti. Algoritmus v tomto prevedení vyhľadáva spoľahlivo najkratšiu cestu, ale za cenu dlhého času hľadania. Zložitosť výpočtu je O(a n ) pričom a je priemerný počet vychádzajúcich hrán (v našom prípade 2,44 vrcholu), n je maximálny počet vrcholov, čo je ťažko presne určiť, ale rádovo sa jedná o trojciferné číslo. Čas výpočtu pri úplnej mape je tak dlhý, že pri dnešných technológiách nie je možné dospieť k výsledku (2, = 2,45 * operácií, pričom počet tisíc vrcholov je len orientačný a pravdepodobne je oveľa vyšší). Ak však výsledok predsa len vypočítame, vyhľadaná cesta je zaručene najrýchlejšia, čo je vlastne základ riešenia. Cesta, nezaručujúca najrýchlejšiu trasu degraduje všetky vstupné údaje na bezvýznamné. Týmto algoritmom sa vytváranie vyhľadávania začalo. Pre zaujímavosť si povieme celú chronológiu vytvárania vlastného algoritmu hľadania najlepšej cesty. Ako začiatočný algoritmus, ktorý nám cestu našiel, bol použitý algoritmus hľadania cesty na slepo. Vytvorila sa tu zložitá heuristika, ktorá programu prikazovala smer. Pripomínala pavúka, zloženého z vrcholov s určitým vnorením a na konci každej pavúčej nožičky nám vrátila približný čas do cieľa. Algoritmus týmto výpočtom rýchlo smeroval k cieľu a zároveň sa vyhýbal slepým uličkám, či zacykleniu. Pokiaľ narazil na prekážku (napríklad Nízke Tatry), obišiel ju a vytvoril prvú cestu k cieľu. Z nej sa pomocou vektorového výpočtu označil najvzdialenejší vrchol od vzdušnej čiary štart cieľ a znovu sa hľadali dve cesty do tohto bodu. Celý postup sa opakoval aj z cieľa do štartu a zároveň pre rôzne dlhé vnorenia. Na konci výpočtu sa všetky cesty porovnali a vybrala sa najlepšia. Aj keď je algoritmus hľadania naslepo výpočtovo najjednoduchším algoritmom, nachádzal nám na pohľad celkom logické cesty. Nedával nám však odpoveď na otázku, ako je napríklad - je cesta z Bratislavy do Košíc cez Zvolen najrýchlejšia? a tak sa táto metóda výpočtu zavrhla ako nepoužiteľná. Po tomto experimente sa vývoj nášho algoritmu opäť vrátil k (už na začiatku) spomínanej nekonečnej rekurzii. Keďže je isté, že nemôžeme počítať s celým územím, potrebovali sme zistiť vzdialenosť medzi uzlami, ktorú ešte dokážeme vypočítať. Pomer veľkosti územia (počet vrcholov) a zložitosti (času) výpočtu zobrazuje obrázok 2. Jasne z neho vyplýva, že týmto spôsobom sa zdĺhavo počítajú aj relatívne krátke vzdialenosti. Pri počítanej vzdialenosti 20 km od východzieho bodu nám algoritmus prejde všetky možnosti 18

20 za vyše 50 sekúnd. Každý nový uzol, ktorý vstúpi do vyhľadávanej oblasti nám čas výpočtu značne predlžuje. Týmto algoritmom (prehľadávania do hĺbky) v základnej forme sa môžu počítať uzly vzdialené maximálne 20 km, výpočet väčších vzdialeností trvá príliš dlho (dlho znamená viac ako 1s, pretože plánujeme počítať v jednom výpočte n ciest). Na obrázku 2 sú znázornené cesty (modrá čiara je cesta prvej triedy), uzly (z uzlov iba obce). Obr. 2: Zobrazenie časovej a výpočtovej náročnosti pri stúpajúcej ploche hľadania. Kružnice znázorňujú plochu, ktorá spadá do výpočtu. Tabuľka zložitosti priamo súvisí s kružnicami. V prvom stĺpci zobrazuje polomer kružnice v kilometroch. Druhý 19

21 stĺpec udáva počet prechodov uzlom. Tretí znázorňuje celkový čas, za ktorý algoritmus prejde všetky možnosti, pri zapnutí všetkých uzlov v tej ktorej kružnici. Obrázok je len ilustračný, pretože v ňom nie sú zobrazené všetky uzly chýbajú uzly križovatiek. Hodnoty v tabuľkách sú pre tento prípad správne (použitý procesor AMD 700MHz). Algoritmus v základnej podobe prechádza všetky možné cesty, bez ohľadu na dĺžku. Zrýchliť výpočet môžeme pridaním zarážky na maximálnu dĺžku cesty. S ňou dokážeme počítanú vzdialenosť zdvojnásobiť, algoritmus neprehľadáva príliš krivolaké trasy. Zarážka sa určuje podľa vzdialenosti, a aby neobmedzovala vzdialenosťou hľadanú cestu, sa značne predimenzuje. Pomocou zarážky dokážeme počítať 40 km vzdialené vrcholy. Ďalším podstatným zrýchlením sa stal systém (algoritmus) zapínania vrcholov. Princíp spočíva v tom, že sa vypnú všetky vrcholy, cez ktoré nám cesta nemôže viesť. Zapína ich algoritmus, ktorý znázorňuje obrázok 3. V základnej mape, teda aj v základnej databáze sa cesty odlišujú podľa typu. Pri výpočte rýchlosti sa typ cesty rozdeľuje na viacprúdové, prvej triedy a ostatné. Existuje tu však ešte jeden typ cesty, ktorý sa v tvorbe základnej bázy dát nespomína. V podstate tu ide o cesty druhej a tretej triedy, ale nie je to pravidlo. Systémom typov spájaných hrán dokážeme určiť prioritu vrcholu (uzla). Ak máme napríklad uzol, v ktorom existuje spojnica diaľničného typu, uzol získa vysokú prioritu. V prípade, že sa jedná len o lokálnu odbočku získa uzol najnižšiu prioritu. Cieľom tohto zapínania je úplné minimalizovanie počtu zapnutých uzlov. V predchádzajúcich riadkoch sme si ukázali, ako vplýva na rýchlosť výpočtu aj relatívne malý počet aj tak nevyužitých vrcholov (uzlov). Z obrázku 2 je zrejmé, že spojenia všetkých ciest sa zapínajú v 10 kilometrovom okruhu (v horských oblastiach 15 km) od začiatočného a koncového bodu hľadanej cesty. Spojenia ciest, ktoré majú opisovaný nový typ (2., 3. trieda) sa zapínajú v rozsahu 0,7x vzdušná vzdialenosť od začiatočného a koncového bodu hľadanej cesty a zaberajú toto územie od stredu vzdušnej spojnice bodu A, B. Vrcholy obsahujúce spojenie najhlavnejších ciest (viacprúdové a prvej triedy) sa zapínajú v celej kružnici, ktorá pretína začiatočný a koncový vrchol hľadanej cesty. Systém zapínania vrcholov nám predlžuje výpočet na 50 km. V praxi je toto číslo ešte väčšie (70 km), ale reálne sa v programe nebude nikdy počítať s väčšou vzdialenosťou. 20

22 Obr. 3: Grafické znázornenie zapínania vrcholov. Obrázok 3 mám znázorňuje systém zapínania vrcholov. V niektorých častiach Slovenska (napr. Vysoké Tatry) sa môže stať, že takéto zapnutie uzlov je nedostatočné. V takom prípade to algoritmus znásobuje rozšírenie zapínacích kružníc a prehľadáva väčšie plochy vzhľadom na vzdialenosť. 21

23 Algoritmus výpočtu najrýchlejšej cesty do 50 km je uložený v triede THladCest a reprezentuje ho rekurzívna funkcia Chod(na ktorý uzol, čas prechodu). Funkcia vracia hodnotu áno alebo nie, teda či je cesta nájdená. Rekurzívna funkcia je súčasťou procedúry, v ktorej je definovaná pamäť. Jedná sa o pole P a číslo Psekund, do ktorých sa ukladajú informácie o prechádzaných uzloch a momentálnom čase prechodu. V prípade, že sme našli cieľový bod a čas novej cesty je kratší ako doteraz nájdený, tak sa nám tieto premenné prepíšu do globálnej premennej v triede THladCest KU (pole identifikátorov uzlov) a Ksekund (čas prechodu). Keď funkcia prejde všetky možnosti a sama skončí, v týchto premenných ostáva vyhľadaná najrýchlejšia cesta. Údaje, z ktorých výpočet vychádza, sú uložené v poli uzlov PUzol. Bunka v tomto poli obsahuje informácie o identifikátore uzla, súradnici x a y, obsadenosť uzla, nadmorskú výšku a odkazy na prepojené uzly. Alternatívou tomuto spôsobu práce s údajmi je namodelovanie celej siete vrcholov pomocou smerníkov. Pravdepodobne by sa vyhľadávanie ešte viac zrýchlilo. V prvých fázach vývoja algoritmu sa s týmto riešením počítalo, ale po zdĺhavom testovaní a dolaďovaní sa už ťažko mení základná štruktúra dát programu. Samotná štruktúra vyhľadávacieho algoritmu je veľmi jednoduchá. Pri vyhľadávaní sa v ňom nepoužívajú žiadne urýchľovacie heuristiky. Pomocou backtrakingu prechádzajú všetky možnosti a vyberá sa tá najlepšia. Jeden prechod funkcie predstavuje obslúženie prechodu jedným uzlom. Ak algoritmus zistí, že sa jedná o hľadaný uzol, už ďalej z tohto uzla nepokračuje. Inak pokračuje v ceste až kým ho nezastaví slepá ulička, alebo zarážka, ktorej veľkosť sme si zadefinovali pred spustením algoritmu. Zarážka je v našom prípade počet prechádzaných uzlov, teda premenná vnorenie. V literatúre sa zarážkou určujú hodnoty hrán, alebo počet uzlov, v našom prípade je to čas od východzieho bodu. Toto riešenie je však tiež správne. Ako prvú hodnotu zarážky vkladáme konštantu vypočítanú zo vzdušnej vzdialenosti medzi počiatočným a koncovým vrcholom. Odhadom sa dá povedať, že na 99% táto hodnota postačuje a dokonca je ešte predimenzovaná. V niektorých prípadoch (vzdušnou čiarou blízke obce, ale ležiace na opačných stranách pohorí) sa táto zarážka a taktiež systém zapínania uzlov pravidelne zväčšujú dovtedy, kým sa nenájde cieľová cesta. 22

24 Funkcia vyhľadávania najrýchlejšej cesty function Chod(uz,sek:integer):boolean; var i:integer; //pomocná premenná begin result:=false; PUzol[uz].ObsadenyUzol:=true; //vypnutie obsadeného uzla inc(vnorenie); //vnorenie zväčši o 1) if uz=b //ak sa našiel cieľ then begin if Psekund<KUsekund then //je rýchlejší ako doteraz begin KUsekund:=Psekund; //zapíš čas for i:=1 to vnorenie do //zapíš cestu KU[i]:=p[i]; Result:=true; indexku:=vnorenie; end; end else //ak nenašlo cieľ for i:=0 to PUzol[uz].PocUzlov do //prejdi vychádzajúce //uzly if (not vnorenie<nastvn) and //ak sa nepresiahla zarážka (Uzol[PUzol[uz].VychadzUzly[i].CisloUzla].ObsadenyUzol) //a ak je vychádzajúci uzol zapnutý then begin Psekund:=psekund+PUzol[uz].VychadzUzly[i].casPrejazdu; //pripočítaj čas prejazdu p[vnorenie]:=puzol[uz].vychadzuzly[i].cislouzla; //zapíš prechádzajúci uzol Chod(PUzol[uz].VychadzUzly[i].CisloUzla, PUzol[uz].VychadzUzly[i].casPrejazdu); //choď na ďalší uzol end; //vychádzame z uzla Psekund:=Psekund-sek; //odčítaj jeho čas PUzol[uz].ObsadenyUzol:=false; //zapni ho dec(vnorenie); //odpočítaj vnorenie end; Vzdialenejšie trasy sa prepočítavajú v podobnom algoritme, ale s inou údajovou štruktúrou. Využívajú tabuľku hlavných uzlov, ktorá vznikla z výpočtov algoritmu do 50 km. Až tu sa skutočne vyhľadávajú a porovnávajú relatívne podobné vzdialené cesty. 23

25 Tabuľka hlavných uzlov obsahuje 63 vrcholov. Pre vyhľadávanie v tabuľke hlavných uzlov (vrcholov) platí rovnaká zložitosť ako v tabuľke uzlov (vrcholov). Zložitosť výpočtu je O(a n ) pričom a je priemerný počet vychádzajúcich hrán (v našom prípade 2,44 vrcholu), n je maximálny počet vrcholov. Pokiaľ určíme číslo 4 ako priemerný počet hrán a zároveň vieme, že najdlhšia cesta prechádza 16 uzlami, môžeme určiť približný počet operácií takto: 4 16 = Výpočet je neporovnateľne rýchlejší, ale ešte stále nie dostatočne. Aj tu používame systém zapínania vrcholov. Na rozdiel od predošlého hľadania vypíname všetky uzly, ktoré prekračujú až 100 kilometrovú vzdialenosť od vektora začiatku a konca trasy. Výpočet v poli hlavných uzlov netrvá krátko, ale na druhej strane má relatívne málo uzlov, čím sa ponúka možnosť predvypočítania všetkých možných trás v tomto poli. V praxi teda tieto dlhé vzdialenosti už nepočítame, ale len ich prečítame z pamäte. Obsluha tejto časti hľadanej trasy trvá zanedbateľne krátko. Z matice 63x63 (počet hlavných uzlov) odčítame čas prechodu a hlavné uzly, cez ktoré trasa prechádza. Z tabuľky spojení hlavných uzlov si následne odčítame uzly, ktoré nám hlavné uzly spájajú. Takto dostávame celú cestu od vstupu do poľa hlavných uzlov. Keď si zhrnieme čo náš algoritmus dokáže, tak dostávame, že môžeme hľadať cesty do 50 kilometrovej vzdialenosti (vzdušnej čiary) a máme k dispozícií všetky spojenia hlavných križovatiek, približne pravidelne rozmiestnených po celom území Slovenska. Aby sa stalo vyhľadávanie kompletné, je potrebné vyriešiť otázky: Ako sa dostaneme do hlavného uzla a ako vieme, že je správny? Tento problém mal riešiť algoritmus výberu hlavného uzla, v ktorom sa porovnávajú cesty do všetkých hlavných uzlov (v okruhu 50km) od východzieho a koncového bodu hľadanej cesty. Jeho úlohou je určiť dve čísla, zodpovedajúce identifikátorom dvoch hlavných uzlov. Tento proces, alebo táto časť hľadania najrýchlejšej cesty je pomerne zdĺhavá a tak sa aj tu vytvoril opäť predvypočítaný súbor. Sú v ňom uložené informácie pre každý uzol typu obec (iba z uzla typu obec môžeme vstúpiť do výpočtu) o okolitých hlavných križovatkách v okruhu 50 km (informácie o čase, za aký sa dostaneme k hlavnej križovatke). Program, alebo algoritmus tieto informácie spojí s informáciami prechodov v poli hlavných uzlov. Takto dokážeme vybrať najrýchlejšiu cestu, a to bez použitia výpočtu v rekurzívnej funkcii, čím sa čas výpočtu opäť stáva bezvýznamným. Výber najrýchlejšej cesty najlepšie pochopíme z obrázku 4. 24

26 Obr.4: Celkový výpočet hľadania najrýchlejšej cesty z obce A do obce B. Na obrázku 4 môžeme vidieť znázornené uzly obyčajné, hlavné a ich spojenia čierne čiary. Obrázok znázorňuje, že pri každom hľadaní sa opäť prechádzajú všetky možnosti a vyberá sa z nich tá najrýchlejšia. Červená kružnica označuje výpočet v poli okolitých hlavných uzlov. Modrá kružnica označuje výpočet v poli spojníc hlavných uzlov. Kombináciou týchto výpočtov dostávame najrýchlejšiu cestu medzi uzlami A a B. Pomocou tohto výpočtu už dostávame aj prvý výsledok čas prechodu najrýchlejšej cesty medzi uzlami A a B. Tento výsledok sa už priamo používa napríklad vo výpočte pôsobnosti miest, kde nepotrebujme poznať trasu cesty. Týmto sme si povedali o všetkých výpočtoch, ktoré sa používajú pri hľadaní najrýchlejšej cesty. Obsluha týchto procedúr a funkcií sa prevádza v konečnej procedúre Nájdi cestu medzi uzlami A a B. Je uložená v triede THladCest. O jej zaradení si ešte povieme, zatiaľ nám stačí vedieť, že procedúra Nájdi cestu medzi uzlami je výstupom celej tejto triedy. Zjednodušený algoritmus tejto procedúry si ukážeme v pseudokódovej podobe: 25

27 Nájdi najkratšiu cestu medzi bodmi A a B ak je vzdušná vzdialenosť A,B < 50km tak vyhľadaj najkratšiu cestu priamo inak vyhľadaj hlavné uzly pre A,B vyhľadaj cestu z A do hlavného uzlu vyhľadaj cestu z B do hlavného uzlu vyhľadaj cestu v hlavných uzloch Algoritmus týmto spôsobom spoľahlivo vyhľadáva najrýchlejšie cesty kdekoľvek na území Slovenskej republiky. V nájdenej ceste sa v určitých prípadoch môžu vyskytnúť drobné chyby, spôsobené absenciou hlavného uzla (stáva sa to v tom prípade, že sa hlavný uzol neumiestnil na dôležitú križovatku, pretože sa blízko nachádza iný hlavný uzol), alebo chybnou vektorizáciou vstupných máp (použitá mapa prešla dôkladnou kontrolou a tento prípad by sa nemal vyskytnúť). V niektorých prípadoch sa nedalo na isto určiť, či cesty majú byť prepojené (križovatka diaľnica - cesta). Pomerne ťažko sa algoritmus vysporiadal s veľkými rozdielmi v hustote cestnej siete. Preto napríklad v okolí Dunajskej Stredy môže výpočet za určitých okolností trvať o niečo dlhšie ako inde (v najhorších prípadoch aj 1 minúta - jedna cesta). Napriek týmto nedostatkom vzhľadom aj na vstupné hodnoty majú výsledky algoritmu vysokú výpovednú schopnosť. 26

28 3 Štruktúra programu Sieťové analýzy V tejto kapitole si v krátkosti definujeme základné termíny objektovo orientovaného programovania (OOP), ďalej sa budeme venovať činnosti a tvorbe programu Sieťové analýzy. Je napísaný v jazyku Delphi. Štruktúra zdrojového kódu sa vo vyšších programovacích jazykov rozdeľuje do programových jednotiek UNITS ktoré združujú príbuzné objekty, triedy a celý zdrojový kód programu. V programe Sieťové analýzy sa nachádza jedenásť spomínaných programových častí a dokopy tvoria 6870 riadkov textu (približne 130 strán). Ich opisom môžeme zahrnúť celý program, no napriek tomu sa budeme venovať objektom (resp. triedam), ktoré definujú tieto objekty. Opisom objektov si zo štruktúry programu vyberieme to najpodstatnejšie a najzaujímavejšie. Základným objektom v programe Sieťové analýzy je hlavný formulár, v ktorom sú priamo uložené všetky vlastné objekty. Všetky vznikajú v priebehu spúšťania programu, takže pri behu programu sa už nevytvárajú. Z tohto pohľadu je aplikácia statická nedovolí napríklad načítať novú mapu nový objekt. Hlavný formulár obsluhuje všetky správy posielané užívateľom a podľa nich dáva príkazy objektom. Najdôležitejšie objekty programu: - hlavný formulár - TForm - mapový objekt TVgi - objekt hľadania najrýchlejšej cesty THladCest - objekt prepočítavajúci súradnice zo systému WGS84 do SJTSK a naopak - TWGS84_SJTSK - databázový objekt TQuery - objekt zadávania hesla THeslo V nasledujúcich riadkoch si popíšeme tieto objekty, ale najprv sa stručne pozrieme na základ objektového programovania kvôli ujasneniu programovacej terminológií. 3.1 Základ OOP v programovacom jazyku Delphi Program napísaný podľa pravidiel OOP sa skladá zo skupiny objektov, ktoré obsahujú určité dáta, majú definované rozhrania, za pomoci ktorých spolu komunikujú a manipulujú 27

29 s údajmi. V praxi sa OOP odlišuje od ostatných programátorských techník týmito základnými vlastnosťami: - zapuzdrenie vďaka tejto vlastnosti možno obmedziť prístup k údajom tak, aby ich mohol používať len oprávnený vlastník, - dedičnosť mechanizmus, ktorý umožňuje opakované využitie objektu na vytvorenie nového objektu, čím sa výrazne zvyšuje efektivita vytvárania programov, - polymorfizmus (mnohotvárnosť) umožňuje zameniteľnosť jednotlivých objektov v rámci dedičnej hierarchie, - abstrakcia (jeden údajový typ) - premenná môže obsahovať ľubovoľný údaj v ľubovoľnom čase. Umožňuje vytvoriť vlastné údajové typy (aby sa lepšie popísali prvky reálneho sveta), ktoré sú plne podporované v systéme, podobne ako typy číselné, znakové a iné [2]. Základnou a najpoužívanejšou dátovou konštrukciou v OOP je dátový typ trieda (class). Jedná sa o štruktúrovaný dátový typ definovaný užívateľom za pomoci kľúčového slova class. Vnútri triedy sú definované jednotlivé objekty (Objects) [2]: - vlastnosti (properties) - tiež im hovoríme atribúty nesú v sebe hodnotu, napr. stav objektu (visible : boolean;), - metódy (methods) sú procedúry a funkcie späté s daným objektom. Je ich možné spustiť volaním v zdrojovom kóde, - udalosti (events) sú akcie, ktoré môžu nastať pri práci s príslušnou komponentou. Udalosťou môže byť napríklad pohyb myši, stlačenie klávesy, či maximalizácia okna. Windows na každú udalosť zareaguje poslaním správy (message) a následne odovzdá riadenie príslušnej procedúre (ak existuje). Termín instancia je objekt ktorý popisuje konkrétnu vec (napríklad konkrétnu mapu), t.j. vyplníme požadované údaje, pričom akcie prevezmeme z definície triedy. 3.2 Hlavný formulár Hlavný formulár je hlavným objektom programu Sieťové analýzy. Združuje všetky ďalšie objekty, ktoré sme označili ako najdôležitejšie a podľa správ prichádzajúcich od užívateľa ich priamo, či nepriamo riadi. Vychádza z triedy TForm. Ide o okno, ktoré tvorí 28

30 základnú stavebnú plochu každej vizuálnej aplikácie v operačnom systéme Windows. Samotné prostredie Windows (angl. window = okno) je založené na rôznych typoch formulárov. Formulár môže mať dvojitý rámik a variabilnú veľkosť (sizeable) alebo jednoduchý rámik a pevnú veľkosť, prípadne ani nemusí mať žiaden rámik ani titulný pásik. Formuláre sa používajú skutočne na mnohých miestach - či už ako dialógové okná, okná informácií alebo priamo okná aplikácie [5]. Iba jeden však dostáva označenie hlavného formuláru, ktorý zodpovedá za chod celej aplikácie. Vypnutím hlavého formuláru sa aplikácia vypína. Z programátorského hľadiska sa v popisovaní štruktúry formuláru nejedná o nič nové a nemá význam sa ním hlbšie zaoberať. Stačí nám poznať skutočnosť, že všetky ďalšie popisované objekty sú fyzicky dostupné z hlavného formuláru. 3.3 Mapový objekt Jedným zo základných objektov využívaných v programe Sieťové analýzy je mapový objekt definovaný v triede TVgi. Obsluhuje celkovú konzistentnosť a vizualizáciu všetkých využívaných máp v programe. Trieda TVgi vychádza, respektíve dedí vlastnosti z triedy TImage. Najzaujímavejšie sú z nej kresliace metódy podtriedy TCanvas (angl. canvas = plátno), ale náš mapový objekt potrebuje poznať aj rozmery výkresu a preto mu samotná táto trieda nestačí. Mapový objekt definuje a vytvára priestor pre ľubovoľný počet otvorených máp (obmedzujúca je pamäť počítača). Je základným objektom pre prístup k všetkým mapovým údajom. V prípade, že potrebujeme mať otvorených n mapových okien môžeme taktiež vytvoriť n objektov triedy (TVgi). Trieda TVgi je zásobníkom pre ďalšie triedy: - TMapaVgi trieda nám definuje jednu otvorenú mapu, - TObjektMapy trieda nám definuje jeden mapový objekt (bod, líniu, plochu, text, značku), - TVyskySR trieda poskytuje údaje o nadmorskej výške všetkým mapovým objektom. 29

31 Štruktúru mapového objektu (TVgi) nám výstižnejšie zobrazuje obrázok 5. Obr.5: Štruktúra triedy TVgi [4]. Trieda TVgi má množstvo vlastností, ktoré sa týkajú zobrazovania mapy na obrazovke [4]: - VypisText rozhoduje o tom či sa má na mape vypisovať text, - Premenné xw1, xw2, yw1, yw2 definujú veľkosť okna, kde sa mapa vykresľuje, - Xmin, Ymin, Xmax, Ymax - hodnoty pre pamäť okamžitých súradníc rohov mapy (napr. po zväčšení a posnutí), - XminMap, YminMap, XmaxMap, YmaxMap sú hodnoty súradníc rohov mapy po načítaní (pamäť pre pôvodnú veľkosť). Ďalej obsahuje metódy (procedúry a funkcie) [4]: - zobrazovacie rovnice (Tx, Ty, nottx, notty) z ktorých sa dá prepočítať poloha na mape, na polohu na obrazovke a naopak, - vykreslenie všetkých máp, - vytvorenie novej mapy, - odstránenie všetkých máp z pamäti, - iné, ktoré slúžia pre súkromnú potrebu triedy. 30

32 3.3.1 Trieda TVyskySR Trieda TVyskySR je jednoduchšia ako predchádzajúce a nemá s nimi vzhľadom na svoju štruktúru nič spoločného. Jej základ je statické pole, do ktorého sa načíta výškopis Slovenska uložený v súbore. Pôvodne mala slúžiť len na vypisovanie výšky na súradnici x a y, no momentálne má najväčší význam v zobrazovaní 3D a 2D reliéfu [4]. Vlastnosti triedy sú: - alfa, epsylon uhly pohľadu na 3D objekt (alfa sa otáča okolo objektu vodorovne a epsylon zvisle), - pomer výšky zväčšovaním tejto vlastnosti by sme dostali členitejší reliéf premennou sa môže nastaviť optimálna členitosť. Metódy triedy: - načítanie výšok, - zistenie výšky na súradnici x, y, - vykreslenie 3D a 2D reliéfu. V našom programe využívame túto triedu na zobrazenie aktuálnej nadmorskej výšky, ale pri výpočte údajov pre hľadanie najrýchlejšej cesty sa objekt často používal pre už spomínané výpočty. V prípade potreby je objekt pripravený zobrazovať trojrozmerný model reliéfu Trieda TMapaVgi Trieda TmapaVgi zabezpečuje všetky vlastnosti a metódy ktoré sa týkajú jednej mapy. Jej základom je dynamické pole typu TObjektMapy, kde sa ukladá každý objekt v mape, no najväčším prínosom triedy sú procedúry (metódy) s parametrom: - LoadVgi(meno súboru) načíta súbor *.vgi do operačnej pamäte počítača, - SaveVgi(meno súboru) uloží do súboru, - ImportDxf(meno súboru) načíta súbor *.dxf a zároveň robí konverziu do VGI, - ExportDxf(meno súboru) mapu vo formáte *.vgi prekonvertuje do formátu *.dxf - DrawMap(obrázok - TImage) vykreslí mapu do komponenty triedy TImage. 31

33 Trieda TMapaVgi nám zabezpečuje všetky základné rutiny pre prácu s mapou. Programátor sa pri využívaní objektu nemusí starať o tieto základné veci, ale jednoducho zavolá metódu, ktorá ich urobí. Mapový objekt je jeden z najužitočnejších zo všetkých objektov. Existuje už niekoľko rokov, čím sa stal stabilným prvkom aplikácií, ktoré ho používajú. Jeho metódy efektívne zjednodušujú programátorskú prácu, čím užívateľ môže venovať pozornosť iným prvkom aplikácie Trieda TObjektMapy Trieda TObjektMapy je základným prvkom v mape. Definuje jeden objekt mapy, ktorý môžeme chápať ako jeden odkaz na databázu. V prípade, že celá mapa nám predstavuje jeden celok, môže byť definovaná jedným objektom. Trieda TObjektMapy nám teda v jednej instancii (v jednej premennej) môže obsahovať ľubovolný počet bodov, línií, alebo textu. V praxi je však tento prípad zriedkavý, zvyčajne tvorí každá mapová entita samostatný mapový objekt. Trieda TObjektMapy je podriadená triede TMapaVgi, ktorá je úplne zautomatizovaná a mohlo by sa zdať zbytočné hovoriť o tomto základnom objekte. V niektorých prípadoch však potrebujeme pristúpiť aj k týmto prvkom (napríklad ak potrebujeme zistiť topológiu dvoch línií, vzdialenosť dvoch bodov, atď.). Trieda mapového objektu a skutočnosť, že je k nej prístup, dáva užívateľom objektu úplnú slobodu pri práci s vektorovou mapou. 3.4 Objekt vyhľadávania najrýchlejšej cesty Objekt vyhľadávania vychádza zo základne triedy TObject. Je úplne nezávislý, teda nepotrebuje k svojej práci žiadny iný objekt. Kvôli tejto vlastnosti obsahuje aj vlastný databázový objekt TQuery. Jeho základnou metódou a pre užívateľa objektu aj jedinou (okrem metódy constructor vytvorenie objektu), je vyhľadaj cestu z obce A do obce B. Metóda sa užívateľsky nastavuje podľa rozsahu výsledku hľadania v prípadoch, keď: - potrebujeme len časovú vzdialenosť miest, - potrebujeme aj prechádzajúce uzly (vrcholy), - potrebujeme kompletné údaje o vyhľadanej ceste. 32

34 Toto nastavenie nám urýchľuje výpočet v prípade, že nepotrebujeme kompletné informácie o vyhľadanej ceste. Pre užívateľa objektu sú dostupné dátové premenné (polia), v ktorých sa nájdená cesta zobrazí. Objekt vyhľadávania najrýchlejšej cesty je definovaný v triede THladCest. V nej nachádzame metódy pripravujúce údaje pre vyhľadávanie a metódy, ktoré sa priamo podieľajú na výpočte najrýchlejšej cesty. K metódam pripravujúcim údaje patria: - funkcia ZistiVzdialenost(x1,y1,x2,y2:real):integer; - funkcia nám vracia vzdialenosť dvoch bodov, - procedúra Dotaz(s:string); - súži pre objekt triedy TQuery a vkladajú sa ňou dotazy v jazyku SQL, - procedúra DoplnStatistic; - procedúra spracováva vypočítanú cestu v uzloch do konkrétnych cestných spojení (prechádzané uzly => prechádzané cesty), - procedúra UlozStatistic(c,s:string); - ukladá rozširujúce výsledky výpočtov ciest, informácie o každej prechádzanej ceste (c - cesta k súboru, s názov súboru), - procedúra VynulujVsetkoNadUz; - nastavuje polia hlavných uzlov pred naplnením, - procedúra VynulujVsetkoUz; - nastavuje polia uzlov pred naplnením, - procedúra VynulujObsadeUz; - vymazanie obsadených vrcholov, - procedúra NaplnPoleNaduz; - načítanie a naplnenie dát o hlavných vrcholoch, - procedúra NaplnPoleUzlov; - načítanie a naplnenie dát uzlov, - procedúra NaplnSpjeniaNauzlov(s:string); - doplnenie spojení hlavných uzlov uložené v binárnom súbore s, jedná sa o predvypočítané dáta, - procedúra NaplnNajblizsieNauz(s:string); - procedúra načíta do pamäte informácie o najbližších hlavných uzloch pre každý uzol typu obec, - funkcia ZistiCiJeNaduzol(uz:integer):boolean; - vracia hodnotu pravda, pokiaľ je uzle (uz) zároveň hlavný uzol, - procedúra NadUzluDoUzlov; - procedúra prepisuje cestu v hlavných vrcholoch do cesty v základných uzloch, - constructor VytvorObjekt(cest:string); - vytvára sa objekt hľadania, databázový objekt a zároveň sa načítavajú všetky tabuľky pre výpočet cesty 33

35 K metódam ktoré priamo ovplyvňujú a počítajú najrýchlejšie cesty patria: - Procedúra NajdiNadUzol(var a, b, c: integer); - procedúra nám z predvypočítaných dát vracia cestu definovanú hlavnými uzlami (a, b) ktorou bude prechádzať. Premenné a, b sú taktiež vstupné čísla uzlov, medzi ktorými cestu hľadáme. Premenná c nám vracia dobu prechodu (čas v sekundách). - Procedúra NajdiCestuU(a, b:integer); - vyhľadá najrýchlejšiu cestu medzi obcami a b. Predpoklad pre vyhľadávanie procedúry je vzdušná vzdialenosť (a,b) menšia ako 50 km. - Funkcia RychloDlzkuCesty(a, b: integer): integer; - je plnohodnotná vyhľadávacia funkcia, v štruktúre podobná procedúre NajdiCestuU, ale neukladá informácie o prechádzajúcich uzloch zisťuje iba rýchlosť prechodu (v čase - sekundy). - Procedúra NajdiCestuNU(a, b: integer); - vyhľadáva najrýchlejšiu cestu medzi hlavnými uzlami. - Procedúra NajdiVypocCestuNU(a, b: integer); - taktiež vyhľadáva najrýchlejšiu cestu medzi hlavnými uzlami, ale z predvypočítaného súboru. - Procedúra ZistiPritomnostU(a, b, c: integer); - nám vypína uzly, ktoré sa nemôžu podieľať na vyhľadávanej ceste systém zapínania uzlov. - Procedúra NajdiCestu(a,b:integer); - verejná procedúra (public declaration) obsluhuje vyhľadávanie a určuje spôsob vyhľadania cesty, napĺňa nám dátovú premennú (pole K) uzlami, cez ktoré cesta prechádza. Objekt hľadania najrýchlejšej cesty prešiel relatívne dlhým vývojom, čoho následok je spoľahlivé hľadanie ciest. Možné chyby v označených cestách nie sú zapríčinené chybou vo výpočte, ale chybou v údajoch (testovanie všetkých prípadov je časovo náročné). Pri jeho ďalšej úprave, alebo vývoji sa počíta s doplnením o funkcie priameho výpočtu údajov z mapy. 3.5 Trieda prepočtu súradníc - TWGS84_SJTSK Trieda TWGS84_SJTSK vychádza z práce docenta Hrdinu Transformace souřadnic ze systému WGS-84 do systému SJTSK, v ktorej opisuje transformačné rovnice, matematicky definuje chyby (pre české územie) a pridáva zdrojové kódy prevodu 34

36 zo súradníc WGS-84 do súradníc SJTSK. Opačný prevod sa vyriešil až v tejto triede za pomoci iterácie. Priamo v našom programe prevod zatiaľ nezohráva významnú úlohu, ale pripravuje a naznačuje možnosť pripojenia programu na GPS (Global Positioning System). Momentálne to však nie je možné z finančných dôvodov. 3.6 Databázový objekt Databázový objekt TQuery vychádza zo skupiny komponent karty BDE (Borland Database Engine). Vo všeobecnosti sa predpokladá, že karta BDE obsahuje najviac funkcií a podporných nástrojov zo všetkých ostatných mechanizmov pre prístup k dátam uložených v databáze. Karta BDE je ideálna pre prácu s lokálnymi tabuľkami Paradox a dbase (*.dbf) a pre prácu s SQL serverom sa veľmi nehodí [3]. V našej aplikácií z karty BDE využívame komponentu dotazu (TQuery). Jej nastavenie sa robí pomocou jazyka SQL, čím je umožnené prepojovať niekoľko tabuliek. Pomocou komponenty TQuery sa vytvára kompletná obsluha dátových tabuliek v programe Sieťové analýzy. 3.7 Objekt zadávania hesla Objekt zadávania hesla je uložený v triede THeslo. Jeho filozofia je jednoduchá, ale účinná. Pri zavolaní jedinej funkcie objektu zisti heslo nám algoritmus prečíta číslo disku, na ktorom je program uložený. Číslo prevedie jednoduchými kódovacími funkciami a porovná ho s číslom, uloženom v textovom súbore Heslo.txt. Pokiaľ sú čísla rôzne, spúšťa sa ďalší program riešiaci zadávanie hesla. Aplikácia Sieťové analýzy uvoľňuje všetky objekty a končí. 3.8 Spúšťanie aplikácie Analýzy v uzloch Po spustení aplikácie na priemernom počítači (napr. procesor 700MHz) sa relatívne dlhý čas nič nedeje, pretože aplikácia potrebuje načítať množstvo tabuliek, máp a nastavovaní. Celé spúšťanie sa prevádza v metóde hlavného formuláru FormCreate. Po načítaní všetkých údajov aplikácia v pamäti zaberá vyše 50 MB. 35

37 Po spustení aplikácie sa zabezpečuje spúšťanie v krokoch: 1. Zisťuje sa cesta k adresáru z ktorého bola aplikácia spustená. 2. Vytvára sa objekt bitovej mapy a nastavujú sa jeho parametre. 3. Vytvára sa mapový objekt. 4. Nahráva sa mapa CestySR.vgi. 5. Nahráva sa mapa CestyPreZobraz.vgi 6. Nastavujú sa jej farby a hrúbky vrstiev formát *.vgi ich neukladá. 7. Nahráva sa mapa Krajov.vgi. 8. Vytvára sa objekt TWGS84_SJTSK. 9. Otvára sa tabuľka CestySR.dbf a prepisuje sa do poľa pre rýchly prístup. 10. Nastavujú sa objekty obcí v mape CestySR.vgi podľa tabuľky CestySR.dbf. 11. Vyvára sa objekt hľadania najrýchlejšej cesty. 12. Nahrávajú sa údaje pre vyhľadávanie. 13. Nastavujú sa farby textových tlačítok. 14. Maže sa mapové okno TImage. 15. Mapový objekt kreslí všetky zobrazované mapy. 16. Vytvára sa objekt kontroly hesla. 17. Zisťuje registrácia aplikácie. 18. Pokiaľ aplikácie nie je zaregistrovaná program uvolní z pamäte všetky objekty, aplikácia sa ukončuje a spúšťa sa program na zadávanie hesla VlozHeslo.exe. 36

38 4 Údajový model pre výpočet najkratšej cesty Grafy (siete) veľmi často modelujú dopravné, spojovacie, počítačové či elektrifikačné siete. Preto potrebujeme popísať spôsob, akým po sieti prechádza dopravný prostriedok, telegrafická správa, dátový paket, či elektrická energia. Spôsob prechodu všetkých spomínaných objektov po sieti je veľmi podobný je možný len tak, že z vrcholu siete sa objekt dostane na niektorú s ním spojenú hranu a dôjde do druhého vrcholu hrany, odtiaľ do ďalšej pripojenej hrany atď. V našom prípade pomocou grafov definujeme cestnú sieť a tak sú k výpočtu nevyhnutné tabuľky definujúce topológiu cestnej siete. Údaje pre výpočet najkratšej cesty sa rozdeľujú do štyroch kategórií: - Základné údaje neslúžia priamo na výpočet, ale všetky ďalšie údaje z nich vychádzajú. Definujú všetky objekty potrebné pre výpočet, ako sú obce, cesty, križovatky. Budeme sa nimi zaoberať najpodrobnejšie. Patrí sem tabuľka CestySR.dbf. - Údaje o vrcholoch a hranách teda o obciach, križovatkách a cestách, ktoré ich prepájajú. Priamo sa podieľajú na výpočte a definujú ich tabuľky: Dat_Uzlov.dbf a Tab_Spojenia.dbf. Tieto tabuľky sú relačne prepojené a je v nich uložená celá cestná sieť Slovenska aj so svojimi vzťahmi. - Databázové urýchľujúce údaje do ktorých patria informácie o hlavých cestných uzloch a ich spojeniach. Sú uložené v tabuľkách: UzlyVNadUZ.dbf a TabSpojNadUZ.dbf. Boli navrhnuté pre zrýchlenie výpočtu, ale neskôr sa všetky možné cesty predvypočítali a tak sa tieto dáta vo výpočte nepoužívajú. - Predvypočítané údaje niesu tabuľkového charakteru, pretože na ich uloženie je najvhodnejšia štruktúra matice (poľa). Ide o spojenia všetkých hlavných uzlov (súbor Naduzly.dat) a informácie o hlavných uzloch v okolí každého uzla (NaduzVdial.dat). Všetky tieto údaje spolu medzi sebou súvisia a tabuľkové môžu byť aj relačne prepojené. Ich celú štruktúru znázorňuje obrázok 6. Všetky sú pri spustení programu načítané a niektoré sa podľa potreby prepisujú do iných štruktúr. 37

39 V nasledujúcich riadkoch sa budeme podrobne zaoberať všetkými dátami pre výpočet najrýchlejšej cesty. Obr. 6: Štruktúra dát pre vyhľadávanie najkratšej cesty. 4.1 Základné údaje pre výpočet sieťových analýz Základným stavebným kameňom pri sieťových analýzach je zdroj dát, z ktorého získavame informácie o topológii siete. V tomto prípade sú to informácie o uzloch a o hranách, ktoré ich prepájajú. Zdrojom dát pre sieťové analýzy je tabuľka uzlov s napojeniami na ďalšie uzly. Napríklad uzol č je prepojený s uzlami: 1526, 3659, 6235, ďalej uzol 3659 je prepojený s uzlami: 3658, atď. Takáto forma údajov sa dá využiť na výpočet existencie spojenia medzi uzlami. Výpočet najkratšej vzdialenosti si vyžaduje vstup ešte jednej hodnoty, ktorá nám kvantifikuje vzdialenosť prepojenia medzi uzlami. V tomto prípade sa touto hodnotou stáva čas prejazdu medzi uzlami, pretože nie je jedno či nám uzly prepája cesta cez horský priechod, alebo diaľnica (vzdialenosť môže byť rovnaká). Najkratšie vzdialenosti vypočítané iba z dĺžky ciest sú často pre dopravu nepoužiteľné. 38

40 Výpočet rýchlosti prechodu t ( s ) = v s ( m ( m / ) s ) t čas s dráha v rýchlosť Termín výpočet najkratšej vzdialenosti sa nahradil výpočtom najrýchlejšej cesty, pretože je neprirodzená najkratšia vzdialenosť v čase (v sekundách). Takýto termín sa využíva v ostatných aplikáciách (napr. Microsoft AutoRoute 98), kde sa pri preklade z angličtiny počíta s hľadaním najrýchlejšej a najkratšej cesty. Najrýchlejšia cesta pritom neznamená, že auto pôjde najrýchlejšie, ale prejde z uzla do uzla za najkratší čas. Najvhodnejší termín sa javí hľadanie časovo najkratšej cesty, ale my sa budeme držať tradícií a budeme hľadať najrýchlejšiu cestu (v čase). Čas prejazdu medzi dvomi uzlami závisí od: 1. vzdialenosti (dĺžka cesty, krivosť) 2. dopravných obmedzení (rýchlosť) - typ cesty (viacprúdová komunikácia, cesta prvej triedy, ostatné) - 60 km/h - obmedzenie v obciach 3. prírodných obmedzení (rýchlosť) - spomalenie rýchlosti prejazdu cez horský priechod 4. náhodných javov (nehoda, dopravná zápcha, počasie a pod.) Všetky potrebné informácie sa dajú získať z vektorových máp (okrem náhodných javov) a zároveň od nich závisí aj presnosť výpočtu. V našom prípade údaje vychádzajú zo skenovaných rastrových máp, ktoré sa zvektorizovali (Micro Station 95) a pomocou vyššieho programovacieho jazyka (Delphi) sa mapové údaje (CestySR.vgi) pretransformovali do číselnej podoby. Takto vznikla základná báza dát, ktorú tvorí tabuľka s názvom CestySR.dbf. Jej identifikátor je identický s objektmi v mape, ktorá obsahuje body (uzly a obce) a línie (cesty spojnice bodov). Údaje o týchto dvoch typov objektov (body, línie) nie sú kompatibilné, no pre jednoduchosť prístupu a zároveň kontroly sú v jednej tabuľke (obrázok 7). 39

41 Obr. 7: Tabuľka objektov mapy. ID číslo objektu identické s číslom objektu vo vektorovej mape TYP typ objektu (1 - obec, 2 uzol, 3 viacprúdová cesta, 4 cesta prvej triedy, 5 ostatné cesty1, 6 ostatné cesty2) NAZOV názov obce POCOBYV počet obyvateľov v obci VYSKA nadmorská výška pri bodových objektoch (obec, uzol) CUZ1, CUZ2 číslo uzlov (ID), ktoré spája líniový prvok (cesta) DLZKA dvojrozmerne počítaná dĺžka línie (cesty) DLZKA_3D trojrozmerne počítaná dĺžka línie PRPREV priemerné prevýšenie línie v stupňoch PERCZAS percento zastavanosti línie koľko percent z cesty prechádza obcou RYCH_PRECH - konečný čas, z ktorého program počíta RP_DLZKA rýchlosť prechodu v km/h 4.2 Napĺňanie základnej tabuľky CestySR.dbf Vytváranie tabuľky mapových objektov nie je jednorázovou záležitosťou. Kedykoľvek sa v mape objaví chyba, alebo sa čokoľvek zmení, je potrebné tabuľku prepočítať opäť. Preto je na naplnenie tabuľky vytvorený samostatný program. Táto vlastnosť napĺňania bázy dát sa dá využiť aj pri vytvorení novej tabuľky z inej mapy (napr. mapa mesta), ktorá však musí spĺňať určité parametre. 40

42 Požiadavky na vektorovú mapu: - Musí byť v súradnom systéme SJTSK program na výpočet databázy vychádza z formátu VGI (výmenný graficky formát), ktorý je definovaný v systéme SJTSK pre vektorovú katastrálnu mapu. - Základné jednotky sú v metroch na dve desatinné miesta (centimetre). - Obsah mapy body (obce alebo uzly) a línie (cesty). - Bod musí ležať na začiatku (resp. konci) línie, inak k nemu nie je prístup. - Línie sa prepájajú začiatočným, alebo koncovým bodom. - Pre body sú vyhradené vrstvy 1, 2 a pre línie 3, 4, 5, 6. Mapa je tu vstupným údajom, ktorý sa pretransformuje na uzly a hrany definované v databáze. Presnosť výpočtu najrýchlejšej trasy závisí od presnosti údajov a algoritmoch výpočtu. Údaje v tabuľke môžeme rozdeliť na ručne vkladané, vypočítavané a nevypočítavané. Pri ručne získaných hodnotách - NAZOV, POCOBYV (názov a počet obyvateľov obce) sa údaje pracne hľadali a zapisovali do tabuľky. Keďže údaje o obciach neboli najčerstvejšie a pri konfrontácií s novými chýbali obce, museli sa chýbajúce obce priradiť k najbližšej (napr. obce Majerovce + Hencovce1218 majú spoločný bod). Týmto sa hodnota počtu obyvateľov v okolí priblíži skutočnosti. K nevypočítavaným patria: ID, TYP, VYSKA, CUZ1, CUZ2. Hodnoty sa odčítajú a zapíšu do tabuľky. Sú naplnené automaticky z mapových údajov. Tieto hodnoty sú vzhľadom na aktuálnosť použitej mapy bezchybné. Hodnoty, ktoré sa počítajú si ukážeme podrobne, aby sme mohli posúdiť ich správnosť. Patria sem stĺpce DLZKA, DLZKA_3D, PRPREV, PERCZAS, RYCH_PRECH, RP_DLZKA. Pri výpočtoch sa využíva knižnica s mapovým objektom, ktorá bola vytvorená v záverečnej práci Vizualizácia vektorových údajov. 41

43 4.2.1 Výpočet dvojrozmernej a trojrozmernej dĺžky línie Výpočet dĺžky línie sa prevádza v procedúre najzákladnejšieho objektu v mape, ktorý sa nachádza v triede TVGI. Vypočítava sa pomocou vzorca veľkosti vektora, kde poznáme súradnice začiatku a konca línie. Takto prechádzame všetky body (resp. vektory) v línií a získavame konečnú vzdialenosť medzi dvomi uzlami pre všetky cesty. Pri trojrozmernom výpočte sa pomocou objektu VGI.Vyskopis získava tretí rozmer - nadmorská výška. Jej presnosť je o niečo nižšia, pretože mapa nadmorskej výšky je generalizovaná na 100m presnosť (každých 100m je výškový bod). V praxi to môže znamenať nepresnosť výšky v tiesňavách (prielomoch riek s cestným spojením). Inak táto výška dosahuje stále vysokú presnosť a prevýšenie až tak dĺžku neovplyvní (ukážeme si to v príklade). Aj výpočty dĺžky línie si ukážeme na konkrétnom prípade, ale najprv sa zoznámime s výpočtovými funkciami. Výpočet veľkosti vektora (pre 2D súradnice): d výsledná dĺžka 2 2 (x1,y1) = bod A d = ( x1 x2) + ( y1 y 2) (x2,y2) = bod B Algoritmus výpočtu jednej línie v dvojrozmernom priestore function TObjektMapy.ZistidlzkuLinie:integer; var i:integer; velkost:real; begin velkost:=0; for i:=0 to LinieUlozenie[0].PocetBodov-2 do begin velkost:=velkost + sqrt( (sqr(linieulozenie[0].linia[i].x - LinieUlozenie[0].Linia[i+1].x) + (sqr(linieulozenie[0].linia[i].y LinieUlozenie[0].Linia[i+1].y)); end; result:=round(velkost); end; Výpočet veľkosti vektora (pre 3D súradnice): d3d = ( x z x2) + ( y1 y2) + ( z1 2) d3d výsledná dĺžka (x1,y1,z1) = bod A (x2,y2,z2) = bod B 42

44 Algoritmus výpočtu jednej línie v trojrozmernom priestore function TObjektMapy.ZistidlzkuLinie3D:integer; var i:integer; velkost:real; x1,y1,x2,y2,z1,z2:real; begin velkost:=0; for i:=0 to LinieUlozenie[0].PocetBodov-2 do begin x1:=-linieulozenie[0].linia[i].x; y1:=-linieulozenie[0].linia[i].y; x2:=-linieulozenie[0].linia[i+1].x; y2:=-linieulozenie[0].linia[i+1].y; z1:=vgi.vyskopis.zistivysku(x1,y1); z2:=vgi.vyskopis.zistivysku(x2,y2); //funkcia zisti výšku vracia nadmorskú výšku kdekoľvek //na území Slovenska, presnosť každých 100m výškový bod //funkcia nájde ten najbližší velkost:=velkost+sqrt(sqr(x1-x2)+sqr(y1-y2)+sqr(z1- z2)); end; result:=round(velkost); end; Príklad výpočtu Aby sme získali prehľad o presnosti pokúsme sa spraviť príklad výpočtu vzdialenosti. Aby sa ukázal rozdiel medzi 2D a 3D dĺžkou, najvhodnejší úsek cesty je horský priechod. Na tento príklad nám výborne poslúži horský priechod Pezinská Baba. Vybraná cesta začína v obci Pernek a končí v obci Viničné. Výsledok výpočtu je porovnaný s výsledkom v aplikáciach Microsoft AutoRoute a Bentley MicroStation. Zobrazuje ho tabuľka 1. Tab. 1: Dvoj a trojrozmerná vzdialenosť medzi obcami Pernek a Viničné Výpočet dĺžky (horský priechod Pezinská Baba) 2D dĺžka 3D dĺžka Microsoft AutoRoute 21,9 km Bentley - MicroStation 21,3 km 21,4 km Náš príklad 21,3 km 21,4 km 43

45 Obr. 8: Dvoj (modrá) a trojrozmerné (hnedá) zobrazenie počítanej cesty (aplikácia Bentley MicroStation). Výpočet aplikácie MicroStation (obrázok 8) používa pre výpočet tú istú mapu, ako naša aplikácia. Zhodnosť výsledkov je pri správnom algoritme samozrejmá. Trojrozmerná cesta je dĺžkou podobná dvojrozmernej. Horský priechod Pezinská Baba má prevýšenie 300 metrov, ale na celkovej dĺžke cesty sa to prejaví iba necelým 100 (97) metrovým predĺžením. Podobne sú na tom aj iné horské prechody: Donovaly 130m, Čertovica 200m. Predĺženie ciest celého Slovenska je približne 16 km. Nie je pravdepodobné, že by sa našla cesta (najrýchlejšia cesta z bodu A do B), ktorá by mala predĺženie väčšie ako 500 metrov. Na druhej strane nie je jednoduché presne definovať obce bodom. Tu sa nám vzdialenosť môže rozptýliť aj o niekoľko stoviek metrov. Z tohto dôvodu ťažko hodnotiť výsledok z aplikácie Microsoft AutoRoute, kde nám cesta vyšla o 500 metrov dlhšia. Pri porovnávaní s touto aplikáciou išlo o vylúčenie hrubej chyby v údajoch (mape). Náš algoritmus vyhľadávania najkratšej cesty počíta s 3D vzdialenosťami a 2D vzdialenosti sa v tabuľke uchovávajú pre kontrolu. 44

46 4.2.2 Výpočet priemerného prevýšenia ciest Priemerné prevýšenie nám udáva hodnotu, podľa ktorej môžeme označiť a znevýhodniť horské cesty. V databáze sa zapíše v stupňoch a zaokrúhli sa na celé číslo. Ako sa nám prejaví vo výpočte najrýchlejšej cesty si ukážeme pri stati o výpočte rýchlosti prechodu, teraz si ukážeme ako sme údaj prevýšenia vypočítali. Prevýšenie ciest sa počíta medzi dvomi bodmi v ceste spájajúcej dva uzly. Keďže cesta môže mať n bodov, získavame aj n prevýšení v jednej spojnici dvoch uzlov. Z nich sa vypočíta vážený priemer a dostávame výsledok priemerného prevýšenia. Prevýšenie jedného vektora vypočítavame pomocou goniometrickej funkcie tangens (obrázok 9). Vzorec prevýšenia medzi dvomi bodmi α = tg( δvýška / Vzdialenosť ) α - uhol (v radiánoch) δvýška - rozdiel výšok (v metroch) Vzdialenosť veľkosť dvojrozmerného vektora (v metroch) Obr. 9: Znázornenie výpočtu prevýšenia medzi dvomi bodmi. Algoritmus výpočtu prevýšenia medzi dvomi bodmi function ZistiPrevysenieBod(vzd1,x1,y1,x2,y2:real):real; var no:real; begin no:=0; if vzd1<>0 then no:=tan((vgi.vyskopis.zistivysku(x1,y1)- Vgi.Vyskopis.ZistiVysku(x2,y2))/vzd1); //implementácia vzorca pre prevýšenie result:=abs(no*180/pi); //prevod z radiánov do stupňov end; 45

47 Funkcia (zisti prevýšenie bod) nám vracia hodnotu prevýšenia pre jednu úsečku v spojnici dvoch uzlov. Aby sme mali priemerné prevýšenie pre celú líniu, musíme vypočítať všetky prevýšenia a zároveň k nim potrebujeme ich váhu (dĺžku), pretože potrebujeme zvýhodniť hodnoty dlhších úsekov ciest. Priemerné prevýšenie vypočítame podľa vzorca: Pprev = ( s* d) ( d) Pprev priemerné prevýšenie línie s prevýšenie medzi dvomi bodmi v stupňoch d dvojrozmerná vzdialenosť medzi dvomi bodmi v metroch Funkcia priemerného prevýšenia sa použije pre všetky líniové objekty a hodnota sa zapíše do tabuľky. Výsledky výpočtu znázorňuje mapa (obrázok 10). Obr. 10: Zobrazenie priemerného prevýšenia ciest na Slovensku Výpočet percenta zastavanosti cesty Percento zastavanosti cesty (ďalej len zastavanosť) nám udáva koľko percent z línie (cesty) je v zastavanom území. Základom pre tento výpočet sa stala vektorová mapa so zastavanými plochami obcí. Po prekrytí s našimi cestami dokážeme výpočet realizovať. 46

48 Algoritmus výpočtu pre spojnicu dvoch bodov prechádza líniou a vyberá z nej desať vzoriek, teda každá vzorka je za desať percent (obrázok 11). Pre každú úsečku sa ukladá percento zastavanosti a jej váha (v tomto prípade dĺžka), z čoho sa vypočíta celková zastavanosť línie. Spôsob výpočtu najlepšie vystihuje obrázok. Obr. 11: Grafické znázornenie výpočtu percenta zastavanosti. Vzorec výpočtu percenta zastavanosti: PercZas = ( Zas* dlzka) dlzka = 70* * * 2000 = 35% PercZas zastavanosť celej línie zas percento zastavanej plochy dlzka dĺžka líniového elementu Algoritmus výpočtu pre spojnicu dvoch bodov : function ZistiZastavanost2Bodov(x1,y1,x2,y2:real):byte; var xx,yy:real; i,perc:integer; begin xx:=(x1-x2)/10; yy:=(y1-y2)/10; //xx,yy - smerový vektor 10x zmenšený perc:=0; for i:=0 to 9 do if Form1.Image1.Canvas.Pixels[vgi.Tx(x2+xx*i), vgi.ty(y2+yy*i)] = clblack then inc(perc); result:=perc*10; end; 47

49 Výpočet atribútu zastavanosti je pomerne presný a jeho údaj sa význame podieľa na celkovej rýchlosti prechodu. Znevýhodňuje cesty prechádzajúce cez zastavané územia. Pridaním tohto atribútu sa výpočet podstatne približuje skutočnosti Rýchlosť prechodu v sekundách Rýchlosť prechodu je v tomto prípade čas (v sekundách), za ktorý vozidlo prejde danú cestu (z jedného uzla do druhého). Závisí od všetkých doteraz spomínaných atribútov, teda od typu, dĺžky, prevýšenia a zastavanosti cesty. Typ cesty typ cesty je rozdelený do troch kategórií (tabuľka 2): viacprúdové cesty, cesty prvej triedy a ostatné cesty. K viacprúdovým komunikáciám sa zaradili významné cesty, teda sem nezapadajú krátke viacprúdové úseky mestského charakteru. Pre tieto cesty je stanovená rýchlosť 130 km/h, ale aj pre ne platí znevýhodnenie zastavanosti. Ak nám cesta prechádza napr. zastavanou Bratislavou, rýchlosť sa spomaľuje na 60 km/h. Viacprúdové komunikácie svojou rýchlosťou priťahujú dopravu. Cesty prvej triedy majú stanovenú rýchlosť na 90 km/h. Sú to kvalitné a udržiavané cesty. Na rýchlosť prechodu v nich má najväčší vplyv zastavanosť, ale aj sklon, teda prevýšenie. Všetky ďalšie cesty sú počítané ako ostatné a počíta sa v nich s rýchlosťou 72 km/h (20 m/s). Kvalitou a teda aj rýchlosťou sa často vyrovnajú cestám prvej triedy, ale nie je možné v tejto práci riešiť individuálne každú cestu a tak všetky dostávajú toto rýchlostné znevýhodnenie. Je nežiadúcim javom, aby nám nájdená najrýchlejšia cesta opustila cestu prvej triedy, prešla skratkou po ostatných cestách a následne sa vrátila späť. Toto znevýhodnenie nám tento prípad vylučuje. Tab. 2: Základná rýchlosť podľa typu cesty. typ cesty rýchlosť v km/h rýchlosť v m/s viacprúdové cesty cesty prvej triedy ostatné cesty Dĺžka cesty je významným faktorom vplývajúcim na rýchlosť prechodu cestou. Odráža sa v nej jej zakrivenosť (resp. priamočiarosť) a pri sume všetkých prechádzajúcich ciest dokáže algoritmus rozpoznať vhodnú trasu. Dĺžka cesty je počítaná trojrozmerne, teda takúto vzdialenosť by malo namerať aj prechádzajúce vozidlo. 48

50 Prevýšenie cesty (tabuľka 3) je udávané ako priemerné prevýšenie jednej spojnice dvoch uzlov cesty. Pri dlhších cestách sa môže stať, že veľkosť prevýšenia týmto priemerovaním zanikne. Vychádza však z výpočtu a tak sa o tento údaj môžeme oprieť. Z praxe vieme, že ak cestujeme horským terénom (priesmykom), nedosahujeme maximálne povolené rýchlosti. Keďže sú tieto cesty spravidla málo zastavané potrebujeme ich inak znevýhodniť (spomaliť rýchlosť prechodu). Spomalenie robíme pomocou násobenia konštantou, ktorej veľkosť je priamo úmerná stupňu prevýšenia. Prevýšenie menšie ako 4 vôbec nespomaľujeme. Konštanta pri 4 je 0,94, čo pri 90 km/h rýchlosti robí 5,6 km/h úbytok rýchlosti. Maximálne prevýšenie s ktorým počítame je 10. Pri pôvodnej 90 km/h rýchlosti dostávame 54,9 km/h rýchlosť. Spomalenie kvôli prevýšeniu je podhodnotené, v skutočnosti je väčšie. Je potrebné ho overiť v praxi a zistiť skutočnú koreláciu medzi sklonom a rýchlosťou. Pravdepodobne sa tu nebude jednať o lineárnu funkciu. Tab. 3: Vplyv prevýšenia na rýchlosť prejazdu. prevýšenie v stupňoch index znevýhodnenia spomalenie pri ceste 90 km/h do ,94 84,6 5 0,88 79,2 6 0,83 74,7 7 0,77 69,3 8 0,72 64,8 9 0,66 54,4 10 a viac 0,61 54,9 Zastavanosť cesty rýchlosť vozidiel je v obci obmedzená 60 km/h rýchlosťou, čím sa vytvára značne spomaľujúci faktor dopravy. Priemerná zastavanosť všetkých ciest na Slovensku (vážený priemer na dĺžku cesty) je 24,6 %, čo je hustota, ktorá má veľký vplyv na rýchlosť prechodu. Algoritmus sa pomocou tohto atribútu môže vyhýbať cestám s vysokým percentom zastavanosti. 49

51 Výpočet rýchlosti prechodu výsledok sa priamo využíva v hľadaní najrýchlejšej cesty d Rp = ( R *(1 Zas /100) + 16,6*( Zas /100))*Pr ev Rp čas za ktorý prejde vozidlo danou cestou (s) d trojrozmerná dĺžka cesty (m) R maximálna rýchlosť podľa typu cesty (m/s) Zas zastavanosť cesty (%) 16,6 konštanta 16,6 m/s =60 km/h Prev konštanta znevýhodnenia kvôli prevýšeniu Algoritmus výpočtu rýchlosti prechodu (s) VypCasPrejazdu(typ cesty=4, prevýšenie=2, zastavanosť=15, dĺžka=2560) //aplikácia funkcie function VypCasPrejazdu(c,p,z,d:integer):integer; var znprev:real; rychlost:integer; znzastav:real; begin rychlost:=0; case c of //rýchlosť podľa typu cesty v m/s 6: rychlost:=20; // 72 km/h - ostatné 4: rychlost:=25; // 90 km/h prvej triedy 5: rychlost:=20; // 72 km/h - ostatné 3: rychlost:=36; // km/h -diaľnice end; if p>3 then //prevýšenie case p of 4:znPrev:=0.94; 5:znPrev:=0.88; 6:znPrev:=0.83; 7:znPrev:=0.77; 8:znPrev:=0.72; 9:znPrev:=0.66; else znprev:=0.61; end else znprev:=1; znzastav:=z/100; rychlost:=rychlost*(1-znzastav)+16.6*znzastav; result:=round(d/(rychlost*znprev)); //výsledok end; 50

52 Rýchlosť prejazdu je údaj, s ktorým bude program počítať najkratšie vzdialenosti. Pri prehľadávaní sa v algoritme sčituje a pokiaľ príde do určeného bodu, zistí sa či je táto cesta časovo najkratšia. Preto sa jedná o jeden z najdôležitejších údajov v celej báze dát a program s ním pracuje pri každom vyhľadávaní Zhrnutie tvorby základných údajov Od súboru CestySR.dbf sa odvíjajú všetky ďalšie tabuľky a výpočty. Preto sme sa podrobne zaoberali všetkými vypočítanými položkami. Čitateľ si z tohto výkladu môže utvoriť obraz o údajoch, s ktorými náš program bude počítať, a zároveň či programovým výstupom môže dôverovať. Údaje sa v maximálne dostupnej miere snažia kopírovať reálny svet, aj keď určite je ešte čo zlepšovať. Môžu sa využiť aj v úplne odlišných nesieťových analýzach, kde je potrebné pracovať s informáciou napríklad o výške, počte obyvateľov. Najdôležitejší je tu však poznatok, že cesty sú ohodnotené časom prejazdu a tým sa algoritmus hľadania má o čo oprieť. Obr.12: Priemerná rýchlosť komunikácií v okolí Banskej Bystrice. 51

53 O poslednom údaji (v tabuľke CestySR.dbf) - rýchlosť prechodu v km/h - sme doteraz nehovorili. Slúži iba na kontrolu a udáva priemernú rýchlosť cesty. Pomocou neho si môžeme pozrieť ľubovolnú cestu. Na obrázku 12 je cestná sieť v okolí Banskej Bystrice. 4.3 Údaje o vrcholoch a hranách Základom pre každý algoritmus vyhľadávania cesty v grafoch sú informácie o vrcholoch a hranách, ktoré ich prepájajú. Vrcholom je v našom prípade obec, križovatka, každý koniec resp. začiatok cesty. V GIS terminológií sa vrchol označí ako bod alebo uzol, v matematike sa môže označiť ako vektor s nulovou veľkosťou. Algoritmus sa pri vyhľadávaní pohybuje práve po vrcholoch. Na to aby dokázal prejsť z vrcholu do vrcholu musí poznať hranu, ktorá ich spája. Hrana je v našom prípade cesta, teda línia alebo reťazec vektorov. Vzťahy medzi vrcholmi a hranami sa dajú definovať aj v relačných databázach a to vzťahom 1: n, kde jeden vrchol môže mať niekoľko ciest na ďalšie vrcholy. Inak to nie je ani v našom prípade, kde vrcholy sú uložené v tabuľke Dat_Uzlov.dbf a hrany v tabuľke Tab_Spojenia.dbf (obrázok 13). Obr. 13: Tabuľka vrcholov (Dat_Uzlov) a hrán (Tab_Spojenia). Popis položiek v tabuľke Dat_Uzlov.dbf: ID_UZ identifikátor vrcholu - identický s tabuľkou CestySR.dbf a teda aj s atribútom mapových objektov. X_SUR, Y_SUR celočíselná súradnica v systéme SJTSK využíva sa na identifikáciu vrcholu v priestore (napr. vzdušná vzdialenosť medzi hľadanými bodmi). TYP_UZ typ vrcholu rozlišuje sa iba obec a ostatné vrcholy. Vstupovať do siete sa môže iba v obci (kvôli identifikácií vrcholu), aj keď algoritmu nezáleží na type vrcholu. POC_UZL počet pripojených vrcholov. 52

54 Popis položiek v tabuľke Tab_Spojenia.dbf: ID_UZ identifikátor vrcholu, ktorý chceme prepájať ID_NAP_UZ - identifikátor pripojeného vrcholu ID_OBJEKTU identifikátor hrany, ktorá prepája uzly. Číslo identifikátor do tabuľky CestySR.dbf a teda aj do mapy. CAS čas prejazdu cestou. Identické číslo s položkou RYCH_PRECH v tabuľke CestySR.dbf. Tabuľky vrcholov a hrán sa automaticky vypočítavajú zo základných údajov CestySR.dbf. Ich bezchybnosť je garantovaná samotným vyhľadávaním cesty, ale sú vytvorené aj nástroje na kontrolu týchto spojení ako to znázorňuje obrázok 14. Modré línie zobrazujú spojenia medzi uzlami. Pokiaľ existuje neprirodzene napojený uzol, vizuálne sa dá identifikovať. Obyčajne sa objavovala chyba nulovej hodnoty, ktorá tiež tvorí identifikátor uzla. Obr. 14: Kontrola tabuľky hrán a vrcholov cestnej siete. 53

55 4.4 Databázové urýchľovacie údaje V tabuľke vrcholov (Dat_Uzlov.dbf) sú uložené uzly celého Slovenska. Ich počet je vyše 5000, čo je počet v ktorom výpočet trvá príliš dlho, keďže opakovane prechádza všetky uzly. Vo všeobecnosti sa týmto spôsobom dá vyhľadávať cesta do 50 km. Pri riešení problému hľadania cesty sa črtali dve možnosti. Prvá mala približne zisťovať smer a ovplyvňovať ho. Predpokladám, že takto pracuje väčšina vyhľadávacích algoritmov, ktoré neprechádzajú všetky možnosti. Druhá možnosť predpokladá existenciu akýchsi hlavných uzlov, cez ktoré hľadaná cesta musí prejsť. Jedná sa o križovatky hlavných ciest, ale aj križovatky ostatných, pokiaľ sa tam hlavné cesty nenachádzajú. Vzťahy týchto hlavných uzlov sa predvypočítajú a vzniká nová sieť hlavných uzlov, ktorá počtom uzlov dovoľuje prechádzať všetky možnosti a získavať výsledky v reálnom čase (napr. 1 sekunda). Sieť hlavných uzlov prepočítava po spustení programu z tabuľky TabSpojNadUZ.dbf, kde sú uložené spojenia týchto hlavných uzlov. Fyzická cesta prechodu spojenia (uzly, ktorými spojenie prechádza) je uložená v tabuľke UzlyVNadUZ.dbf. Tabuľky s relačným vzťahom sú zobrazené na obrázku 15. Obr. 15: Údaje o hlavných uzloch. Tabuľka TabSpojNadUZ: ID_SPOJ identifikátor spojenia RYCH_PRECH rýchlosť prechodu (v čase - sekundách) v tomto prípade suma rýchlostí ciest, po ktorých spojenie prechádza CUZ_1, CUZ_2 číslo, identifikátor uzla (vrcholu), na ktorom sa hlavný uzol nachádza CNUZ1, CNUZ2 identifikátor hlavných uzlov, ktoré spojenie prepája X_SUR1, Y_SUR1, X_SUR2, Y_SUR2 súradnice hlavných uzlov v systéme SJTSK 54

56 Tabuľka UzlyVNadUZ: ID_SPOJ identifikátor spojenia PORADIE_UZ poradie uzlov (vrcholov) využíva sa pri výpočtoch CIS_UZ identifikátor vrcholov údaj definuje cestu prepájajúcu dva hlavné vrcholy (uzly). Systém hlavných vrcholov uložený v tabuľkách je pomerne ťažko predstaviteľný. Vychádza ako všetky údaje z mapy a tak sa naň môžeme pozrieť. Znázorňuje ho obrázok 16. Modrou farbou sú znázornené hlavné vrcholy a ich spojnice. Červená farba znázorňuje cesty prepájajúce hlavné vrcholy a čierna zobrazuje všetky cesty. Obr. 16: Obrázok znázorňuje rozmiestnenie hlavných vrcholov (uzlov). Presnosť výpočtu najrýchlejšej cesty závisí do veľkej miery na lokalizácií hlavných vrcholov. Pri vyhľadávaní sa môže stať, že cesta nemá vhodný hlavný uzol a vznikajú spravidla drobné chyby (napr. cesta z okolia Banskej Štiavnice do Banskej Bystrici prejde cez Zvolen, aj keď má diaľničný obchvat). Pre presnosť výpočtu je teda vhodné, aby týchto uzlov bolo čo najviac, no každým pridaným uzlom sa výpočet spomaľuje. Týmto spôsobom sa dobre riešia veľké vzdialenosti. Dokážeme matematicky porovnať rýchlosťou podobné trasy a vybrať najvhodnejšiu. Predpokladám, že po starostlivom testovaní a vhodnom pridávaní týchto uzlov, sa dá docieliť v tomto spôsobe dokonalosť vyhľadanej cesty. 55

57 4.5 Predvypočítané binárne údaje Tabuľky hlavných vrcholov nám citeľne urýchľujú výpočet a riešia výpočet dlhých ciest. Čas výpočtu v tabuľkách hlavných vrcholov je v našom programe vhodný na zistenie jednej najrýchlejšej trasy. Pokiaľ máme počítať n ciest (napr. cesty z jedného uzlu do všetkých), potrebujeme výpočet viac zrýchliť, alebo inak zabezpečiť výsledok v čo najkratšom čase. Keďže počet vrcholov v nich je relatívne nízky, ponúka sa možnosť predvypočítania do štvorcovej matice. Z každého hlavného vrcholu sa vypočíta najrýchlejšia cesta do všetkých ostatných hlavných vrcholov. Na tento typ dát sa tabuľková reprezentácia nehodí a tak sú uložené v binárnom súbore - Naduzly.dat. Typ údajov uložený v súbore Naduzly.dat type spojenie = record rychlost: integer; pocet: integer; vdialenost: integer; uzly : array[0..15] of smallint; end; TPole = array [0..60,0..60] of spojenie; Spojenie je typ, ktorý definuje najrýchlejšiu cestu medzi dvomi hlavnými vrcholmi. Vychádza z tvrdenia, že v našom prípade aj pre najdlhšiu cestu na Slovensku stačí prejsť menej ako 17 hlavných uzlov. Prechádzajúce uzly sú uložené v poli uzly. Štruktúru súboru Naduzly.dat zobrazuje obrázok 17. Obr. 17: Grafické znázornenie štruktúry súboru Naduzly.dat. 56

58 Pri výpočte najrýchlejších vzdialeností algoritmus rieši aj vstup do siete hlavných uzlov. Aby vedel vybrať najvhodnejší hlavný uzol v okolí ľubovolnej obce, musí mať z tohto okolia o nich informácie. Tie sú uložené v súbore NaduzVdial.dat. Typ údajov uložený v súbore NaduzVdial.dat type naduzol = record cislo: integer; //číslo hlavného uzla cas: integer; //čas cesty k nemu end; naduzly = record poc: integer; //počet hlavných uzlov NadUZ: array[0..10] of naduzol; //uloženie hl. uzlov end; TPolNadUZ = array[ ] of naduzly; //3103 obcí V súbore sú uložené údaje o hlavných uzloch v okruhu 50 km pre každú obec teda vrchol, z ktorého sa dá vstúpiť do vyhľadávacej siete. Pokiaľ napríklad spustíme vyhľadávanie z Brezna, bez počítania máme informáciu o okolitých hlavných križovatkách a ich vzdialenosť k nim (v čase). Tieto údaje umožňujú algoritmu okamžite zistiť približnú (neúplnú) trasu, kadiaľ sa má uberať. O využití si viac povedali v popise algoritmov vyhľadávania. 4.6 Zhrnutie kapitoly Údaje pre vyhľadávanie najrýchlejšej cesty boli vytvárané približne jeden rok. Niekoľko mesiacov zabrala vektorizácia ciest a bodov. Pracné bolo aj manuálne vkladanie názvov obcí a počet obyvateľov v nich. Najviac práce dala oprava chýb, teda zmena všetkých údajov, o ktorých sme v kapitole hovorili, po akejkoľvek drobnej zmene v mape. Len pre zaujímavosť spomeniem, že po zmene v základnej mape, trvá približne 24 hodín spracovanie nových údajov (výpočet v PC). Výpočet všetkých ciest v súbore hlavných uzlov trvá 8 hodín. Pokiaľ pridáme ďalší hlavný uzol, výpočet sa časovo predlžuje niekoľkonásobne. 57

59 Opisovaný model dát je použiteľný na rozlične veľké územie. Samotný model uzlov postačuje na riešenie ciest v meste. Pomocou tabuliek hlavných uzlov sa môže riešiť územie veľkosti Slovenska. Keby sme chceli počítať vzdialenosti na európskom kontinente potrebovali by sme založiť tabuľku ešte nadradenejších uzlov a prípadne ešte o ďalšiu úroveň vyššiu. Z hľadiska objemu dát to však nie je možné riešiť v študentskej práci. 58

60 5 Užívateľské prostredie programu a algoritmy analýz Pri spustení programu Sieťové analýzy sa zobrazí užívateľské menu, kde si na prvý pohľad všimneme netradičné užívateľské prostredie. Namiesto zvyčajne používaných tlačítok, sa na výber z ponuky programu využívajú textové komponenty (TLabel). Je tomu tak iba kvôli atraktívnejšiemu vzhľadu. Po spustení programu sa zobrazí aplikácia, ktorú znázorňuje obrázok 18. Obr. 18: Program Sieťové analýzy po spustení. Programové časti môžeme rozdeliť do tematických skupín: 1. Plocha na zobrazovanie mapy je ovládané myšou (grafický pomocník 1a). Pravým tlačítkom myši sa ovláda posúvanie mapy. Posun pripomína posun rukou v programe Adobe reader. Stlačením ľavého tlačítka myši v mapovej oblasti sa vyhľadá najbližšia obec, ktorá sa vypíše pod časťou vyhľadávania cesty (2). Stredným kolieskom myši sa ovláda veľkosť zobrazovanej mapy (Zoom). Pri stlačení tohto tlačítka sa obnoví pôvodná veľkosť mapy. V mapovej zobrazovacej časti sa zobrazujú mapové vrstvy (5), ale aj všetky výsledky analýz (3). 59

61 2. Vyhľadávanie cesty do okien zadávania údajov sa napíšu názvy obcí, medzi ktorými sa má cesta vyhľadať. Pri vpisovaní názvu okno samo začne ponúkať názov ukončený číslom. Pre správne hľadanie cesty je dôležité práve toto číslo, ktoré nám odkazuje do tabuľky uzlov. Pokiaľ sme označili obe obce, stlačíme text zobraz a cesta sa zobrazí v mape (1). Obce do vyhľadávania cesty je možné vkladať aj po označení obce v mape (1). 3. Analýzy v uzloch tvoria hlavnú funkciu programu. Budeme sa nimi zaoberať neskôr a podrobne. 4. Text - Ďalšie info - slúži na spúšťanie nového okna, v ktorom sa doplňujú výsledky analýz. 5. Piate menu tvorí oblasť vrstiev mapy, ktoré môžu nadobúdať hodnoty zobrazená a nezobrazená. Po kliknutí na mapovú vrstvu sa toto nastavenie preklopí na opačné. Program obsahuje tieto vrstvy: obce, cesty, popis (obcí), kraje (hranica). Mohol by ich obsahovať ďaleko viac (napr. rieky, okresy, mosty, turistické atrakcie), ale to nie je našim cieľom. 6. Posledná šiesta oblasť nám pri pohybe myšou nad mapou zobrazuje súradnice v SJTSK, WGS-84 a aktuálnu nadmorskú výšku. Funkcie sa zapínajú rovnako ako mapové vrstvy (5) a fungujú iba nad územím Slovenskej republiky. 5.1 Analýzy v uzloch Analýzy v uzloch tvoria najpodstatnejšiu a najzaujímavejšiu časť programu. Môžeme ich chápať ako výsledok celej práce. Preto sa v opise tejto časti budeme podrobne venovať každej analýze. Na popis analýz použijeme jednotnú šablónu, v ktorej si analýzu popíšeme, vysvetlíme si jej algoritmus a urobíme si názorný príklad z praktického využitia analýzy. V našom programe sa venujeme témam: - Pôsobnosť obcí - Rozvoz tovaru - Preťaženie ciest - Časová vlna 60

62 5.1.1 Pôsobnosť obcí Metóda pôsobnosti obcí nám porovnáva vzdialenosti všetkých obcí na Slovensku a priraďuje ich k časovo najbližšej obci, ktorú sme zadali na skúmanie. Dá sa s ňou zistiť dopravný monopol podnikov (po zadaní všetkých firiem z odvetvia), alebo pôsobnosť miest (do ktorého krajského mesta majú obce najbližšie). Obrázok 19 zobrazuje užívateľské menu, ktoré slúži na jednoduché zadávanie skúmaných obcí. V okne obce pri výbere si môžeme pomôcť automatickým hľadaním obcí podľa zadávaných písmen. Pokiaľ sú zadané všetky obce môže sa spustiť výpočet. Výpočet bude trvať priamo úmerne počtu zadaných obcí. Pre jednu obec sa počíta približne 30 sekúnd, ale môže to byť aj značne individuálne. Obr. 19: Nastavenie výpočtu pôsobnosti obcí. Po skončení výpočtu sa všetky obce vyfarbia farbou obce, do ktorej patria. Počet obyvateľov v týchto zónach (počítaných obciach) sa nachádza v ďalších informáciách. Algoritmus výpočtu for i:=0 to 3103 do //pre všetky obce begin obce[i].vzdial:=maxint;//vloženie maximálneho čísla for j:=0 to ozn-1 do //pre všetky užívateľom vybrané //obce begin Form1.HlCest.NajdiCestu(i,pol[j]); if Form1.HlCest.Ksekund<obce[i].vzdial then //pokiaľ našiel najbližšiu obec begin obce[i].vzdial:=form1.hlcest.ksekund; obce[i].id:=j; //vlož do údajového poľa end; 61

63 Príklad: Manažér liehovaru v Banskej Bystrici dostal úlohu zvýšiť zisk firmy. Rozhodol sa, že príme dílerov, ktorý budú propagovať a predávať výrobky. Na ktoré miesta sa však má zamerať? Riešenie: Manažér pozná konkurenčné firmy. Keďže všetky majú podobný druh sortimentu, rozhodovať bude cena výrobku, ktorá je však už teraz stlačená na minimum (liehoviny majú vysokú spotrebnú daň). Rozhodne sa teda zamerať na minimalizáciu dopravných nákladov pomocou zistenia dopravného monopolu. V tejto ploche by výrobky firmy mali byť najlacnejšie a mali by jasne dominovať. Konkurenčné firmy sídlia v obciach: Trenčín, Obišovce, Liptovský Mikuláš, Bratislava, Prešov, Humenné, Lučenec, Rimavská Sobota, Veľký Meder, Senica, Svodín. Zadáme ich do programu a spustíme výpočet. Program farebne zobrazí pôsobnosti všetkých zadaných obcí a zistí aj počet obyvateľov a tejto ploche. Podľa mapy a údajov z programu manažér môže usúdiť, že prijme dílerov pre mestá (a ich okolie): Banská Bystrica, Brezno, Zvolen, Žiar nad Hronom, Zlaté Moravce, Banská Štiavnica. V týchto oblastiach má podnik dopravný monopol a teda aj najnižšie ceny Rozvoz tovaru Pod názvom rozvoz tovaru sa označuje hľadanie cestnej trasy, ktorá musí prejsť všetkými označenými obcami. Najväčšie využitie má práve v tejto oblasti a tak z nej plynie aj názov. Okno zadávania hľadanej cesty zobrazuje obrázok 20. Ovládanie je jednoduché a intuitívne: v okne obce sa označí hľadaná obec a šípkou sa presunie do želaného okna (začiatok, koniec, stop). Po stlačení tlačítka Počítaj sa spustí výpočet. Doba výpočtu značne závisí od počtu obcí v okne Stop. Do 15 obcí je výpočet relatívne rýchly. Pri 15 obciach trvá výpočet približne 60 minút (záleží od výkonu počítača) a každou ďalšou obcou rastie čas faktoriálovou funkciou (16-30*16 minút 8 hodín). V skutočnosti je to menej (vplyvom zarážky), ale obecne môžeme povedať, že táto funkcia programu má využitie v reálnom čase do 15 zastávok (60 min). 62

64 Obr. 20: Okno nastavenie rozvozu tovaru. Algoritmus výpočtu je pomerne zložitý a tak využijeme na jeho popis pseudokód Úloha auto vychádza v obci A, končí v obci C, má zastávky v obciach B1, B2, B3, B4 Krok 1 do lokálnej pamäte uložíme vzdialenosti medzi všetkými obcami A, C, B1, B2, B3, B4, Krok 2 vytvoríme nové pole vrcholov (zadané obce) a hrán (vypočítané vzdialenosti), Krok 3 pomocou vyhľadávacieho algoritmu (podobnému algoritmu ako v hľadaní najrýchlejšej cesty) sa nájde najkratšie spojenie prechádzajúce všetkými obcami, Krok 4 skompletizuje sa nájdená cesta a zobrazí v mape. Príklad výpočtu Zadanie: Do siete hypermarketov je potrebné rozviesť zápalky, ktoré sú uložené v sklade v Bratislave. Auto musí navštíviť 15 obcí: Banská Bystrica, Košice, Levice, Martin, Michalovce, Nitra, Nové Zámky, Piešťany, Poprad, Považská Bystrica, Prešov, Prievidza, Trenčín, Trnava, Žilina. Za aký čas auto cestu prejde, pokiaľ pôjde maximálnou dovolenou rýchlosťou? A ako bude vyzerať mapa cesty? Riešenie: Obce sa zapísali do programu a spustil sa výpočet. Približne po 1 hodine sa zobrazil výsledok, z ktorého priamo môžeme vidieť zobrazenú cestu a čas bez zastavenia pri prechode maximálnou povolenou rýchlosťou. Vozidlo to je schopné prejsť za 12 hodín a 58 minút. Výsledok výpočtu zobrazuje príloha 2. 63

65 Výpočet rozvozu tovaru je známy problém a zvyčajne nesie názov Problém obchodného cestujúceho. Pre zaujímavosť sa našla podobná diplomová práca, v ktorej autor Petr Fuks rieši tento problém komerčne pre firmu v Českej Republike. Všeobecne sa autor stretáva s podobnými problémami zložitosť výpočtu neúmerne rastie s počtom obcí. Autor však mal k dispozícií (ako píše) verejné mapy dopravnej siete Českej republiky, na Slovensku verejné mapy ciest nedostať Preťaženie ciest Preťaženie ciest je analýza, ktorá slúži na jednorázový výpočet. Spôsob výpočtu a vôbec jeho podstata je diskutabilná, pretože simulácia takého zložitého javu akým je cestovanie ľudí, je príliš náročné. Na druhej strane však ponúka zaujímavé výsledky. A spochybniť sa dajú aj priamo počítané výsledky preťaženia, v prípade, že nepočítajú každé jedno vozidlo, ale len vzorky v určitých dňoch. Spustenie výpočtu je jednoduché. Znázorňuje ho obrázok 21. Do okna vstupu údajov sa zadáva číslo, ktoré znázorňuje minimálny počet obyvateľov obcí, s ktorými sa má výpočet počítať. Pri zadaní čísla 5000 výpočet trvá asi 30 minút. Väčšie číslo znamená kratší čas výpočtu. Obr. 21: Okno nastavenia výpočtu preťaženia ciest. Algoritmus preťaženia ciest počíta preťaženie pre cesty medzi všetkými obcami s počtom obyvateľov väčším, ako sa užívateľom vloží. Násobí počty obyvateľov v sledovaných dvoch obciach a delí ich vzdialenosťou v čase (sekundách). Z tohto vzorca vzniká číslo, ktoré sa pripočítava prechádzaným cestám. Pokiaľ sú dve veľké mestá blízko 64

66 seba, cestná premávka sa podstatne zhusťuje a naopak medzi vzdialenými mestami doprava klesá. Vlastnosti výpočtu preťaženia ciest v programe Sieťové analýzy môžeme definovať takto: - výpočet počíta iba s vnútroštátnou dopravou, - neberie do úvahy regionálne rozdiely, ani počet dopravných prostriedkov na obyvateľa v daných regiónoch, - výpočet zanedbáva turistické centrá s nízkym počtom obyvateľov (napr. obec Donovaly nemá vo výpočte žiadny význam), Výsledok preťaženia ciest vypočítaný v našom programe znázorňuje príloha Časová vlna Analýzu času ktorý potrebujeme na prejazd zo zadaného do toho, ktorého bodu sa v programe nazýva Časová vlna. V tejto analýze sa zobrazí časová zakrivenosť priestoru spôsobená kvalitou cesty a prírodnými prekážkami. Na spustenie analýzy sa využíva okno (obrázok 22). Užívateľ tu zadáva obec, z ktorého sa časová vlna má počítať a v relatívne krátkom čase (1 minúta) sa objaví výsledok, z ktorého môžeme odčítať približný čas príchodu do všetkých obcí na Slovensku. Paleta výstupnej mapy je farebne prelína od červenej, žltej, zelenej, tyrkysovej, modrej, až po fialovú, ktorá približný znamená čas 60 minút. Farby sa po každej ďalšej hodine opakujú čím je možné relatívne presne zobraziť ľubovolnú vzdialenosť. Obr. 22: Okno výpočtu časovej vlny. 65

67 Algoritmus výpočtu je zo všetkých doteraz spomínaných analýz najjednoduchší. Počíta v cykle s pevným počtom opakovaní vzdialenosti do všetkých obcí, od zadanej obce. Pre príklad výpočtu sa vybralo, ako východzie mesto Považská Bystrica, pretože tu sa nám deformácia času ukáže v plnom rozsahu. Z mesta vychádza diaľnica až do Bratislavy a ostatné smery sú obmedzené horskými prekážkami. Z výsledku analýzy vyšla zaujímavá skutočnosť: čas príchodu do Bratislavy je približne totožný s časom príchodu do Banskej Bystrici a o napriek tomu, že Banská Bystrica má vzdušnou vzdialenosťou iba polovicu vzdušnej vzdialenosti Bratislavy. 66

68 6 Záver V tejto práci sme si ukázali komplexné riešenie projektu zameranom na výpočty v cestnej sieti. Komplexné z toho dôvodu, že práca sa nezameriava na to, ako by sme túto problematiku mali riešiť, ale ju rieši. Sieťové analýzy ponúkajú množstvo zaujímavých výpočtov a príklady, ktoré sme tu uviedli sú len zlomkom ich skutočného potenciálu. Neustále pribúdajú nové inšpirácie. Napríklad sa veľmi zvažovala možnosť pridania ďalšej analýzy, ktorá by riešila využitie diaľničnej siete z pohľadu jednotlivých obcí. Všetky údaje, ktoré vznikli touto prácou a sú uložené v priloženom CD sú volne použiteľné pre každého. Program Sieťové Analýzy je chránený heslom, ale nemáme nič proti jeho voľnému využívaniu, iba je potrebné kontaktovať autora Jozefa Zomborského (jozefzomborsky@inmail.sk). 67

69 Literárne zdroje [1] Dvořák S., 1992: Dekompozice a rekursivní algoritmy. GRADA, Praha, ISBN , str [2] Slavoj P., 2002: Delphi (začínáme programovat), Grada, Praha, ISBN , 324 str. [3] Teixeira S., Pacheco X., 2002: Mistroství v Delphi, Computer press, Praha, ISBN , str [4] Zomborský J., 2004: Vizualizácia vektorových údajov, Bakalárska práca, Banská Bystrica, 44 str. Elektronické zdroje [5] Čičala D., 1999: Programovanie v Delphi, AM - SKALKA (*.doc), Nitra [6] Hrdina Z., 1997: Transformace souřadnic ze systému WGS-84 do systému S- JTSK, (pdf), Elektrotechnická fakulta, Praha [7] [8] [9] Zoznam príloh Príloha 1 Zobrazenie výsledku výpočtu pôsobnosti obcí. Príloha 2 Najrýchlejšia cesta rozvozu tovaru. Príloha 3 Preťaženie ciest v rámci vnútroštátnej dopravy Slovenska. Príloha 4 Znázornenie výsledku výpočtu časovej vlny pre mesto Považská Bystrica. CD obsahuje program, elektronické mapové prílohy, text diplomovej práce. Ďalšie mapy pokračovanie autorovej práce nájdete na stránke: 68

70

71 1

72 2

73 3

Matematika Funkcia viac premenných, Parciálne derivácie

Matematika Funkcia viac premenných, Parciálne derivácie Matematika 2-01 Funkcia viac premenných, Parciálne derivácie Euklidovská metrika na množine R n všetkých usporiadaných n-íc reálnych čísel je reálna funkcia ρ: R n R n R definovaná nasledovne: Ak X = x

Διαβάστε περισσότερα

Start. Vstup r. O = 2*π*r S = π*r*r. Vystup O, S. Stop. Start. Vstup P, C V = P*C*1,19. Vystup V. Stop

Start. Vstup r. O = 2*π*r S = π*r*r. Vystup O, S. Stop. Start. Vstup P, C V = P*C*1,19. Vystup V. Stop 1) Vytvorte algoritmus (vývojový diagram) na výpočet obvodu kruhu. O=2xπxr ; S=πxrxr Vstup r O = 2*π*r S = π*r*r Vystup O, S 2) Vytvorte algoritmus (vývojový diagram) na výpočet celkovej ceny výrobku s

Διαβάστε περισσότερα

7. FUNKCIE POJEM FUNKCIE

7. FUNKCIE POJEM FUNKCIE 7. FUNKCIE POJEM FUNKCIE Funkcia f reálnej premennej je : - každé zobrazenie f v množine všetkých reálnych čísel; - množina f všetkých usporiadaných dvojíc[,y] R R pre ktorú platí: ku každému R eistuje

Διαβάστε περισσότερα

Obvod a obsah štvoruholníka

Obvod a obsah štvoruholníka Obvod a štvoruholníka D. Štyri body roviny z ktorých žiadne tri nie sú kolineárne (neležia na jednej priamke) tvoria jeden štvoruholník. Tie body (A, B, C, D) sú vrcholy štvoruholníka. strany štvoruholníka

Διαβάστε περισσότερα

Goniometrické rovnice a nerovnice. Základné goniometrické rovnice

Goniometrické rovnice a nerovnice. Základné goniometrické rovnice Goniometrické rovnice a nerovnice Definícia: Rovnice (nerovnice) obsahujúce neznámu x alebo výrazy s neznámou x ako argumenty jednej alebo niekoľkých goniometrických funkcií nazývame goniometrickými rovnicami

Διαβάστε περισσότερα

Ekvačná a kvantifikačná logika

Ekvačná a kvantifikačná logika a kvantifikačná 3. prednáška (6. 10. 004) Prehľad 1 1 (dokončenie) ekvačných tabliel Formula A je ekvačne dokázateľná z množiny axióm T (T i A) práve vtedy, keď existuje uzavreté tablo pre cieľ A ekvačných

Διαβάστε περισσότερα

Matematika prednáška 4 Postupnosti a rady 4.5 Funkcionálne rady - mocninové rady - Taylorov rad, MacLaurinov rad

Matematika prednáška 4 Postupnosti a rady 4.5 Funkcionálne rady - mocninové rady - Taylorov rad, MacLaurinov rad Matematika 3-13. prednáška 4 Postupnosti a rady 4.5 Funkcionálne rady - mocninové rady - Taylorov rad, MacLaurinov rad Erika Škrabul áková F BERG, TU Košice 15. 12. 2015 Erika Škrabul áková (TUKE) Taylorov

Διαβάστε περισσότερα

1. Limita, spojitost a diferenciálny počet funkcie jednej premennej

1. Limita, spojitost a diferenciálny počet funkcie jednej premennej . Limita, spojitost a diferenciálny počet funkcie jednej premennej Definícia.: Hromadný bod a R množiny A R: v každom jeho okolí leží aspoň jeden bod z množiny A, ktorý je rôzny od bodu a Zadanie množiny

Διαβάστε περισσότερα

Prechod z 2D do 3D. Martin Florek 3. marca 2009

Prechod z 2D do 3D. Martin Florek 3. marca 2009 Počítačová grafika 2 Prechod z 2D do 3D Martin Florek florek@sccg.sk FMFI UK 3. marca 2009 Prechod z 2D do 3D Čo to znamená? Ako zobraziť? Súradnicové systémy Čo to znamená? Ako zobraziť? tretia súradnica

Διαβάστε περισσότερα

ARMA modely čast 2: moving average modely (MA)

ARMA modely čast 2: moving average modely (MA) ARMA modely čast 2: moving average modely (MA) Beáta Stehlíková Časové rady, FMFI UK, 2014/2015 ARMA modely časť 2: moving average modely(ma) p.1/24 V. Moving average proces prvého rádu - MA(1) ARMA modely

Διαβάστε περισσότερα

Matematika 2. časť: Analytická geometria

Matematika 2. časť: Analytická geometria Matematika 2 časť: Analytická geometria RNDr. Jana Pócsová, PhD. Ústav riadenia a informatizácie výrobných procesov Fakulta BERG Technická univerzita v Košiciach e-mail: jana.pocsova@tuke.sk Súradnicové

Διαβάστε περισσότερα

1. písomná práca z matematiky Skupina A

1. písomná práca z matematiky Skupina A 1. písomná práca z matematiky Skupina A 1. Vypočítajte : a) 84º 56 + 32º 38 = b) 140º 53º 24 = c) 55º 12 : 2 = 2. Vypočítajte zvyšné uhly na obrázku : β γ α = 35 12 δ a b 3. Znázornite na číselnej osi

Διαβάστε περισσότερα

Motivácia pojmu derivácia

Motivácia pojmu derivácia Derivácia funkcie Motivácia pojmu derivácia Zaujíma nás priemerná intenzita zmeny nejakej veličiny (dráhy, rastu populácie, veľkosti elektrického náboja, hmotnosti), vzhľadom na inú veličinu (čas, dĺžka)

Διαβάστε περισσότερα

Cvičenie č. 4,5 Limita funkcie

Cvičenie č. 4,5 Limita funkcie Cvičenie č. 4,5 Limita funkcie Definícia ity Limita funkcie (vlastná vo vlastnom bode) Nech funkcia f je definovaná na nejakom okolí U( ) bodu. Hovoríme, že funkcia f má v bode itu rovnú A, ak ( ε > )(

Διαβάστε περισσότερα

ARMA modely čast 2: moving average modely (MA)

ARMA modely čast 2: moving average modely (MA) ARMA modely čast 2: moving average modely (MA) Beáta Stehlíková Časové rady, FMFI UK, 2011/2012 ARMA modely časť 2: moving average modely(ma) p.1/25 V. Moving average proces prvého rádu - MA(1) ARMA modely

Διαβάστε περισσότερα

Jednotkový koreň (unit root), diferencovanie časového radu, unit root testy

Jednotkový koreň (unit root), diferencovanie časového radu, unit root testy Jednotkový koreň (unit root), diferencovanie časového radu, unit root testy Beáta Stehlíková Časové rady, FMFI UK, 2012/2013 Jednotkový koreň(unit root),diferencovanie časového radu, unit root testy p.1/18

Διαβάστε περισσότερα

Kompilátory. Cvičenie 6: LLVM. Peter Kostolányi. 21. novembra 2017

Kompilátory. Cvičenie 6: LLVM. Peter Kostolányi. 21. novembra 2017 Kompilátory Cvičenie 6: LLVM Peter Kostolányi 21. novembra 2017 LLVM V podstate sada nástrojov pre tvorbu kompilátorov LLVM V podstate sada nástrojov pre tvorbu kompilátorov Pôvodne Low Level Virtual Machine

Διαβάστε περισσότερα

Úvod do lineárnej algebry. Monika Molnárová Prednášky

Úvod do lineárnej algebry. Monika Molnárová Prednášky Úvod do lineárnej algebry Monika Molnárová Prednášky 2006 Prednášky: 3 17 marca 2006 4 24 marca 2006 c RNDr Monika Molnárová, PhD Obsah 2 Sústavy lineárnych rovníc 25 21 Riešenie sústavy lineárnych rovníc

Διαβάστε περισσότερα

Moderné vzdelávanie pre vedomostnú spoločnosť Projekt je spolufinancovaný zo zdrojov EÚ M A T E M A T I K A

Moderné vzdelávanie pre vedomostnú spoločnosť Projekt je spolufinancovaný zo zdrojov EÚ M A T E M A T I K A M A T E M A T I K A PRACOVNÝ ZOŠIT II. ROČNÍK Mgr. Agnesa Balážová Obchodná akadémia, Akademika Hronca 8, Rožňava PRACOVNÝ LIST 1 Urč typ kvadratickej rovnice : 1. x 2 3x = 0... 2. 3x 2 = - 2... 3. -4x

Διαβάστε περισσότερα

6 Limita funkcie. 6.1 Myšlienka limity, interval bez bodu

6 Limita funkcie. 6.1 Myšlienka limity, interval bez bodu 6 Limita funkcie 6 Myšlienka ity, interval bez bodu Intuitívna myšlienka ity je prirodzená, ale definovať presne pojem ity je značne obtiažne Nech f je funkcia a nech a je reálne číslo Čo znamená zápis

Διαβάστε περισσότερα

24. Základné spôsoby zobrazovania priestoru do roviny

24. Základné spôsoby zobrazovania priestoru do roviny 24. Základné spôsoby zobrazovania priestoru do roviny Voľné rovnobežné premietanie Presné metódy zobrazenia trojrozmerného priestoru do dvojrozmernej roviny skúma samostatná matematická disciplína, ktorá

Διαβάστε περισσότερα

Algoritmy teórie grafov

Algoritmy teórie grafov Algoritmy teórie grafov Hľadanie minimálnej kostry grafu Kostra grafu taký strom grafu G = [U, H], pre ktorého podrgaf G = [U, H ] platí U = U a H H (faktor grafu). Kostra grafu každý súvislý graf má kostru.

Διαβάστε περισσότερα

Metodicko pedagogické centrum. Národný projekt VZDELÁVANÍM PEDAGOGICKÝCH ZAMESTNANCOV K INKLÚZII MARGINALIZOVANÝCH RÓMSKYCH KOMUNÍT

Metodicko pedagogické centrum. Národný projekt VZDELÁVANÍM PEDAGOGICKÝCH ZAMESTNANCOV K INKLÚZII MARGINALIZOVANÝCH RÓMSKYCH KOMUNÍT Moderné vzdelávanie pre vedomostnú spoločnosť / Projekt je spolufinancovaný zo zdrojov EÚ Kód ITMS: 26130130051 číslo zmluvy: OPV/24/2011 Metodicko pedagogické centrum Národný projekt VZDELÁVANÍM PEDAGOGICKÝCH

Διαβάστε περισσότερα

MIDTERM (A) riešenia a bodovanie

MIDTERM (A) riešenia a bodovanie MIDTERM (A) riešenia a bodovanie 1. (7b) Nech vzhl adom na štandardnú karteziánsku sústavu súradníc S 1 := O, e 1, e 2 majú bod P a vektory u, v súradnice P = [0, 1], u = e 1, v = 2 e 2. Aký predpis bude

Διαβάστε περισσότερα

,Zohrievanie vody indukčným varičom bez pokrievky,

,Zohrievanie vody indukčným varičom bez pokrievky, Farba skupiny: zelená Označenie úlohy:,zohrievanie vody indukčným varičom bez pokrievky, Úloha: Zistiť, ako závisí účinnosť zohrievania vody na indukčnom variči od priemeru použitého hrnca. Hypotéza: Účinnosť

Διαβάστε περισσότερα

AerobTec Altis Micro

AerobTec Altis Micro AerobTec Altis Micro Záznamový / súťažný výškomer s telemetriou Výrobca: AerobTec, s.r.o. Pionierska 15 831 02 Bratislava www.aerobtec.com info@aerobtec.com Obsah 1.Vlastnosti... 3 2.Úvod... 3 3.Princíp

Διαβάστε περισσότερα

Planárne a rovinné grafy

Planárne a rovinné grafy Planárne a rovinné grafy Definícia Graf G sa nazýva planárny, ak existuje jeho nakreslenie D, v ktorom sa žiadne dve hrany nepretínajú. D sa potom nazýva rovinný graf. Planárne a rovinné grafy Definícia

Διαβάστε περισσότερα

Návrh vzduchotesnosti pre detaily napojení

Návrh vzduchotesnosti pre detaily napojení Výpočet lineárneho stratového súčiniteľa tepelného mosta vzťahujúceho sa k vonkajším rozmerom: Ψ e podľa STN EN ISO 10211 Návrh vzduchotesnosti pre detaily napojení Objednávateľ: Ing. Natália Voltmannová

Διαβάστε περισσότερα

Priamkové plochy. Ak každým bodom plochy Φ prechádza aspoň jedna priamka, ktorá (celá) na nej leží potom plocha Φ je priamková. Santiago Calatrava

Priamkové plochy. Ak každým bodom plochy Φ prechádza aspoň jedna priamka, ktorá (celá) na nej leží potom plocha Φ je priamková. Santiago Calatrava Priamkové plochy Priamkové plochy Ak každým bodom plochy Φ prechádza aspoň jedna priamka, ktorá (celá) na nej leží potom plocha Φ je priamková. Santiago Calatrava Priamkové plochy rozdeľujeme na: Rozvinuteľné

Διαβάστε περισσότερα

Gramatická indukcia a jej využitie

Gramatická indukcia a jej využitie a jej využitie KAI FMFI UK 29. Marec 2010 a jej využitie Prehľad Teória formálnych jazykov 1 Teória formálnych jazykov 2 3 a jej využitie Na počiatku bolo slovo. A slovo... a jej využitie Definícia (Slovo)

Διαβάστε περισσότερα

7 Derivácia funkcie. 7.1 Motivácia k derivácii

7 Derivácia funkcie. 7.1 Motivácia k derivácii Híc, P Pokorný, M: Matematika pre informatikov a prírodné vedy 7 Derivácia funkcie 7 Motivácia k derivácii S využitím derivácií sa stretávame veľmi často v matematike, geometrii, fyzike, či v rôznych technických

Διαβάστε περισσότερα

M6: Model Hydraulický systém dvoch zásobníkov kvapaliny s interakciou

M6: Model Hydraulický systém dvoch zásobníkov kvapaliny s interakciou M6: Model Hydraulický ytém dvoch záobníkov kvapaliny interakciou Úlohy:. Zotavte matematický popi modelu Hydraulický ytém. Vytvorte imulačný model v jazyku: a. Matlab b. imulink 3. Linearizujte nelineárny

Διαβάστε περισσότερα

Metódy vol nej optimalizácie

Metódy vol nej optimalizácie Metódy vol nej optimalizácie Metódy vol nej optimalizácie p. 1/28 Motivácia k metódam vol nej optimalizácie APLIKÁCIE p. 2/28 II 1. PRÍKLAD: Lineárna regresia - metóda najmenších štvorcov Na základe dostupných

Διαβάστε περισσότερα

Komplexné čísla, Diskrétna Fourierova transformácia 1

Komplexné čísla, Diskrétna Fourierova transformácia 1 Komplexné čísla, Diskrétna Fourierova transformácia Komplexné čísla C - množina všetkých komplexných čísel komplexné číslo: z = a + bi, kde a, b R, i - imaginárna jednotka i =, t.j. i =. komplexne združené

Διαβάστε περισσότερα

Motivácia Denícia determinantu Výpo et determinantov Determinant sú inu matíc Vyuºitie determinantov. Determinanty. 14. decembra 2010.

Motivácia Denícia determinantu Výpo et determinantov Determinant sú inu matíc Vyuºitie determinantov. Determinanty. 14. decembra 2010. 14. decembra 2010 Rie²enie sústav Plocha rovnobeºníka Objem rovnobeºnostena Rie²enie sústav Príklad a 11 x 1 + a 12 x 2 = c 1 a 21 x 1 + a 22 x 2 = c 2 Dostaneme: x 1 = c 1a 22 c 2 a 12 a 11 a 22 a 12

Διαβάστε περισσότερα

Chí kvadrát test dobrej zhody. Metódy riešenia úloh z pravdepodobnosti a štatistiky

Chí kvadrát test dobrej zhody. Metódy riešenia úloh z pravdepodobnosti a štatistiky Chí kvadrát test dobrej zhody Metódy riešenia úloh z pravdepodobnosti a štatistiky www.iam.fmph.uniba.sk/institute/stehlikova Test dobrej zhody I. Chceme overiť, či naše dáta pochádzajú z konkrétneho pravdep.

Διαβάστε περισσότερα

1 Prevod miestneho stredného slnečného času LMT 1 na iný miestny stredný slnečný čas LMT 2

1 Prevod miestneho stredného slnečného času LMT 1 na iný miestny stredný slnečný čas LMT 2 1 Prevod miestneho stredného slnečného času LMT 1 na iný miestny stredný slnečný čas LMT 2 Rozdiel LMT medzi dvoma miestami sa rovná rozdielu ich zemepisných dĺžok. Pre prevod miestnych časov platí, že

Διαβάστε περισσότερα

x x x2 n

x x x2 n Reálne symetrické matice Skalárny súčin v R n. Pripomeniem, že pre vektory u = u, u, u, v = v, v, v R platí. dĺžka vektora u je u = u + u + u,. ak sú oba vektory nenulové a zvierajú neorientovaný uhol

Διαβάστε περισσότερα

Tomáš Madaras Prvočísla

Tomáš Madaras Prvočísla Prvočísla Tomáš Madaras 2011 Definícia Nech a Z. Čísla 1, 1, a, a sa nazývajú triviálne delitele čísla a. Cele číslo a / {0, 1, 1} sa nazýva prvočíslo, ak má iba triviálne delitele; ak má aj iné delitele,

Διαβάστε περισσότερα

Metódy vol nej optimalizácie

Metódy vol nej optimalizácie Metódy vol nej optimalizácie Metódy vol nej optimalizácie p. 1/52 Metódy minimalizácie funkcie jednej premennej Metódy minimalizácie funkcie jednej premennej p. 2/52 Metódy minimalizácie funkcie jednej

Διαβάστε περισσότερα

3. Striedavé prúdy. Sínusoida

3. Striedavé prúdy. Sínusoida . Striedavé prúdy VZNIK: Striedavý elektrický prúd prechádza obvodom, ktorý je pripojený na zdroj striedavého napätia. Striedavé napätie vyrába synchrónny generátor, kde na koncoch rotorového vinutia sa

Διαβάστε περισσότερα

Model redistribúcie krvi

Model redistribúcie krvi .xlsx/pracovný postup Cieľ: Vyhodnoťte redistribúciu krvi na začiatku cirkulačného šoku pomocou modelu založeného na analógii s elektrickým obvodom. Úlohy: 1. Simulujte redistribúciu krvi v ľudskom tele

Διαβάστε περισσότερα

Kontrolné otázky na kvíz z jednotiek fyzikálnych veličín. Upozornenie: Umiestnenie správnej a nesprávnych odpovedí sa môže v teste meniť.

Kontrolné otázky na kvíz z jednotiek fyzikálnych veličín. Upozornenie: Umiestnenie správnej a nesprávnych odpovedí sa môže v teste meniť. Kontrolné otázky na kvíz z jednotiek fyzikálnych veličín Upozornenie: Umiestnenie správnej a nesprávnych odpovedí sa môže v teste meniť. Ktoré fyzikálne jednotky zodpovedajú sústave SI: a) Dĺžka, čas,

Διαβάστε περισσότερα

Funkcie - základné pojmy

Funkcie - základné pojmy Funkcie - základné pojmy DEFINÍCIA FUNKCIE Nech A, B sú dve neprázdne číselné množiny. Ak každému prvku x A je priradený najviac jeden prvok y B, tak hovoríme, že je daná funkcia z množiny A do množiny

Διαβάστε περισσότερα

Matematika 2. časť: Funkcia viac premenných Letný semester 2013/2014

Matematika 2. časť: Funkcia viac premenných Letný semester 2013/2014 Matematika 2 časť: Funkcia viac premenných Letný semester 2013/2014 RNDr. Jana Pócsová, PhD. Ústav riadenia a informatizácie výrobných procesov Fakulta BERG Technická univerzita v Košiciach e-mail: jana.pocsova@tuke.sk

Διαβάστε περισσότερα

Goniometrické substitúcie

Goniometrické substitúcie Goniometrické substitúcie Marta Kossaczká S goniometrickými funkciami ste sa už určite stretli, pravdepodobne predovšetkým v geometrii. Ich použitie tam ale zďaleka nekončí. Nazačiatoksizhrňme,čoonichvieme.Funkciesínusakosínussadajúdefinovať

Διαβάστε περισσότερα

Michal Forišek: Early beta verzia skrípt z ADŠ

Michal Forišek: Early beta verzia skrípt z ADŠ Časová zložitosť Michal Forišek: Early beta verzia skrípt z ADŠ Laický pohľad skutočne môže naznačovať, že efektívne algoritmy vôbec nepotrebujeme. Veď predsa každý rok sa výrobcovia počítačov predbiehajú

Διαβάστε περισσότερα

PRIEMER DROTU d = 0,4-6,3 mm

PRIEMER DROTU d = 0,4-6,3 mm PRUŽINY PRUŽINY SKRUTNÉ PRUŽINY VIAC AKO 200 RUHOV SKRUTNÝCH PRUŽÍN PRIEMER ROTU d = 0,4-6,3 mm èíslo 3.0 22.8.2008 8:28:57 22.8.2008 8:28:58 PRUŽINY SKRUTNÉ PRUŽINY TECHNICKÉ PARAMETRE h d L S Legenda

Διαβάστε περισσότερα

Vektorový priestor V : Množina prvkov (vektory), na ktorej je definované ich sčítanie a ich

Vektorový priestor V : Množina prvkov (vektory), na ktorej je definované ich sčítanie a ich Tuesday 15 th January, 2013, 19:53 Základy tenzorového počtu M.Gintner Vektorový priestor V : Množina prvkov (vektory), na ktorej je definované ich sčítanie a ich násobenie reálnym číslom tak, že platí:

Διαβάστε περισσότερα

Modely sieťovej analýzy

Modely sieťovej analýzy Modely sieťovej analýzy Sieťová analýza Sieťová analýza súbor modelov a metód založených na grafickom vyjadrení realizujúcich časovú, resp. nákladovú analýzu. Používa sa predovšetkým na prípravu a realizáciu

Διαβάστε περισσότερα

Obsah. 1.1 Reálne čísla a ich základné vlastnosti... 7 1.1.1 Komplexné čísla... 8

Obsah. 1.1 Reálne čísla a ich základné vlastnosti... 7 1.1.1 Komplexné čísla... 8 Obsah 1 Číselné obory 7 1.1 Reálne čísla a ich základné vlastnosti............................ 7 1.1.1 Komplexné čísla................................... 8 1.2 Číselné množiny.......................................

Διαβάστε περισσότερα

C. Kontaktný fasádny zatepľovací systém

C. Kontaktný fasádny zatepľovací systém C. Kontaktný fasádny zatepľovací systém C.1. Tepelná izolácia penový polystyrén C.2. Tepelná izolácia minerálne dosky alebo lamely C.3. Tepelná izolácia extrudovaný polystyrén C.4. Tepelná izolácia penový

Διαβάστε περισσότερα

Goniometrické funkcie

Goniometrické funkcie Goniometrické funkcie Oblúková miera Goniometrické funkcie sú funkcie, ktoré sa používajú pri meraní uhlov (Goniometria Meranie Uhla). Pri týchto funkciách sa uvažuje o veľkostiach uhlov udaných v oblúkovej

Διαβάστε περισσότερα

HASLIM112V, HASLIM123V, HASLIM136V HASLIM112Z, HASLIM123Z, HASLIM136Z HASLIM112S, HASLIM123S, HASLIM136S

HASLIM112V, HASLIM123V, HASLIM136V HASLIM112Z, HASLIM123Z, HASLIM136Z HASLIM112S, HASLIM123S, HASLIM136S PROUKTOVÝ LIST HKL SLIM č. sklad. karty / obj. číslo: HSLIM112V, HSLIM123V, HSLIM136V HSLIM112Z, HSLIM123Z, HSLIM136Z HSLIM112S, HSLIM123S, HSLIM136S fakturačný názov výrobku: HKL SLIMv 1,2kW HKL SLIMv

Διαβάστε περισσότερα

RIEŠENIE WHEATSONOVHO MOSTÍKA

RIEŠENIE WHEATSONOVHO MOSTÍKA SNÁ PMYSLNÁ ŠKOL LKONKÁ V PŠŤNO KOMPLXNÁ PÁ Č. / ŠN WSONOVO MOSÍK Piešťany, október 00 utor : Marek eteš. Komplexná práca č. / Strana č. / Obsah:. eoretický rozbor Wheatsonovho mostíka. eoretický rozbor

Διαβάστε περισσότερα

Deliteľnosť a znaky deliteľnosti

Deliteľnosť a znaky deliteľnosti Deliteľnosť a znaky deliteľnosti Medzi základné pojmy v aritmetike celých čísel patrí aj pojem deliteľnosť. Najprv si povieme, čo znamená, že celé číslo a delí celé číslo b a ako to zapisujeme. Nech a

Διαβάστε περισσότερα

Príklady na precvičovanie Fourierove rady

Príklady na precvičovanie Fourierove rady Príklady na precvičovanie Fourierove rady Ďalším významným typom funkcionálnych radov sú trigonometrické rady, pri ktorých sú jednotlivé členy trigonometrickými funkciami. Konkrétne, jedná sa o rady tvaru

Διαβάστε περισσότερα

16. Základne rovinné útvary kružnica a kruh

16. Základne rovinné útvary kružnica a kruh 16. Základne rovinné útvary kružnica a kruh Kružnica k so stredom S a polomerom r nazývame množinou všetkých bodov X v rovine, ktoré majú od pevného bodu S konštantnú vzdialenosť /SX/ = r, kde r (patri)

Διαβάστε περισσότερα

Jednotkový koreň (unit root), diferencovanie časového radu, unit root testy

Jednotkový koreň (unit root), diferencovanie časového radu, unit root testy Jednotkový koreň (unit root), diferencovanie časového radu, unit root testy Beáta Stehlíková Časové rady, FMFI UK, 2013/2014 Jednotkový koreň(unit root),diferencovanie časového radu, unit root testy p.1/27

Διαβάστε περισσότερα

KATEDRA DOPRAVNEJ A MANIPULAČNEJ TECHNIKY Strojnícka fakulta, Žilinská Univerzita

KATEDRA DOPRAVNEJ A MANIPULAČNEJ TECHNIKY Strojnícka fakulta, Žilinská Univerzita 132 1 Absolútna chyba: ) = - skut absolútna ochýlka: ) ' = - spr. relatívna chyba: alebo Chyby (ochýlky): M systematické, M náhoné, M hrubé. Korekcia: k = spr - = - Î' pomerná korekcia: Správna honota:

Διαβάστε περισσότερα

Rozsah hodnotenia a spôsob výpočtu energetickej účinnosti rozvodu tepla

Rozsah hodnotenia a spôsob výpočtu energetickej účinnosti rozvodu tepla Rozsah hodnotenia a spôsob výpočtu energetickej účinnosti príloha č. 7 k vyhláške č. 428/2010 Názov prevádzkovateľa verejného : Spravbytkomfort a.s. Prešov Adresa: IČO: Volgogradská 88, 080 01 Prešov 31718523

Διαβάστε περισσότερα

6 APLIKÁCIE FUNKCIE DVOCH PREMENNÝCH

6 APLIKÁCIE FUNKCIE DVOCH PREMENNÝCH 6 APLIKÁCIE FUNKCIE DVOCH PREMENNÝCH 6. Otázky Definujte pojem produkčná funkcia. Definujte pojem marginálny produkt. 6. Produkčná funkcia a marginálny produkt Definícia 6. Ak v ekonomickom procese počet

Διαβάστε περισσότερα

Definícia parciálna derivácia funkcie podľa premennej x. Definícia parciálna derivácia funkcie podľa premennej y. Ak existuje limita.

Definícia parciálna derivácia funkcie podľa premennej x. Definícia parciálna derivácia funkcie podľa premennej y. Ak existuje limita. Teória prednáška č. 9 Deinícia parciálna deriácia nkcie podľa premennej Nech nkcia Ak eistje limita je deinoaná okolí bod [ ] lim. tak túto limit nazýame parciálno deriácio nkcie podľa premennej bode [

Διαβάστε περισσότερα

Numerické metódy matematiky I

Numerické metódy matematiky I Prednáška č. 7 Numerické metódy matematiky I Riešenie sústav lineárnych rovníc ( pokračovanie ) Prednáška č. 7 OBSAH 1. Metóda singulárneho rozkladu (SVD) Úvod SVD štvorcovej matice SVD pre menej rovníc

Διαβάστε περισσότερα

2 Chyby a neistoty merania, zápis výsledku merania

2 Chyby a neistoty merania, zápis výsledku merania 2 Chyby a neistoty merania, zápis výsledku merania Akej chyby sa môžeme dopustiť pri meraní na stopkách? Ako určíme ich presnosť? Základné pojmy: chyba merania, hrubé chyby, systematické chyby, náhodné

Διαβάστε περισσότερα

Podnikateľ 90 Mobilný telefón Cena 95 % 50 % 25 %

Podnikateľ 90 Mobilný telefón Cena 95 % 50 % 25 % Podnikateľ 90 Samsung S5230 Samsung C3530 Nokia C5 Samsung Shark Slider S3550 Samsung Xcover 271 T-Mobile Pulse Mini Sony Ericsson ZYLO Sony Ericsson Cedar LG GM360 Viewty Snap Nokia C3 Sony Ericsson ZYLO

Διαβάστε περισσότερα

Povrch a objem ihlana

Povrch a objem ihlana Povrch a objem ihlana D. Daný je mnohouholník (riadiaci alebo určujúci útvar) a jeden bod (vrchol), ktorý neleží v rovine mnohouholníka. Ak hraničnými bodmi mnohouholníka (stranami) vedieme polpriamky

Διαβάστε περισσότερα

Integrovanie racionálnych funkcií

Integrovanie racionálnych funkcií Integrovanie racionálnych funkcií Tomáš Madaras 2009-20 Z teórie funkcií už vieme, že každá racionálna funkcia (t.j. podiel dvoch polynomických funkcií) sa dá zapísať ako súčet polynomickej funkcie a funkcie

Διαβάστε περισσότερα

REZISTORY. Rezistory (súčiastky) sú pasívne prvky. Používajú sa vo všetkých elektrických

REZISTORY. Rezistory (súčiastky) sú pasívne prvky. Používajú sa vo všetkých elektrických REZISTORY Rezistory (súčiastky) sú pasívne prvky. Používajú sa vo všetkých elektrických obvodoch. Základnou vlastnosťou rezistora je jeho odpor. Odpor je fyzikálna vlastnosť, ktorá je daná štruktúrou materiálu

Διαβάστε περισσότερα

Odporníky. 1. Príklad1. TESLA TR

Odporníky. 1. Príklad1. TESLA TR Odporníky Úloha cvičenia: 1.Zistite technické údaje odporníkov pomocou katalógov 2.Zistite menovitú hodnotu odporníkov označených farebným kódom Schématická značka: 1. Príklad1. TESLA TR 163 200 ±1% L

Διαβάστε περισσότερα

Obyčajné diferenciálne rovnice

Obyčajné diferenciálne rovnice (ÚMV/MAN3b/10) RNDr. Ivan Mojsej, PhD ivan.mojsej@upjs.sk 14.3.2013 Úvod patria k najdôležitejším a najviac prepracovaným matematickým disciplínam. Nielen v minulosti, ale aj v súčastnosti predstavujú

Διαβάστε περισσότερα

UČEBNÉ TEXTY. Pracovný zošit č.2. Moderné vzdelávanie pre vedomostnú spoločnosť Elektrotechnické merania. Ing. Alžbeta Kršňáková

UČEBNÉ TEXTY. Pracovný zošit č.2. Moderné vzdelávanie pre vedomostnú spoločnosť Elektrotechnické merania. Ing. Alžbeta Kršňáková Stredná priemyselná škola dopravná, Sokolská 911/94, 960 01 Zvolen Kód ITMS projektu: 26110130667 Názov projektu: Zvyšovanie flexibility absolventov v oblasti dopravy UČEBNÉ TEXTY Pracovný zošit č.2 Vzdelávacia

Διαβάστε περισσότερα

FUNKCIE N REÁLNYCH PREMENNÝCH

FUNKCIE N REÁLNYCH PREMENNÝCH FAKULTA MATEMATIKY, FYZIKY A INFORMATIKY UNIVERZITY KOMENSKÉHO V BRATISLAVE FUNKCIE N REÁLNYCH PREMENNÝCH RNDr. Kristína Rostás, PhD. PREDMET: Matematická analýza ) 2010/2011 1. DEFINÍCIA REÁLNEJ FUNKCIE

Διαβάστε περισσότερα

Reprezentácia informácií v počítači

Reprezentácia informácií v počítači Úvod do programovania a sietí Reprezentácia informácií v počítači Ing. Branislav Sobota, PhD. 2007 Informácia slovo s mnohými významami, ktoré závisia na kontexte predpis blízky pojmom význam poznatok

Διαβάστε περισσότερα

MOSTÍKOVÁ METÓDA 1.ÚLOHA: 2.OPIS MERANÉHO PREDMETU: 3.TEORETICKÝ ROZBOR: 4.SCHÉMA ZAPOJENIA:

MOSTÍKOVÁ METÓDA 1.ÚLOHA: 2.OPIS MERANÉHO PREDMETU: 3.TEORETICKÝ ROZBOR: 4.SCHÉMA ZAPOJENIA: 1.ÚLOHA: MOSTÍKOVÁ METÓDA a, Odmerajte odpory predložených rezistorou pomocou Wheastonovho mostíka. b, Odmerajte odpory predložených rezistorou pomocou Mostíka ICOMET. c, Odmerajte odpory predložených

Διαβάστε περισσότερα

1. Trojuholník - definícia

1. Trojuholník - definícia 1. Trojuholník - definícia Trojuholník ABC sa nazýva množina takých bodov, ktoré ležia súčasne v polrovinách ABC, BCA a CAB, kde body A, B, C sú body neležiace na jednej priamke.. Označenie základných

Διαβάστε περισσότερα

Základné poznatky molekulovej fyziky a termodynamiky

Základné poznatky molekulovej fyziky a termodynamiky Základné poznatky molekulovej fyziky a termodynamiky Opakovanie učiva II. ročníka, Téma 1. A. Príprava na maturity z fyziky, 2008 Outline Molekulová fyzika 1 Molekulová fyzika Predmet Molekulovej fyziky

Διαβάστε περισσότερα

Margita Vajsáblová. ρ priemetňa, s smer premietania. Súradnicová sústava (O, x, y, z ) (O a, x a, y a, z a )

Margita Vajsáblová. ρ priemetňa, s smer premietania. Súradnicová sústava (O, x, y, z ) (O a, x a, y a, z a ) Mrgit Váblová Váblová, M: Dekriptívn geometri pre GK 101 Zákldné pom v onometrii Váblová, M: Dekriptívn geometri pre GK 102 Definíci 1: onometri e rovnobežné premietnie bodov Ε 3 polu prvouhlým úrdnicovým

Διαβάστε περισσότερα

11. prednáška ( ) Najkratšie cesty (v grafe)

11. prednáška ( ) Najkratšie cesty (v grafe) 11. prednáška (9.5.2016) Najkratšie cesty (v grafe) 1 Grafy čo už vieme... Umožňujú modelovať relácie medzi objektmi reálneho sveta Skladajú sa z vrcholov a hrán G=(V, E) neorientované grafy (krúžky a

Διαβάστε περισσότερα

VLASTNÉ ČÍSLA A JORDANOV KANONICKÝ TVAR. Michal Zajac. 3 T b 1 = T b 2 = = = 2b

VLASTNÉ ČÍSLA A JORDANOV KANONICKÝ TVAR. Michal Zajac. 3 T b 1 = T b 2 = = = 2b VLASTNÉ ČÍSLA A JORDANOV KANONICKÝ TVAR Michal Zajac Vlastné čísla a vlastné vektory Pripomeňme najprv, že lineárny operátor T : L L je vzhl adom na bázu B = {b 1, b 2,, b n } lineárneho priestoru L určený

Διαβάστε περισσότερα

Základy metodológie vedy I. 9. prednáška

Základy metodológie vedy I. 9. prednáška Základy metodológie vedy I. 9. prednáška Triedenie dát: Triedny znak - x i Absolútna početnosť n i (súčet všetkých absolútnych početností sa rovná rozsahu súboru n) ni fi = Relatívna početnosť fi n (relatívna

Διαβάστε περισσότερα

Reálna funkcia reálnej premennej

Reálna funkcia reálnej premennej (ÚMV/MAN3a/10) RNDr. Ivan Mojsej, PhD ivan.mojsej@upjs.sk 18.10.2012 Úvod V každodennom živote, hlavne pri skúmaní prírodných javov, procesov sa stretávame so závislosťou veľkosti niektorých veličín od

Διαβάστε περισσότερα

13. kapitola Siete a metóda kritickej cesty

13. kapitola Siete a metóda kritickej cesty . kapitola Teória grafov IV algoritmy: Siete a metóda kritickej cesty, maximálny tok v sieti a minimálny rez, nájdenie najmenšej kostry, prehľadávanie do hĺbky, prehľadávanie do šírky. Siete a metóda kritickej

Διαβάστε περισσότερα

Úvod do modelovania a simulácie, metóda Monte Carlo

Úvod do modelovania a simulácie, metóda Monte Carlo Úvod do modelovania a simulácie, metóda Monte Carlo Prednáška 4 využitie MS Excel 13.10.2015 Ing. Marek Kvet, PhD. Modelovanie a simulácia Venuje sa štúdiu skúmaných objektov hmotného sveta - existujúcich

Διαβάστε περισσότερα

Zložené funkcie a substitúcia

Zložené funkcie a substitúcia 3. kapitola Zložené funkcie a substitúcia Doteraz sme sa pri funkciách stretli len so závislosťami medzi dvoma premennými. Napríklad vzťah y=x 2 nám hovoril, ako závisí premenná y od premennej x. V praxi

Διαβάστε περισσότερα

Riešenie rovníc s aplikáciou na elektrické obvody

Riešenie rovníc s aplikáciou na elektrické obvody Zadanie č.1 Riešenie rovníc s aplikáciou na elektrické obvody Nasledujúce uvedené poznatky z oblasti riešenia elektrických obvodov pomocou metódy slučkových prúdov a uzlových napätí je potrebné využiť

Διαβάστε περισσότερα

Pravdivostná hodnota negácie výroku A je opačná ako pravdivostná hodnota výroku A.

Pravdivostná hodnota negácie výroku A je opačná ako pravdivostná hodnota výroku A. 7. Negácie výrokov Negácie jednoduchých výrokov tvoríme tak, že vytvoríme tvrdenie, ktoré popiera pôvodný výrok. Najčastejšie negujeme prísudok alebo použijeme vetu Nie je pravda, že.... Výrok A: Prší.

Διαβάστε περισσότερα

Spojité rozdelenia pravdepodobnosti. Pomôcka k predmetu PaŠ. RNDr. Aleš Kozubík, PhD. 26. marca Domovská stránka. Titulná strana.

Spojité rozdelenia pravdepodobnosti. Pomôcka k predmetu PaŠ. RNDr. Aleš Kozubík, PhD. 26. marca Domovská stránka. Titulná strana. Spojité rozdelenia pravdepodobnosti Pomôcka k predmetu PaŠ Strana z 7 RNDr. Aleš Kozubík, PhD. 6. marca 3 Zoznam obrázkov Rovnomerné rozdelenie Ro (a, b). Definícia.........................................

Διαβάστε περισσότερα

Lineárna algebra I - pole skalárov, lineárny priestor, lineárna závislosť, dimenzia, podpriestor, suma podpriestorov, izomorfizmus

Lineárna algebra I - pole skalárov, lineárny priestor, lineárna závislosť, dimenzia, podpriestor, suma podpriestorov, izomorfizmus 1. prednáška Lineárna algebra I - pole skalárov, lineárny priestor, lineárna závislosť, dimenzia, podpriestor, suma podpriestorov, izomorfizmus Matematickým základom kvantovej mechaniky je teória Hilbertových

Διαβάστε περισσότερα

4. Výrokové funkcie (formy), ich definičný obor a obor pravdivosti

4. Výrokové funkcie (formy), ich definičný obor a obor pravdivosti 4. Výrokové funkcie (formy), ich definičný obor a obor pravdivosti Výroková funkcia (forma) ϕ ( x) je formálny výraz (formula), ktorý obsahuje znak x, pričom x berieme z nejakej množiny M. Ak za x zvolíme

Διαβάστε περισσότερα

Test. Matematika. Forma A. Štátny pedagogický ústav, Bratislava NUPSESO. a.s.

Test. Matematika. Forma A. Štátny pedagogický ústav, Bratislava NUPSESO. a.s. Test Matematika Forma A Štátny pedagogický ústav, Bratislava Ò NUPSESO a.s. 1. Koľkokrát je väčší najmenší spoločný násobok čísel 84 a 16 ako ich najväčší spoločný deliteľ. A. B. 3 C. 6 D.1. Koľko záporných

Διαβάστε περισσότερα

ZADANIE 1_ ÚLOHA 3_Všeobecná rovinná silová sústava ZADANIE 1 _ ÚLOHA 3

ZADANIE 1_ ÚLOHA 3_Všeobecná rovinná silová sústava ZADANIE 1 _ ÚLOHA 3 ZDNIE _ ÚLOH 3_Všeobecná rovinná silová sústv ZDNIE _ ÚLOH 3 ÚLOH 3.: Vypočítjte veľkosti rekcií vo väzbách nosník zťženého podľ obrázku 3.. Veľkosti známych síl, momentov dĺžkové rozmery sú uvedené v

Διαβάστε περισσότερα

Život vedca krajší od vysnívaného... s prírodou na hladine α R-P-R

Život vedca krajší od vysnívaného... s prírodou na hladine α R-P-R Život vedca krajší od vysnívaného... s prírodou na hladine α R-P-R Ako nadprirodzené stretnutie s murárikom červenokrídlym naformátovalo môj profesijný i súkromný život... Osudové stretnutie s murárikom

Διαβάστε περισσότερα

LR(0) syntaktické analyzátory. doc. RNDr. Ľubomír Dedera

LR(0) syntaktické analyzátory. doc. RNDr. Ľubomír Dedera LR0) syntaktické analyzátory doc. RNDr. Ľubomír Dedera Učebné otázky LR0) automat a jeho konštrukcia Konštrukcia tabuliek ACION a GOO LR0) syntaktického analyzátora LR0) syntaktický analyzátor Sám osebe

Διαβάστε περισσότερα

Metódy numerickej matematiky I

Metódy numerickej matematiky I Úvodná prednáška Metódy numerickej matematiky I Prednášky: Doc. Mgr. Jozef Kristek, PhD. F1-207 Úvodná prednáška OBSAH 1. Úvod, sylabus, priebeh, hodnotenie 2. Zdroje a typy chýb 3. Definície chýb 4. Zaokrúhľovanie,

Διαβάστε περισσότερα

Aproximačné algoritmy. (7. októbra 2010) DRAFT

Aproximačné algoritmy. (7. októbra 2010) DRAFT R. Královič Aproximačné algoritmy (7. októbra 2010) ii Obsah 1 Úvod 1 1.1 Algoritmy a zložitosť........................... 1 1.2 Lineárne programovanie......................... 1 1.3 Použité vzťahy..............................

Διαβάστε περισσότερα

Modelovanie dynamickej podmienenej korelácie kurzov V4

Modelovanie dynamickej podmienenej korelácie kurzov V4 Modelovanie dynamickej podmienenej korelácie menových kurzov V4 Podnikovohospodárska fakulta so sídlom v Košiciach Ekonomická univerzita v Bratislave Cieľ a motivácia Východiská Cieľ a motivácia Cieľ Kvantifikovať

Διαβάστε περισσότερα

Teória grafov I definícia grafu, základné pojmy, podgraf, cesty a kružnice v grafe, orientované grafy, eulerovský ťah, hamiltonovská kružnica

Teória grafov I definícia grafu, základné pojmy, podgraf, cesty a kružnice v grafe, orientované grafy, eulerovský ťah, hamiltonovská kružnica 0. kapitola Teória grafov I definícia grafu, základné pojmy, podgraf, cesty a kružnice v grafe, orientované grafy, eulerovský ťah, hamiltonovská kružnica 0. Úvodné poznámky Teória grafov ako matematická

Διαβάστε περισσότερα

XVIII. ročník BRKOS 2011/2012. Pomocný text. Kde by bola matematika bez čísel? Čísla predstavujú jednu z prvých abstrakcií, ktorú

XVIII. ročník BRKOS 2011/2012. Pomocný text. Kde by bola matematika bez čísel? Čísla predstavujú jednu z prvých abstrakcií, ktorú Pomocný text Číselné obory Číselné obory Kde by bola matematika bez čísel? Čísla predstavujú jednu z prvých abstrakcií, ktorú ľudia začali vnímať. Abstrakcia spočívala v tom, že množstvo, ktoré sa snažili

Διαβάστε περισσότερα

PREHĽAD ZÁKLADNÝCH VZORCOV A VZŤAHOV ZO STREDOŠKOLSKEJ MATEMATIKY. Pomôcka pre prípravný kurz

PREHĽAD ZÁKLADNÝCH VZORCOV A VZŤAHOV ZO STREDOŠKOLSKEJ MATEMATIKY. Pomôcka pre prípravný kurz KATEDRA APLIKOVANEJ MATEMATIKY A INFORMATIKY STROJNÍCKA FAKULTA TU KOŠICE PREHĽAD ZÁKLADNÝCH VZORCOV A VZŤAHOV ZO STREDOŠKOLSKEJ MATEMATIKY Pomôcka pre prípravný kurz 8 ZÁKLADNÉ ALGEBRAICKÉ VZORCE ) (a±b)

Διαβάστε περισσότερα