Vývoj Shiny aplikácie na optimalizáciu trás
V tomto blogu vám ukážem, ako som vytvoril Shiny aplikáciu na optimalizáciu trás pomocou R programovania a API služby HERE. Tento projekt je dôkazom, že Shiny dokáže viac než len dashboardy – umožňuje nám budovať plnohodnotné webové aplikácie. Spolu sa pozrieme na základné funkcie aplikácie a na to, ako rieši rôzne výzvy spojené s optimalizáciou trás.
Aplikácia pre Optimalizáciu Trás
Shiny aplikácia, ktorej sa budeme venovať, je vytvorená pomocou frameworku Rhino od spoločnosti Appsilon. Táto Shiny webaplikácia slúži na optimalizáciu trás pomocou API služby od HERE. Aplikácia je plne vytvorená v programovacom jazyku R s využitím rôznych R knižníc.

Aplikácia je určená pre používateľov, ktorí potrebujú plánovať trasy medzi viacerými miestami, pričom zohľadňuje aktuálne dopravné podmienky a preferencie používateľa. Aplikácia umožňuje jednoduchý vstup adries a ďalších parametrov, automatické geokódovanie a vizualizáciu výslednej trasy na mape.
Je navrhnutá ako Proof of Concept (PoC) v rámci vývoja aplikácií v Shiny a R programovaní, a preto má určité obmedzenia. Premávka sa zohľadňuje len pri úvodnom určení poradia, keď sa všetky trasy porovnávajú v rovnakom čase odchodu. Pri tvorbe poradia sa však nezohľadňuje zmena dopravy pri druhej, tretej a ďalších trasách. Zmena dopravnej situácie je zahrnutá až v čase výpočtu finálnej trasy.
Vstupné parametre v Shiny aplikácii
Používateľ má možnosť zadať nasledujúce parametre pre optimalizáciu trasy:
- Čas odchodu: Používateľ môže zadať čas a dátum odchodu z prvého miesta.
- Typ optimalizácie: Trasu možno optimalizovať na základe najkratšej vzdialenosti alebo najkratšieho času potrebného na prejdenie.
- Adresy miest: Hlavnou podmienkou pre výpočet trasy je zadanie adries. Používateľ vkladá adresy priamo do tabuľky.
- Názov miesta: Pre lepšiu orientáciu môže používateľ zadať aj názov miesta, ktorý bude zobrazený v mape.
- Štartovacie a koncové miesto: Používateľ môže označiť, ktoré miesto je štartovacie a ktoré koncové.
Adresy sa vkladajú do tabuľky a po ich zadaní sa nedajú editovať. Na druhej strane, riadky je možné odstrániť (pravým klikom na riadok) alebo pridať nové cez kontextové menu. Okrem toho aplikácia umožňuje hromadné vloženie adries, napríklad cez copy-paste priamo z Excelu. Shiny aplikácia spracováva tieto údaje s ohľadom na technické limity API volaní. Je dôležité, aby v jednej bunke bola vždy jedna adresa a táto adresa neobsahovala špeciálne znaky.
Veľkosť tabuľky, do ktorej používateľ zadáva adresy, je obmedzená na 4 záznamy. Toto obmedzenie bolo zavedené z dôvodu, že máme dostupných len 1000 volaní API denne pre HERE platformu. Každá požiadavka na trasu medzi bodmi spotrebúva tieto volania, a preto je nutné počet adries obmedziť, aby sme neprekročili limity dostupných volaní.
Aj napriek tomuto obmedzeniu je aktuálna veľkosť tabuľky dostatočná pre účely Proof of Concept (PoC), kde je cieľom otestovať a overiť základnú funkcionalitu aplikácie a jej schopnosť vykonávať optimalizáciu trás.
Geokódovanie adries
Všetky vložené adresy sa automaticky geokódujú (proces prevodu adries na geografické súradnice) pomocou OpenStreetMap (OSM) API. Po úspešnom geokódovaní sa jednotlivé miesta zobrazia na mape s príslušným označením. Používateľ tak môže vidieť presné pozície všetkých adries, ktoré zadal. Ak sa na mape niektorý bod neukáže, geokódovanie neprebehlo úspešne a riadok treba zmazať a pridať nový s presnejšou adresou. Štartovacie miesto a koncové miesto majú odlíšené značenie. Proces geokódovania môže trvať približne 1 sekundu na každú vloženú adresu.
Výpočet trasy
Aplikácia využíva R skript na optimalizáciu poradia miest podľa problému obchodného cestujúceho (TSP). Tým sa zabezpečí, že poradie miest je optimálne, hoci samotný výpočet trás medzi jednotlivými bodmi využíva HERE API. V tomto kroku sa využíva heuristický algoritmus, ktorý zohľadňuje celkovú trasu, čím predchádza suboptimálnym výsledkom, ktoré by mohli vzniknúť, ak by sme len postupne spájali najbližšie miesta.
To znamená, že HERE API slúži len na výpočet jednotlivých segmentov trasy medzi bodmi, ale optimalizáciu celkovej trasy robí samotná aplikácia.
Po zadaní všetkých potrebných parametrov môže používateľ spustiť výpočet optimálnej trasy stlačením tlačidla “Vypočítaj trasu”. Aplikácia následne vypočíta ideálne poradie miest na základe zvoleného parametra optimalizácie (či už podľa času alebo vzdialenosti).
Aplikácia automaticky pridáva 10 minútový prestoj ku každému miestu, aby sa zohľadnil čas potrebný na parkovanie a presun od auta na miesto stretnutia a späť. Okrem toho, výpočet trasy zohľadňuje aktuálnu dopravnú situáciu a premávku podľa času odchodu z jednotlivých miest.
Výpočet trasy trvá niekoľko sekúnd, avšak čas potrebný na spracovanie sa nedá presne odhadnúť, keďže závisí od počtu miest, ktoré je potrebné zvážiť.
Zobrazenie trasy na mape
Po vypočítaní trasy sa výsledná optimalizovaná trasa zobrazí na mape. Na mape sa zobrazí aj legenda, ktorá vysvetľuje poradie trás a zobrazuje jednotlivé úseky cesty. Používateľ môže tiež pohybom myši nad jednotlivými miestami zobraziť podrobnosti o danej lokalite (tzv. ‘on hover’ popis).
Používateľ má možnosť zobraziť podrobné informácie o vypočítanej trase stlačením tlačidla Detaily trasy. V zobrazenom okne sú k dispozícii nasledujúce informácie pre každé miesto:
- Názvy miest odchodu a príchodu.
- Čas odchodu z miesta,
- Čas príchodu na miesto,
- Dĺžka trasy v kilometroch,
- Trvanie cesty v minútach.
Tieto údaje je možné jednoducho exportovať do formátov xlsx alebo csv, čo umožňuje ich ďalšie spracovanie alebo použitie.
Problémy, alternatívne služby a knižnice
Pri vývoji tejto Shiny webaplikácie v R sme narazili na problém, že matrix routing nie je podporovaný pre nové API kľúče služby HERE, čo potvrdil aj tvorca knižnice hereR. Toto je zásah zo strany HERE. Tento problém znamená, že momentálne je potrebné vykonať až n! dotazov na získanie matice n * n pre optimalizáciu trasy, zatiaľ čo pomocou matrix routing API by stačil len jeden dotaz. Free účet služby HERE pritom umožňuje len 1 000 dotazov za jeden deň, čo vytvára vysoké nároky na počet volaní. Na druhej strane, aplikácia zostáva časovo relatívne rýchla, no je obmedzená počtom volaní API.
Existujú aj alternatívne riešenia:
- Google Maps: Poskytuje veľmi presné údaje o cestách, dopravnej situácii a trasovaní, no je nákladnejšie pri vyšších objemoch požiadaviek a má vlastné obmedzenia, čo sa týka počtu volaní.
- Mapbox : Ponúka podobné služby ako HERE, vrátane optimalizácie trás a geokódovania. Môže byť dobrou alternatívou pre menšie projekty, pričom má flexibilné plány pre vývojárov.
- OpenRouteService: Tento open-source nástroj je vhodný pre tých, ktorí potrebujú robustnú alternatívu s menšími obmedzeniami, aj keď môže byť menej presný v niektorých oblastiach ako komerčné riešenia.
Zhrnutie
Táto aplikácia je navrhnutá ako Proof of Concept (PoC), čo znamená, že jej cieľom je demonštrovať základné funkcie a možnosti optimalizácie trás v reálnom čase pomocou Shiny a R programovania. V tejto fáze vývoja ide predovšetkým o overenie technickej realizovateľnosti a schopnosti integrovať služby, ako je API od HERE a geokódovanie cez OpenStreetMap (OSM).
Aplikácia poskytuje základný súbor funkcií a môže byť ďalej rozšírená o pokročilé možnosti, ako sú rozšírené filtre pre optimalizáciu trás, lepšia správa miest alebo integrácia ďalších dátových zdrojov.
Video s ukážkou základnej funkcionality nájdete na YouTube.



Leave a Reply