Fakulta elektrotechnická

Podobné dokumenty
Genetické algoritmy. Informační a komunikační technologie ve zdravotnictví

Evoluční algoritmy. Podmínka zastavení počet iterací kvalita nejlepšího jedince v populaci změna kvality nejlepšího jedince mezi iteracemi

Algoritmizace prostorových úloh

Grafové algoritmy. Programovací techniky

Metaheuristiky s populacemi

5 Orientované grafy, Toky v sítích

Optimalizační algoritmy inspirované chováním mravenců

Grafové algoritmy. Programovací techniky

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

Gramatická evoluce a softwarový projekt AGE

Metody síťové analýzy

Vzdálenost uzlů v neorientovaném grafu

Prohledávání do šířky = algoritmus vlny

Evoluční výpočetní techniky (EVT)

Dynamické datové struktury III.

Projekční algoritmus. Urychlení evolučních algoritmů pomocí regresních stromů a jejich zobecnění. Jan Klíma

3. Třídy P a NP. Model výpočtu: Turingův stroj Rozhodovací problémy: třídy P a NP Optimalizační problémy: třídy PO a NPO MI-PAA

Základy umělé inteligence

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

Optimalizace. Obsah přednášky. DÚ LP - Okružní problém. Lineární optimalizace. DÚ LP - Okružní problém. DÚ LP - Okružní problém

Genetické algoritmy a jejich praktické využití

Paralelní grafové algoritmy

Grafy. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 13.

PŘEDNÁŠKA 03 OPTIMALIZAČNÍ METODY Optimization methods

Heuristické řešení problémů. Seminář APS Tomáš Müller

11. Tabu prohledávání

Základní pojmy teorie grafů [Graph theory]

Optimalizační algoritmy inspirované chováním mravenců

Dijkstrův algoritmus

VUT Brno Fakulta informačních technologií Simulační nástroje a techniky (SNT) 2014/2015 Vehicle routing problem Ant colony

bfs, dfs, fronta, zásobník, prioritní fronta, halda

Algoritmus pro hledání nejkratší cesty orientovaným grafem

07 Základní pojmy teorie grafů

TGH09 - Barvení grafů

Genetické algoritmy. Vysoká škola ekonomická Praha. Tato prezentace je k dispozici na:

Základy informatiky. Teorie grafů. Zpracoval: Pavel Děrgel Úprava: Daniela Szturcová

jednoduchá heuristika asymetrické okolí stavový prostor, kde nelze zabloudit připustit zhoršují cí tahy Pokročilé heuristiky

Seminář z umělé inteligence. Otakar Trunda

Ant Colony Optimization 1 / 26

bfs, dfs, fronta, zásobník, prioritní fronta, halda

Genetické programování

Semestrální práce z KIV/PRO. Využití Voroného diagramu pro inicializaci K-means

Náplň. v Jednoduché příklady na práci s poli v C - Vlastnosti třídění - Způsoby (algoritmy) třídění

Algoritmy na ohodnoceném grafu

Řešení: PŘENESVĚŽ (N, A, B, C) = přenes N disků z A na B pomocí C

Algoritmy a datové struktury

Třídy složitosti P a NP, NP-úplnost

Aproximativní algoritmy UIN009 Efektivní algoritmy 1

Dynamické programování

OPTIMALIZACE. (přehled metod)

Úvod do teorie grafů

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

4. NP-úplné (NPC) a NP-těžké (NPH) problémy

Úloha ve stavovém prostoru SP je <s 0, C>, kde s 0 je počáteční stav C je množina požadovaných cílových stavů

10. Složitost a výkon

Navrženy v 60. letech jako experimentální optimalizační metoda. Velice rychlá s dobrou podporou teorie

A0M33EOA: Evoluční optimalizační algoritmy

Základy informatiky. 07 Teorie grafů. Kačmařík/Szturcová/Děrgel/Rapant

Teorie grafů. Kostra grafu. Obsah. Radim Farana Podklady pro výuku pro akademický rok 2013/2014

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

PQ-stromy a rozpoznávání intervalových grafů v lineárním čase

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY

Státnice odborné č. 20

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

Stromy. Strom: souvislý graf bez kružnic využití: počítačová grafika seznam objektů efektivní vyhledávání výpočetní stromy rozhodovací stromy

Stromy, haldy, prioritní fronty

NP-ÚPLNÉ PROBLÉMY. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

Grafy. RNDr. Petra Surynková, Ph.D. Univerzita Karlova v Praze Matematicko-fyzikální fakulta.

NP-úplnost problému SAT

12. Globální metody MI-PAA

TGH08 - Optimální kostry

Grafové algoritmy. Programovací techniky

Hledáme efektivní řešení úloh na grafu

TGH05 - aplikace DFS, průchod do šířky

Problém obchodního cestujícího(tsp) Vstup: Množina n měst a vzdálenosti mezi nimi. Výstup: Nejkratší okružní cesta procházející všemi městy.

Modely teorie grafů, min.kostra, max.tok, CPM, MPM, PERT

Evolučníalgoritmy. Dále rozšiřována, zde uvedeme notaci a algoritmy vznikléna katedře mechaniky, Fakulty stavební ČVUT. Moderní metody optimalizace 1

Základní datové struktury III: Stromy, haldy

Ukážeme si lineární algoritmus, který pro pevné k rozhodne, zda vstupní. stromový rozklad. Poznamenejme, že je-li k součástí vstupu, pak rozhodnout

ZÁPADOČESKÁ UNIVERZITA V PLZNI FAKULTA STROJNÍ BAKALÁŘSKÁ PRÁCE. 2016/2017 Monika Knolová

Ant Colony Optimization

Rozdělování dat do trénovacích a testovacích množin

Algoritmy pro shlukování prostorových dat

Emergence chování robotických agentů: neuroevoluce

V každém kroku se a + b zmenší o min(a, b), tedy vždy alespoň o 1. Jestliže jsme na začátku dostali 2

Drsná matematika III 10. demonstrovaná cvičení Kostry grafů

2. úkol MI-PAA. Jan Jůna (junajan)

TGH12 - Problém za milion dolarů

3. úloha - problém batohu metodami branch & bound, dynamické programování, heuristika s testem

Použití dalších heuristik

5.5 Evoluční algoritmy

TGH06 - Hledání nejkratší cesty

FAKULTA INFORMAČNÍCH TECHNOLOGIÍ

13. Lineární programování

bfs, dfs, fronta, zásobník

Výhody a nevýhody jednotlivých reprezentací jsou shrnuty na konci kapitoly.

State Space Search Step Run Editace úloh Task1 Task2 Init Clear Node Goal Add Shift Remove Add Node Goal Node Shift Remove, Add Node

AVDAT Mnohorozměrné metody, metody klasifikace Shluková analýza

TGH02 - teorie grafů, základní pojmy

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Transkript:

České vysoké učení technické v Praze Fakulta elektrotechnická Diplomová práce Veronika Crkvová Evoluční metaheuristiky pro zobecněný problém obchodního cestujícího Katedra počítačů Vedoucí práce: Ing. Jiří Kubalík, Ph.D.

Poděkování Poděkování patří Ing. Jiří Kubalíkovi, Ph.D. za nikdy nekončící podporu, odborné vedení a hlavně velké nadšení pro věc.

Abstrakt Evoluční algoritmy jsou vhodným a často používaným způsobem, jak řešit úlohy s příliš vysokou časovou složitostí. V této práci navrhuji evoluční algoritmus, který řeší úlohu zobecněného obchodního cestujícího. Úloha zobecněného obchodního cestujícího je rozšířením klasického problému obchodního cestujícího a je také NP-těžká. Důležitým aspektem navrhovaného algoritmu je i použití heuristik a algoritmů, které lokálně vylepšují existující řešení v populaci. V experimentální části diplomové práce jsem tento algoritmus porovnala s jinými úspěšnými algoritmy řešící tuto úlohu a i když nedosahoval nejlepších výsledků, stále se dá řešení považovat za dobré. Abstract Evolutionary algorithms are suitable and often used way how to solve tasks with high time complexity. In this thesis I suggest an evolutionary algorithm which solves the generalized travelling salesman problem. The generalized travelling salesman problem is an extension of the classical travelling salesman problem and is an NP-hard problem. Important features of the proposed algorithm include heuristics and local search algorithms, which locally improve genetically evolved solutions. In the experimental part of this thesis I compared proposed algorithm with state-of-the-art algorithms designed for the generalized travelling salesman problem. My proposed algorithm didn t perform as good as the state-of-the-art algorithms, however the obtained solutions can be still considered good.

