VYSOKÁ ŠKOLA EKONOMICKÁ V PRAZE. Optimalizace trasy při revizích elektrospotřebičů



Podobné dokumenty
ČESKÁ ZEMĚDĚLSKÁ UNIVERZITA V PRAZE. Teze diplomové práce

2 Spojité modely rozhodování

GRAFY A GRAFOVÉ ALGORITMY

Součin matice A a čísla α definujeme jako matici αa = (d ij ) typu m n, kde d ij = αa ij pro libovolné indexy i, j.

BAKALÁŘSKÁ PRÁCE. Numerické metody jednorozměrné minimalizace

7. přednáška Systémová analýza a modelování. Přiřazovací problém

Matice se v některých publikacích uvádějí v hranatých závorkách, v jiných v kulatých závorkách. My se budeme držet zápisu s kulatými závorkami.

Inovace výuky prostřednictvím ICT v SPŠ Zlín, CZ.1.07/1.5.00/ Vzdělávání v informačních a komunikačních technologií

B a k a l ářská práce

Stručný manuál k ovládání programu STATISTICA. Mgr. Petra Beranová Ing. Miloš Uldrich

Jak pracovat s absolutními hodnotami

Střední škola informačních technologií a sociální péče, Brno, Purkyňova 97. Vybrané části Excelu. Ing. Petr Adamec

Vícekriteriální hodnocení variant metody

zejména Dijkstrův algoritmus pro hledání minimální cesty a hladový algoritmus pro hledání minimální kostry.

Příklad bezprostředně navazuje na předchozí příklad č. 17. Bez zvládnutí příkladu č. 17 není možné pokračovat

Přiřazovací problém. Přednáška č. 7

Operační výzkum. Přiřazovací problém.

12. Lineární programování

1. července 2010

4EK213 Lineární modely. 12. Dopravní problém výchozí řešení

HEURISTICKÉ ALGORITMY PRO ŘEŠENÍ ÚLOH OBCHODNÍHO CESTUJÍCÍHO

8. Posloupnosti, vektory a matice

Rámcový manuál pro práci s programem TopoL pro Windows

skladbu obou směsí ( v tunách komponenty na 1 tunu směsi):

Lineární programování

Matematika I: Aplikované úlohy

Karnaughovy mapy. Pravdivostní tabulka pro tři vstupní proměnné by mohla vypadat například takto:

Jiří Neubauer. Katedra ekonometrie FEM UO Brno

Popis změn verze

4EK213 LINEÁRNÍ MODELY

Manuál k užívání aplikace Monitoringrejstriku.cz

UNIVERSITA PALACKÉHO V OLOMOUCI PŘÍRODOVĚDECKÁ FAKULTA. KATEDRA MATEMATICKÉ ANALÝZY A APLIKACÍ MATEMATIKY školní rok 2009/2010 BAKALÁŘSKÁ PRÁCE

4EK311 Operační výzkum. 5. Teorie grafů

EKONOMICKO-MATEMATICKÉ METODY

Jak připravit žákům trenažer pro cvičení jednoduchých dovedností

LDF MENDELU. Simona Fišnarová (MENDELU) Základy lineárního programování VMAT, IMT 1 / 25

E-learningový systém Moodle

Office podrobný průvodce. Tomáš Šimek

(Auto)korelační funkce Statistické vyhodnocování exp. dat M. Čada ~ cada

Teoretická rozdělení

STROMOVE ALGORITMY Prohledavani do sirky (level-order) Po vodorovnejch carach fronta

VZDĚLÁVACÍ MATERIÁL III/2

6. T e s t o v á n í h y p o t é z

Vítězslav Bártl. září 2012