OBSAH Obsah 1 Úvod 1 2 Zobecněný problém obchodního cestujícího 3 2.1 Problém obchodního cestujícího........................ 3 2.2 Problém zobecněného obchodního cestujícího................. 3 2.3 Rešerše...................................... 4 2.3.1 Evoluční algoritmus s nepřímou reprezentací............. 4 2.3.2 Ant Colony System algoritmus..................... 5 2.3.3 Vylepšení známých technik řešení problému zobecněného obchodního cestujícího................................ 5 2.3.4 Branch-And-Cut algoritmus...................... 8 2.3.5 Memetický algoritmus s použitím speciálního operátoru křížení... 8 2.3.6 Použití diskrétního přechodového systému.............. 9 2.3.7 Memetický algoritmus s použitím heuristik pro lokální vylepšení.. 9 3 Genetický algoritmus 10 3.1 Chromozom................................... 10 3.2 Fitness...................................... 10 3.3 Populace..................................... 11 3.4 Křížení jedinců................................. 11 3.5 Mutace...................................... 12 3.6 Selekce...................................... 12 3.7 Inicializace populace.............................. 13 3.8 Obecné schéma genetického algoritmu..................... 14 3.9 Ukončení algoritmu............................... 15 4 Navržený evoluční algoritmus pro řešení GTSP 16 4.1 Základní verze navrženého evolučního algoritmu............... 16 4.1.1 Chromozom............................... 16 4.1.2 Fitness.................................. 16 4.1.3 Model GA................................ 16 4.1.4 Křížení.................................. 17 4.1.5 Mutace................................. 17 4.1.6 Inicializace počáteční populace..................... 18 4.1.7 Ukončení algoritmu........................... 19 4.1.8 Pseudokód hlavního cyklu navrženého genetického algoritmu.... 19 4.2 Heuristika nejbližšího souseda......................... 19 4.2.1 Přímá reprezentace pořadí klastrů................... 19 4.2.2 Nepřímá reprezentace pořadí klastrů................. 19 4.2.3 Vzdálenost dvou klastrů........................ 20 4.2.4 Aplikace heuristiky nejbližšího souseda................ 20 i

OBSAH 4.3 Algoritmus optimalizace klastrů........................ 22 4.3.1 Základní princip CO.......................... 22 4.3.2 Zvolení prvního klastru pro běh CO.................. 24 4.4 2-opt optimalizace elitních jedinců....................... 24 4.4.1 2-opt obecně............................... 24 4.4.2 k-opt................................... 25 4.4.3 Vlastní implementace 2-opt na elitní jedince populace........ 26 4.4.4 Očekávaný výsledek.......................... 27 4.5 Vylepšení genetického algoritmu o pertubaci populace............ 27 4.5.1 Motivace................................. 28 4.5.2 Popis pertubace populace....................... 28 4.5.3 Míra pertubace............................. 28 4.5.4 Konkrétní použití pertubace na genetický algoritmus popsaný v této práci................................... 29 4.6 Modifikace heuristiky nejbližšího souseda................... 30 4.6.1 Popis použitého algoritmu....................... 30 4.6.2 Pseudokód modifikované heuristiky.................. 30 4.7 Pravděpodobnostní 2-opt heuristika celé populace.............. 31 4.7.1 Popis implementace pravděpodobnostní 2-opt optima........ 31 5 Implementace 32 5.1 Diagram tříd programu............................. 32 5.2 TSPInstance................................... 33 5.3 Settings..................................... 34 5.4 Chromosome.................................. 35 5.5 ExpectedResults................................ 36 5.6 Main class.................................... 36 5.7 GeneticAlgorithm class............................. 37 5.8 Utils.NNUtils class............................... 37 5.9 Utils.COAlgorithm class............................ 37 5.10 Utils.TwoOptHeuristic class.......................... 38 5.11 Utils.DNNUtils class.............................. 38 5.12 TSPLibFormat................................. 38 6 Experimenty 40 6.1 Experimenty k základní verzi genetického algoritmu............. 41 6.2 Experimenty ke genetickému algoritmu vylepšeného algoritmem CO.... 42 6.3 Experimenty ke genetickému algoritmu vylepšeného o přidání algoritmu CO a 2-opt heuristiky na elitní jedince....................... 43 6.4 Experimenty ke genetickému algoritmu vylepšeného o přidání algoritmu CO, 2-opt heuristiky a modifikované verze nej- bližšího souseda......... 44 6.5 Experimenty po přidání možnosti pertubace populace............ 45 6.6 Experimenty nad verzí po přidání lokálního doladění pomocí CO algoritmu 47 ii

OBSAH 6.7 Experimenty nad verzí rozšířené o pravděpodobnostní 2-opt heuristiky.. 49 7 Závěr 51 A Obsah CD 55 B Seznam zkratek 57 C Spuštění programu 59 iii

SEZNAM OBRÁZKŮ Seznam obrázků 1 Obrázek vrstevnatého grafu z pohledu jednoho vrcholu z prvního klastru. Celkem má původní graf 4 klastry (první a poslední vrstva jsou kopie)... 22 2 Obrázek instance před použitím CO (vlevo) a po použití CO (vpravo). Lze si všimnout, že algoritmus přepočítá cestu a vymění vrcholy tak, aby pro dané pořadí klastrů byla kružnice nejkratší.................. 23 3 Obrázek instance před použitím 2-opt (vlevo) a po použití 2-opt (vpravo). 25 4 Diagram tříd programu............................ 32 iv

SEZNAM TABULEK Seznam tabulek 1 Testy základního genetického algoritmu na vybraných instancích...... 41 2 Testy genetického algoritmu vylepšeného o algoritmus CO na vybraných instancích..................................... 42 3 Testy genetického algoritmu vylepšeného o algoritmus CO a 2-opt heuristiku aplikovanou na elitní jedince........................... 43 4 Testy genetického algoritmu vylepšeného o algoritmus CO, 2-opt heuristiku a modifikovanou verzi heuristiky nejbližšího souseda na vybraných instancích. 44 5 Testy porovnání genetického algoritmu vylepšeného o algoritmus CO a 2-opt heuristiku vůči stejného algoritmu navíc rozšířeného o modifikovanou verzi heuristiku nejbližšího souseda na vybraných instancích............ 45 6 Testy genetického algoritmu vylepšeného o algoritmus CO, 2-opt heuristiku a pertubaci populace. Včetně druhé verze, která navíc využívá modifikovanou verzi heuristiky nejbližšího souseda....................... 46 7 Testy porovnání genetického algoritmu vylepšeného o algoritmus CO a 2-opt (GA CO 2OPT) vůči stejného algoritmu navíc rozšířeného o modifikovanou verzi heuristiky nejbližšího souseda (DNN Modif). Vůči stejným dvěma, ale rozšířených o pertubaci populace - pert GA a pert DNN........... 47 8 Testy porovnání genetického algoritmu vylepšeného o algoritmus CO, 2-opt heuristiku a pertubaci (pert GA), stejného algoritmu navíc rozšířeného o modifikovanou verzi heuristiky nejbližšího souseda (pert DNN). Vůči stejným dvěma, ale rozšířeným o lokální doladění jedinců pomocí CO - lco GA a lco DNN..................................... 47 9 Testy genetického algoritmu vylepšeného o algoritmus CO, 2-opt heuristiku, pertubaci populace a lokální doladění pomocí CO. Včetně druhé verze, která navíc využívá modifikovanou verzi heuristiky nejbližšího souseda...... 48 10 Testy genetického algoritmu vylepšeného o algoritmus CO, pertubaci populace, lokální doladění elitních jedinců pomocí CO a pravděpodobnostní 2-opt heuristiky na celou populaci. Včetně druhé verze, která navíc využívá modifikovanou verzi heuristiky nejbližšího souseda.............. 49 11 Testy porovnání genetického algoritmu vylepšeného o algoritmus CO, 2-opt heuristiku na elitní jedince, pertubaci populace, lokální doladění elitních jedinců pomocí CO (lco GA) a stejného algoritmu navíc rozšířeného o modifikovanou verzi heuristiky nejbližšího souseda (lco DNN). Vůči stejným dvěma, ale 2-opt heuristika na elitní jedince byla vyměněna za pravděpodobnostní 2-opt heuristiku - p2opt GA a p2opt DNN................... 50 12 Obsah CD.................................... 55 13 Seznam zkratek................................. 57 v

SEZNAM ALGORITMŮ Seznam algoritmů 1 Základní schéma genetického algoritmu.................... 14 2 Základní schéma navrženého evolučního algoritmu pro řešení GTSP.... 18 3 Algoritmus heuristiky nejbližšího souseda pro získání přímého pořadí klastrů 21 4 Schéma CO algoritmu............................. 24 5 Schéma 2-opt algoritmu............................ 26 6 Pseudokód použití pertubace nad daným genetickým algoritmem...... 29 7 Schéma modifikace heuristiky nejbližšího souseda.............. 31 vi

1 ÚVOD 1 Úvod Tato práce se zabývá řešením úlohy zobecněného cestujícího pomocí genetického algoritmu. Jedná se o úlohu, kde máme zadáno několik měst, která jsou rozdělena do skupin. Jejím cílem je najít cestu, která začne a skončí ve stejném městě a která navíc navštíví právě jedno město z každé skupiny (žádné město ale nesmí být navštíveno dvakrát). Zobecněný problém obchodního cestujícího je NP-těžký problém, který má mnoho uplatnění jako například plánování trasy letadel nebo doručování poštovních zásilek. Díky tomu, že se jedná o NP-těžký problém, je vhodné použít pro jeho řešení evoluční algoritmy. Konkrétně je často pro řešení použit genetický algoritmus, který při hledání řešení používá podobné principy, jako při vývoji živočichů v přírodě. Každé řešení pak považujeme za jedince a těchto řešení vždy máme celou množinu (populaci). V populaci se poté řešení kombinují různě mezi sebou (tzv. křížení), nebo podstupují mutaci (náhodně změní nějakou část řešení). Na úlohu zobecněného cestujícího bylo historicky ve vědeckých pracích použito již mnoho přístupů. Najdeme zde řešení, kdy se zobecněná úloha obchodního cestujícího převede na asymetrickou úlohu obchodního cestujícího a vyřeší se nějakým známým solverem pro tuto úlohu [5]. Dále lze úlohu řešit pomocí lineárního programování [3] nebo například Ant Colony System algoritmem [9]. Často se autoři uchylují k řešení úlohy pomocí genetického algoritmu [4] [1]. Pro velké instance úlohy všechny tyto nalezené přístupy nevracejí optimální, ale pouze suobtimální řešení. Tato práce řeší úlohu zobecněného obchodního cestujícího pomocí genetického algoritmu, který navíc využije heuristiku nejbližšího souseda. V průběhu tvoření nové populace budou navíc na jedince aplikovány různé algoritmy a heuristiky, které se běžně používají jako součást jednotlivých návrhů řešení tohoto problému. Jedná se o 2-opt heuristiku, která je jednou z nejčastěji používaných heuristik pro řešení jak problému obchodního cestujícího, tak zobecněného obchodního cestujícího. Dále je použit algoritmus Cluster Optimization (CO algoritmus), který byl představen panem Fischetti a dalšími v roce 1997 [3]. CO algoritmus dokáže najít nejkratší řešení pro předem definované pořadí klastrů. Také se pokusím vylepšit použitou heuristiku nejbližšího souseda tak, že bude nový jedinec zároveň přebírat od rodiče celé části jeho kružnice. Kvůli předčasné konvergenci řešení do suboptima bude nakonec do celého algoritmu také přidána pertubace populace. To je proces, který, pokud se nezmění hodnota nejlepšího řešení po několik generací, kompletně pozmění podobu jedinců v populaci tak, aby při další aplikaci algoritmu mohlo být nalezeno jiné optimum. Cílem této práce je přiblížit se a nebo i překonat výsledky ostatních publikovaných prací na toto téma. Součástí řešení je i postupné přidávání různých vylepšujících heuristik a algoritmů do stávajícího řešení tak, aby algoritmus ideálně dosahoval stále lepší výsledky. V druhé kapitole si představíme problém zobecněného obchodního cestujícího a pro- 1/60

1 ÚVOD jdeme důležité práce, které se řešením blížily navrhovanému algoritmu. V třetí kapitole si poté obecně popíšeme genetické algoritmy a následně ve čtvrté kapitole si konkrétně popíšeme navržený evoluční algoritmus pro řešení problému zobecněného obchodního cestujícího. Dále si v podkapitolách dopodrobna popíšeme obecný popis heuristiky nejbližšího souseda a její konkrétní použití v genetickém algoritmu. Další podkapitoly jsou přidávány přesně tak, jak budou v experimentech přidávány vylepšení algoritmu. Nejprve byl do základní verze přidán CO algoritmus, dále heuristika 2-opt na elitní jedince, následně byla vyzkoušena modifikace nejbližšího souseda taková, která dědí části cesty od rodičovského řešení. Jako další vylepšení se do algoritmu přidala možnost pertubace populace a nakonec byla 2-opt heuristika použita na celou populaci (tedy nejen na elitní jedince). Pátá kapitola se věnuje vysvětlení implementace programu, který byl napsán na základě předchozích kapitol. Šestá kapitola se věnuje experimentům. Experimenty jsou seřazeny tak, jak byly postupně přidávány jednotlivá vylepšení do algoritmu a jsou vždy popsány i s příslušnými výsledky. 2/60

2 ZOBECNĚNÝ PROBLÉM OBCHODNÍHO CESTUJÍCÍHO 2 Zobecněný problém obchodního cestujícího V této sekci si představíme problém zobecněného obchodního cestujícího a také si uvedeme přehled existujících přístupů pro řešení zobecněného obchodního cestujícího. 2.1 Problém obchodního cestujícího Úloha obchodního cestujícího neboli tzv. Travelling Salesman Problem (zkráceně TSP) je NP-těžký problém, což znamená, že zatím pro tento problém nebyl nalezen polynomiální deterministický algoritmus. Laicky popsáno máme několik bodů na mapě (města) a obchodní cestující má procestovat všechny tak, aby žádné nenavštívil vícekrát a skončil ve městě, kde začal. Matematicky máme neorientovaný úplný graf s hranami, které jsou ohodnoceny přirozeným číslem. Úplný graf znamená, že mezi všemi vrcholy v grafu vede hrana. Cílem úlohy je najít nejkratší hamiltonovskou kružnici (taková kružnice, která projde každý vrchol v grafu právě jednou). Úloha může být nadefinována jako symetrická nebo asymetrická. Symetrická znamená, že vezmeme-li vzdálenost z bodu v 0 do v 1 v grafu, je přesně stejná, jako vzdálenost z v 1 do v 0. U asymetrické úlohy může být vzdálenost z bodu v 0 do v 1 jiná, než vzdálenost z v 1 do v 0. Díky velké obtížnosti úlohy v kombinaci s praktickým využitím v praxi vzniklo větší množství heuristik, které pomáhají úlohu řešit. Příkladem takové heuristiky je 2-opt algoritmus, který je popsán v samostatné kapitole této práce. 2.2 Problém zobecněného obchodního cestujícího V této práci je hledáno efektivní řešení právě problému zobecněného obchodního cestujícího neboli tzv. Generalized Travelling Salesman Problem (zkráceně GTSP). Ten vychází z problému obchodního cestujícího, který je obecně popsán výše. Nyní si problém GTSP do podrobna popíšeme. Nechť V = {1, 2,..., n} je množina n vrcholů, které jsou rozděleny do m neprázdných podmnožin V = C 1 C 2 C m, které nazýváme klastry. Platí, že i, j {1... m}, kde i j je C i C j =. Pro účely této práce budeme uvažovat, že mezi všemi vrcholy vede hrana s kladným ohodnocením a platí, že vzdálenost mezi body v i a v j zn. d i,j je rovna vzdálenosti d j,i. Dále také předpokládáme, že mezi body platí tzv. trojúhelníhová nerovnost, tedy že v i, v j, v k platí d i,j d i,k + d k,j. 3/60