fakulty MENDELU v Brně (LDF) s ohledem na disciplíny společného základu (reg. č. CZ.1.07/2.2.00/28.

Obr. P1.1 Zadání úlohy v MS Excel

Implementace A* algoritmu na konkrétní problém orientace v prostoru budov

2. Matice, soustavy lineárních rovnic

Úvod do úloh plánování rozvozu (Vehicle Routing Problems)

V praxi pracujeme s daty nominálními (nabývají pouze dvou hodnot), kategoriálními (nabývají více

STATISTICA Téma 8. Regresní a korelační analýza, regrese prostá

KATEDRA INFORMATIKY UNIVERZITA PALACKÉHO LINEÁRNÍ ALGEBRA 1 OLGA KRUPKOVÁ VÝVOJ TOHOTO UČEBNÍHO TEXTU JE SPOLUFINANCOVÁN

Několik poznámek na téma lineární algebry pro studenty fyzikální chemie

3 Úloha lineární optimalizace

Přílohy. Příloha 1. Obr. P1.1 Zadání úlohy v MS Excel

Popis změn verze

Vzdělávání v egoncentru ORP Louny

Zásoby_Evidenční výroba Návod pro uživatele +1367

PROBLÉM ČTYŘ BAREV. Lze obarvit jakoukoliv mapu v rovině čtyřmi barvami tak, aby žádné dvě sousedící oblasti neměly stejnou barvu?

2D transformací. červen Odvození transformačního klíče vybraných 2D transformací Metody vyrovnání... 2

Jazyk matematiky Matematická logika Množinové operace Zobrazení Rozšířená číslená osa

3. Optimalizace pomocí nástroje Řešitel

DYNAMICKÉ PROGRAMOVÁNÍ A PROBLÉM BATOHU

Gymnázium, Brno. Matice. Závěrečná maturitní práce. Jakub Juránek 4.A Školní rok 2010/11

Návod na instalaci a popis změn

4EK311 Operační výzkum. 4. Distribuční úlohy LP část 1

Euklidovský prostor Stručnější verze

Jednotkové rozhodování v energetice

Knihomol. Manuál pro verzi 1.2

NOVÁ VERZE OBD A JEJÍ VYUŽÍVÁNÍ Ing. Martina Valášková

3. Matice a determinanty

ISPOP 2016 MANUÁL K VYPLNĚNÍ FORMULÁŘŮ PRO OHLAŠOVÁNÍ ÚDAJŮ PRO VODNÍ BILANCI

Slovní úlohy v učivu matematiky 1. stupně základní školy

UŽIV ATELSKÁ PŘÍRUČKA

ROZHRANÍ PRO ZPRACOVÁNÍ ZÁKLADNÍ SKUPINY ENTIT - UŽIVATELSKÁ PŘÍRUČKA

M ě r n á t e p e l n á k a p a c i t a p e v n ý c h l á t e k

1. Problematika účetních výkazů a jejich aktualizace

Naučit se, jak co nejsnadněji přejít od verze TopoLu pro Windows k verzi TopoL xt. Cílem není vysvětlení všech možností programu.

VYSOKÁ ŠKOLA EKONOMICKÁ V PRAZE. Model tahové hry s finančními odměnami

Determinant. Definice determinantu. Permutace. Permutace, vlastnosti. Definice: Necht A = (a i,j ) R n,n je čtvercová matice.

MANUÁL K OVLÁDÁNÍ POČÍTAČOVÉHO SYSTÉMU PRO KMENOVÉ PÁSOVÉ PILY

Západočeská univerzita v Plzni. Fakulta aplikovaných věd Katedra matematiky. Geometrie pro FST 1. Pomocný učební text

TVORBA FORMULÁŘŮ V MS EXCEL

Zadání projektů z BPC2 pro letní semestr 2007/2008

Vytvoření uživatelské šablony

Uživatelský manuál Radekce-Online.cz

Vektorové podprostory, lineární nezávislost, báze, dimenze a souřadnice

Lineární programování

Gilda. Po spuštění programu v základním seznamu vidíte veřejné zakázky za Váš odbor.

Predispozice pro výuku IKT (2015/2016)

Ukázka knihy z internetového knihkupectví

Popis postupu při zpracování atletických závodů dle programu ATLETICKÁ KANCELÁŘ ( Manuál II.část )

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

SEO Audit a další úpravy KONTAKT. Bc. Martin Dřímal info@seoskrz.cz Telefon:

Soustavy lineárních rovnic

VYBRANÉ PARTIE Z NUMERICKÉ MATEMATIKY

VAR-NET INTEGRAL Manuál správce VNI 5.1 VAR-NET INTEGRAL. verze 0.2. Manuál správce VNI 5.1

Kapitola 1. Tenzorový součin matic

Regresní a korelační analýza

Dynamické programování

Transkript:

VYSOKÁ ŠKOLA EKONOMICKÁ V PRAZE FAKULTA INFORMATIKY A STATISTIKY Hlavní specializace: Ekonometrie a operační výzkum Název diplomové práce Optimalizace trasy při revizích elektrospotřebičů Diplomant: Vedoucí diplomové práce: Bc. Michal Rusín Ing. Jan Fábry, Ph.D.

Prohlášení: Prohlašují, že jsem diplomovou práci na téma Optimalizace trasy při revizích elektrospotřebičů zpracoval samostatně. Veškerou použitou literaturu a další podkladové materiály uvádím v seznamu použité literatury. Lužec nad Vltavou, 10.5.2009 Michal Rusín - 2 -

Poděkování: Chtěl bych poděkovat vedoucímu diplomové práce Ing. Janu Fábrymu Ph.D. za jeho ochotný a vstřícný přístup při konzultaci této práce. - 3 -

Obsah 1. Úvod... 5 2. Teoretická část... 7 2.1. Úloha obchodního cestujícího... 7 2.2. Rozvozní úloha... 9 2.3. Rozvozní úloha Model 1... 11 2.4. Rozvozní úloha Model 2... 13 2.5. Heuristické metody... 17 2.5.1. Heuristiky pro úlohu obchodního cestujícího... 17 2.5.2. Heuristiky pro rozvozní úlohu model 1... 19 2.5.3. Heuristiky pro rozvozní úlohu Model 2... 24 3. Aplikace v MS Excel... 32 3.1. Menu... 32 3.2. Zadávání dat... 33 3.3. Výpočet... 36 3.4. Výsledky... 48 4. Praktická část... 51 4.1. Zadání problému... 51 4.2. Popis a sběr dat... 53 4.3. Výpočty... 57 4.3.1. Úloha obchodního cestujícího... 57 4.3.2. Rozvozní úloha model 1... 59 4.3.3. Rozvozní úloha model 2... 61 4.4. Porovnání modelů a heuristik... 64 4.4.1. Porovnání modelů... 64 4.4.2. Porovnání heuristik... 64 5. Závěr... 66 Seznam použité literatury... 67 Internetové zdroje... 67 Přílohy... 68-4 -

1. Úvod Tématem mojí diplomové práce je optimalizace trasy při revizích spotřebičů. Důvodem pro volbu tohoto tématu byla snaha o aplikaci poznatků získaných při studiu, na reálných úlohách v praxi. Mezi vypsanými tématy mě zaujaly rozvozní úlohy. Snažil jsem se tedy vyhledat data, která bych mohl využít k aplikaci modelů rozvozní úlohy. Podařilo se mi získat data z oblasti revizí elektrospotřebičů. Revizní technik se při své práci pohybuje mezi řadou míst, na kterých vykonává revize. Na optimalizaci trasy revizního technika lze tedy použít modely okružních úloh. Úloha obchodního cestujícího a rozvozní úloha jsou NP-obtížné úlohy. Proto k výpočtům použi heuristické metody. Jedná se o metodu nejbližšího souseda, metodu výhodnostních čísel a metodu nejlevnějšího vkládání. K výpočtům heuristik naprogramuji v programu MS Excel, respektive v programovacím jazyce VBA aplikaci. V této aplikaci pak budu řešit všechny tři heuristiky pro tři modely okružních úloh. Práce je rozdělena do čtyř hlavních částí. První součástí je aplikace Heuristiky pro řešení heuristických metod nejbližšího souseda, výhodnostních čísel a nejlevnějšího vkládání. Tyto heuristiky jsou řešeny ve verzích pro úlohu obchodního cestujícího a pro dvě modifikace rozvozní úlohy. Druhou částí je kapitola popisující teoretické modely a heuristiky. V kapitole jsou popsány matematické modely úlohy obchodního cestujícího, rozvozní úloha a její dvě modifikace. Další součástí kapitoly je popis heuristik nejbližšího souseda, výhodnostních čísel a nejlevnějšího vkládání. Každá heuristická metoda je rozepsána ve verzi pro úlohu obchodního cestujícího, pro rozvozní úlohu model 1 a pro rozvozní úlohu model 2. Třetí kapitola je popisem aplikace Heuristiky, jejíž vytvoření je součástí práce. Tato kapitola slouží jako manuál k aplikaci. Je zde popsáno uživatelské prostředí, způsob zadávání dat a interpretace výsledků. - 5 -

Poslední částí je vlastní výpočet heuristik pro všechny tři uvedené modely a prezentace výsledků a výběr nejlepších variant trasy revizního technika. Je zde také uvedeno srovnání modelů a srovnání použitých heuristik. Cílem této práce je vytvořit aplikaci v MS Excel, resp. VBA, pro výpočet heuristických metod nejbližšího souseda, výhodnostních čísel a nejlevnějšího vkládání a optimalizace trasy revizního technika při revizích elektrospotřebičů. - 6 -

2. Teoretická část využívat. V této kapitole popíši teoretický základ modelů, které budu v dalších kapitolách Jako první popíši matematický model úlohy obchodního cestujícího. Dále uvedu matematický model rozvozní úlohy, která z úlohy obchodního cestujícího vychází a rozšiřuje ji. Poté uvedu modifikaci rozvozní úlohu v podobě použité v aplikační části diplomové práce. Tento model bude označen jako Model 1. Posledním modelem bude matematický model rozvozní úlohy upravený pro použití dvou různých délek cyklů. Tento model bude označen jako Model 2. Závěrečné části této kapitoly budou věnovány popisu použitých heuristik. Zmíním jejich obecný popis pro úlohu obchodního cestujícího a jejich modifikace pro rozvozní úlohu použité v aplikaci. 2.1 Úloha obchodního cestujícího úlohy. Úloha obchodního cestujícího (okružní dopravní problém) patří mezi okružní Matematickým modelem této úlohy je graf G V, E. Množina V 1,2,...,n obsahuje uzly a množina E obsahuje všechny hrany spojující uzly. Všechny hrany v grafu G jsou ohodnoceny. Hrana i, j je ohodnocena číslem d, které představuje dobu přejezdu mezi objekty i a j. Cílem této úlohy je vyjít z výchozího místa a postupně navštívit všechna ostatní místa právě jednou v libovolném pořadí s nejnižšími náklady. V našem konkrétním případě se jedná o minimalizaci času stráveného přejezdy mezi objekty. Cyklus, který se snažíme najít, se nazývá Hamiltonův cyklus. Je složen z hran z množiny E. V úloze musíme zavést bivalentní proměnné x takové, že x 1, v případě, že hrana spojující uzly i, j leží na hledaném cyklu, anebo x 0, pokud Hamiltonův cyklus hranu i, j neobsahuje. Nyní formulujeme podmínku, která zaručí, že uzel i bude ležet na tomto cyklu. - 7 -

Tuto podmínku rozdělíme a formulujeme ji jako dvě samostatné podmínky. Podmínkou (2.1) zajistíme, aby z uzlu i vycházela právě jedna hrana cyklu. Podmínkou (2.2) zajistíme, aby do uzlu i vstupovala právě jedna hrana. n x j 1 n x i 1 1, i 1,2,..., n, (2.1) 1, j 1,2,..., n. (2.2) Rovnice (2.1) a (2.2) nezaručí, že jejich řešením bude skutečně Hamiltonův cyklus. Abychom vyloučili vznik parciálních cyklů, musíme přidat smyčkové podmínky. Použeme smyčkové podmínky Miler-Tucker-Zemlin 1 ve tvaru ti t j nx n 1, i 1,2,..., n, j 2,3,..., n. (2.3) Počet těchto smyčkových podmínek je roven počtu hran. Proměnné t i a nemusí splňovat podmínky nezápornosti ani celočíselnosti. Úkolem úlohy je minimalizovat čas strávený přejezdy mezi objekty. V účelové funkci proto minimalizujeme součet ocenění hran zařazených v cyklu, tedy hran pro které platí x 1. Toto ocenění zapíšeme ve tvaru t j n n d x i 1 j 1, (2.4) a budeme jej minimalizovat. Z výrazů (2.1) (2.4) formulujeme matematický model úlohy obchodního cestujícího: minimalizovat n n z d x i 1 j 1 (2.5) 1 [2] http://nb.vse.cz/~fabry/4ek314-prezentace.ppt s.66. - 8 -

Za podmínek n x j 1 n x i 1 1, i 1,2,..., n, 1, j 1,2,..., n, (2.6) ti t j nx n 1, i 1,2,..., n, j 2,3,..., n, x 0,1, i 1,2,..., n, j 1,2,..., n. 2.2 Rozvozní úloha Rozvozní úloha je rozšířením výše uvedené úlohy obchodního cestujícího. V rozvozní úloze je přípustné řešení s více cykly. Tím se liší od úlohy obchodního cestujícího. Každý cyklus musí obsahovat výchozí uzel. Označíme ho uzel 1. V tomto uzlu každý cyklus začíná a také končí. Všechny uzly musí být zařazeny do některého z cyklů. V této úloze je oproti úloze obchodního cestujícího definována kapacita vozidla, označovaná V. V aplikačním příkladu ze čtvrté kapitoly nahradíme kapacitu vozidla pracovní dobou revizního technika. Poslední modifikací jsou požadavky odběratelů v jednotlivých uzlech. V této diplomové práci jsou požadavky odběratelů nahrazeny dobou trvání činnosti revizního technika v jednotlivých uzlech. Pracovní doba revizního technika V, musí být kladné číslo V činnosti v i -tém uzlu označíme s i. 0. Dobu trvání Proměnná označená t i v modelu rozvozní úlohy zpravidla znamená velikost nákladu ve vozidle po návštěvě uzlu i. V našem příkladu jsme nahradili kapacitu vozidla disponibilní pracovní dobou revizního technika. Jako t i budeme označovat vyčerpanou pracovní dobu po návštěvě uzlu i. Je to okamžik, kdy revizní technik opustí uzel i. Musí tedy platit podmínka s i t V, i 2,3,..., n. (2.7) i překročena. Podmínka (2.7) zaručuje, že disponibilní pracovní doba V nebude v cyklu - 9 -

Smyčkové podmínky Miler-Tucker-Zemlin z úlohy obchodního cestujícího nahradíme novými podmínkami ve tvaru t i j x t j s V 1, i 1,2,..., n, j 2,3,..., n. (2.8) Na začátku každého cyklu, v uzlu 1, je pracovní doba rovna V. Proměnná t, 1 vyčerpaná pracovní doba v cyklu, se tedy rovná nule. t 1 0. (2.9) Do modelu rozvozní úlohy ještě přidáme poslední podmínky. Jedná se o modifikované podmínky z úlohy obchodního cestujícího (2.1) a (2.2). V rozvozní úloze musí z každého uzlu i, pro i 2,3,..., n vystupovat právě jedna hrana cyklu. Platnost této podmínky zajistíme výrazem n x j 1 1, i 2,3,..., n. (2.10) Do každého uzlu j, j 2,3,..., n pro musí vstupovat právě jedna hrana cyklu. Tuto podmínku formulujeme výrazem n x i 1 1, j 2,3,..., n. (2.11) na proměnné Oproti úloze obchodního cestujícího se podmínky (2,10), resp. (2.11) nevztahují x 1, kde j 1,2,..., n a x i1, kde j i 1,2,..., n. Součet proměnných v prvním řádku, resp. prvním sloupci bude vyšší v případě, že bude vytvořeno více cyklů. Účelová funkce bude mít stejný tvar jako v případě úlohy obchodního cestujícího. Opět minimalizujeme čas strávený přejezdy mezi uzly. Zapíšeme účelovou funkci jako výraz n n d x i 1 j 1. (2.12) Nyní máme definovány všechny potřebné podmínky a můžeme z nich sestavit matematický model rozvozní úlohy: - 10 -

minimalizovat n n z d x i 1 j 1 (2.13) za podmínek n x j 1 n x i 1 1, i 2,3,..., n, 1, j 2,3,..., n, t i s i j x t j s V 1, i 1,2,..., n, j 2,3,..., n, t V, i 2,3,..., n, (2.14) i t 1 0, x 0,1, i 1,2,..., n, j 1,2,..., n. 2.3 Rozvozní úloha Model 1 Výše uvedená rozvozní úloha není vhodná pro řešení příkladu ze závěrečné části této diplomové práce. V matematickém modelu rozvozní úlohy je definována pracovní doba V. Do této pracovní doby se v modelu započítává pouze činnost prováděná v uzlu. V příkladu vyžadujeme, aby cesty mezi uzly a činnosti vykonané v uzlech byly provedeny v pracovní době. Při použití modelu rozvozní úlohy by byly započítány pouze činnosti provedené v uzlech a cesty by se do pracovní doby nepočítaly. Cesty, které by pak musel revizní technik vykonat, by nešly v pracovní době uskutečnit a výsledky by byly bezcenné. Musíme proto matematický model modifikovat, aby vyhovoval našim účelům. Pro potřeby aplikačního příkladu musíme provést modifikaci modelu. Aby se čas strávený přejezdy mezi uzly také započítával do pracovní doby, musíme upravit podmínku (2.8) z předchozího modelu. - 11 -

Rozšíříme ji tak, aby byl do pracovní doby V započten i čas potřebný na přejezdy mezi uzly i a j, tj. podmínky d. Nahradíme podmínku (2.8) následujícím tvarem t i j x t j s d V 1, i 1,2,..., n, j 2,3,..., n, (2.15) Podmínka je nyní upravena na tvar, který požadujeme k výpočtům. Ještě musíme upravit podmínku (2.7), abychom počítali s návratem do uzlu 1, bez úpravy této podmínky bychom neuvažovali cestu zpět do výchozího uzlu a pracovní doba by mohla být o část doby návratu překročena. s, i 2,3,..., n. (2.16) i t i t i 1 di 1 xi V, i 2,3,..., n. (2.17) Nyní již máme naformulovány všechny podmínky. Můžeme tedy zapsat celý matematický model Modelu 1: minimalizovat n n z d x i 1 j 1 (2.18) za podmínek n x j 1 n x i 1 1, i 2,3,..., n, 1, j 2,3,..., n, t i s i j x t j s d V 1, i 1,2,..., n, j 2,3,..., n, ti d j1 x j1 V, i 2,3,..., n, (2.19) t 1 0, x 0,1, i 1,2,..., n, j 1,2,..., n. - 12 -

2.4 Rozvozní úloha Model 2 V modelu 2 přiblížím model více reálnému problému. Uvolním předpoklad neměnné pracovní doby V. Budeme vycházet z předpokladu, že je možné v několika cyklech překročit pracovní dobu V a prodloužit tím cyklus. Zkrácení cesty je však vykompenzováno zvýšením nákladů revizního technika. Delší pracovní dobu si lze představit jako služební cesty nebo práci přesčas. V případě práce přesčas bychom museli počítat se zvýšenou mzdovou sazbou. Přesčasová práce připadá v úvahu při krátkém prodloužení pracovní doby, např. o několik málo hodin. Služební cesta je výhodnější při delším prodloužení pracovní doby, například o několik dní. V případě služební cesty se náklady zvýší o diety a ubytování. V této diplomové práci použi navýšení pracovní doby o celý jeden den. Jedná se tedy o případ se služební cestou. V aplikačním příkladu se náklady na služební cestu budou lišit podle kraje, ve kterém revizní technik přenocuje. Náklady na ubytování proto nebudu do matematického modelu uvádět, ale budu je přičítat až po vypočtení cesty. Jak už bylo výše zmíněno, matematický model bude obsahovat dvě různé délky pracovní doby. Ve formulaci rozvozní úlohy je definována pracovní doba V. Tato proměnná označuje standardní délku pracovní doby. V případě, že chceme pracovní dobu prodloužit, použeme k tomu konstantu W. Konstanta W je rozdíl mezi delší pracovní dobou V W a standardní délkou pracovní doby V. V modelu 2 musí platit podmínka, která zaručí, že z každého uzlu i, pro i 2,3,...,n bude vystupovat právě jedna hrana. Tato podmínka se bude od podmínky (2.10) lišit tím, že v modelu 2 musíme přidat součet přes index k, kde k 1,2,..., n 1. Podle indexu k zjistíme, v jakém cyklu je hrana k x zařazena. Podmínku tedy můžeme formulovat ve tvaru - 13 -

uzlu j, pro n n 1 j 1 k 1 x 1, i 2,3,..., n, k 1,2,..., n 1. (2.20) k V matematickém modelu nesmí chybět ani podmínka zaručující, aby do každého j 2,3,..., n vstupovala právě jedna hrana. Opět přidáme sumaci s indexem k, kde k 1,2,..., n 1. Podmínku zapíšeme výrazem n n 1 i 1 k 1 x 1, j 2,3,..., n, k 1,2,..., n 1. (2.21) k Další podmínkou zajistíme, aby nebyla překročena pracovní doba. Podmínku (2.16) upravíme o možnost prodloužení pracovní doby maximálně o hodnotu W. Budeme definovat novou pomocnou bivalentní proměnnou y, kde k 1,2,..., n 1. k Pomocí proměnné y k zajistíme požadovaný počet cyklů s delší pracovní dobou. V případě, že pracovní doba bude mít standardní délku V, bude platit y 0. Naopak, k když využeme prodlouženou pracovní dobu vyjádříme výrazem V W, platí, že y 1. Podmínku k t k k i di 1 xi 1 V Wyk, 2,3,..., n, k 1,2,..., n 1 i (2.22) Pokud bychom použili pouze výraz (2.21), mohla by nastat situace, že všechny cykly budou využívat prodlouženou pracovní dobu. Takový stav by nebyl žádoucí, a proto musíme počet prodloužených pracovních dob omezit. Počet prodloužených cyklů snížíme na 4, tj. cyklech se y k se může rovnat jedné pouze ve čtyřech případech, v ostatních y k bude rovnat nule a bude použita standardní délka pracovní doby V. Tuto podmínku vyjádříme výrazem n 1 k 1 y 4. (2.23) k dobou Podmínka (2.22) zaručí, že budou využity právě čtyři cykly s delší pracovní V W. Pokud bychom chtěli zajistit maximálně čtyři nebo povolit méně delších cyklů, nahradili bychom výraz (2.22) novou upravenou podmínkou n 1 k 1 y 4 (2.24) k - 14 -

Dalšími podmínkami, které jsou nezbytné pro model 2, jsou smyčkové podmínky. Vyjdeme opět z matematického modelu rozvozní úlohy, tentokrát však v úpravě pro model 1. Podmínku (2.15) upravíme takovým způsobem, abychom ji mohli použít v modelu 2. Nejprve musíme podmínku upravit, protože proměnné využívají nový index k, kde k 1,2,..., n 1. Poté přidáme možnost delších cyklů. Nová podmínka bude mít následující tvar t k i j k k V W x t s d 1, i 1,2,..., n, j 2,3,..., n, j Výrazy v závorkách roznásobíme k 1,2,..., n 1. t k i j k k k V Vx W Wx t s d, j t k i s d V Vx W Wx t, i 1,2,..., n, j 2,3,..., n, j k k k j k 1,2,..., n 1 (2.25) V modelu nesmí chybět ani podmínka, která zajistí, že proměnná k t 1 se bude rovnat nule. Tato podmínka zaručuje, že vyčerpaná pracovná doba se na začátku každého cyklu bude rovnat nule, pro každé k 1,2,..., n 1. k t 1 0, k 1,2,..., n 1. (2.26) Model ještě musíme doplnit o poslední dvě podmínky. První podmínka zaručí, že návštěva uzlu se uskuteční právě v jednom cyklu (Fábry J., 2006). n i 1 n k x x i 1 k ji, j 2,3,..., n, k 1,2,..., n 1. (2.27) Nerovnice (2.27) zaručuje v obecném případě, že každé vozidlo odjede z výchozího místa nejvýše jednou, tzn. některá vozidla nemusí vyjet (Fábry J., 2006). V tomto modelu však bude mít podmínka odlišnou interpretaci. Nerovnice zaručuje, že počet cest, které revizní technik uskuteční, se bude rovnat nebo bude menší než n 1 (Fábry J., 2006). n i 1 k x 1, k 1,2,..., n 1. (2.28) 1 j - 15 -

Účelová funkce bude mít oproti předcházejícím úlohám odlišný tvar. Opět budeme hledat její minimální hodnotu. Do účelové funkce ještě přidáme indexy k, kde k 1,2,..., n 1 a provést součet i přes tento nový index. Nový tvar účelové funkce tedy bude n n n 1 i 1 j 1 k 1 d x k. (2.29) Nyní již máme připraveny všechny omezující podmínky a můžeme z nich sestavit matematický model: minimalizovat za podmínek n n n 1 z i 1 j 1 k 1 d x k n n 1 j 1 k 1 x 1, i 2,3,..., n, k 1,2,..., n 1, k n n 1 i 1 k 1 x 1, j 2,3,..., n, k 1,2,..., n 1, k t k i s d V Vx W Wx t, i 1,2,..., n, j 2,3,..., n, j k k k j k 1,2,..., n 1 t k i k d j1 x j1 V Wyk, 2,3,..., n, k 1,2,..., n 1 i, n 1 k 1 y 4, k k t 1 0, k 1,2,..., n 1, n i 1 n k x x i 1 k ji, j 2,3,..., n, k 1,2,..., n 1, n i 1 k x 1, k 1,2,..., n 1, 1 j x 0,1, i 1,2,..., n, j 1,2,..., n, k - 16 -

k 1,2,..., n 1, y 0,1, k 1,2,..., n 1 k z 0,1, i 1,2,..., n, j 1,2,..., n k k 1,2,..., n 1. 2.5 Heuristické metody Heuristiky jsou metody, kterými lze dospět k přípustným řešením, ale dosažené řešení nemusí být optimální. Úloha obchodního cestujícího a rozvozní úloha patří mezi NP-obtížné úlohy (Pelikán J., 1999). Při vysokém počtu proměnných nemusí optimalizační algoritmy dospět k řešení v reálném čase. V takových případech je výhodné zvolit některou z heuristických metod. Výhody ze získání výsledků v krátké době převáží nevýhody ze získání výsledků odchýlených od optimálního řešení. 2.5.1 Heuristiky pro úlohu obchodního cestujícího Metoda nejbližšího souseda Postup (Pelikán J., 1999): Krok 1. Zvolíme počáteční uzel (v našem případě vždy uzel 1) a zařadíme ho na první místo na trase. První řádek v matici s časy přejezdů proškrtneme. Krok 2. V matici časů jízd zvolíme řádek odpovídající poslednímu zařazenému uzlu. V řádku nalezneme minimum z neproškrtnutých prvků matice. Sloupec, ve kterém leží minimální prvek, zařadíme za poslední uzel na trase. Proškrtneme řádek, ve kterém jsme hledali minimum a sloupec, v němž toto minimum leží. Krok 3. Opakujeme krok 2, dokud matice časů jízd obsahuje nevyškrtnuté prvky. V opačném případě následuje krok 4. - 17 -

Krok 4. okruh. Za poslední zařazený uzel přidáme počáteční uzel, abychom dostali uzavřený Metoda výhodnostních čísel Postup (Pelikán J., 1999): Krok 1. Nejdříve spočítáme matici výhodnostních čísel S s. Její prvky dostaneme podle předpisu s di 1 d1 j d, i,3,..., n, j 2,3,..., n, i j 2, kde D d je matice obsahující časy přejezdů mezi uzly. Krok 2. V matici S nalezneme největší výhodnostní číslo s. Zapíšeme cestu i j do výsledného cyklu. Abychom předešli vzniku parciálních cyklů, vyškrtneme prvek s ji, řádek i a sloupec j. Krok 3. Nyní vybíráme z matice S maximum v řádku j. Toto řádkové maximum je prvek s jk. Nalezneme maximum ve sloupci i (prvek s li ). Porovnáme maximální hodnoty v řádku a ve sloupci. V případě, že s s, zařadíme uzel k na konec cesty. Vyškrtneme prvek jk li spojující konec a začátek cesty, tj. s ki a řádek j. Provedeme substituci j k. V opačném případě, když bude s s, zařadíme uzel l na začátek cesty. jk li Vyškrtneme prvek spojující konec a začátek cesty s lj a řádek l. Provedeme substituci i l. - 18 -

Krok 4. Opakujeme krok 3, dokud nebudou z matice S vyškrtány všechny prvky. Krok 5. Doplníme výchozí uzel na začátek a konec cesty a tím spojíme cestu do cyklu. Metoda nejlevnějšího vkládání Postup (Pelikán J., 1999): Krok 1. Vybereme výchozí uzel (budeme volit uzel 1). Krok 2. V prvním řádku matice s časy přejezdů D i, j d 1s max d1 j. Vytvoříme uzavřenou cestu 1 s 1. j Krok 3. nalezneme největší prvek Nalezneme hranu i, j ležící na již vytvořeném cyklu a uzel k neležící na vytvořeném cyklu tak, aby výraz d ik d d byl minimální. Hledáme tedy uzel k, kj jehož přidáním do cyklu se cesta co nejméně prodlouží. Uzel k přidáme do cesty mezi uzly i a j. Krok 4. Opakujeme krok 3, dokud nejsou zařazeny všechny uzly do cyklu. 2.5.2 Heuristiky pro rozvozní úlohu model 1 Heuristické metody pro řešení rozvozní úlohy se odlišují od metod pro řešení úlohy obchodního cestujícího. V jejich algoritmu musí být neustále kontrolováno, zda po zařazení nového uzlu nebude překročena kapacita vozidla, či v našem případě pracovní doba. Pokud by k tomu došlo, musí být uzel na trase ignorován a zkoušíme najít jiný nezařazený uzel. Ignorovaný uzel pak zkoušíme zařadit do jiného cyklu. Pokud není pracovní doba vyčerpána přesně, musíme prohledávat všechny nezařazené - 19 -

uzly pro případ, že by se ještě mohly do aktuálního cyklu vejít. V heuristických metodách pro řešení úlohy obchodního cestujícího každý uzel ihned zařadíme, ale v heuristikách pro řešení rozvozní úlohy tyto prvky zkoušíme zařadit několikrát. To činí algoritmy pro rozvozní úlohy výpočetně náročnějšími. Nejprve zavedeme označení pro snazší orientaci. Matici se zadáním časů přejezdů označíme jako matici A s prvky a. Matici, kterou budeme při vybírání uzlů vyškrtávat, označíme jako matici B s prvky b. V aplikaci Heuristiky je pro řešení rozvozní úlohy - model 1 pracovní doba označena jako délka cyklu 1. Metoda nejbližšího souseda Postup: Krok 1. Zvolíme výchozí uzel (v našem případě volíme vždy uzel 1) a zařadíme ho na první místo v nového cyklu. Krok 2. Z matice B vyškrtneme všechny řádky a sloupce, které odpovídají všem dříve zařazeným uzlům. Z matice B ještě vyškrtneme první sloupec. Krok 3. V řádku, který odpovídá poslednímu uzlu zařazenému do cyklu, nalezneme minimum. Minimum leží v řádku i a ve sloupci j. Minimum v matici je prvek b. Krok 4. Otestujeme, zda lze uzel zařadit do cyklu. Sečteme časy přejezdů od prvního do posledního zatím zařazeného uzlu a doby trvání činností v uzlech. K tomuto součtu ještě přičteme dobu přejezdu z uzlu i do j, tj. prvek matice B, b a také dobu trvání činnosti v uzlu j. Ještě musíme připočítat návrat do výchozího uzlu. Připočteme čas přejezdu mezi uzlem i a uzlem 1. Tento součet porovnáme s pracovní dobou. - 20 -

V případě, že je součet menší nebo roven pracovní době, zařadíme uzel j za poslední uzel v cyklu. Jestliže je součet větší než pracovní doba, nemůžeme uzel j zařadit do cyklu. V obou případech vyškrtneme sloupec j z matice B. Krok 5. Opakujeme kroky 3 a 4, dokud nevyškrtáme celou matici B, potom pokračujeme krokem 6. Krok 6. Uzavřeme cyklus zapsáním výchozího uzlu. Krok 7. V případě, že ještě nejsou zařazeny všechny uzly, přejdeme na krok 1 a zařazujeme prvky do nového cyklu. Pokud jsou všechny uzly zařazeny, výpočet končí. Metoda výhodnostních čísel Postup: Krok 1. Jako první spočítáme matici výhodnostních čísel S. Její prvky vypočítáme z matice časů přejezdů s ai 1 a1 j a, i j 2,3,..., n, i j,. Kde A a je matice obsahující časy přejezdů mezi uzly. Krok 2. Vytvoříme matici B, jejíž rozměr je n n a její prvky jsou b s. V matici B vyškrtáme všechny řádky a sloupce odpovídající dříve zařazeným uzlům. Krok 3. V matici B nalezneme největší výhodnostní číslo b. - 21 -

Krok 4. Otestujeme, zda lze uzly i a j zařadit do cyklu. Sečteme časy přejezdů na cestě 1 i j 1 a činnosti v uzlech i a j. Pokud je součet menší nebo roven pracovní době, zapíšeme cestu i j do výsledného cyklu. Z matice B vyškrtneme prvek pokračujeme krokem 5. b ji, řádek i a sloupec j a V případě, že součet je větší než pracovní doba, vyškrtneme prvek b. Pokud ještě nejsou vyškrtnuty všechny prvky matice B, pokračujeme krokem 3. Pokud jsou všechny prvky v matici vyškrtnuty, pokračujeme krokem 6. Krok 5. Nyní budeme vybírat z matice B maximum v řádku j. Toto maximum označíme b jk. Vybereme také maximum ve sloupci a označíme ho b li. Porovnáme maxima v řádku a ve sloupci. V případě, že b b, otestujeme délku cyklu. Sečteme časy přejezdů na cestě jk li 1 i... j k 1 a činnosti v uzlech i až k. V případě, že součet je větší než délka cyklu 1, vyškrtneme prvek b jk z matice B. Pokud jsou v řádku j nebo sloupci i nějaké nevyškrtané prvky, pokračujeme opět krokem 5, jinak pokračujeme krokem 7. Pokud je součet menší než délka cyklu 1, zařadíme uzel k na konec cesty. Vyškrtneme prvek b ki a řádek j. Provedeme substituci j k a opakujeme krok 5. V opačném případě, když b b, otestujeme délku cyklu. Sečteme časy jk li přejezdů na cestě 1 l i... j 1 a činnosti v uzlech l až j. Když je součet větší než délka cyklu 1, vyškrtneme prvek b li. Pokud jsou v řádku j nebo sloupci i ještě nějaké nevyškrtnuté prvky, pokračujeme krokem 5, jinak přejdeme na krok 7. Pokud je součet cesty a činností menší než délka cyklu 1, zařadíme uzel l na začátek cesty. Vyškrtneme prvek krokem 5. b lj a sloupec i z matice B. Provedeme substituci i l a pokračujeme opět - 22 -

Krok 6. Pokud máme vyškrtanou celou matici B a v cyklu ještě nejsou zařazeny žádné prvky, zařadíme do cyklu první nezařazený uzel a pokračujeme krokem 7. Krok 7. Na začátek cyklu dosadíme výchozí uzel 1. Na konec cyklu dosadíme uzel 1. Pokud ještě máme nezařazené uzly, začneme nový cyklu a pokračujeme krokem 2. V opačném případě výpočet končí. Metoda nejlevnějšího vkládání Postup: Krok 1. Vybereme výchozí uzel (budeme volit uzel 1) Krok 2. Vytvoříme matici B, která má rozměr n n a prvky b odpovídají prvkům matice s časy přejezdů A, tj. b a. Vyškrtneme řádky a sloupce, které odpovídají již zařazeným uzlům. Krok 3. U prvního řádku matice A vybereme největší prvek cestu 1 s 1. Krok 4. a 1 s. Vytvoříme uzavřenou Nalezneme hranu i, j, která leží na již vytvořeném cyklu a uzel k, který neleží na vytvořeném cyklu tak, abychom minimalizovali výraz b ik b kj b. Snažíme se tedy najít uzel k, po jehož přidání se cesta co nejméně prodlouží. Otestujeme délku cyklu. Zkusíme přidat uzel k do vytvořené cesty. Pokud je součet menší nebo roven délce cyklu 1, ponecháme uzel k zařazen v cyklu a pokračujeme krokem 4. Pokud jsou zařazeny všechny uzly, pokračujeme krokem 5. - 23 -

V případě, že je součet větší než délka cyklu 1, vymažeme uzel k z cyklu. Vyškrtneme minimum výrazu b ik b b a mezi ostatními hledáme nové minimum. kj Pokud jsou všechny výrazy vyškrtány, pokračujeme krokem 5. Krok 5. Pokud existují nezařazené uzly, pokračujeme krokem 2, jinak výpočet končí. 2.5.3 Heuristiky pro rozvozní úlohu Model 2 V aplikaci Heuristiky je pro řešení rozvozní úlohy - model 2 standardní délka pracovní doby označena jako délka cyklu 1. Pro delší pracovní dobu je použito označení délka cyklu 2. U modelu heuristik pro model 2 musíme zavést tři matice. První matice je shodná s modelem 1. Matici obsahující časy přejezdů mezi uzly označíme jako matici A s prvky a. Nyní musíme rozdělit uzly do dvou množin. Zavedeme pravidlo, podle kterého rozdělíme uzly do dvou množin. Pro každý uzel i, kde výraz (2.31) a porovnáme ho s délkou cyklu 1. i 2,3,..., n, spočítáme čas přejezdu 1,i + činnost v uzlu i + čas přejezdu i,1. (2.30) V případě, že výraz (2.31) bude větší než délka cyklu 1, zařadíme uzel i do množiny U. Uzly, pro které bude výraz (2.31) menší než délka cyklu 1, zařadíme do množiny V. Vytvoříme matici, která má stejný rozměr n n jako matice A, ale obsahuje pouze řádky a sloupce uzlů z množiny U. Ostatní prvky matice jsou proškrtnuty. Tuto matici označíme B a její prvky b. Vytvoříme matici C s prvky c. Matice bude mít rozměr n n. Budou vyplněny pouze řádky a sloupce z množiny V. Ostatní prvky matice budou proškrtnuty. V modelu 2 je povoleno použít dvě různé délky cyklu. V heuristických metodách pro model 2 je nejprve použita délka cyklu 2 a po vyčerpání počtu cyklů 2 je ve všech následujících cyklech použita délka cyklu 1. Při uvádění podmínky pro výběr délky cyklu, by se heuristiky staly méně přehledné. Pro lepší přehlednost je toto - 24 -

pravidlo uvedeno pouze zde a v popisu heuristik je již uváděna pouze délka cyklu nebo pracovní doba. Metoda nejbližšího souseda Postup: Krok 1. Zvolíme výchozí uzel (budeme volit vždy uzel 1) a zařadíme ho na první místo v novém cyklu. Krok 2. Vytvoříme matice B a C podle výše uvedeného postupu. Z matice B i C vyškrtneme řádky a sloupce, které odpovídají dříve zařazeným uzlům. Z matic B a C vyškrtneme první sloupec. Pokud matice B obsahuje nějaké prvky, pokračujeme krokem 3, jinak pokračujeme krokem 6. Krok 3. V řádku matice B, který odpovídá poslednímu zařazenému uzlu, najdeme minimum, tj. prvek b. Krok 4. Otestujeme, zda lze prvek zařadit do cyklu. Sečteme časy přejezdů mezi uzly v cyklu a přičteme b a také dobu trvání činnosti v uzlu j. Ještě připočítáme dobu návratu do výchozího uzlu, tj. cestu z uzlu j do uzlu 1. Tento součet porovnáme s pracovní dobou. V případě, že je součet menší nebo roven délce pracovní doby, zařadíme uzel j na poslední místo v cyklu. cyklu. Jestliže je součet větší než pracovní doba (délka cyklu), nezařadíme uzel j do V obou případech však vyškrtneme řádek j z matice B. Přejdeme na krok 5. - 25 -

Krok 5. Opakujeme krok 3 a 4, dokud nevyškrtáme celou matici B. Krok 6. z matice C. Pokud jsou již v aktuálním cyklu zařazeny nějaké uzly, vyškrtneme řádek 1 Krok 7. minimum c. V řádku matice C, který odpovídá poslednímu zařazenému uzlu, najdeme Krok 8. Testujeme, zda můžeme prvek zařadit do cyklu. Provedeme součet časů přejezdů mezi uzly v cyklu a přičteme doby trvání činností v zařazených uzlech. K tomuto součtu ještě připočteme dobu přejezdu c a také dobu trvání činnosti v uzlu j. Musíme ještě připočítat dobu návratu z uzlu j zpět do uzlu 1. Součet opět porovnáme s pracovní dobou. Pokud bude součet menší nebo roven pracovní době, zařadíme uzel j na poslední místo v cyklu. zařadit. V případě, že bude součet větší než pracovní doba, nemůžeme uzel j do cyklu V obou případech vyškrtneme řádek j z matice C a přejdeme na krok 9. Krok 9. Krok 7 a 8 opakujeme, dokud matice C ještě obsahuje nevyškrtané prvky. Krok 10. V případě, že nejsou zařazeny všechny uzly do cyklů, pokračujeme krokem 1 a vytvoříme nový cyklus, jinak výpočet končí. - 26 -

Metoda výhodnostních čísel Postup: Krok 1. Nejdříve spočítáme matici výhodnostních čísel S. Její prvky vypočítáme z matice časů přejezdů podle výrazu s ai 1 a1 j a, i j 2,3,..., n, i j,, kde A a je matice obsahující časy přejezdů mezi uzly. Krok 2. Vytvoříme matice B a C výše uvedeným postupem. Z matic B a C vyškrtneme řádky a sloupce, které odpovídají již dříve zařazeným uzlům. Z matic B a C vyškrtneme první řádek a sloupec. Pokud matice B obsahuje nějaké nevyškrtnuté prvky, pokračujeme krokem 3, jinak pokračujeme až krokem 7. Krok 3. V matici B nalezneme největší výhodnostní číslo b. Krok 4. Budeme testovat, zda lze uzly i a j zařadit do cyklu. Sečteme časy přejezdů na cyklu 1 i j 1 a činnosti v uzlech i a j. Pokud je tento součet menší nebo roven délce cyklu, zapíšeme cestu i j do výsledného cyklu a vyškrtneme prvek b ji, řádek i a sloupec j. Pokračujeme krokem 5. Jestliže je součet větší než délka cyklu, vyškrtneme prvek b. Pokud ještě nejsou vyškrtnuty všechny prvky matice B, pokračujeme krokem 3. Pokud jsou všechny prvky v matici vyškrtnuty, pokračujeme krokem 10. Krok 5. Vybereme z matice B maximum v řádku j. Toto maximum označíme b jk. Vybereme také maximum ve sloupci i a označíme ho b li. Porovnáme prvky b jk a b li. - 27 -

Jestliže je b b, otestujeme délku cyklu. Sečteme časy přejezdů na cyklu jk li 1 i... j k 1 a činnosti v uzlech i až k. Pokud je součet větší než délka cyklu, vyškrtneme prvek b jk z matice B. Pokud jsou v řádku j nebo sloupci i nějaké nevyškrtnuté prvky, pokračujeme opět krokem 5, jinak pokračujeme krokem 10. Pokud je součet menší než délka cyklu, zařadíme uzel k na konec cesty. Vyškrtneme prvek b ki a řádek j. Provedeme substituci j k a pokračujeme krokem 5. V opačném případě, tj. b b, otestujeme délku cyklu. Sečteme časy přejezdů jk li na cestě 1 l i... j 1 a činnosti v uzlech l až j. Pokud je součet větší než délka cyklu, vyškrtneme prvek b li. Pokud jsou v řádku j nebo sloupci i nevyškrtnuté prvky, budeme pokračovat krokem 5, jinak přejdeme na krok 10. Pokud je součet cesty a činností menší než délka cyklu, zařadíme uzel l na začátek cesty. Vyškrtneme prvek b lj a sloupec i z matice B. Substituujeme Krok 6. i l a pokračujeme opět krokem 5. Pokud máme vyškrtanou celou matici B a v množině U jsou stále ještě nezařazené uzly, zařadíme do cyklu první nezařazenný uzel z množiny U. Proměnné i a j budou mít shodně hodnotu indexu zařazovaného uzlu. Pokračujeme krokem 9. Krok 7. V matici C najdeme nejvyšší výhodnostní číslo c. Krok 8. Otestujeme, zda lze uzly i a j zařadit do cyklu. Sečteme časy přejezdů na cyklu 1 i j 1 a činnosti prováděné v uzlech i a j. V případě, že je tento součet menší nebo roven délce cyklu, zapíšeme cestu i j do výsledného cyklu a vyškrtneme prvek krokem 10. c ji, řádek i a sloupec j. Budeme pokračovat - 28 -

Jestliže bude součet větší než délka cyklu, vyškrtneme z matice C prvek c. Pokud jsou v matici C ještě nevyškrtnuté prky, pokračujeme krokem 7. Pokud jsou všechny prvky v matici C vyškrtnuty, pokračujeme krokem 12. Krok 9. Pokud je první uzel i v cyklu z množiny U, musíme přidat do matice C sloupec i z matice A. Jestliže je poslední uzel j v cyklu z množiny U, přidáme do matice C řádek j z matice A. V obou případech potom vyškrtneme prvek C. Krok 10. c ji z matice V matici C vybereme největší prvek v řádku j a označíme ho c jk. Opět vybíráme nejvyšší hodnotu ve sloupci i a označíme ji c li. Porovnáme prvky c jk a c li. V případě, že c c, testujeme délku cyklu. Sečteme časy přejezdů na trase jk li 1 i... j k 1 a činnosti v uzlech i až k. Když bude součet větší než délka cyklu, vyškrtneme prvek c jk z matice C. Pokud jsou v řádku j nebo sloupci i nějaké nevyškrtnuté prvky, pokračujeme opět krokem 10. Jinak přejdeme na krok 12. Pokud je součet menší než délka cyklu, zařadíme uzel k na konec trasy. Vyškrtneme prvek c ki a řádek j. Provedeme substituci j k a pokud jsou v řádku j a sloupci i nevyškrtnuté prvky, pokračujeme krokem 10, jinak přejdeme na krok 12. V případě, že c c, opět otestujeme délku cyklu. Sečteme časy přejezdů na jk li trase 1 l i... j 1 a činnosti v uzlech l až j. Pokud je součet větší než délka cyklu, vyškrtneme z matice C prvek c li. Pokud jsou v řádku j nebo sloupci i nevyškrtnuté prvyk, pokračujeme krokem 10, jinak přejdeme na krok 12. Pokud je součet cesty a činností menší než délka cyklu, zařadíme uzel l na začátek cesty. Vyškrtneme prvek c lj a sloupec i z matice B. Provedeme substituci i l. Pokud jsou v řádku j a sloupci i nevyškrtnuté prvky, pokračujeme krokem 10, jinak přejdeme na krok 12. - 29 -

Krok 11. Pokud máme vyškrtanou celou matici C a v cyklu ještě není zařazen žádný uzel, zařadíme do cyklu první nezařazený uzel z množiny V a pokračujeme krokem 12. Krok 12. Na začátek a konec cyklu dosadíme uzel 1 (výchozí uzel). Pokud ještě máme nezařazené uzly, začneme nový cyklu a pokračujeme krokem 2. Pokud jsou všechny prvky zařazené, výpočet končí. Metoda nejlevnějšího vkládání Postup: Krok 1. Vybereme výchozí uzel (zvolíme uzel 1). Krok 2. Vytvoříme matici B a C podle výše uvedeného postupu. Vyškrtneme z matic B a C řádky a sloupce odpovídající již dříve zařazeným uzlům. Pokud je matice B prázdná, přejdeme na krok 6, jinak pokračujeme krokem 3. Krok 3. 1 s 1. V prvním řádku matice B nalezneme největší prvek b 1 s. Vytvoříme cestu Krok 4. Najdeme hranu i, j, která leží na vytvořeném cyklu a uzel k z množiny U, který neleží na vytvořeném cyklu tak, abychom minimalizovali výraz b ik b b. kj Hledáme uzel k, který nejméně prodlouží cyklus. Testujeme délku cyklu. Zkusíme přidat uzel k do vytvořeného cyklu. Sečteme časy přejezdů na cyklu a činnosti v uzlech. Pokud je součet menší nebo roven délce cyklu, ponecháme uzel k zařazený v cyklu a pokračujeme krokem 4. - 30 -

V opačném případě, když je součet větší než délka cyklu, vyškrtneme uzel k z cesty. Vyškrtneme také minimální výraz b ik b b a mezi ostatními hledáme nové minimum. Pokud jsou všechny výrazy vyškrtány, pokračujeme krokem 6. Krok 5. kj 1 s 1. V prvním řádku matice C nalezneme největší prvek c 1 s. Vytvoříme cyklus Krok 6. Hledáme hranu i, j, která leží na vytvořené cestě a uzel k z množiny V, který neleží na vytvořené cestě tak, abychom minimalizovali výraz c ik c kj c. Snažíme se najít uzel k, který co nejméně prodlouží cestu. Otestujeme délku cyklu. Přidáme uzel k do vytvořeného cyklu. Sečteme časy přejezdů a činnosti prováděné v uzlech. V případě, že je součet menší nebo roven délce cyklu, necháme uzel k zařazený v cyklu a pokračujeme krokem 6. Pokud je naopak součet větší než délka cyklu, vyškrtneme uzel k z cesty. Vyškrtneme také minimum výrazu c ik c c a mezi zbylými hledáme nové minimum. Pokud jsou všechny výrazy vyškrtány, pokračujeme krokem 7. Krok 7. Pokud ještě máme nezařazené uzly, pokračujeme krokem 2, v opačném případě výpočet končí. kj - 31 -

3. Aplikace v MS Excel Součástí diplomové práce je aplikace Heuristiky. Je vytvořena v jazyce Visual Basic for Applications (VBA) v programu MS Excel. Tato kapitola slouží jako manuál k aplikaci Heuristiky. Popíši zde ovládání aplikace, zadávání dat a také popis možných chybových hlášení, která se můžou objevit při běhu aplikace. 3.1 Menu Všechny ovládací prvky programu jsou na listu Menu. Obrázek 3.1 Menu Jak je patrné z obrázku 3.1, menu je rozděleno do tří částí. - 32 -

V první části nazvané Úloha obchodního cestujícího si uživatel pomocí zaškrtávacích tlačítek zvolí, kterou z heuristik chce při výpočtech použít. K dispozici má následující možnosti: metoda nejbližšího souseda, metoda výhodnostních čísel a metoda nejlevnějšího vkládání. Je možné zvolit si pro výpočet jednu nebo více heuristik současně. Ve druhé části pojmenované Rozvozní úloha má uživatel na výběr heuristiku z následujících možností: metoda nejbližšího souseda, metoda výhodnostních čísel a metoda nejlevnějšího vkládání. Při volbě rozvozní úlohy je potřeba specifikovat délku cyklu a případně i jejich počet. Pro potřeby této diplomové práce je možno zadávat dvě různé délky cyklů. V případě řešení rozvozní úlohy s jednou délkou cyklu (kapacitou) je potřeba zadat stejné hodnoty pro délku cyklu 1 a pro délku cyklu 2. V případě použití různě dlouhých cyklů je vždy potřeba zadat cyklus 2 delší než cyklus 1. Rovněž je potřeba věnovat pozornost nastavení počtu delších cyklů. Poslední část ovládacího menu tvoří dvě tlačítka. Tlačítko Nové zadání slouží k vytvoření listů pro zadávání matic a vektoru a přípravě jejich struktury pro snadnější zadávání. Tlačítkem Výpočet se spouští výpočet vybraných heuristik. 3.2 Zadávání dat Před spuštěním výpočtů je nutné zadat všechna potřebná data. K výpočtům potřebujeme znát matici vzdáleností mezi uzly, matici s časy přejezdů mezi uzly a vektor činností vykonávaných v uzlech. Matice vzdáleností musí být symetrická podle hlavní diagonály. Musí mít rozměry n n, přičemž n 3. Musíme ji zadat na list Vzdalenosti. První řádek a - 33 -

sloupec je rezervován pro záhlaví s názvy uzlů. Názvy z prvního sloupce jsou pak použity při prezentaci výsledků. Pro matici s časy přejezdů platí analogická omezení. Matice musí být symetrická podle hlavní diagonály s rozměry n n, kde n 3. Matice s časy přejezdů mezi uzly se zadává do listu Cas. Do prvního řádku a sloupce opět patří názvy uzlů. První prvek matice se zadává do buňky B2, resp. R2C2 při použití nastavení odkazů R1C1. Požadované rozměry vektoru činností jsou n 1, přičemž n 3. Zadává se do listu Cinnosti. První řádek slouží jako záhlaví a první sloupec je určen pro názvy uzlů. První prvek vektoru se zadává opět do buňky B2, resp. R2C2. Ke snadnějšímu zadávání vstupních údajů slouží tlačítko Nové zadání na listu Menu. Po jeho stisknutí se objeví následující okno (obrázek 3.2). Obrázek 3.2 Počet uzlů Do tohoto okna uživatel zadá počet uzlů. Hodnota v okně je implicitně nastavena na hodnotu 3. Počet uzlů musí být celé kladné číslo větší nebo rovno 3. V případě zadání kladného čísla, které není celé, bude zaokrouhleno. Při zadání jiných než požadovaných hodnot, např. písmen, záporných čísel apod., se objeví chybové hlášení (obrázek 3.3). Obrázek 3.3 Počet uzlů musí být celé kladné číslo větší nebo rovno 3-34 -

Při nesprávném zadání a stisknutí tlačítka OK na okně chybového hlášení se znovu objeví menu aplikace. Při vytváření nového zadání budou všechny údaje na listech Vzdalenosti, Cas a Cinnosti smazány. Po správném zadání počtu uzlů aplikace vytvoří tři nové listy a vytvoří na nich strukturu, která usnadňuje zapsání matic a vektoru. Na listu Vzdalenosti a Cas bude vytvořena následující struktura (obrázek 3.4). Na obrázku list Vzdalenosti v případě, že n = 5. Obrázek 3.4 List Vzdalenosti Listy Vzdalenosti a Cas se liší pouze textem v buňce A1. První řádek a sloupec jsou určeny pro názvy uzlů. Uzly jsou pojmenovány Uzel 1 až Uzel n. Názvy uzlů lze změnit. Aby se změna názvů projevila při prezentaci výsledků, je potřeba přejmenovat uzly v prvním sloupci na listu Vzdalenosti. Názvy uzlů v prvním řádku a na listu Cas a Cinnosti se v aplikaci nevyužívají a slouží pouze uživateli pro snadnější orientaci při zadávání dat. Na listu Cinnosti je připravena struktura znázorněná na následujícím obrázku (obrázek 3.5). Opět je uvedena ilustrace pro n 5. - 35 -

Obrázek 3.5 List Cinnosti První řádek slouží jako záhlaví. V prvním sloupci jsou uvedeny názvy uzlů. Do sloupce B uživatel zadá dobu trvání činnosti v uzlech. První uzel je výchozím uzlem a proto zde neprobíhá žádná činnost. Hodnota v této buňce je již přednastavena na hodnotu 0. Po vyplnění obou matic a vektoru lze spustit výpočet. 3.3 Výpočet Když jsou obě matice a vektor se vstupními daty vyplněny, můžeme přejít k výpočetní fázi. Výpočet heuristik se spouští tlačítkem Výpočty v menu. Nejprve je potřeba vybrat heuristiky, které chceme použít pro výpočet. Výběr se provádí zaškrtávacími tlačítky v menu. Můžeme vybrat jednu či více heuristik a můžeme také kombinovat výběr heuristik pro úlohu obchodního cestujícího s heuristikami pro výpočet rozvozní úlohy. Vždy však musí být zvolena alespoň jedna metoda. V opačném případě se objeví uživateli následující varování (obrázek 3.6). Obrázek 3.6 Není vybrána žádná heuristika - 36 -

Po stisknutí tlačítka OK varování zmizí a můžeme vybrat požadovanou heuristiku a pokračovat ve výpočtech. V případě, že uživatel nevytvořil, nebo smazal list Vzdalenosti, objeví se chybové hlášení (obrázek 3.7). Obrázek 3.7 Musí být vytvořen list Vzdalenosti a zadány hodnoty Obdobná chybová hlášení se vyskytnou i v případě chybějícího listu Cas (obrázek 3.8), resp. listu Cinnosti (obrázek 3.9). Obrázek 3.8 Musí být vytvořen list Cas a zadány hodnoty Obrázek 3.9 Musí být vytvořen list Cinnosti a zadány hodnoty V situaci, kdy listy Vzdalenosti, Cas a Cinnosti existují, ale matice Vzdalenosti nebo Cas neobsahuje žádné hodnoty, zobrazí se chybové hlášení - 37 -

(obrázek 3.10), resp. (obrázek 3.11) se souřadnicemi prvního prvku, ve kterém chybí údaje. Obrázek 3.10 Matice vzdáleností neobsahuje žádné hodnoty Obrázek 3.11 Matice časů přejezdů neobsahuje žádné hodnoty Chybějící údaje na listu Cinnosti oznamuje chybové hlášení na obrázku 3.12. Obrázek 3.12 Vektor činností nesmí obsahovat prázdné buňky Mezi další chyby, kterých se může uživatel na listu Vzdalenosti dopustit, patří neplatný rozměr matice. Matice Vzdalenosti musí být vždy čtvercová o rozměru n n. Jestliže tvrzení neplatí, objeví se chybové hlášení (obrázek 3.13). - 38 -

Obrázek 3.13 Matice vzdáleností není čtvercová Nesprávný rozměr není přípustný ani u matice Cas. V případě, že matice není čtvercová, aplikace ohlásí chybu (Obrázek 3.14). Obrázek 3.14 Matice časů přejezdů není čtvercová Matice Vzdalenosti musí být symetrická podle hlavní diagonály. Pokud to neplatí, signalizuje to následující hlášení (obrázek 3.15), ze kterého se uživatel dozví, ve kterém prvku matice k chybnému zadání došlo. Obrázek 3.15 Matice vzdáleností není symetrická podle hlavní diagonály Tvrzení o symetrii podle hlavní diagonále platí i pro matici Cas. V opačném případě to oznámí chybové hlášení (obrázek 3.16) se souřadnicemi prvku, který pravidlo porušuje. - 39 -

Obrázek 3.16 Matice s časy přejezdů není symetrická podle hlavní diagonály V případě, že uživatel nevyplní do listu Vzdalenosti kladná čísla, ale například písmena nebo jiné znaky, chybové hlášení upozorní uživatele na první buňku, ve které není číselná hodnota (obrázek 3.17). Obrázek 3.17 Matice vzdáleností neobsahuje čísla Obdobné chybové hlášení s určením nesprávně zadaného prvku se objeví i u špatného zadání do matice Cas (obrázek 3.18). Obrázek 3.18 Matice s časy přejezdů neobsahuje čísla Při zadání záporných čísel do matice Vzdalenosti chybové hlášení odkáže uživatele na první prvek v matici, ve kterém bylo pravidlo porušeno (obrázek 3.19). - 40 -

Obrázek 3.19 Matice vzdáleností obsahuje záporná čísla Zadávání záporných hodnot není přípustné ani v matici Cas. V opačném případě bude uživatel zpozorněn chybovým hlášením se souřadnicemi prvku, který porušuje toto pravidlo (obrázek 3.20). Obrázek 3.20 Matice s časy přejezdů obsahuje záporná čísla Vektor činností musí být sloupcový. Když uživatel zadá na list Cinnosti více sloupců, bude na chybu upozorněn oznámením na obrázku 3.21. Obrázek 3.21 Vektor činností musí tvořit pouze jeden sloupec V situaci, kdy uživatel nezadá do vektoru Cinnosti žádné hodnoty, upozorní ho na chybu hlášení (obrázek 3.22). - 41 -

Obrázek 3.22 Vektor činností je prázdný Pokud uživatel vyplní vektor Cinnost nečíselnými hodnotami, upozorní ho chybové hlášení (obrázek 3.23). Obrázek 3.23 Vektor činností musí obsahovat pouze čísla V případě, že bude vektor Cinnosti obsahovat záporné hodnoty, objeví se hlášení o chybě (obrázek 3.24). Obrázek 3.24 Vektor činností musí obsahovat pouze kladná čísla V aplikaci jsou nastaveny minimální rozměry matice Vzdalenosti. Při nedodržení požadavku minimálního rozměru matice Vzdalenosti n 3, upozorní uživatele hlášení (obrázek 3.25). - 42 -

Obrázek 3.25 Minimální rozměr matice vzdáleností je 3 3 Požadavek minimálních rozměrů, n 3, platí i pro matici Cas. Jejich nedodržení je oznámeno uživateli (obrázek 3.26). Obrázek 3.26 Minimální rozměr matice s časy přejezdů je 3 3 Minimální požadavek na rozměr vektoru Cinnosti je 3 1. V případě menšího počtu řádků je zobrazeno chybové okno (obrázek 3.27). Obrázek 3.27 Minimální rozměr vektoru činností je 3 1 Následují poslední, ale neméně důležité kontroly rozměrů matic a vektoru. Matice Vzdalenosti a Cas musí mít stejný rozměr n n a vektor Cinnosti musí mít rozměr n 1, kde n 3. Nejdříve jsou porovnány rozměry matic Vzdalenosti a Cas. Pokud matice nemají shodné rozměry, oznámí to uživateli chybové hlášení (obrázek 3.28). - 43 -

Obrázek 3.28 Matice vzdáleností nemá stejný rozměr jako matice časů přejezdů Další kontrola porovnává rozměr matice Vzdalenosti s počtem řádků vektoru Cinnosti. V případě nestejného rozměru je to oznámeno uživateli (obrázek 3.29). Obrázek 3.29 Vektor činností nemá stejný počet řádků jako matice vzdáleností Tyto dva testy stačí na ověření rozměrů dvou matic a vektoru. Shodný počet sloupců a řádků matice Cas a řádků vektoru Cinnosti vyplývá ze splnění předchozích dvou podmínek. Následující odstavce se týkají pouze výpočtů heuristik pro rozvozní úlohu. Údaje o délce a počtu cyklů je třeba vyplnit pouze při výpočtech rozvozní úlohy. Při výpočtu rozvozní úlohy je třeba zadat délku cyklu 1. V našem aplikačním příkladu se jedná o denní pracovní dobu. Pro tuto hodnotu platí pouze jedno omezení. Délka cyklu musí být kladné číslo. Při nedodržení tohoto předpokladu je chyba oznámena uživateli (obrázek 3.30). - 44 -

Obrázek 3.30 Délka cyklu 1 musí být kladné číslo Dalším údajem, který je potřeba vyplnit, je délka cyklu 2. Platí pro něj stejné omezení jako pro délku cyklu 1 (obrázek 3.31). Obrázek 3.31 Délka cyklu 2 musí být kladné číslo Délka cyklu 2 se použe v případě, kdy máme dvě různé délky cyklů. V aplikačním příkladu se jedná o dvoudenní pracovní dobu. V případě, že chceme využít pouze jednu délku cyklu, nastavíme hodnotu délka cyklu 2 stejnou jako délka cyklu 1. V případě, kdy je zadaná délka cyklu 2 menší než délka cyklu 1, objeví se hlášení o chybě (obrázek 3.32). Obrázek 3.32 Délka cyklu 2 nesmí být menší než délka cyklu 1 Pokaždé, když využeme dvě různé délky cyklů, musíme specifikovat počet delších cyklů 2. Hodnota počet cyklů 2 musí být vždy kladné celé číslo nebo nula. Pokud předchozí tvrzení neplatí, oznámí to uživateli chybové hlášení (obrázek 3.33). - 45 -

Obrázek 3.33 Počet cyklů 2 musí být kladné celé číslo nebo nula Po splnění všech předchozích podmínek se spustí algoritmus, který prozkoumá cesty z uzlu 1 do uzlu i + činnost v uzlu i + návrat do uzlu 1, pro i 2,3,..., n. Pokud doba trvání některé cesty přesáhne délku cyklu 2, je nabídnuta uživateli nová délka cyklu 2, aby mohly být do cyklu zařazeny všechny uzly (obrázek 3.34). Obrázek 3.34 Délka cyklu musí být minimálně Výše zmíněný algoritmus také zjistí, kolik cyklů je delších než nastavená délka cyklu 1 a pokud je uživatelem nastavený počet cyklů 2 nižší, nabídne upravenou hodnotu, aby bylo možné zařadit všechny uzly do cyklů (obrázek 3.35). Obrázek 3.35 Počet cyklů 2 musí být minimálně - 46 -

Když uživatel zadá všechny hodnoty správně, spustí se samotný výpočet všech zvolených heuristik. Výsledky heuristik se objeví na listech Vysledky i, kde i je pořadové číslo listu. - 47 -

3.4 Výsledky Výsledky vybraných heuristik se po dokončení výpočtů zobrazí na listech Vysledky. Tyto listy jsou pro přehlednost označeny vzestupně pořadovými čísly podle pořadí výpočtů. Nyní budu popisovat interpretaci výsledků. Jako ilustrace bude sloužit pro úlohu obchodního cestujícího příklad se třemi, resp. pro rozvozní úlohu se čtyřmi uzly. Nejdříve popíši interpretaci výsledků při výpočtech úlohy obchodního cestujícího se třemi uzly. Obrázek 3.36 Výsledky - úloha obchodního cestujícího Na listu s výsledky jsou uvedeny uzly v pořadí, v jakém budou ve výsledném cyklu navštíveny. Výchozí uzel je v prvním řádku tabulky a je zvýrazněn tučným písmem. U výchozího uzlu je políčko ve sloupci Činnosti proškrtnuto, protože ve výchozím uzlu neprobíhá žádná činnost. Ve sloupci jízda je uvedena hodnota 0,35. Tento údaj znamená, že doba jízdy mezí výchozím uzlem Fučíkova 153, Lužec nad Vltavou a prvním navštíveným uzlem v cyklu, Zámek Nelahozeves, Nelahozeves 1, trvá 0,35 hodiny. V posledním sloupci Vzdálenost je uvedena vzdálenost mezi výchozím uzlem Fučíkova 153, Lužec nad Vltavou a prvním navštíveným uzlem Zámek Nelahozeves, Nelahozeves 1. Tato vzdálenost činí 15,3 km. - 48 -

Ve druhém uzlu cyklu (Zámek Nelahozeves, Nelahozeves 1) je ve sloupci činnost zapsána hodnota 1. Tento údaj znamená, že činnost, která je vykonána v tomto uzlu, trvá 1 hodinu. Poslední uzel cyklu je shodný s výchozím uzlem. Opět zde neprobíhá žádná činnost. Protože je to koncový uzel cyklu, je i jízda z uzlu a vzdálenost proškrtnuta. Koncový uzel je opět zvýrazněn tučně. Pod tímto soupisem uzlů s činnostmi, časy jízd a vzdálenostmi je souhrnná tabulka. V této tabulce je pro snazší orientaci ve výsledcích uveden název heuristiky, která byla k výpočtům použita. V našem případě se jedná o metodu nejbližšího souseda. Údaj TSP v závorce za názvem metody znamená zkratku Traveling Salesman Problem. Tímto nápisem se rozlišuje, zda se jedná o rozvozní úlohu nebo v našem případě o úlohu obchodního cestujícího. V tabulce jsou uvedeny součty trvání činností, součty celkové doby strávené jízdou mezi uzly a celková ujetá vzdálenost mezi uzly. Rozdíly v prezentaci výsledků rozvozní úlohy a úlohy obchodního cestujícího ilustrujeme na následujícím výpisu výsledků. Příklad na obrázku 3.37 ukazuje příklad pro čtyři uzly. Obrázek 3.37 Výsledky rozvozní úloha Při srovnání obrázků 3.36 a 3.37 vidíme, že výpisy pro úlohu obchodního cestujícího a rozvozní úlohu jsou velmi podobné. I v této úloze je výchozí a koncový uzel zvýrazněn tučně. Na ilustraci vidíme, že výsledkem výpočtů jsou dva cykly. První cyklus začíná v uzlu Fučíkova 153, Lužec nad - 49 -

Vltavou, prochází uzly Zámek Nelahozeves, Nelahozeves 1, Senovážné náměstí 2, Praha 1 a končí opět v uzlu Fučíkova 153, Lužec nad Vltavou. Tento uzel je koncový uzel prvního cyklu. Protože ještě nebyly zařazeny všechny uzly do cyklů, začne v uzlu Fučíkova 153, Lužec nad Vltavou nový cyklus. Tento cyklus obsahuje výchozí uzel, cesta pokračuje do uzlu T. G. Masaryka 115, Ústí nad Orlicí a protože jsou již všechny uzly zařazeny do cyklů, cesta pokračuje zpět do výchozího uzlu Fučíkova 153, Lužec nad Vltavou. Ze souhrnné tabulky na konci výpisu výsledků se dozvíme, že byl výpočet proveden metodou nejbližšího souseda. Nyní je však v závorce uvedena zkratka VRP. Ze zkratky slov Vehicle Routing Problem se dozvíme, že výpočty byly provedeny algoritmem modifikovaným pro rozvozní úlohu. V tabulce jsou opět uvedeny sumace trvání činností, jízdy mezi uzly a vzdáleností mezi navštívenými uzly. - 50 -

4. Praktická část Tato kapitola je věnována řešení případu z praxe. V úvodní části popíši zadání příkladu a volbu modelů. Potom se budu zabývat sběrem a popisem dat. Provedu výpočet v programu LINGO 2 a v aplikaci Heuristiky, která je součástí diplomové práce. Na závěr zhodnotím dosažené výsledky a zhodnotím přínos jednotlivých heuristik. 4.1 Zadání problému V této části práce nastíním zadání problému, který budu řešit heuristickými metodami a v programu LINGO. Pro potřeby této diplomové práce jsem získal data od pana Jindřicha Kartáka. Jedná se o fyzickou osobu podnikající na základě živnostenského oprávnění. Předmětem podnikání je: montáž, opravy, revize a zkoušky elektrických zařízení 3. Místem podnikání je Fučíkova 153, 277 06, Lužec nad Vltavou. Získal jsem seznam padesáti adres, které revizní technik navštívil. Ke každé adrese mám také popis činnosti, kterou na dané adrese vykonal a také délku trvání této činnosti. Na začátek seznamu jsem připojil místo podnikání, které bude vždy výchozím uzlem. Mým cílem bylo naplánovat trasu, aby mohl revizní technik navštívit všechna místa v co nejkratším čase a pokud to bude možné, porovnat varianty podle nákladů. Při řešení problému jsem použil tři modely. Prvním modelem je úloha obchodního cestujícího. Řešením tohoto modelu získáme nepřerušenou trasu se všemi adresami (uzly) s návratem do výchozího uzlu. Tento model má při řešení našeho problému vážný nedostatek. Trasa, kterou získáme, je nepřerušená a revizní technik by tudíž bez přestávek musel pracovat, v lepším případě, několik dní bez přerušení, než by byl cyklus ukončen znovu v místě podnikání. To není zcela realistický předpoklad, cykly proto musí být kratší. Také zákazníci by zřejmě 2 Optimalizační systém LINGO je produktem firmy Lindo Systems Inc. (http://www.lindo.com) 3 [6] http://www.rzp.cz... - 51 -

neměli pochopení, kdyby revizní technik přel pracovat v pozdních nočních hodinách. Tento model však také vypočítám, protože může sloužit k porovnání heuristik a pokud to bude možné i k porovnání výsledku z programu LINGO. Model úlohy obchodního cestujícího není nejlepším řešením pro naši úlohu. Aby byl model realističtější, přidáme do něj pracovní dobu, tím získáme rozvozní úlohu. Pracovní dobu nastavíme na 10 hodin. Pracovní doba je o delší než běžných 8 nebo 8,5 hodin, ale v úloze zabere spoustu času cestování, proto jsem zvětšil pracovní dobu. Nyní již máme celkem realistické předpoklady. Takový model je modelem 1 rozvozní úlohy (2.18) a (2.19). Ve třetím modelu, kterým se budeme zabývat, uvolníme předpoklad pracovní doby. V modelu 1 zabere spoustu času cestování mezi uzly. Pokud zvětšíme pracovní dobu (délku cyklu), může revizní technik strávit více času podstatou svého podnikání a méně času nezbytným cestováním. V modelu 2 tedy povolíme delší pracovní dobu. Nyní máme dvě možnosti jak prodloužit pracovní dobu. První možností je zvětšit pracovní dobu o práci přesčas, např. na 12 hodin. Druhou možností je povolit služební cesty. To by znamenalo, že revizní technik bude pracovat 10 hodin, potom práci přeruší a přenocuje poblíž místa, kde se zrovna nachází. Druhý den bude znovu 10 hodin pracovat a na konci druhého dne se vrátí do výchozího uzlu. Tato varianta nese zvýšené náklady za ubytování na služební cestě, ale náklady na cestování by se měly snížit. V modelu 2 jsem se rozhodl pro druhou variantu se služebními cestami. Při zběžném nahlédnutí do adres a činností zjistíme, že např. činnost na adrese Na Průhoně 3412, Mělník 1 trvá 20 hodin. Revizní technik by musel práci přerušit, protože práci nelze vykonat v deseti hodinové pracovní době. Podobných činností najdeme ještě několik. Tento poznatek vybízí k využití služebních cest v modelu. K řešení modelů použi heuristické metody. Budu používat metodu nejbližšího souseda, metodu výhodnostních čísel a metodu nejlevnějšího vkládání. V případě, že to bude možné, použi výpočty pomocí programu LINGO. - 52 -

4.2 Popis a sběr dat K výpočtům v aplikaci Heuristiky potřebujeme znát několik údajů. Jedná se o matici vzdáleností mezi uzly, matici s časy přejezdů mezi uzly a vektor s délkami trvání činností v jednotlivých uzlech. Ze zadání problému známe pouze uzly a délky trvání činností v nich. K výpočtům musíme získat matici vzdáleností a matici s časy přejezdů. Obě matice jsem získal na serveru www.mapy.cz pomocí plánovače tras. Obrázek 4.1 Plánovač tras, první část - 53 -

Obrázek 4.2 Plánovač tras, druhá část V plánovači tras jsem vždy volil nejrychlejší cesty, protože úkolem je minimalizace potřebného času. Z okna v pravé části (obrázek 4.2) získáme údaje o celkové délce a celkovém času. Do plánovače jsem postupně zadal všechny párové kombinace 51 uzlů a získal jsem polovinu matic pod hlavní diagonálou. Údaje jsem vždy zkopíroval i do horní poloviny matice. Tím jsem získal potřebnou matici vzdáleností a matici s časy přejezdů mezi uzly. V dalších částech diplomové práce budu provádět i nákladovou analýzu. Pro analyzování nákladů musíme znát náklady vztažené na jeden ujetý kilometr. Dále při služebních cestách musíme znát i náklady na ubytování. Pokud chceme analyzovat náklady na jeden ujetý kilometr, musíme znát několik údajů. Důležitým faktorem je cena pohonných hmot a také typ vozidla. Od typu vozidla se odvíjí druh pohonných hmot, spotřeba a výpočet amortizace. Revizní technik v našem případě používá k podnikání automobil Škoda Octavia Combi 1.9 TDI. Z údajů o tomto voze budeme vycházet při dalších výpočtech. Druh - 54 -