2 ZOBECNĚNÝ PROBLÉM OBCHODNÍHO CESTUJÍCÍHO Úkolem je najít v grafu nejkratší kružnici, která pro každý klastr projde právě jedním jeho vrcholem. Obyčejná úloha obchodního cestujícího je tedy zvláštní případ zobecněného problému obchodního cestujícího, kdy mají všechny klastry přesně jeden vrchol. Laicky popsáno by se úloha dala přirovnat k problému obchodního cestujícího, kde ale máme města rozděleny do krajů a obchodní cestující má v každém kraji navštívit právě jedno město (a nenavštívit žádné jiné město ve stejném kraji) tak, aby jeho cesta byla co nejkratší a skončila přesně ve městě, ve kterém začala. 2.3 Rešerše V této části postupně projdeme práce, které měly podobné téma, jako tato diplomová práce. Některé byly přímou inspirací pro zvolené řešení problému. 2.3.1 Evoluční algoritmus s nepřímou reprezentací Tato publikace [7] se zabývá evolučním algoritmem použitým pro řešení tzv. routing problémů (jako například problém obchodního cestujícího, Vehicle Routing Problem, Job Shop Scheduling Problem a jejich variant). Jedním z nejdůležitějších aspektů je využití heuristiky nejbližšího souseda, která byla modifikována a aplikována i v této práci. Chromozom se skládá z prioritní fronty vrcholů, na které aplikuje algoritmus heuristiku nejbližšího souseda. Platí, že jedno řešení může být reprezentováno více chromozomy, ale zároveň některé permutace mohou být nedosažitelné. Algoritmus postupně prochází tuto permutaci měst (tedy jeden konkrétní chromozom) a vybírá k nim nejbližšího souseda tak, aby nevznikl cyklus. Pokud procházený bod není krajním bodem komponenty, nalezne nejbližšího souseda pro jeden z krajních bodů této komponenty (vybere ten, který je výhodnější). Jako operátor křížení je použit tzv. order-based crossover, který byl použit i v této práci. Pracuje tak, že prvního rodiče náhodně vybere pozice a nakopíruje města z těchto pozic na stejné pozice do vznikajícího potomka. Zbylá volná místa v potomkovi zaplní z druhého rodiče tak, že města bere od začátku chromozomu v rodičovském chromozomu a vkládá dosud nepoužitá města na dosud nezaplněná místa v potomkovi. Mutace náhodně změní pořadí nějakého města v chromozomu. Model použitého genetického algoritmu je tzv. Iterated evolutionary model. Je to elitistický model, který vybere N nejlepších jedinců a ty přímo zkopíruje do nové generace. Zbytek populace tvoří nově vytvoření jedinci. Ti vznikli buď jako výsledek mutace chromozomu z předchozí gene- race, nebo po křížení, kdy první rodič byl vybrán náhodně z množiny nejlepších jedinců a druhý vybrán pomocí turnajového výběru (velikost turnaje 4/60

2 ZOBECNĚNÝ PROBLÉM OBCHODNÍHO CESTUJÍCÍHO zvolili 3). Každý jedinec, který vznikne křížením je dále vystaven mutaci s předem určenou pravděpodobností mutace. Pokud se nejlepší řešení nezmění po několika generacích vývoje, je populace změněna za pomoci procesu pertubace populace. 2.3.2 Ant Colony System algoritmus Práce [9], která k řešení úlohy zobecněného obchodního cestujícího využívá tzv. Ant Colony System algoritmus. Jde o algoritmus, který při řešení napodobuje hledání nejkratší cesty za jídlem, jako to dělají v přírodě mravenci. Ti zanechávají na zemi feromonovou stopu a ta je pak nejsilnější na místech, kterými prošlo nejvíce jedinců. Jejím cílem je ukázat, že jejich metoda lokálního prohledávání vylepší výkon ACS algoritmu a tím z něj udělá jednoho z nejlepších heuristických algoritmů řešící GTSP. Při inicializaci algoritmu nejprve náhodně rozestaví K mravenců. Další uzly se vybírají z množiny uzlů ještě nenavštívených klastrů konkrétního mravence. V každé iteraci vyberou pro každého mravence jeden další vrchol z nějakého ještě nenavštíveného klastru (buď podle nejsilnějšího feromonu na všech možných hranách, nebo náhodně) a upraví sílu feromonu právě prošlé hraně. Po N-1 krocích dokončí každý mravenec kružnici v grafu (taková kružnice je zároveň validní řešení problému zobecněného obchodního cestujícího). Na konec cyklu se vezme doposud nejlepší nalezené řešení a upraví se feromon po jeho celé kružnici. Ukončovací podmínkou je počet cyklů. Algoritmus využívá lokální heuristiku na vylepšení řešení. Aplikuje 3-opt heuristiku a tzv. CO neighborhood algoritmus. CO ve zkratce znamená, že pro již vytvořenou kružnici vezme její pořadí klastrů a vytvoří vícevrstvý graf (vrstvy jsou vrcholy z jednotlivých klastrů) a hrany povolí jen mezi nimi. Poté vylepší minimální cestu v tomto multigrafu a to je nová kružnice T (pro toto pořadí klastrů nejkratší možná). Při 3-opt heuristice hledá okolí existující kružnice, které se liší v maximálně 3 hranách. CO algoritmus i k- opt heuristika jsou dále vysvětleny v této práci jako zvláštní kapitoly, protože se v mírné modifikaci využívají i v navrhovaném algoritmu v této práci. 2.3.3 Vylepšení známých technik řešení problému zobecněného obchodního cestujícího V práci [6] vylepšují již známé techniky GTSP neighborhoods (původně dobré v hledání řešení, ale pomalé) tak, že jejich výpočet zrychlují pomocí heuristik. V úvodu práce říká, že Fischetti a kol. pomocí branch-and-bound algoritmu (1997) vyřešili instance pro počet klastrů < 90 a řešit větší instance k optimalitě je stále těžké. Používají se různé heuristické algoritmy pro nalezení přibližného řešení. Tato práce detailně rozebírá různá GTSP neighborhoods a detailně zkoumá důsledek aplikace různých známých 5/60

2 ZOBECNĚNÝ PROBLÉM OBCHODNÍHO CESTUJÍCÍHO algoritmů pro lokální vylepšení. Navrhovaná vylepšení značně zrychlila běh známých algoritmů na řešení problému zobecněného obchodního cestujícího. Nicméně v této práci se stále u velkých instancí nedostali k uspokojujícím výsledkům oproti známým optimům. Rozdělují GTSP neighborhoods do 3 tříd: 1. Cluster optimization neighborhood (CO neighborhood): Nové řešení zachová pořadí navštívených klastrů, ale může změnit použité vrcholy v klastru. 2. TSP - inspired neighborhoods: Používají se techniky pro TSP na řešení GTSP. Pořadí klastrů, při vytváření nové kružnice, je změněno. 3. Fragment optimization neighborhoods: nové řešení se od starého řeší jen ve velice malé části. Tyto 3 třídy řešení si dále více popíšeme, protože tato práce byla velkou inspirací pro řešení popsané v této práci. Byla využita především první třída z těchto 3 tříd. Cluster optimization neighborhood Z původní kružnice T se vytvoří vrstevnatý graf. Jednotlivé vrstvy tvoří klastry v pořadí, ve kterém by byly v T. Hrany jsou vedeny pouze mezi sousedními klastry. V původní kružnici T zafixujeme jeden klastr a budeme hledat nejkratší kružnici v tomto vrstevnatém grafu (postupně pro každý vrchol ze zafixovaného klastru). Jako novou kružnici vybereme tu nejkratší nalezenou. CO byl představen panem Fischetti a dalšími v roce 1997. Volba klastru, který se zafixuje, je libovolná. Vždy najdeme nejlepší vylepšení v tomto pořadí klastrů. K zafixování je početně nejvýhodnější vzít nejmenší klastr (sníží časovou náročnost). Dále metodu vylepšují pomocí redukce zafixovaného klastru (lze odstranit vrchol, pokud pro každou dvojici vrcholů z klastru před ním a za ním existuje cesta, která je lepší vzít přes jiný vrchol zafixovaného klastru). Hledání nejkratší cesty ve vrstevnatém grafu je provedeno pomocí postupné redukce prostředních vrstev. Vrstvu nahradíme hranami, které by odpovídaly nejkratší cestě přes vrcholy mazané vrstvy mezi vrcholy vrstev sousedních. Toto se opakuje m - 2 krát (kde m je počet klastrů), dokud nezbude pouze zafixovaná vrstva a kopie zafixované vrstvy (což stále reprezentuje kružnici). V práci je ukázán důkaz, že je lepší na odstranění vybírat vrstvy s větším počtem uzlů. Navrhli algoritmus na výběr vrstvy, která se má redukovat. Konkrétně se vypočte výsledek velikosti zkoumané vrstvy vynásobenou vrstvou před ní a pak tou za ní. Jsou tedy 2 případy: V prvním se vypočítá, co by se stalo, kdyby byla vymazána vrstva před tou zkoumanou a v druhém co by se stalo, kdyby se vymazala až ta následující. 6/60

2 ZOBECNĚNÝ PROBLÉM OBCHODNÍHO CESTUJÍCÍHO Takto jsou vždy prozkoumány možnosti u druhé a třetí vrstvy a vždy je jedna z okolních vrstev poté smazána a pokračuje se, dokud v grafu existují více než dvě vrstvy. Jejich testy ukázaly, že redukce velikosti klastru je velice efektivní. TSP-inspired neighborhood částí: Renaud a Boctor (1998) navrhli problém rozdělit do dvou 1. Použití TSP neighborhoods techniky na nalezení pořadí klastrů. 2. Poté na toto pořadí aplikovat CO. Nicméně bylo již dokázáno, že tento přístup nezaručí nalezení nejkratší cesty. TSP neighborhoods známé techniky: k-opt: Najde všechny kružnice, které jsou rozdílné od nalezené v maximálně k hranách. Insertion neighborhood: Všechny kružnice, které vzniknou tak, že odebereme vrchol a vložíme ho v dané kružnici na libovolnou pozici jinam. Swap (neboli Exchange): Všechny nové kružnice lze vytvořit náhodným vyměněním jejich dvou vrcholů (změna jejich pořadí). Lin-Kernigan: Je použita heuristika založená na k-opt, která nefixuje hodnotu k pro celý běh algoritmu. Nemá fixní velikost neighborhood, a proto není v této práci zahrnutá. Myšlenkou je rozšířit existující kružnici pomocí jedné z rychlých heuristik a pokud bude kružnice kratší, než ta původní, aplikujeme navíc ještě jednu z pomalejších heuristik (v této práci je to CO). Navíc dokázali, že obrácený postup by byl časově náročnější a vedl by ke stejným výsledkům. Speciálním případem je tzv. global adaptation: Je to další možnost uplatnění TSP neighborhoods. Spočívá v tom, že je CO aplikována na každou vygenerovanou kružnici ještě před tím, než je ohodnocena. V této práci je tato myšlenka ještě rozšířena o to, že generování kružnic není náhodné, ale kružnice jsou generovány po sobě tak, aby se vypočtené nejkratší cesty mezi body daly znovu využít. To podstatně zkracuje dobu běhu původního algoritmu. Další možnou technikou spadající pod tuto kapitolu je použití 2-opt a po každé jeho aplikaci na kružnici T, opět prozkoumat celé jeho neighborhood. (Lze i pro 3-opt, ale výpočet je pomalejší). Dále je možné použít insertion a swap a poté opět CO algoritmus. Nicméně swap se nevyplatí, pokud je řešení již blízko optimu. 7/60

2 ZOBECNĚNÝ PROBLÉM OBCHODNÍHO CESTUJÍCÍHO Fragment optimization neighborhood Jde o pouze lokální úpravy kružnice - malé části. Upraví se jen určitá množina po sobě následujících uzlů (velikosti k). Buď pomocí tzv. branch and bound algoritmu nebo dynamického programování (které je zde zvolené jako kombinace Held a Karpova TSP algoritmu s hledáním nejkratší cesty ve vrstevnatém grafu). 2.3.4 Branch-And-Cut algoritmus Cílem této práce [3] je efektivně řešit úlohu zobecněného obchodního cestujícího. Zaměřili se tedy především na rychlost běhu. Nejprve definovali LP problém, který řeší GTSP. Jako výslednou kružnici obsahující alespoň jeden vrchol z každého klastru. Postupují tak, že počítají lower bound a postupně jí v každé iteraci zpřísňují. Poté postupně přidávají další podmínky a přibližují se tak k řešení. Dodržuje se obecně známý branch and cut algoritmus. 2.3.5 Memetický algoritmus s použitím speciálního operátoru křížení Cílem této práce [1] je výrazně zrychlit existující řešení GTSP. Práce řeší GTSP pomocí memetického algoritmu (kdy používá genetický algoritmus a lokální heuristiky na doladění řešení). Hlavním bodem této práce je její operátor křížení. Jako chromozom mají pořadí klastrů (první a poslední jsou identické). V práci ohodnocují délku kružnice pomocí Renaud a Boctor Shortest tour algoritmu. Vytvoří se vrstevnatý graf klastrů a potom se počítá vzdálenost v polynomiální složitosti. Mutace probíhá tak, že nejprve vyberou jedince k mutaci podle pravděpodobnosti mutace a poté náhodně prohodí pořadí dvou klastrů a poté opět najdou nejkratší cestu. Operátor křížení nejprve vybere matčinný a otcovský chromozom. Poté všechny města z matčinného vloží do otcovského tak, že je vkládá podle pořadí v matčinném chromozomu tak, aby vzdálenosti u nově vloženého po vložení byly minimální a aby v nově vznikajícím nebyly nikdy stejné klastry hned vedle sebe. Vznikl tak redundantní chromozom, který je potřeba redukovat. Pro každou vrstvu jsou vytvořeny vrcholy příslušející jednotlivým městům a hrany vedou jen ve směru této sekvence. Poté je hledána nejkratší cesta v grafu, která splňuje, že každý klastr navštíví pouze jednou. Tato cesta je hledána pomocí dynamického programování, kdy je využit algoritmus navržený Feilletem a kol. tzv. Elementary Shortest Path Problem with Resource Constrains [2] a zároveň je to rozšíření klasického Bellmanova labeling algoritmu. 8/60

2 ZOBECNĚNÝ PROBLÉM OBCHODNÍHO CESTUJÍCÍHO 2.3.6 Použití diskrétního přechodového systému Práce [12] řeší problém zobecněného obchodního cestujícího pomocí tzv. diskrétního přechodového systému (discrete state transition algorithm). Autoři vezmou platné řešení tohoto problému a postupně na toto řešení v každé iteraci aplikují několik operátorů, které pozmění pořadí klastrů. Toto pořadí je modifikováno pomocí CO algoritmu (které pro dané pořadí klastrů vybere co nejvýhodnější body z jednotlivých klastrů). Použité operátory jsou swap (prohození klastrů), insert (vložení klastru na jinou pozici), symmetry (otočí pořadí podsekvence klastrů kružnice), k-circle a k-shift. 2.3.7 Memetický algoritmus s použitím heuristik pro lokální vylepšení Cílem této práce [4] je ukázat nový memetický algoritmus se sílou v lokálním prohledávání, které překoná známé heuristiky na GTSP v kvalitě řešení a délce běhu algoritmu. První generace genetického algoritmu obsahuje řešení, které je nejprve náhodně vygenerováno a poté je vylepšeno jako lokální minimum. Poté probíhá reprodukce, křížení a mutace. Operátor křížení je modifikované dvoubodové křížení, kdy ze dvou rodičovských jedinců vznikne jeden potomek. Mutace probíhá tak, že se vybere fragment jedince a ten se posune na jinou pozici. Ukončovací podmínka algoritmu je ta, že se fitness nejlepšího řešení několik generací po sobě nezměnila. Na každém nově vzniklém jedinci, který patří do nové generace, je spuštěno několik heuristik lokálního vylepšení řešení. Např. 2-opt, direct 2-opt, swaps, cluster optimization algoritmus atd. 9/60

3 GENETICKÝ ALGORITMUS 3 Genetický algoritmus Genetické algoritmy řadíme mezi evoluční algoritmy, které navíc obsahují například evoluční programování, genetické programování a evoluční strategii. Je to algoritmus, který se snaží aplikovat Darwinovu teorii přirozeného výběru a zároveň Mendelovu teorii genetiky na množinu řešení. Na každé řešení je v tomto algoritmu pohlíženo jako na jedince. Algoritmus se snaží do další generace přenést prvky řešení, které byly úspěšnější než ostatní. Další řešení vznikají spojením původních řešení (tedy křížením jedinců v populaci) nebo i úpravou stávajících (jedinec může projít mutací). Takto je postupně prohledáván stavový prostor řešení a tím se hledají stále lepší řešení problému, až algoritmus dokonverguje. Genetické algoritmy jsou používány především na problémy, které neexistuje použitelný exaktní algoritmus. Příkladem takových problémů jsou jistě NP-těžké nebo NP-úplné problémy. 3.1 Chromozom Každé řešení je zakódováno do tzv. chromozomu. Jeho reprezentaci nazýváme genotyp, zatímco interpretaci reprezentace fenotyp. Chromozom se dále skládá z genů. Gen může nabývat různých hodnot, tedy například celé číslo, reálné číslo nebo hodnotu zastupující true/false. Například problém batohu může mít chromozom, jehož genotyp vypadá takto [true, true, f alse] Jeho význam (fenotyp) je, že do batohu jsou vybrané položky 1 a 2, zatímco 3 nikoliv (podle hodnot true/false). Nebo například pro úlohu obchodního cestujícího může vypadat chromozom takto [3, 1, 2, 4] Znamená to, že kružnici složíme tak, že postupně spojíme bod 3 s 1, 1 s 2, 2 s 4 a 4 s 3. 3.2 Fitness Pro genetický algoritmus je zásadní, aby bylo možné ke každému řešení přiřadit číslo, které odpovídá kvalitě jeho řešení. Takové ohodnocení jedince nazýváme jeho fitness. V přímém důsledku tedy potom lze dvě řešení porovnat mezi sebou a rozhodnout, které 10/60

3 GENETICKÝ ALGORITMUS řešení je lepší. Každý genetický algoritmus má tedy tzv. fitness funkci, která na vstupu dostane chromozom a na výstupu vrátí fitness daného jedince. Např. u problému obchodního cestujícího je fitness řešení délka kružnice, která je reprezentována chromozomem. 3.3 Populace Populací v genetickém algoritmu rozumíme množinu jedinců (chromozomů). Je to množina aktuálně zkoumaných řešení. Při křížení jsou jedinci vybíráni z populace a mutace probíhá opět nad jedinci, kteří jsou v aktuální populaci. 3.4 Křížení jedinců Křížení se snaží nakombinovat dvě řešení tak, aby vzniklo nové, rozdílné od obou původních. Nejprve jsou z populace procesem selekce vybráni 2 rodičovské chromozomy (selekci si blíže popíšeme níže). Poté vznikne jeden nebo dva jedinci na základě kombinace genů z prvního a druhého rodiče. O tom, jak jsou jednotlivé geny poděděny z rodičovských chromozomů rozhoduje vybraný operátor křížení. Dále si uvedeme některé známé operátory křížení. Jednobodové křížení Při jednobodovém křížení ze dvou rodičovských chromozomů vzniknou dva potomci. Nejprve se zvolí pozice v chromozomu. Podle té se potom oba chromozomy rozdělí na dvě části. První potomek vznikne jako první část z prvního rodiče a druhá část z druhého rodiče. Druhý potomek vznikne obdobně jako první část z druhého rodiče a druhá část z prvního rodiče. Dvoubodové křížení Je obdobné jako jednobodové, ale v tomto případě je potřeba chromozomy rozdělit na 3 části. Vybereme tedy dvě fixní pozice a podle nich oba rodičovské chromozomy na 3 části rozdělíme (nazvěme je levá, prostřední a pravá). Poté první potomek vznikne jako složení levé a pravé části z prvního rodiče a prostřední z druhého (v pořadí levá, prostřední a pravá část). Druhý potomek vznikne opět obdobně, ale podědí levou a pravou část z druhého rodiče a jeho prostřední překopírujeme z prvního rodiče. Uniformní křížení Při tomto křížení zvolíme tzv masku. Na masku můžeme například nahlížet jako na pole true/false hodnot, které je stejně dlouhé jako chromozom. Poté vygenerujeme prvního potomka jako kombinaci genů z true pozic z prvního rodiče a genů z false pozic hodnot z druhého rodiče. Druhého potomka podobně, ale prohodíme rodiče, ze kterého vezmeme true pozice a false pozice. 11/60

3 GENETICKÝ ALGORITMUS Aritmetické křížení Pod toto křížení patří například použití některého z logických operátorů AND, OR, XOR (pokud vezmeme chromozomy, které mají hodnoty genů rovny true nebo false). Logický operátor je potom aplikován mezi geny, které jsou v rodičovských chromozomech na stejné pozici. Pro chromozomy, které mají geny reprezentované reálnými čísly to může být například průměr jednotlivých genů na stejných pozicích v rodičovských chromozomech. Operátorů křížení existuje mnoho. Často jsou aplikovatelné pouze na jeden typ úlohy (byly pro tento ty úlohy přímo navrženy). Zde jsem uvedla jen zlomek z množství, které existuje. 3.5 Mutace Mutace představuje náhodný prvek, který často způsobí, že algoritmus prohledá i jinou část stavového prostoru řešení, než kam původně algoritmus konvergoval. Proces mutace prochází celou populaci a s pravděpodobností mutace náhodně pozmění vybraného jedince. Pokud například máme chromozomy, které mají geny reprezentované hodnotami true/false, potom projde chromozom a náhodně mu může změnit hodnoty z true na false nebo obráceně. Mutace může také například prohodit pořadí dvou náhodně vybraných genů v chromozomu. 3.6 Selekce V genetickém algoritmu musíme často vybrat z populace nějakého jedince. S tímto jedincem můžeme například počítat jako s rodičem při křížení, nebo ho rovnou překopírovat do další generace řešení. V procesu selekce je důležité zvýhodnit jedince, kteří mají lepší fitness před jedinci s horší fitness. Selekce ale musí mít zároveň i element náhody tak, aby nebyla nejlepší řešení preferována příliš (potom hrozí předčasná konvergence do suboptimálního řešení úlohy). Ruletová selekce (Roulette-wheel selection) Je to asi nejčastěji zvolená selekce. Vezme se imaginární ruletové kolo, které je rozdělené na části, které odpovídají jednotlivým chromozomům z populace. Každý chromozom má tak velkou část, že to odpovídá velikosti jeho fitness vůči hodnotám fitness napříč populací (je to tedy různě veliká výseč z kruhu, přičemž tyto výseče jsou navzájem disjunktní). Pro každého jedince je jeho procentuální d i část kola rulety spočtena vzorcem: d i = f i N j=1 f j 100, i {1,.., N} 12/60

3 GENETICKÝ ALGORITMUS Kde N je počet jedinců v populaci a f i je fitness i-tého jedince. Poté, co máme ruletové kolo rozvrženo, náhodně vybereme nějakou pozici na okraji. Vyhraje jedinec, kterému patří daná výseč. Pořadová selekce (Rank selection) Tato selekce je velice podobná ruletové selekci, protože opět využívá ruletové kolo pro rozhodnutí. Rozdíl je v tom, na jaké části je kolo rozděleno. Nejprve kolo rozdělíme na p stejně velkých částí, kde p = N i. Poté jedince v populaci seřadíme podle fitness tak, aby nejhorší byli na začátku této seřazené posloupnosti. Posloupnost postupně projdeme a první jedinec dostane přesně jeden díl, druhý dva, třetí o jeden více a tak dále. Vezměme například případ, kdy jedinec P 1 má fitness 50 a jedinec P 2 má fitness 1. Potom v ruletové selekci by první jedinec zabíral 50 z kola, zatímco jedinec P 51 2 by měl jen 1 z kola. Vezmeme-li ale pořadovou selekci, potom bude mít jedinec P 51 1 2 z kola a jedinec 3 1 P 2 z kola a šance na vybrání jedince P 3 2 se zvedne. i=1 Turnajový výběr (Tournament selection) Pro každý výběr jedince z populace se uspořádá tzv. turnaj. Na začátku se zvolí velikost turnaje K a poté přesně tolik jedinců zcela náhodně vybereme z populace. Nakonec porovnáme fitness jedinců, kteří se do K -tice dostali a zvolíme toho, který má nejlepší fitness. Velikostí turnaje můžeme přímo řídit, zda budou zvýhodněni silnější nebo slabší jedinci. Velmi malá velikost turnaje znamená větší šance pro horší jedince. Toto byly některé z důležitých selekcí, které se u genetických algoritmů využívají. Stejně jako operátorů křížení jich je ale mnoho. Selekce a i její parametry vždy záleží na konkrétní úloze. 3.7 Inicializace populace Aby mohl algoritmus začít, musí mít k dispozici počáteční populaci jedinců (řešení). Ta je nejčastěji vygenerována zcela náhodně. Tedy tak, že každému jedinci je zvolena náhodná hodnota genů (z povolené množiny hodnot). V určitých případech se může stát, že hodnoty v chromozomu jsou vázány nějakou podmínkou. Například v úloze obchodního cestujícího se nesmí opakovat čísla měst v jednom chromozomu. Často se pak volí nějaká speciální metoda generování, nebo se po náhodném vygenerování ještě spustí nějaký proces, který daný chromozom opraví tak, aby odpovídal konzistentnímu chromozomu úlohy. 13/60

3 GENETICKÝ ALGORITMUS 3.8 Obecné schéma genetického algoritmu Algoritmus 1 Základní schéma genetického algoritmu populace = inicializacep opulace() ohodnotf itness(populace) while!ukoncovacipodminka do novap opulace = novap opulace+ = zkopirujelitnijedince(populace) while velikost(populace)!= velikost(novapopulace) do prvnirodic = operatorselekce(populace) druhyrodic = operatorselekce(populace) prvnip otomek = krizeni(prvnirodic, druhyrodic) druhyp otomek = krizeni(druhyrodic, prvnirodic) prvnip otomek = mutujsp ravdepodobnostim utace(prvnip otomek) druhyp otomek = mutujsp ravdepodobnostim utace(druhyp otomek) novap opulace+ = prvnip otomek novap opulace+ = druhyp otomek end while populace = novap opulace ohodnotf itness(populace) end while return vratn ejlepsihojedince(populace) Do této chvíle jsme si popisovali důležité prvky genetického algoritmu. Nyní si popíšeme, jak takový obecný genetický algoritmus funguje. Nejprve je vygenerována počáteční populace. To je první generace řešení genetického algoritmu. Tato populace je celá ohodnocena fitness funkcí a poté je vystavena operátorům křížení a mutace (každý s vlastní pravděpodobností, že nastane) a nový jedinci, kteří tímto procesem vzniknou, jsou kopírováni do populace nové. To se opakuje, dokud není nová populace plná. Jedinci, kteří se mají křížit a mutovat jsou vybráni procesem selekce (kde hraje roli jejich fitness). Nově vzniklá populace se poté prohlásí za současnou generaci řešení, opět se celá ohodnotí fitness funkcí a z ní se dále generuje další. To probíhá, dokud není naplněna ukončovací podmínka. V okamžiku, kdy platí ukončovací podmínka, algoritmus na výstup vydá doposud nejlepší nalezené řešení problému. Toto nejobecnější schéma si můžete prohlédnout jako pseudokód v Algoritmu 1. Druhou možností je místo populace nové, vkládat nové jedince do té staré, kterou poté budeme dále používat v další generaci. O tom, kterého jedince v aktuální populaci 14/60

3 GENETICKÝ ALGORITMUS nahradit, můžeme rozhodnout tzv. replacement strategií. Nový jedinci můžou například nahradit vlastní rodiče, nebo nejhorší jedince v populaci. 3.9 Ukončení algoritmu Jako ukončovací podmínku je nejčastěji zvolen počet generací, které se mají v algoritmu vytvořit. Další možností je ukončit algoritmus po určitém časovém úseku. V neposlední řadě je možné algoritmus ukončit, pokud se nejlepší řešení po mnoha generací již nemění. 15/60

4 NAVRŽENÝ EVOLUČNÍ ALGORITMUS PRO ŘEŠENÍ GTSP 4 Navržený evoluční algoritmus pro řešení GTSP 4.1 Základní verze navrženého evolučního algoritmu Genetický algoritmus je velice široký pojem. V této sekci budou dopodrobna popsány konkrétní části použitého genetického algoritmu. Postupně přes použitý model, zvolené operátory a výpočet fitness funkce. 4.1.1 Chromozom Každý jedinec (tj. řešení problému) se skládá ze dvou částí: 1. Nepřímá reprezentace pořadí klastrů, která obsahuje pořadí klastrů, na které se postupně aplikuje heuristika nejbližšího souseda. 2. Ve druhé části chromozomu je zaznamenáno, který vrchol je vybraný v konkrétním klastru (tedy vrcholy výsledné kružnice). 4.1.2 Fitness Protože chromozom obsahuje pouze nepřímou reprezentaci pořadí klastrů, je potřeba nejprve aplikovat heuristiku nejbližšího souseda a tak získat přímé pořadí klastrů. Z této přímé reprezentace lze již zrekonstruovat výslednou kružnici tak, že jsou postupně vybrány body z klastrů v pořadí, ve kterém jsou čteny z přímé reprezentace. Jako výsledná fitness je poté spočtena délka kružnice (jako součet vzdáleností bodů, které jsou v kružnici přímo za sebou). O tom, jak funguje nepřímá reprezentace pořadí klastrů, která hraje velice důležitou roli v počítání fitness jedince, si více povíme v sekci, která se heuristice nejbližšího souseda věnuje. 4.1.3 Model GA Navrhovaný algoritmus pro řešení GTSP problému vytvoří novou populaci ze staré pomocí nahrazovací strategie, která využívá elitistické selekční schéma. Elitistické selekční schéma znamená, že je nejprve do nové populace zkopírováno K nejlepších jedinců z populace předchozí (kde K je pevně zvolené číslo, které se ale může měnit při různě velkých vstupních datech). 16/60

4 NAVRŽENÝ EVOLUČNÍ ALGORITMUS PRO ŘEŠENÍ GTSP Zbytek nové populace je vyplněno tak, že jsou vždy vybrány dva chromozomy z předchozí generace, které projdou křížením a mutací a výslední dva nový jedinci jsou vloženi do nově vznikající populace. První chromozom je vybrán z K elitních jedinců a druhý chromozom pomocí turnajového výběru ze zbytku populace. 4.1.4 Křížení Poté, co jsou dva jedinci vybráni tak, jak je to popsáno výše, je rozhodnuto (na základě pravděpodobnosti křížení), zda na ně bude použit operátor křížení. Pokud operátor křížení být použit nemá, potom algoritmus jen vytvoří kopie rodičovských chromozomů a ty pošle do nové generace. Pokud je ale rozhodnuto, že křížení proběhne, je použit tzv. order-based crossover operátor. Order-based crossover operátor křížení byl převzat z práce od autora G. Syswerda [11]. Nejprve je zvolena pravděpodobnost překopírování klastru z nepřímé reprezentace pořadí klastrů prvního rodiče. Poté je procházen první rodič a nad každým genem chromozomu (ten vlastně obsahuje číslo klastru) se na základě této pravděpodobnosti rozhodne, zda do potomka překopírovat klastr na této pozici. Zbylé pozice v potomkovi (ty pozice, které nebyly vybrány z prvního rodiče) jsou vyplněny z druhého rodiče. Ten se postupně od začátku prochází a pokud je nalezeno číslo klastru, které potomek ještě neobsahuje, potom je vložen do potomka na první volnou pozici. Takto je postupně vytvořeno opět konzistentní řešení (takové, které obsahuje každé číslo klastru právě jednou). Tento postup vytvoří prvního potomka. Druhý potomek je vytvořen tak, že je vyměněno pořadí prvního a druhého rodičovského jedince pro proces křížení a opět aplikován orderbased crossover. 4.1.5 Mutace Po křížení je na základě pravděpodobnosti mutace u každého potomka rozhodnuto, zda na něj bude aplikován nějaký z operátorů mutace. V této práci je použit více než jeden operátor mutace a proto je pro každý operátor mutace aplikována vlastní pravděpodobnost mutace. Může se stát, že na jednoho jedince jsou aplikovány všechny operátory mutace a stejně tak se může stát, že není aplikovaný žádný. Po důkladném zvážení pro a proti možných operátorů mutace byly zvoleny tyto: Vrcholová mutace: Mutace nahradí v rámci klastru náhodně vrchol. Mutace pořadí klastrů: Mutace vybere náhodně dva klastry a prohodí jejich pořadí v chromozomu. 17/60

4 NAVRŽENÝ EVOLUČNÍ ALGORITMUS PRO ŘEŠENÍ GTSP 4.1.6 Inicializace počáteční populace Jako první krok musí algoritmus vygenerovat počáteční populaci. Pro každého nového jedince je potřeba vygenerovat pořadí klastrů v nepřímé reprezentaci pro heuristiku nejbližšího souseda a také část chromozomu, která říká, který vrchol je vybraný v daném klastru. Nepřímé pořadí klastrů je pole čísel klastrů a vznikne naprosto náhodně. Vezme se pole se všemi čísly klastrů a náhodně je v něm prohozeno jejich pořadí. Vrcholová část chromozomu je vygenerována tak, že pro každý klastr je vybrán vrchol, přes který povede výsledná kružnice. Tento vrchol je vybrán tak, že u každého klastru je spočten tzv. centroid. Centroid je bod, který má x-ovou souřadnici v místě aritmetického průměru všech x-ových souřadnic bodů v klastru a y-ovou souřadnici opět v místě aritmetického průměru všech y-ových souřadnic bodů v klastru. Nakonec je pro daný klastr vybrán bod, který je nejblíže vypočítanému centroidu. Algoritmus 2 Základní schéma navrženého evolučního algoritmu pro řešení GTSP populace = inicializacep opulace() ohodnotf itness(populace) while!ukoncovacipodminka do novap opulace = novap opulace+ = zkopirujelitnijedince(populace) while velikost(populace)!= velikost(novapopulace) do prvnirodic = vyberzelitnich(populace) druhyrodic = vybert ournamentv yberem(populace) if pravdepodobnostkrizeni then prvnip otomek = krizeni(prvnirodic, druhyrodic) druhyp otomek = krizeni(druhyrodic, prvnirodic) else prvnip otomek = vytvorkopii(prvnirodic) druhyp otomek = vytvorkopii(druhyrodic) end if prvnip otomek = mutujsp ravdepodobnostim utace(prvnip otomek) druhyp otomek = mutujsp ravdepodobnostim utace(druhyp otomek) novap opulace+ = prvnip otomek novap opulace+ = druhyp otomek end while populace = novap opulace ohodnotf itness(populace) end while return vratn ejlepsihojedince(populace) 18/60

4 NAVRŽENÝ EVOLUČNÍ ALGORITMUS PRO ŘEŠENÍ GTSP 4.1.7 Ukončení algoritmu Jako ukončovací podmínku byl zvolen počet generací populace. 4.1.8 Pseudokód hlavního cyklu navrženého genetického algoritmu Pseudokód základní verze navrženého genetického algoritmu je v Algoritmu 2. Funkce ohodnotfitness() uloží vypočtené fitness hodnoty rovnou do chromozomů v populaci a z nich se poté v případě potřeby čtou. Funkce mutujspravdepodobnostimutace() může jedince zmutovat. O tom, zda ho zmutovat mutací vrcholů, klastrů nebo oběma, je rozhodnuto podle jednotlivých pravděpodobností mutace. 4.2 Heuristika nejbližšího souseda V této sekci si detailně popíšeme použití heuristiky nejbližšího souseda v navrhovaném genetickém algoritmu. Inspirací pro konkrétní použití v genetickém algoritmu byla práce IRREAN [7]. V této sekci je počítáno s tím, že každý klastr má svoje unikátní číslo tak, že začínají od 1 a pokračují za sebou do počtu klastrů. 4.2.1 Přímá reprezentace pořadí klastrů Přímou reprezentací rozumíme takovou reprezentaci, která nám dává pořadí klastrů tak, jak jak jsou postupně seřazeny ve výsledné kružnici. Je to tedy vlastně seznam čísel klastrů, který od začátku procházíme a složíme výslednou kružnici. 4.2.2 Nepřímá reprezentace pořadí klastrů Nepřímá reprezentace je prioritní seznam čísel klastrů. Jde o pořadí, ve kterém bude na jednotlivé klastry aplikována heuristika nejbližšího souseda. Tato heuristika, která bude více popsána níže, bude aplikována postupně na všechny klastry a postupně tak získá výsledné pořadí klastrů (tedy přímou reprezentaci). Na tomto principu je založeno počítání fitness hodnoty chromozomů v této práci. Nejprve se vezme nepřímá reprezentace chromozomu, na kterou je aplikována heuristika nejbližšího souseda tak, aby vnikla přímá reprezentace. Poté se postupně projde přímá reprezentace a ke každému klastru se vybere příslušný bod (toto přiřazení vybraného bodu pro každý klastr je také součástí chromozomu). Výsledná kružnice je spojení těchto bodů. 19/60

4 NAVRŽENÝ EVOLUČNÍ ALGORITMUS PRO ŘEŠENÍ GTSP Důležitou součástí nepřímé reprezentace je to, že jedna výsledná kružnice může být reprezentována různými prioritními seznamy klastrů. Je tedy více možností, jak do výsledného optimálního řešení dokonvergovat. Dalším důležitým aspektem nepřímé reprezentace je to, že některá pořadí klastrů mohou být nedosažitelné. 4.2.3 Vzdálenost dvou klastrů Aby bylo možné hledat pro nějaký klastr nejbližšího souseda, je potřeba definovat vzdálenost mezi klastry. Pro tento typ úlohy byla zvolena metoda spočtení centroidu pro oba klastry a vzdálenost mezi nimi je potom vzdálenost mezi centroidy jednotlivých klastrů. Centroid klastru je bod, jehož x-sová souřadnice je spočtena jako aritmetický průměr všech x-ových souřadnic bodů v tomto klastru. Stejně se vypočítá i y-ová souřadnice - tedy aritmetický průměr všech y-ových souřadnic bodů v klastru. Další zřejmou možností, jak spočítat vzdálenost dvou klastrů, by bylo vzít dva nejbližší body obou klastrů a spočíst jejich vzdálenost. Tato možnost byla ale nakonec vyloučena, protože by bylo výpočetně náročné vždy hledat dva nejbližší body dvou klastrů. Výhoda centroidu spočtívá v tom, že ho lze využít na spočtení vzdáleností ke všem ostatním klastrům. 4.2.4 Aplikace heuristiky nejbližšího souseda Klasická heuristika nejbližšího souseda funguje tak, že nejprve vezme startovní vrchol v a ten dále rozšíří o nejbližší vrchol u. V další iteraci je rozšiřován nově připojený vrchol u opět o nejbližšího souseda tak, aby nevznikl cyklus. Takto se pokračuje, dokud není kružnice dokončená. Tento postup je jednoduché naprogramovat a má malou časovou složitost. Často ovšem, díky jeho hladové povaze, najde pouze suboptimální kružnici. Proto navržený algoritmus v této práci používá upravenou heuristiku nejbližšího souseda tak, jak je navržena v práci IREANN [7]. V této heuristice je vzána nepřímá reprezentace klastrů. To je vlastně prioritní seznam čísel klastrů, který bude od začátku procházen. Např. {1, 3, 2, 4} znamená, že nejprve je heuristika nejbližšího souseda aplikována na klastr 1, poté 3, 2 a nakonec 4. Komponenta nějakého vrcholu je v tomto případě maximální souvislý podgraf, který obsahuje daný vrchol. Evidentně komponenta může obsahovat více vrcholů a stejně tak 20/60