ˇ – Technicka´ univerzita Ostrava VSB Fakulta elektrotechniky a informatiky Katedra aplikovane´ matematiky
Optimalizace cest ve skladu Optimal routes in a storehouse
2012
Adam Silber
Velice dˇekuji vedouc´ımu m´e diplomov´e pr´ace Mgr. Petru Kov´arˇ ovi, Ph.D. za jeho rady, n´avrhy a pˇripom´ınky, kter´e mi vyraznˇ e pomohly a za cˇ as, ktery´ mi v ´ ˚ ehu psan´ı pr´ace vˇenoval. Tak´e dˇekuji panu Janu Korponaiovi, ktery´ se n´am prubˇ vˇenoval pˇri naˇs´ı n´avˇstˇevˇe skladu, a s kterym ´ jsme probl´em konzultovali prostˇred˚ nictv´ım emailu. Dˇekuji tak´e mym rodiˇ c um, kteˇr´ı mˇe bˇehem studia trpˇelivˇe pod´ porovali.
Abstrakt Tato diplomov´a pr´ace se zabyv´ ´ a rˇ eˇsen´ım re´aln´eho probl´emu, optimalizovat cestu ¨ vysokozdviˇzn´eho voz´ıku ve skladu, probl´em byl zadany´ firmou Molnlycke He´ celem zefektivnˇen´ı kompletace objedn´avek. Zadany´ probl´em lze alth Care za uˇ pˇreformulovat jako probl´em obchodn´ıho cestuj´ıc´ıho a v pr´aci je n´aslednˇe rˇ eˇsen ˚ Konkr´etn´ı rˇ eˇsen´ı potom vych´az´ı z Christofipomoc´ı aproximaˇcn´ıch algoritmu. dova algoritmu. Pr´ace demonstruje moˇznou spolupr´aci akademick´e obce se soukromym ´ sektorem. ˇ a´ slova: optimalizace skladu, probl´em obchodn´ıho cestuj´ıc´ıho, ChristoKl´ıcov ˚ algoritmus fiduv
Abstract ¨ This thesis deals with the problem of finding optimal routes in a Molnlycke Health Care’s storehouse. The problem is similar to the traveling salesman problem and it is solved using approximation algorithms. For the solution we modiffy the Christofides algorithm. This thesis also shows possibility of cooperation between university and industry. Keywords: warehouse optimization, storehouse, travelling salesman problem, Christofides algorithm
Seznam pouˇzitych ´ zkratek a symbolu˚ G(V, E) V (G) E(G) T SP
– Graf G s mnoˇzinou vrcholu˚ V a mnoˇzinou hran E – Mnoˇzina vrcholu˚ gragu G – Mnoˇzina hran gragu G – Probl´em obchodn´ıho cestuj´ıc´ıho
1
Obsah 1
´ Uvod
3
2
Zformulov´an´ı probl´emu 2.1 Souˇcasny´ stav . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 N´asleduj´ıc´ı postup . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5 5 6
3
Definice a pojmy z teorie grafu˚
8
4
Probl´em obchodn´ıho cestuj´ıc´ıho 4.1 Probl´em obchodn´ıho cestuj´ıc´ıho v metrick´em prostoru . . . . . . . 4.2 Heuristick´e algoritmy . . . . . . . . . . . . . . . . . . . . . . . . . .
15 17 19
5
Teoreticky´ rozbor 5.1 Minim´aln´ı kostra grafu . . . . . . . . . ´ 5.2 Minim´aln´ı upln´ e p´arov´an´ı . . . . . . . 5.3 Eulerovsky´ tah . . . . . . . . . . . . . . 5.4 Teoreticky´ pohled na zadany´ probl´em
. . . .
20 20 21 22 23
6
Optimalizace 6.1 Implementace Algoritmu . . . . . . . . . . . . . . . . . . . . . . . . 6.2 Algoritmus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27 27 39
7
Z´avˇer
41
8
Literatura
43
9
Neveˇrejn´a cˇ a´ st
44
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
2
´ u˚ Seznam obrazk 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
Cesta kolem svˇeta . . . . . . . . . . . . . . . . . . . . . . . . . Pˇr´ıklad jednoduch´eho grafu G . . . . . . . . . . . . . . . . . Pˇr´ıklad multigrafu . . . . . . . . . . . . . . . . . . . . . . . . Stupnˇe vrcholu˚ grafu G . . . . . . . . . . . . . . . . . . . . . . Kompletn´ı grafy K4 a K9 . . . . . . . . . . . . . . . . . . . . . Cykly C3 a C8 . . . . . . . . . . . . . . . . . . . . . . . . . . . Graf G a jeho kostra K. . . . . . . . . . . . . . . . . . . . . . . Pˇr´ıklad ohodnocen´ı hran grafu. . . . . . . . . . . . . . . . . . Minim´aln´ı kostra. . . . . . . . . . . . . . . . . . . . . . . . . . ´ Minim´aln´ı upln´ e p´arov´an´ı. . . . . . . . . . . . . . . . . . . . . Mapa soutˇezˇ e . . . . . . . . . . . . . . . . . . . . . . . . . . . Ilustrace Christofidova algoritmu. . . . . . . . . . . . . . . . ˚ algoritmus . . . . . . . . . . . . . . . . . . . . . . Kruskaluv ˚ algoritmus . . . . . . . . . . . . . . . . . . . . . . . . Jarn´ıkuv Zjednoduˇseny´ graf popisuj´ıc´ı situaci ve skladu. . . . . . . . . c Obr´azek grafu reprezentuj´ıc´ı sklad v programu MATLAB ⃝ Pˇr´ıklad diskutabiln´ıho rˇ eˇsen´ı . . . . . . . . . . . . . . . . . . ´ Nalezen´e rˇ eˇsen´ı po upravˇ e. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
3 8 9 10 11 12 12 13 14 14 16 19 21 22 26 28 37 38
3
´ 1 Uvod Optimalizaˇcn´ı probl´em, probl´em nalezen´ı nejlepˇs´ıho ze vˇsech pˇr´ıpustnych ´ rˇ eˇsen´ı, je cˇ asto formulov´an jako hled´an´ı minima ceny, pouˇzit´eho materi´alu nebo energie. V t´eto diplomov´e pr´aci se budeme zabyvat hled´an´ım minim´aln´ı, nejkratˇs´ı trasy, ´ kter´a mus´ı obsahovat urˇcit´e povinn´e zast´avky. ¨ Zad´an´ı diplomov´e pr´ace vzniklo na zˇ a´ dost firmy Molnlycke Health Care Kli¨ nipro, resp. jej´ıho zamˇestnance Jana Korponaie. Molnlycke Health Care je pˇredn´ı ˚ vyrobk svˇetovy´ dodavatel jednor´azovych u˚ pro hojen´ı ´ chirurgickych ´ prostˇredku, ´ ran a sluˇzeb pro zdravotnictv´ı. Firma vyr´ab´ı a skladuje zdravotnicky´ materi´al. ˚ e z´akazn´ıky, je nutn´e jednotliv´e kompoBˇehem kompletace objedn´avek pro ruzn´ nenty z objedn´avky posb´ırat a sv´ezt ze skladu na urˇcit´e m´ısto. Optimalizace bude obsahovat popis algoritmu, ktery´ jednotliv´e poloˇzky z objedn´avky sestav´ı v takov´em poˇrad´ı, zˇ e obsluha skladu uraz´ı bˇehem jejich vyzvednut´ı co nejkratˇs´ı cestu a nebude si zbyteˇcnˇe zach´azet, v naˇsem pˇr´ıpadˇe zaj´ızˇ dˇet s vysokozdviˇznym ´ voz´ıkem. T´ım mysl´ıme, zˇ e poloˇzky budou seˇrazeny postupnˇe v ˚ z´avislosti na poˇrad´ı, ve kter´em se nach´azej´ı pˇri pruchodu nejkratˇs´ı trasy, pˇr´ıpadnˇe jedn´e z nejkratˇs´ıch tras. Zdali touto cestou obsluha vysokozdviˇzn´eho voz´ıku skuteˇcnˇe pojede cˇ i ne uˇz algoritmus zajistit nedovede. Rovnˇezˇ se neoˇcek´av´a implementace algoritmu, ktery´ v pˇr´ıpadˇe budouc´ı implementace mus´ı komunikovat se st´avaj´ıc´ım obsluˇznym ´ syst´emem skladu. Pˇri pˇr´ıpravˇe objedn´avky je ve skladu potˇreba navˇst´ıvit urˇcit´e reg´aly ”biny”s poˇzadovanou komponentou a se vˇsemi vyzvednutymi komponentami se po´ ´ tom vr´atit na m´ısto kompletace. Takto zadan´a uloha, m´a bl´ızko ke zn´am´emu probl´emu obchodn´ıho cestuj´ıc´ıho - TSP (travelling salesman problem), ktery´ uvedeme v kapitole 4. Jedn´a se o diskr´etn´ı optimalizaˇcn´ı probl´em nalezen´ı nejkratˇs´ı moˇzn´e cesty proch´azej´ıc´ı vˇsemi zadanymi body na mapˇe, kaˇzdym ´ ´ pr´avˇe jednou.
Obr´azek 1: World tour z knihy The Traveling Salesman Problem [2]
4
˚ Tento probl´em je jiˇz pomˇernˇe dukladnˇ e prostudov´an a existuj´ı i algoritmy kter´e ho rˇ eˇs´ı. Z´asadn´ı pot´ızˇ vˇsak je, zˇ e probl´em obchodn´ıho cestuj´ıc´ıho patˇr´ı mezi ´ tzv. NP-tˇezˇ k´e ulohy, pro kter´e se nepˇredpokl´ad´a existence polynomi´aln´ıho algoritmu a v obecn´em pˇr´ıpadˇe nen´ı zn´amo jak nal´ezt pˇresn´e rˇ eˇsen´ı v rozumn´em ´ cˇ ase. Tuto komplikaci bude tˇreba v pr´aci zahrnout do uvahy, jelikoˇz nen´ı moˇzn´e, aby se na nalezen´ı optim´aln´ıho poˇrad´ı cˇ ekalo nˇekolik hodin, ve skuteˇcnosti by mˇel byt k dispozici v rˇ a´ du vteˇrin, nebo l´epe zlomku˚ vteˇriny. ´ vysledek ´ Pˇri rˇ eˇsen´ı zadan´eho probl´emu budeme diskutovat zn´am´e algoritmy a pouˇz´ı˚ z tohoto duvodu ˚ vat obraty a pojmy z teorie Grafu, je do pr´ace zahrnuta kapitola ˚ kter´a slouˇz´ı k objasnˇen´ı pouˇz´ıvanych ˚ 3 Definice a pojmy z teorie grafu, ´ pojmu. ˚ V kapitole 2 si pˇredstav´ıme zadany´ probl´em dukladnˇ eji a sezn´am´ıme se zde s terminologi´ı obsluhy skladu, kterou potom budeme d´ale pouˇz´ıvat, abychom se vyhnuli pˇr´ıpadnym ´ nejasnostem. Pod´ıv´ame se na zn´ame algoritmy a v kapitole ´ 5 zhodnot´ıme, ktery´ a za jakych by mohl byt ´ pˇr´ıpadnych ´ uprav ´ pro n´asˇ probl´em ten nejvhodnˇejˇs´ı. Samotny´ algoritmus potom pop´ısˇ eme v kapitole 6.
5
2
´ ı problemu ´ Zformulovan´
Diplomov´a pr´ace rˇ eˇs´ı re´alny´ probl´em optimalizace cesty pˇri kompletaci objedn´av¨ ky ve skladu medic´ınsk´eho materi´alu firmy Molnlycke Health Care v Karvin´e. Zad´an´ı probl´emu bylo specifikov´ano pˇri osobn´ı n´avˇstˇevˇe skladu, kter´e se kromˇe ´ castnil tak´e vedouc´ı diplomov´e pr´ace Petr Kov´arˇ . Po autora diplomov´e pr´ace zuˇ ¨ celou dobu naˇs´ı n´avˇstˇevy se n´am vˇenoval zamˇestnanec firmy Molnlycke Health Care, Jan Korponai, ktery´ n´as spoleˇcnˇe se svym ´ kolegou skladem provedli a zodpovˇedˇeli naˇse ot´azky. Skladov´e prostory a rozm´ıstˇen´ı reg´alu˚ uvnitˇr je patrn´e z obr´azku ?? na stranˇe ??, uveden´em v neveˇrejn´e kapitole 9. Tyto informace jsou povaˇzov´any firmou ¨ Molnlycke Health Care za citliv´e a nejsou proto uvedeny ve veˇrejn´e cˇ a´ sti pr´ace. ´ ych Sklad je tvoˇren s´ıt´ı pravouhl ´ uliˇcek oddˇelenymi ´ reg´aly, ve kterych ´ jsou uloˇzeny krabice s medic´ınskym ´ materi´alem. Ve skladu se kompletuj´ı zak´azky obsahuj´ıc´ı ˚ y´ poˇcet komponent, kter´e je tˇreba pˇred kompletac´ı sv´ezt na jedno m´ısto poruzn moc´ı vysokozdviˇzn´eho voz´ıku. Cestu tohoto vysokozdviˇzn´eho voz´ıku budeme cht´ıt optimalizovat tak, aby se minimalizovala vzd´alenost, kterou vysokozdviˇzny´ voz´ık pˇri nab´ır´an´ı materi´alu pro objedn´avku ujede, a t´ım p´adem sn´ızˇ ila doba nutn´a pro pˇr´ıpravu, svoz komponent.
2.1
ˇ Soucasn y´ stav
¨ Souˇcasny´ stav je n´asleduj´ıc´ı. Ve skladu firmy Molnlycke Health Care v Karvin´e ˚ zity) operuje nˇekolik (jejich pˇresny´ poˇcet nen´ı pro rˇ eˇsen´ı diplomov´e pr´ace duleˇ ´ ˚ Komponenty kaˇzd´e objedn´avky se vytisknou na tzv. vysokozdviˇznych ´ voz´ıku. ”picking list”, ktery´ se pˇred´a obsluze vysokozdviˇzn´eho voz´ıku. Ta podle sv´eho vlastn´ıho uv´azˇ en´ı zvol´ı trasu, kterou sklad projede a nabere vˇsechny poˇzadovan´e komponenty. Vlastn´ı sklad je systematicky rozdˇelen na cˇ tyˇri cˇ a´ sti: sklad A, sklad B, sklad C a sklad D. Ve skladu A se nach´azej´ı komponenty, kter´e se vyuˇz´ıvaj´ı nejˇcastˇeji a rovnˇezˇ se v nˇem dokuj´ı pˇripraven´e objedn´avky. Picking list je seznam krabic, obsahuj´ıc´ı jednotliv´e komponenty, kter´e jsou potˇrebn´e pro danou objedn´avku. Obsahuje informace o velikosti krabice, expiraˇcn´ı dobˇe materi´alu a pozici binu, kde je krabice um´ıstˇena ve skladu. Bin je m´ısto pro uloˇzen´ı krabice s komponentami ve skladu. Je jednoznaˇcnˇe ´ urˇceno pomoc´ı kodu, ktery´ je souˇca´ st´ı ”picking listu”, oznaˇcuj´ıc´ı sklad, uliˇcku, patro a pozici v uliˇcce. Um´ıstˇen´ı komponenty ve skladu je d´ano jednoznaˇcnˇe, jelikoˇz se pˇri kompletaci objedn´avky trv´a na tom, zˇ e se pouˇzij´ı komponenty s nejkratˇs´ı expiraˇcn´ı dobou, aby ty jejihˇz trvanlivost je delˇs´ı mohly byt ´ pouˇzity pro pozdˇejˇs´ı objedn´avku.
6
Po osobn´ı konzultaci autora diplomov´e pr´ace a vedouc´ıho diplomov´e pr´ace ¨ se zadavatelem probl´emu ze strany Molnlycke Health Care pˇri n´avˇstˇenˇe skladu ˚ castnˇen´e strany se zjednoduˇsen´ım, kter´e nebere v Karvin´e, souhlasily vˇsechny zuˇ v potaz moˇznost, kdy je objedn´avka pˇr´ıliˇs rozs´ahl´a na to, aby mohla byt ´ svezena ze skladu pˇri jedin´e j´ızdˇe vysokozdviˇzn´eho voz´ıku. Tato eventualita se podle zamˇestnancu˚ skladu vyskytuje velice vyj´ımeˇcnˇe.
2.2
´ Nasleduj´ ıc´ı postup
V t´eto diplomov´e pr´aci se budeme snaˇzit navrhnout algoritmus, ktery´ najde pro kaˇzdou objedn´avku v rozumn´em cˇ ase optim´aln´ı cestu pro vysokozviˇzny´ voz´ık mezi jednotlivymi biny obsahuj´ıc´ı komponenty z objedn´avky ve skladu. Tento ´ algoritmus potom jednotliv´e biny podle t´eto cesty seˇrad´ı a vytiskne na ”picking list”, ktery´ obsluze vysokozdviˇzn´eho voz´ıku uk´azˇ e v jak´em poˇrad´ı je nejvhodnˇejˇs´ı komponenty sb´ırat. Cesta mezi jednotlivymi komponentami uˇz v ”pic´ ´ e s´ıti uliˇcek a zkuˇsenosti king listu”zachycena nen´ı, ale vzhledem k pravouhl´ zamˇestnancu˚ se pˇredpokl´ad´a vyuˇzit´ı jedn´e z najkratˇs´ıch cest. Nalezen´ı nejkratˇs´ı moˇzn´e cesty proch´azej´ıc´ı vˇsemi zadanymi body ve skladu ´ ´ resp. nalezen´ı nejkratˇs´ı hamiltonovsk´e kruˇznice na podgrafu je NP- upln y´ probl´em a pˇredpokl´ad´a1 se, zˇ e zˇ a´ dny´ ”rychly”, ´ (s polynomi´aln´ı sloˇzitost´ı) deterministicky´ algoritmus, neexistuje. Nalezen´ı nejkratˇs´ı moˇzn´e cesty proch´azej´ıc´ı ´ vˇsemi zadanymi body ve skladu je uloha, kter´a je velice bl´ızk´a probl´emu ob´ chodn´ıho cestuj´ıc´ıho. Probl´em obchodn´ıho cestuj´ıc´ıho, ktery´ si podrobnˇeji pˇredstav´ıme v kapitole 4, by se dal formulovat jako probl´em nalezen´ı nejkratˇs´ı moˇzn´e cesty, kter´a projde zadanymi m´ısty, kaˇzdym ´ ´ pr´avˇe jednou. Tento probl´em je tedy skuteˇcnˇe skoro stejny´ s t´ım, ktery´ m´ame my a budeme tedy vych´azet se zn´amych ´ algoritmu˚ pro rˇ eˇsen´ı probl´emu obchodn´ıho cestuj´ıc´ıho. Nemus´ıme byt ´ pˇritom tak ˚ zeme pˇr´ısn´ı na podm´ınku, aby jsme kaˇzd´e m´ısto navˇst´ıvili pr´avˇe jednou, ale muˇ se spokojit s podm´ınkou, aby kaˇzd´e m´ısto (kter´e bude zad´ano) bylo navˇst´ıveno alesponˇ jednou. Aby skuteˇcnˇe doˇslo k zefektivnˇen´ı vyroby ve skladu nen´ı moˇzn´e, aby algorit´ mus hledal optim´aln´ı rˇ eˇsen´ı pˇr´ıliˇs dlouho. Bude proto tˇreba naj´ıt vhodny´ algoritmus, jiny´ neˇz porovn´av´an´ı d´elky vˇsech moˇznych ´ cest ve skladu se sloˇzitost´ı n!. Naskyt´ ´ a se n´am zde nˇekolik moˇznost´ı: a) Uˇzit´ı nedeterministick´eho algoritmu. Nedeterministick´e nebo heuristick´e algoritmy davaj´ı vˇetˇsinou pˇribliˇzny´ vysledek a pˇri opakovan´em stejn´em vstupu ´ ˚ zou d´avat rozd´ıln´e vysledky, muˇ d´ıky moˇznosti volby kroku. Neproch´azej´ı ´ vˇsechny moˇznosti a za cenu urˇcit´e nejistoty jsou vypoˇ ´ cetnˇe m´enˇe n´aroˇcn´e. 1
Jedn´a se o jeden z otevˇrenych ´ probl´emu˚ tis´ıcilet´ı (anglicky Millenium Prize Problems), za ˚ vyˇreˇsen´ı kaˇzd´eho z nich vypsal Clay Mathematics Institute odmˇenu jednoho milionu dolaru.
7
˚ se ale budeme snaˇzit vyhnout, jelikoˇz by bylo vhodn´e, Tˇemto algoritmum aby pro dvˇe stejn´e objedn´avky dal algoritmus stejn´e vysledky. ´ ˚ zeme pokusit zjednob) Zjednoduˇsen´ı. Graf popisuj´ıc´ı strukturu skladu se muˇ duˇsit, zanedbat faktory, kter´e nehrajou vyraznou roli, vyuˇz´ıt vhodn´e z´avis´ ˚ ze nastat zkreslen´ı losti, kter´e se ve skladu vyskytuj´ı. Pˇri zjednoduˇsen´ı muˇ ˚ ze byt re´aln´e situace, toto muˇ e pokud za cenu vnesen´ı drobn´e nepˇre´ vyhodn´ ´ ´ snosti z´ısk´ame vyznamnou usporu vypoˇ ´ ´ cetn´ı n´aroˇcnosti probl´emu. Touto cestou se budeme snaˇzit j´ıt. c) Vyuˇzit´ı symetrie grafu. Pokud nechceme pouˇz´ıt nedeterministicky´ algoritmus ˚ ze byt ale deterministicky, ´ ktery´ muˇ ´ pro obecn´e grafy vypoˇ ´ cetnˇe pˇr´ıliˇs n´aroˇc˚ zeme vyuˇz´ıt skuteˇcnosti, zˇ e graf na kter´em budeme probl´em rˇ eˇsit, ny, ´ muˇ dobˇre zn´ame. Nemus´ıme proch´azet vˇsecny moˇzn´e cesty, protoˇze nˇekter´e ˚ ˚ zeme vyuˇz´ıt opakuj´ıc´ı se struktury v nebudou vubec existovat. Rovnˇezˇ muˇ grafu.
8
3
Definice a pojmy z teorie grafu˚
V t´eto kapitole zavedeme pojmy, vˇety a definice, na kter´e se budeme v dalˇs´ım textu odkazovat. Abychom nemuseli text pr´ace neust´ale pˇreruˇsovat definicemi vysvˇetluj´ıc´ı pr´avˇe pouˇz´ıvan´e pojmy, je vˇetˇsina z nich uvedena v t´eto kapitole. Pojmy jsou rˇ azeny tak, aby k pochopen´ı pr´avˇe uveden´e definice staˇcila znalost ˚ nejedn´a se vˇsak v zˇ a´ pˇredchoz´ıch. Pojmy a definice jsou z oblasti teorie grafu, ´ dn´em pˇr´ıpadˇe o upln y´ vyˇ ´ cet vˇsech definic t´eto matematick´e discipl´ıny, coˇz by snad ani nebylo moˇzn´e, ale pouze o pˇrehled tˇech definic, kter´e budeme v pr´aci vyuˇz´ıvat, nebo jejichˇz znalost by se n´am mohla hodit. Nˇekter´e vˇety a definice byly pˇrevzaty ze skript teorie grafu˚ [1]. V znaˇcen´ı pojmu˚ se snaˇz´ım drˇzet bˇezˇ nˇe pouˇz´ıvan´e symboliky, zn´am´e ze skript ˚ Nˇekdy je ale, vzhledem k potˇrebˇe rozliˇsovat stejn´e pojmy cˇ i odbornych ´ cˇ l´anku. ˚ ych u ruzn ´ grafu˚ (napˇr´ıklad poˇcet vrcholu˚ nebo pravidelnost grafu) pouˇzito nestandardn´ı znaˇcen´ı. Zkratky a znaˇcen´ı vˇetˇsinou vych´azej´ı z anglick´e terminologie, napˇr. oznaˇcen´ı mnoˇziny vrcholu˚ V (vertices) a hran E (edges).
Definice 3.1 Jednoduch´y graf G je uspoˇra´ dan´a dvojice (V, E), kde V je nepr´azdn´a mnoˇzina vrcholu˚ a E je nˇejak´a podmnoˇzina dvouprvkov´ych podmnoˇzin mnoˇziny V . Prvkum ˚ E rˇ´ık´ame hrany. ˇ ı jako body a hrany Graf je nejˇcastˇeji zad´an diagramem, kde se vrcholy zn´azornuj´ jako kˇrivky spojuj´ıc´ı tyto body. t
y w
x
z
Obr´azek 2: Pˇr´ıklad jednoduch´eho grafu G s mnoˇzinou vrcholu˚ V = {t, w, x, y, z} a mnoˇzinou hran E = {{x, y}, {x, w}, {x, z}, {w, z}}. Definice 3.2 Mnoˇzinu vˇsech vrcholu˚ grafu G budeme znaˇcit V (G) a mnoˇzinu vˇsech hran E(G). V textu nˇekdy pracujeme s libovolnym ´ grafem G, na jehoˇz parametry nem´ame zˇ a´ dn´e poˇzadavky. Chceme-li u grafu specifikovat poˇcet vrcholu˚ n = |V (G)|, rˇ ekneme, zˇ e jde o graf na n vrcholech nebo o graf rˇ a´ du n.
9 Definice 3.3 Dva vrcholy x, y ∈ V (G) jsou sousedn´ı, kdyˇz existuje hrana xy ∈ E(G). Na obr´azku 2 jsou napˇr´ıklad vrcholy x a z sousedn´ı, zat´ımco vrcholy w a y sou˚ se tak´e rˇ´ık´a z´avisl´e a nesousedn´ım nez´avisl´e sedn´ı nejsou. Sousedn´ım vrcholum vrcholy. ˇ Definice 3.4 Rekneme, zˇ e hrana e = {x, y} ∈ E(G) je incidentn´ı s vrcholem x pr´avˇe tehdy, kdyˇz x ∈ e. Vrcholy x, y nazveme koncov´e vrcholy hrany e. Definice 3.5 Graf, ve kter´em mohou b´yt dva ruzn´ ˚ e vrcholy spojeny v´ıce neˇz jednou hranou, nazveme multigraf. Hran´am kter´e maj´ı stejn´e oba koncov´e vrcholy se rˇ´ık´a n´asobn´e hrany, multihrany nebo paraleln´ı hrany. b
a
c
d
Obr´azek 3: Pˇr´ıklad multigrafu s mnoˇzinou vrcholu˚ V = {a, b, c, d} . ˇ Definice 3.6 Rekneme, zˇ e graf H = (V ′ , E ′ ) je podgrafem grafu G = (V, E), jestliˇze ′ V ⊆ V a souˇcasnˇe E ⊆ E ′ . ˚ zeme Jestliˇze o grafu H rˇ ekneme, zˇ e je podgrafem grafu G, potom tak´e graf G muˇ oznaˇcit za nadgraf grafu H. Definice 3.7 Podgraf F = (V ′ , E ′ ) grafu G = (V, E), se naz´yv´a faktor grafu G jestliˇze V = V ′. Definice 3.8 Doplnˇek grafu G = (V, E) je graf G = (V, F ), kde F = V2 \E a V (G) = V (G). V2 znaˇc´ı vˇsechny dvouprvkov´e podmnoˇziny mnoˇziny V (G). Doplnˇek grafu G tedy obsahuje vˇsechny vrcholy grafu G, a kaˇzdy´ vrchol x ∈ V (G) je sousedn´ı s pr´avˇe tˇemi vrcholy, se kterymi v grafu G sousedn´ı nen´ı. ´ Definice 3.9 Stupenˇ vrcholu x je roven poˇctu vˇsech hran, kter´e jsou s vrcholem x incidentn´ı. Stupenˇ vrcholu x znaˇc´ıme deg(x).
10
Stupenˇ vrcholu x souˇcasnˇe d´av´a informaci s kolika vrcholy je vrchol x sousedn´ı. ˚ ze byt Je tedy zˇrejm´e, zˇ e stupenˇ zˇ a´ dn´eho vrcholu nemuˇ ´ vˇetˇs´ı neˇz poˇcet vrcholu˚ v ˚ ze byt grafu bez vrcholu samotn´eho, jelikoˇz s´am se sebou nemuˇ ´ sousedn´ı. Nejvyˇssˇ´ı ˇ kter´eho muˇ ˚ ze vrcholu x ∈ V (G) nabyvat, moˇzny´ stupen, je deg(x) = |V (G)| − 1. ´ Toto plat´ı pouze pro grafy, nikoliv uˇz vˇsak pro multigrafy. deg(t)=0
deg(y)=1 deg(w)=2
deg(x)=3
deg(z)=2
Obr´azek 4: Stupnˇe vrcholu˚ grafu G Vˇeta 3.1 (Princip sudosti) Mˇejme libovoln´y graf G s vrcholy v1 , v2 , . . . , vn , kde n ≥ 1. Poˇcet hran grafu G oznaˇc´ıme h(G) = |E(G)|. Potom plat´ı deg(vi ) = 2 h(G). vi ∈V (G)
˚ ˚ Vˇsimneme-li si, Dukaz vˇety 3.1 je moˇzn´e naj´ıt v kaˇzdych ´ skriptech teorie grafu. ˚ zjist´ıme, zˇ e v zˇ e kaˇzd´a hrana zvyˇsuje stupenˇ vrcholu o 1 pr´avˇe u dvou vrcholu, kaˇzd´em grafu je souˇcet stupnˇ u˚ vrcholu˚ vˇsech vrcholu˚ grafu roven dvojn´asobku poˇctu hran. ˚ ze byt Pozn´amka 3.1 Vˇeta 3.1 n´am rˇ´ık´a, zˇ e v grafu nemuˇ ´ lichy´ poˇcet vrcholu˚ lich´eho stupnˇe (poˇcet hran mus´ı byt ´ cel´e cˇ ´ıslo). Definice 3.10 [1] Graf nazveme sudy, ´ jestliˇze m´a vˇsechny vrcholy sud´eho stupnˇe. Podobnˇe budeme mluvit o sud´ych multigrafech. Definice 3.11 [1] Sled v grafu je takov´a posloupnost vrcholu˚ a hran (v0 , e1 , v1 , e2 , v2 . . . , en , vn ), zˇ e hrana ei m´a koncov´e vrcholy vi−1 a vi pro vˇsechna i = 1, 2, . . . , n. D´elku sledu definujeme jako poˇcet hran obsaˇzen´ych ve sledu. Definice 3.12 [1] Tah je sled ve kter´em se zˇ a´ dn´a hrana neopakuje. Tah s poˇca´ teˇcn´ım vrcholem u a koncov´ym vrcholem v budeme naz´yvat (u, v)-tah. D´elku tahu definujeme jako poˇcet hran obsaˇzen´ych v (u, v)-tahu.
11
Definice 3.13 [1] Cesta je sled ve kter´em se neopakuje zˇ a´ dn´y vrchol. Cestu s poˇca´ teˇcn´ım vrcholem u a koncov´ym vrcholem v budeme naz´yvat (u, v)-cesta. D´elku cesty definujeme jako poˇcet hran obsaˇzen´ych v (u, v)-cestˇe. Definice 3.14 Graf se naz´yv´a souvisly, ´ jestliˇze mezi kaˇzd´ymi dvˇema jeho vrcholy x, y existuje (x, y)-cesta. Definice 3.15 [1] Uzavˇren´y tah v grafu G, kter´y obsahuje vˇsechny hrany a vˇsechny vrcholy grafu G, se naz´yv´a (uzavˇreny) ´ eulerovsky´ tah. Graf, ve kter´em existuje uzavˇren´y eulerovsk´y tah, se naz´yv´a eulerovsky´ graf a rˇ´ık´ame, zˇ e graf G lze nakreslit jedn´ım tahem. N´asleduj´ıc´ı vˇeta d´av´a nutnou a postaˇcuj´ıc´ı podm´ınku existence eulerovsk´eho tahu v dan´em grafu. Vˇeta 3.2 (Eulerovsky´ tah) Graf G je eulerovsky´ pr´avˇe tehdy, kdyˇz je sudy´ a souvisly. ´ Pozn´amka 3.2 (Eulerovsky´ tah) Vˇeta 3.2 plat´ı analogicky i pro multigrafy. Multigraf G je eulerovsk´y pr´avˇe tehdy, kdyˇz je sud´y a souvisl´y. Pro vyznamn´ e typy grafu˚ se pouˇz´ıv´a vlastn´ı n´azev a oznaˇcen´ı. N´azev vˇetˇsinou ´ plyne ze symetrie nebo vlastnost´ı grafu. Definice 3.16 Graf, jehoˇz kaˇzd´e dva vrcholy jsou navz´ajem sousedn´ı, naz´yv´ame Kompletn´ı graf a znaˇc´ıme Kn , kde n je poˇcet vrcholu˚ kompletn´ıho grafu.
Obr´azek 5: Kompletn´ı grafy K4 a K9 ´ ´ Kompletn´ı graf, nazyvan y´ tak´e upln y´ graf, m´a uplnou mnoˇzinu hran E(Kn ) = ´ V (Kn ) . Poˇcet hran v kompletn´ım grafu na n vrcholech je tedy n (n−1) . Doplnˇek 2 2 ˚ jelikoˇz podle definice 3.8 kompletn´ıho grafu je mnoˇzina nez´avislych vrcholu, ´ je E(Kn ) = ∅. Kaˇzdy´ kompletn´ı graf m´a vˇsechny vrcholy nejvyˇssˇ´ıho moˇzn´eho stupnˇe, je (n − 1)-pravidelny. ´
12 Definice 3.17 Graf s mnoˇzinou vrcholu˚ V = {x1 , x2 , . . . , xn }, kde n ≥ 3, a mnoˇzinou hran E = {x1 x2 , x2 x3 , . . . , xn−1 xn , xn x1 }, se naz´yv´a cyklus a znaˇc´ıme jej Cn .
Obr´azek 6: Cykly C3 a C8 Cyklus je 2-pravidelny´ graf se stejnym ´ poˇctem vrcholu˚ a hran |E(Cn )| = n. O poˇctu vrcholu˚ n grafu Cn se cˇ asto hovoˇr´ı jako o d´elce cyklu. V tomto smyslu jsou na obr´azku 6 cykly d´elky 3 a 8. Cyklem v grafu G budeme rozumˇet takovy´ podgraf grafu G, ktery´ je souˇcasnˇe cyklem podle definice 3.17. Vyznamnou roli mezi tˇemito cykly m´a takovy´ cyklus ´ ktery´ projde vˇsemi vrcholy nadgrafu G. Definice 3.18 [1] Cyklus, kter´y proch´az´ı vˇsemi vrcholy grafu G, se naz´yv´a hamiltonovsky´ cyklus v grafu G. Graf, kter´y obsahuje hamiltonovsk´y cyklus, se naz´yv´a hamiltonovsky´ graf. Definice 3.19 Graf se naz´yv´a acyklick´y, jestliˇze zˇ a´ dn´y jeho podgraf nen´ı cyklus. Souvisl´y acyklick´y graf se naz´yv´a strom. Definice 3.20 Takov´y faktor grafu, kter´y je souˇcasnˇe stromem, se naz´yv´a kostrou grafu.
Obr´azek 7: Graf G a jeho kostra K.
13
Nyn´ı zavedeme pojmy a definice souvisej´ıc´ı s ohodnocen´ım grafu. Definice 3.21 [11] Ohodnocen´ı grafu je funkce f , kter´a vrcholum ˚ nebo hran´am v grafu G pˇriˇrad´ı cˇ´ısla, nejˇcastˇeji z mnoˇziny pˇrirozen´ych cˇ´ısel. Pˇriˇrazen´a cˇ ´ısla maj´ı vˇetˇsinou nˇejaky´ fyzik´aln´ı nebo prakticky´ vyznam, napˇr. ´ d´elky, kapacity, ceny. Definice 3.22 Hodnota vrcholu x nebo hrany xy grafu G je cˇ´ıslo pˇriˇrazen´e v ohodnocen´ı f vrcholu x nebo hranˇe xy. Definice 3.23 [11] Jsou-li v ohodnocen´ı f pˇriˇrazeny hodnoty pouze hran´am grafu G = (V, E), hovoˇr´ıme o hranov´em ohodnocen´ı grafu, v pˇr´ıpadˇe kdy jsou hodnoty pˇriˇrazeny pouze vrcholum, ˚ hovoˇr´ıme o vrcholov´em ohodnocen´ı grafu. V t´eto pr´aci budeme pouˇz´ıvat pouze hranov´a ohodnocen´ı grafu, jelikoˇz hodnoty budeme pˇriˇrazovat pouze hran´am v z´avislosti na vzd´alenosti jejich kon˚ covych ´ vrcholu.
5 3 2
4
Obr´azek 8: Pˇr´ıklad ohodnocen´ı hran grafu H. Definice 3.24 Minim´aln´ı kostra grafu G pˇri ohodnocen´ı f je takov´a kostra, zˇ e souˇcet hodnot hran kostry je minim´aln´ı moˇzn´y. ˇ ık´ame, Definice 3.25 [1] Nez´avisl´a mnoˇzina hran M grafu G se naz´yv´a p´arov´an´ım. R´ zˇ e koncov´e vrcholy hran v M jsou sp´arov´any nebo M -saturovan´e. P´arov´an´ı budeme obvykle oznaˇcovat p´ısmenem M z anglick´eho matching. ´ Definice 3.26 [1] P´arov´an´ı M se naz´yv´a upln´ e, jestliˇze je kaˇzd´y vrchol grafu G M saturovan´y.
14
3 2
4
Obr´azek 9: Minim´aln´ı kostra grafu H z obr´azku 8. Definice 3.27 Minim´aln´ı upln´ ´ e p´arov´an´ı M grafu G je takov´e upln´ ´ e p´arov´an´ı, zˇ e souˇcet hodnot pˇriˇrazen´ym hran´am v p´arov´an´ı M je ze vˇsech moˇzn´ych upln´ ´ ych p´arov´an´ı grafu G minim´aln´ı.
5 3 2
4
´ Obr´azek 10: Minim´aln´ı upln´ e p´arov´an´ı grafu H z obr´azku 8.
15
´ obchodn´ıho cestuj´ıc´ıho Problem
4
It’s addictive. No matter how much progress you make, you always have the nagging feeling that you still did not nail down a couple of hunches that could bring about another quantum leap. – Vaˇsek Chv´atal, 1998.2 Ve tˇric´atych ´ letech dvac´at´eho stolet´ı 3 byl formulov´an tzv. Probl´em obchodn´ıho ´ cestuj´ıc´ıho, ktery´ je zaloˇzen na uvaze, kdy obchodn´ı cestuj´ıc´ı vyr´azˇ ´ı z urˇcit´eho ´ mˇesta, a bˇehem sv´e cesty m´a za ukol navˇstivit nˇekolik dalˇs´ıch mˇest (vˇetˇsinou se poˇzaduje aby kaˇzd´e mˇesto navˇst´ıvil pr´avˇe jednou) a potom se opˇet vr´atit zpˇet. ˇ sen´ım probl´emu je nalezen´ı takov´e cesty mezi mˇesty, kter´e m´a obchodn´ı cesReˇ tuj´ıc´ı navˇst´ıvit, zˇ e jak´akoliv jin´a obchodn´ı cesta bude stejnˇe dlouh´a nebo delˇs´ı. Pˇredstavme si, zˇ e jste obchodn´ı cestuj´ıc´ı z Ostravy. A m´ate navˇst´ıvit vˇsechna ˇ mˇesta v Cesk´ e Republice s poˇctem obyvatel nad 250 000. M´ate tedy navˇst´ıvit Prahu, Brno a Ostravu, kde zaˇc´ın´ame. Jak to udˇelat aby vysledn´ a cesta byla co nej´ kratˇs´ı? No jednoduˇse pojedete z Ostravy do Prahy a potom do Brna a zpˇet do Ostravy. Nebo v obr´acen´em poˇrad´ı Ostrava, Brno, Praha, Ostrava, kde d´elka cesty bude stejn´a jako v pˇredchoz´ım pˇr´ıpadˇe. Zde se zat´ım v tichosti pˇredpokl´ad´a, zˇ e d´elka cesty z Ostravy do Prahy je stejn´a jako z Prahy do Ostravy. Jednoduch´e, dalˇs´ı moˇznosti neexistuj´ı. Probl´em je tedy v tomto pˇr´ıpadˇe vyˇreˇsen a vy jako ob˚ zete vyrazit do Prahy nebo do Brna podle toho kam se v´ıce chodn´ı cestuj´ıc´ı, muˇ tˇesˇ´ıte. Pot´e co se vr´at´ıte ze sv´e prvn´ı obchodn´ı cesty, rozhodnete se navˇst´ıvit pˇri sv´e ˇ dalˇs´ı cestˇe vˇsechna mˇesta v Cesk´ e Republice s poˇctem obyvatel nad 100 000. Takˇze ˇ Liberec a Olomouc. A n´ahle je probl´em o dosti tˇezˇ sˇ´ı, minule n´am pˇribude Plzen, kdyˇz jsme vyr´azˇ eli z Ostravy jsme mˇeli k dispozici dvˇe mˇesta a at’ jsme si vybrali kter´ekoliv z nich n´asledovala potom cesta do toho zbyvaj´ ´ ıc´ıho a zpˇet do Ostravy. Nyn´ı si mus´ıme vybrat z pˇeti mˇest a aˇz do nˇejak´eho odcestujeme, tak se vybˇ ´ er moˇznost´ı sn´ızˇ ´ı na cˇ tyˇri, potom na tˇri atd. Celkovy´ poˇcet moˇznych cest je nyn´ı ´ 5! = 5 · 4 · 3 · 2 · 1 = 120, kdyˇz pˇrihl´edneme ke skuteˇcnost,i zˇ e poˇrad´ı navˇst´ıvanych ´ ˚ zeme obr´atit, aniˇz by se zmˇenila d´elka cesty, dost´av´ame 120/2 = 60. To mˇest muˇ ˚ ych sice jeˇstˇe nen´ı nepˇrekonatelny´ probl´em ale porovnat 60 ruzn ´ cest uˇz zabere nˇejaky´ cˇ as. Po n´avratu z druh´e cesty se rozhodnete navˇst´ıvit vˇsechna mˇesta s ˇ poˇctem obyvatel nad 10 000, v roce 2011 jich v Cesk´ e republice bylo 132... V roce 1962 firma Procter & Gamble vyhl´asila soutˇezˇ o $ 10,000 , za coˇz se dal ˚ [3]. Zad´an´ı soutˇezˇ e bylo n´asleduj´ıc´ı: tehdy postavit dum 2 3
Cit´at z kn´ızˇ ky: In Pursuit of the Traveling Salesman, [3]. D´a se pˇredpokl´adat, zˇ e se varianty tohoto probl´emu rˇ eˇsili uˇz dˇr´ıve, i kdyˇz tˇreba jen intuitivnˇe.
16
Pˇredstavte si, zˇ e Toody a Muldoon chtˇej´ı projet Spojen´e st´aty a navˇst´ıvit pˇri tom 33 lokac´ı uvedenych ´ na mapˇe (viz Obr´azek 11). Chtˇej´ı to ale udˇelat tak, aby celkem ujeli co nejkratˇs´ı vzd´alenost. M´ate jejich cestu napl´anovat z m´ısta na m´ısto tak, aby vysledn´ a cesta byla co nej´ kratˇs´ı. Zaˇc´ın´ate v Chigagu, Illinois a tak´e tam mus´ıte skonˇcit.
Obr´azek 11: Soutˇezˇ firmy Procter & Gamble z roku 1962 [3] Probl´em obchodn´ıho cestuj´ıc´ıho, d´ale jen TSP (Traveling Salesman Problem), ´ je klasick´a optimalizaˇcn´ı uloha, kdy hled´ame hamiltonovsky´ cyklus s nejniˇzsˇ´ım souˇctem hodnot hran v kompletn´ım hranovˇe ohodnocen´em grafu s n vrcholy. Bu´ deme se zde zabyvat pouze tzv. symetrickou variantou ulohy, kdy cena“ hod´ ”
17
nota hrany z vrcholu A do vrcholu B je stejn´a jako cena“ hodnota hrany z vrcholu ” B do vrcholu A, ceny zde tedy maj´ı charakter vzd´alenost´ı.
4.1
´ obchodn´ıho cestuj´ıc´ıho v metrickem ´ prostoru Problem
Variantou tohoto probl´emu je probl´em obchodn´ıho cestuj´ıc´ıho v metrick´em proˇ ı trojuheln´ ´ storu, ve kter´em vzd´alenosti na grafu splnuj´ ıkovou nerovnost, coˇz je jeden z axiomu˚ metrick´eho prostoru. Toto zjednoduˇsen´ı odpov´ıd´a velk´emu mnoˇzstˇ v´ı re´alnych konstrukci ´ probl´emu˚ (napˇr. hled´an´ı na mapˇe), a z´arovenˇ umoˇznuje ˚ Tato varianta bude pro n´as jistˇe zaj´ımav´a, jelikoˇz syaproximaˇcn´ıch algoritmu. st´em na sebe kolmych ´ cest ve skladu splnujˇe vˇsechny axiomy metrick´eho prostoru. Definice 4.1 (metrick´eho prostoru) Metrick´y prostor je dvojice (M, ρ), kde M je libovoln´a nepr´azdn´a mnoˇzina (v naˇsem pˇr´ıpadˇe to bude mnoˇzina vrcholu) ˚ a ρ je tzv. metrika, coˇz je zobrazen´ı ρ:M×M→R splnuj´ ˇ ıc´ı n´asleduj´ıc´ı axiomy: 1. nez´apornost 2. symetrie
ρ(x, y) ≥ 0, ρ(x, y) = 0 ⇔ (x = y) ρ(x, y) = ρ(y, x)
3. trojuheln´ ´ ıkov´a nerovnost
∀x, y ∈ M
∀x, y ∈ M
ρ(x, z) ≤ ρ(x, y) + ρ(y, z)
∀x, y, z ∈ M
Pozn´amka 4.2 V naˇsem pˇr´ıpadˇe bude metrika ρ, zobrazen´ı pˇriˇrazuj´ıc´ı kaˇzd´e dvojici vrcholu˚ (x, y) hodnotu rovnou d´elce nejkratˇs´ı (x, y)–cestˇe v grafu G. Poznamenejme, zˇ e aproximaˇcn´ı algoritmy pˇredpokl´adaj´ı, zˇ e je moˇzn´e se z libovoln´eho vrcholu dostat do jak´ehokoliv jin´eho vrcholu. ˇ ı algoritmus 4.1.1 2–aproximacn´ Probl´em obchodn´ıho cestuj´ıc´ıho v metrick´em prostoru lze pˇribliˇznˇe rˇ eˇsit jednoduchym ´ algoritmem[10] v polynomi´aln´ım cˇ ase. Algoritmus nejprve zkonstruuje minim´aln´ı kostru grafu, napˇr. podle Jarn´ıkova nebo Kruskalova algoritmu, viz podkapitola 5.1. Z definice kostry plyne, zˇ e souˇcet d´elky hran minim´aln´ı kostry je menˇs´ı (nebo roven) neˇz souˇcet d´elky hran v optim´aln´ım rˇ eˇsen´ı TSP, jelikoˇz minim´aln´ı kostra obsahuje v nejhorˇs´ım pˇr´ıpadˇe optim´aln´ı rˇ eˇsen´ı TSP bez nejdelˇs´ı ˚ hrany (z duvodu acykliˇcnosti). V druh´em kroku projde algoritmus kostru z libovoln´eho vrcholu do hloubky ˚ ˚ a poznamen´a si vˇsechny pruchody pˇres vrcholy, protoˇze se jedn´a o pruchod do hloubky, budou zde nˇekter´e vrcholy zpracov´any v´ıcekr´at.
18
V posledn´ım kroku algoritmus tento seznam projde a vynech´a vˇsechny dupli˚ T´ımto dojde k vytvoˇren´ı samotn´eho city a zanech´a pouze prvn´ı vyskyty vrcholu. ´ ´ hamiltonovsk´eho cyklu. Protoˇze v grafu plat´ı trojuheln´ ıkov´a nerovnost, tak se ˚ cena vysledn´ eho hamiltonovsk´eho cyklu oproti puvodn´ ı minim´aln´ı kostˇre ma´ ˚ ze byt xim´alnˇe zdvojn´asob´ı a oproti optim´aln´ımu rˇ eˇsen´ı muˇ ´ tud´ızˇ maxim´alnˇe dvakr´at delˇs´ı. 4.1.2
Christofiduv ˚ algoritmus.
˚ algoritmus rˇ eˇs´ı probl´em obchodn´ıho cestuj´ıc´ıho v metrick´em proChristofiduv storu tak, zˇ e je vysledn´ a trasa v nejhorˇs´ım pˇr´ıpadˇe 1.5-kr´at delˇs´ı neˇz d´elka trasy ´ optim´aln´ıho rˇ eˇsen´ı. Toto zlepˇsen´ı je ovˇsem vykoupeno vyraznˇ e obt´ızˇ nˇejˇs´ı imple´ ˚ ern´em mentac´ı, a z´arovenˇ se na re´alnych nen´ı v prumˇ ´ datech ukazuje, zˇ e vysledek ´ pˇr´ıpadˇe o mnoho lepˇs´ı neˇz pˇri pouˇzit´ı 2-aproximaˇcn´ıho algoritmu uveden´eho vyˇ ´ se [10]. ˚ algoritmus nejprve zkonstruuje minim´aln´ı kostru grafu T , Christofidesuv napˇr. podle Jarn´ıkova nebo Kruskalova algoritmu. Z definice kostry plyne, zˇ e soucˇ et d´elky hran minim´aln´ı kostry je menˇs´ı (nebo roven) neˇz souˇcet d´elky hran v optim´aln´ım rˇ eˇsen´ı TSP, jelikoˇz minim´aln´ı kostra obsahuje v nejhorˇs´ım pˇr´ıpadˇe ˚ optim´aln´ı rˇ eˇsen´ı TSP bez nejdelˇs´ı hrany (z duvodu acykliˇcnosti kostry grafu). Pot´e kostru projde z libovoln´eho vrcholu do hloubky a vybere ty vrcholy, jeˇz maj´ı lichy´ stupenˇ (vrcholu˚ lich´eho stupnˇe bude sudy´ poˇcet, viz Vˇeta 3.1) a zkonstru´ uje na nich kompletn´ı graf K. V grafu K nalezne minim´aln´ı upln´ e p´arov´an´ı M , takov´e p´arov´an´ı mus´ı existovat, protoˇze poˇcet vrcholu˚ je sudy´ a jedn´a se o kompletn´ı graf. Pˇredstavme si nyn´ı, zˇ e budeme cht´ıt vyˇreˇsit TSP na grafu K, rˇ eˇsen´ı ˚ bude kratˇs´ı nebo stejnˇe dlouh´e jako rˇ eˇsen´ı na puvodn´ ım grafu. Vynech´an´ım kaˇzd´e ˚ a upln´ ´ sud´e resp. lich´e hrany z TSP rˇ eˇsen´ı dostaneme dvˇe ruzn´ a p´arov´an´ı, z nichˇz alesponˇ jedno z nich bude m´ıt souˇcet hodnot hran menˇs´ı nebo rovno polovinˇe d´elky optim´aln´ıho rˇ eˇsen´ı TSP. Souˇcet d´elek vˇsech hran v p´arov´an´ı M bude tedy ´ maxim´alnˇe poloviˇcn´ı oproti optim´aln´ımu rˇ eˇsen´ı TSP. Hrany z minim´aln´ıho upln´eho p´arov´an´ı pˇrid´ame do minim´aln´ı kostry.Vznikly´ multigraf W , V (W ) = V (T ) a E(W ) = E(T ) ∪ M je nyn´ı eulerovsky´ (tj. existuje v nˇem tah, ktery´ obsahuje vˇsechny hrany multigrafu) a souˇcet hodnot hran je maxim´alnˇe 1.5 n´asobek rˇ eˇsen´ı optim´aln´ıho; 1-n´asobek za hodnoty hran minim´aln´ı kostry a 0.5-n´asobek za hod´ noty hran minim´aln´ıho upln´ eho p´arov´an´ı. ˚ algoritmus v posledn´ım kroku tento eulerovsky´ tah projde a Christofiduv ˚ naraz´ı-li na nˇejaky´ vrchol podruh´e, pˇreskoˇc´ı na nejbliˇzsˇ´ı nenavˇst´ıveny. ´ Kvuli ˚ ze t´ımto pˇreskakov´an´ım zvyˇ trojuheln´ıkov´e nerovnosti nemuˇ s it koneˇ c nou d´ e lku ´ ˚ ze pˇr´ıpadnˇe sn´ızˇ it, nikoliv vˇsak pod teorˇ eˇsen´ı, ta se t´ımto pˇreskakov´an´ım muˇ retick´e minimum. T´ımto dojde k vytvoˇren´ı samotn´eho hamiltonovsk´eho cyklu.
19 4
4
2
4 3
2
4
4
2
3 2
2
2
2
2
2
4
2
4
2
4
4
2
4
4
3 2
2
4
4
2
4
3 2
4
4
2
4
2
4 4
4
4
4
4 3
4
4
2
2
4
2
4
3
4
2 4
2
4
2
Obr´azek 12: Ilustrace Christofidova algoritmu na grafu K5 .
4.2
Heuristicke´ algoritmy
˚ kter´e rˇ eˇs´ı probl´em Zde by bylo dobr´e zm´ınit, zˇ e pomˇernˇe rozs´ahl´a tˇr´ıda algoritmu, obchodn´ıho cestuj´ıc´ıho jsou tzv. heuristick´e algoritmy. Heuristick´e algoritmy vˇe´ tˇsinou tak´e pˇripouˇst´ı urˇcitou m´ıru nepˇresnosti, na ukor toho jsou vˇsak schopny rˇ eˇsit i velice rozs´ahl´e probl´emy s poˇctem vrcholu˚ nˇekolikan´asobnˇe pˇrevyˇsuj´ıc´ı n´asˇ probl´em. Heuristick´e algoritmy nemus´ı pro dva stejn´e vstupy d´avat dva ˚ Z tˇehto stejn´e vystupy a jejich implementace cˇ asto zasahuje mimo teorii grafu. ´ ˚ duvod u˚ jsme se rozhodli heuristick´e algoritmy jako jsou genetick´e algoritmy nebo mravenˇc´ı kolonie do t´eto pr´ace nezahrnout.
20
5
Teoreticky´ rozbor
V minul´e kapitole se objevil probl´em nalezen´ı minim´aln´ı kostry v grafu u aproximaˇcn´ıch algoritmu˚ rˇ eˇs´ıc´ı probl´em obchodn´ıho cestuj´ıc´ıho. Uk´azˇ eme si tedy postupy jak minim´aln´ı kostru grafu naj´ıt a zm´ın´ıme se tak´e o Eulerovsk´em grafu a ˚ minim´aln´ım p´arov´an´ı, kter´e budeme v budoucnu potˇrebovat. Pot´e se dukladnˇ e pod´ıv´ame na graf, na kter´em budeme zadany´ probl´em rˇ eˇsit.
5.1
´ ı kostry grafu Algoritmy pro nalezen´ı minaln´
Definice minim´aln´ı kostry grafu byla zavedena v kapitole 3 na stranˇe 13. Postup ˚ ych nalezen´ı minim´aln´ı kostry je cˇ asto souˇca´ st´ı rˇ eˇsen´ı ruzn ´ technickych ´ i jinych ´ re´alnych ´ probl´emu˚ (napˇr´ıklad elektrifikace). Nalezen´ı min´aln´ı kostry rˇ eˇs´ı nˇekolik ˚ pˇredpokl´adejme souvisly´ jednoduchy´ graf G a nez´aporn´e ohodnocen´ı algoritmu, hran f . 5.1.1
Kruskaluv ˚ algoritmus
Algoritmus byl poprv´e publikov´an Josephem B. Kruskalem, zamˇestnancem ˚ algoritmus je pˇr´ıkladem hlaBellovych Laboratoˇr´ı, v roce 1956 [4]. Kruskaluv ´ dov´eho algoritmu. Hrany se proch´az´ı v poˇrad´ı od nejniˇzsˇ´ı hodnoty po nejvyˇssˇ´ı a v pˇr´ıpadˇe, kdy pˇrid´an´ım hrany do rˇ eˇsen´ı nevznikne v grafu cyklus, se hrana skuteˇcnˇe do rˇ eˇsen´ı pˇrid´a. ˚ hladovy´ algoritmus hled´a minim´aln´ı kostru T na souvisl´em grafu G s Kruskaluv hranovym ´ ohodnocen´ım f : ˇ sen´ı zaˇc´ın´a jako faktor grafu G s pr´azdnou mnoˇzinou hran, E(T ) = ∅. 1. Reˇ 2. Seˇrad’ hrany pohle jejih hodnoty, f (e1 ) ≤ f (e2 ) ≤ . . . ≤ f (eh ). 3. Proch´azej hrany v poˇrad´ı podle velikosti. Pokud hrana ei nevytvoˇr´ı v grafu T cyklus, pˇridej hranu ei do mnoˇziny E(T ). 4. Po projit´ı vˇsech hran je rˇ eˇsen´ı T minim´aln´ı kostrou grafu G. Ve sv´e pr´aci z roku 1956 Kruskal popisuje variantu k uveden´emu postupu, ve kter´em se z grafu opakovanˇe odeb´ır´a hrana s nejvˇetˇs´ım ohodnocen´ım, kter´a ˚ jeˇstˇe nezpusob´ ı, zˇ e se graf stane nesouvislym. T´ımto ekvivalentn´ım postupem ´ ˚ zeme tak´e vytvoˇrit minim´aln´ı kostru grafu. muˇ
21
Obr´azek 13: Pˇr´ıklad postupu nalezen´ı minim´aln´ı kostry pomoc´ı Kruskalova algoritmu [5]. 5.1.2
Jarn´ıkuv ˚ algoritmus
˚ algoritmus (v zahraniˇc´ı zn´amy´ jako Primuv ˚ algoritmus) pro hled´an´ı Jarn´ıkuv min´aln´ı kostry poprv´e popsal Vojtˇech Jarn´ık roku 1930, pozdˇeji byl nez´avisle znovuobjeven roku 1957 Robertem Primem. Algoritmus zaˇc´ın´a s mnoˇzinou (komponetou souvislosti) obsahuj´ıc´ı jediny´ (startovn´ı) vrchol. Postupnˇe do komponenty souvislosti pˇrid´av´a dalˇs´ı vrcholy, kter´e v n´ı jeˇstˇe nejsou zahrnuty tak, zˇ e z pˇr´ıpustnych moˇznost´ı vˇzdy zvol´ı tu, ´ jenˇz spoj´ı novy´ vrchol s komponentou souvislosti hranou s nejniˇzsˇ´ım moˇznym ´ ohodnocen´ım. Algoritmus skonˇc´ı v momentˇe, kdy komponenta souvislosti obsahuje vˇsechny vrcholy. ˚ algoritmus hled´a minim´aln´ı kostru T na souvisl´em grafu G s hranovym Jarn´ıkuv ´ ohodnocen´ım f : 1. Nastav´ıme rˇ eˇsen´ı T do poˇca´ teˇcn´ıho stavu, V (T0 ) = r , E(T0 ) = ∅, kde r je libovolnˇe zvoleny´ startovn´ı vrchol. 2. Z mnoˇziny hran W = {pq ∈ E(G) | p ∈ V (Ti−1 ), q ∈ V (G)\V (Ti−1 )} vyber tu s nejniˇzsˇ´ım ohodnocen´ım f ({p, q}) a pˇridej ji do rˇ eˇsen´ı, E(Ti ) = E(Ti−1 ) ∪ {p, q}, V (Ti ) = V (Ti−1 ) ∪ {q}. 3. Po (n − 1) kroc´ıch m´ame rˇ eˇsen´ı T = Tn , minim´aln´ı kostru grafu G.
5.2
´ ı upln ´ ´ ı Minimaln´ ´ e´ parov an´
´ Definici minim´aln´ıho upln´ eho p´arov´an´ı jsme zavedli v kapitole 3; definice 3.27. ´ Minim´aln´ı upln´ e p´arov´an´ı budeme potˇrebovat v jednom kroku algoritmu hledaj´ıc´ı optim´aln´ı trasu ve skladu. ´ ´ Probl´em nalezen´ı minim´aln´ıho upln´ eho p´arov´an´ı nepatˇr´ı mezi snadn´e ukoly. A aˇckoliv je pro kompledn´ı grafy do rˇ a´ du 10, a to bude prakticky bez vyj´ımky
22
Obr´azek 14: Pˇr´ıklad postupu nalezen´ı minim´aln´ı kostry pomoc´ı Jarn´ıkova algoritmu [5]. n´asˇ pˇr´ıpad, moˇzn´e rˇ eˇsit tento probl´em hrubou silou, je dobr´e m´ıt v z´aloze i sofistikovanˇejˇs´ı algoritmus. Jedn´ım z takovych, ktery´ by bylo moˇzn´e pouˇz´ıt, je Ed´ ˚ algoritmus, ktery´ zde nebudeme popisovat. Popis algoritmu je moˇzn´e mondsuv naj´ıt v cˇ l´anku [9] nebo l´epe v cˇ l´anku Edmonds’ Minimum Weight Perfect Matching Algorithm [8]. Hrubou silou se v tomto pˇr´ıpadˇe mysl´ı porovnat souˇcty hodnot hran vˇsech ´ moˇznost´ı upln´ eho p´arov´an´ı, kterych ´ v naˇsem pˇr´ıpadˇe, kdy hled´ame minim´aln´ı ´ upln´ e p´arov´an´ı na kompletn´ım grafu sud´eho rˇ a´ du4 , bude n/2 i=1 (2i − 1), kde n je poˇcet vrcholu˚ minim´aln´ı kostry, kter´e jsou lich´eho stupnˇe. Pro hodnotu n = 10 dost´av´ame 945 moˇznost´ı, kdy pro kaˇzdou moˇznost je potˇreba seˇc´ıst hodnoty ˚ erny´ dneˇsn´ı poˇc´ıtaˇc zvl´adne za zlomek sekundy. Pro pr´aci se 5 hran, coˇz prumˇ c je moˇzn´e vyuˇz´ıt jiˇz implementovan´e funkce pro nalezen´ı sowtwarem MATLAB⃝ ´ minim´aln´ıho upln´ eho p´arov´an´ı, obsaˇzen´e v toolboxu grTheory [7].
5.3
Eulerovsky´ tah
Definici eulerovsk´eho tahu jsme zavedli v kapitole 3; definice 3.15. Eulerovsky´ tah se n´am bude v jedn´e f´azi algoritmu hledaj´ıc´ı optim´aln´ı trasu hodit, proto zde zm´ın´ıme postup jak eulerovsky´ tah naj´ıt. Eulerovsk´e grafy jsou grafy, o kterych ´ ˚ zeme rˇ´ıct, zˇ e je lze nakreslit ”jedn´ım tahem”, t´ım mysl´ıme, zˇ e tuˇzku v prubˇ ˚ ehu muˇ kreslen´ı nezvedneme z pap´ıru, coˇz pˇresnˇe odpov´ıd´a definici 3.15 uzavˇren´eho eulerovsk´eho sledu. Cesta vysokozdviˇzn´eho voz´ıku po skladu je v urˇcit´em smyslu taky ”jedn´ım tahem”, nebudeme ale hledat eulerovsky´ tah na grafu reprezentuj´ıc´ı cely´ sklad, ale jen na urˇcit´em podgrafu, obsahuj´ıc´ı vrcholy reprezentuj´ıc´ı biny, kter´e mus´ıme navˇst´ıvit. Algoritmus vych´az´ı z Vˇety 3.2 na stranˇe 11. Ovˇerˇ´ıme-li, zˇ e je graf (multigraf) sudy´ a souvisly, ´ v´ıme zˇ e bude obsahovat eulerovsky´ tah, zbyv´ ´ a jen naj´ıt poˇrad´ı hran. 4
Graf bude sud´eho rˇ a´ du jelikoˇz hled´ame minim´aln´ı p´arov´an´ı jen mezi vrcholy minim´aln´ı kostry, kter´e jsou lich´eho stupnˇe, a tˇech je podle Vˇety 3.1 sudy´ poˇcet.
23
Algoritmus pro hled´an´ı uzavˇren´eho eulerovsk´eho tahu na zadan´em grafu, multigrafu G: 1. Ovˇerˇ´ıme, zˇ e je graf G souvisly, ´ a zˇ e je sudy. ´ Pokud tomu tak nen´ı, konˇc´ı algoritmus vypisem, zˇ e graf uzavˇreny´ eulerovsky´ tah neobsahuje. ´ 2. Vybereme n´ahodnˇe poˇca´ teˇcn´ı vrchol u ∈ V (G). 3. Postupnˇe konstruujeme (u, u)−tah tak, zˇ e se pˇresunujeme z aktu´aln´ıho vrcholu do libovoln´eho sousedn´ıho a hranu, kterou jsme k pˇresunu pouˇzili spoleˇcnˇe s koncovym ´ vrcholem uloˇz´ıme do tahu. Postupujeme tak dlouho neˇz se znovu dostaneme na vrchol u. T´ım dostaneme uzavˇreny´ (u, u)−tah. 4. Uzavˇreny´ (u, u)−tah zkontrolujeme. Postupnˇe proch´az´ıme vrcholy v (u, u)−tahu, a u kaˇzd´eho vrcholu x zkontrolujeme zda je incidentn´ı s hranou, kter´a nepatˇr´ı do (u, u)−tahu. Jestliˇze ano, pak pˇreruˇs´ıme kontrolu, (u, u)−tah ve vrcholu x rozpoj´ıme a m´ısto vrcholu x vloˇz´ıme (x, x)−tah, ktery´ zkonstruujeme stejnˇe jako jsme konstruovali (u, u)−tah v pˇredchoz´ım kroku. Sousedn´ı vrcholy ale vyb´ır´ame tak, aby jsme do (x, x)−tahu ukl´adali jen hrany, kter´e nejsou souˇca´ st´ı (u, u)−tahu, toto je d´ıky splnˇen´ı podm´ınek z prvn´ıho kroku vˇzdy moˇzn´e. Po vloˇzen´ı (x, x)−tahu pokraˇcujeme v kontrole (u, u)−tahu. 5. Pˇredposledn´ı krok 4 opakujeme do doby, neˇz kontrola probˇehne bez nalezen´ı vrcholu, ktery´ by byl incidentn´ı s hranou, kter´a nepatˇr´ı do (u, u)−tahu.
5.4
´ Teoreticky´ pohled na zadany´ problem
˚ zeme pod´ıvat Nyn´ı vybaveni teoretickymi znalostmi a zn´amymi algoritmy, se muˇ ´ ´ na zadany´ probl´em v nov´em svˇetle a pokusit se ho zformulovat ve tvaru, se kterym ´ se n´am bude snadno manipulovat. V n´asleduj´ıc´ıch odstavc´ıch budu pouzˇ ´ıvat vyraz ”uliˇcka”, t´ımto budu d´ale myslet prostor mezi reg´aly, kde se pohy´ buje vysokozdviˇzny´ voz´ık. Na mapˇe skladu (obr´azek ??) zobrazen´e na stranˇe ?? v Neveˇrejn´e cˇ a´ sti to odpov´ıd´a vodorovnym reg´aly. ´ mezer´am mezi zˇ lutymi ´ Pod pojmem ”uliˇcka”budou spadat i reg´aly, kter´e ji obklopuj´ı, budeme napˇr´ıklad hovoˇrit o binech nebo materi´alu, kter´e jsou ve stejn´e ”uliˇcce”. Cesty, kter´e jednotliv´e uliˇcky spojuj´ı, budu nazyvat spojovac´ı cesty. D´ale nebudeme br´at v potaz ´ patra skladu, jelikoˇz je z pohledu nejkratˇs´ı trasy naprosto lhostejn´e ve kter´em patˇre se materi´al k vyzvednut´ı nach´az´ı, vysokozdviˇzny´ voz´ık mus´ı zastavit na stejn´em m´ıstˇe pˇri vyzvednut´ı materi´alu z tˇret´ıho i p´at´eho patra. Vˇsechny patra tedy slouˇc´ıme do jednoho ”pˇr´ızem´ı”, kde budeme probl´em rˇ eˇsit. Pokud bude ˚ e materi´aly uloˇzen´e ve pˇri vysledn´ em sestavov´an´ı poˇrad´ı binu˚ nutn´e nabrat ruzn´ ´
24
˚ ych skladu v ruzn ´ patrech nad sebou, naberou se tyto materi´aly tˇesnˇe po sobˇe v ˚ nebo pˇr´ıpadnˇe v takov´em, kter´e nejv´ıce vyhovuje obsluze poˇrad´ı od shora dolu, vysokozdviˇzn´eho voz´ıku. Zde nen´ı moˇzn´e nijak systematicky uˇsetˇrit cˇ as. Probl´em, tak jak jsme ho uvedli v kapitole 2, je tˇreba pˇrev´est do rˇ eˇci teorie ˚ abychom mˇeli jednoznaˇcnˇe danou strukturu, se kterou budeme pracovat. grafu, Budeme-li hledat graf, ktery´ by situaci skladu dobˇre interpretoval, prvn´ı co n´as pravdˇepodobnˇe napadne, bude reprezentovat kaˇzdy´ bin ve skladu vrcholem a jednotliv´e uliˇcky a spojovac´ı cesty vedouc´ı od jednoho binu k druh´emu, hranami. T´ım z´ısk´ame graf, ktery´ celkem vystiˇ ´ znˇe popisuje dany´ sklad, obr´azek grafu je uveden v neveˇrejn´e kapitole 9 na stranˇe ??. Pokud na nˇem budeme cht´ıt dany´ probl´em rˇ eˇsit, budeme postupovat tak, zˇ e si oznaˇc´ıme vrcholy, kter´e reprezentuj´ı biny s materi´alem k vyzvednut´ı. Tyto oznaˇcen´e vrcholy potom budou tvoˇrit povinn´e zast´avky obchodn´ıho cestuj´ıc´ıho, ktery´ bude grafem cestovat. Nevyhoda ´ tohoto pˇr´ıstupu spoˇc´ıv´a v zm´ınˇen´e sloˇzitosti probl´emu obchodn´ıho cestuj´ıc´ıho ˚ pro graf s velkym ´ poˇctem vrcholu. Pokud se ale v objedn´avce vyskytnou poˇzadavky na materi´al, ktery´ je uloˇzen ˚ zeme takov´eto v binech ve stejn´e uliˇcce bl´ızko sebe, nebo se nach´az´ı naproti, muˇ biny slouˇcit do jednoho vrcholu s konstatov´an´ım, zˇ e se doupouˇst´ıme urˇcit´eho ˚ zjednoduˇsen´ı. Slouˇcen´ım v´ıce binu˚ do jednoho vrcholu zpusob´ ıme, zˇ e vˇsechen materi´al z objedn´avky nach´azej´ıc´ı se v binech slouˇcenych do jednoho vrcholu ´ bude nabr´an spoleˇcnˇe, v poˇrad´ı kter´e budeme specifikovat d´ale. To sebou pˇrin´asˇ´ı jednu velkou vyhodu a to, zˇ e v r´amci hled´an´ı optim´aln´ıho poˇrad´ı binu˚ povaˇzuju ´ vˇsechny biny slouˇcen´e do jednoho vrcholu za jeden jediny, ´ a navˇst´ıvit jakykoliv ´ ˚ ze z nich znamen´a navˇst´ıvit vˇsechny. Vyvst´av´a ot´azka, zda toto zjednoduˇsen´ı muˇ vn´est do rˇ eˇsen´ı urˇcitou chybu. Pokud jde o pˇr´ıpad, kdy se dva biny nach´azej´ı v jedn´e uliˇcce naproti sobˇe, tak jejich slouˇcen´ım se zˇ a´ dn´e chyby nedopouˇst´ıme, vysokozdviˇzny´ voz´ık mus´ı v kaˇzd´em pˇr´ıpadˇe pˇrijet na stejn´e m´ısto, kde se posl´eze otoˇc´ı doleva cˇ i doprava, coˇz trv´a stejnou dobu. Pˇri zpˇetn´em sestavov´an´ı poˇrad´ı binu˚ tedy nen´ı nutn´e br´at v potaz, ve kter´em ze dvou reg´alu˚ ohraniˇcuj´ıc´ı uliˇcku se materi´al nach´az´ı. Pokud jde o pˇr´ıpad, kdy se biny nach´azej´ı v jedn´e uliˇcce ˚ zeme byt bl´ızko sebe, ale uˇz ne naproti sobˇe, je situace sloˇzitˇejˇs´ı a zde si jiˇz nemuˇ ´ jisti, zˇ e se nedopust´ıme drobn´e chyby. Vzhledem k tomu, zˇ e optim´aln´ı rˇ eˇsen´ı jistˇe nebude obsahovat cestu, kde se budeme vracet na jiˇz navˇst´ıven´a m´ısta pro ”zapo˚ zeme oˇcek´avat, zˇ e tato pˇr´ıpadn´a chyba bude zanedbateln´a, menuty”materi´ al, muˇ ´ a d´ıky vyˇ e klesne poˇcet vrcholu˚ v grafu ´ se popsan´emu zjednoduˇsen´ı n´am vyraznˇ ´ reprezentuj´ıc´ı sklad a t´ım i vypoˇ ´ cetn´ı sloˇzitost cel´eho probl´emu. ˚ zeme na mapˇe skladu Tuto moˇznost sjednocen´ı binu˚ do jednoho vrcholu muˇ prov´est na v´ıce m´ıstech s ohledem na rozm´ıstˇen´ı binu˚ ve skladu. Vhodnym ´ pˇr´ıkladem jsou uliˇcky, kter´e maj´ı pouze jeden vstup, ktery´ je tˇreba pouˇz´ıt tak´e i pro ˚ zeme opuˇstˇen´ı uliˇcky, jelikoˇz druhy´ konec tvoˇr´ı stˇena. V takov´em pˇr´ıpadˇe muˇ vˇsechny biny z t´eto uliˇcky reprezentovat jedn´ım vrcholem, a v pˇr´ıpadˇe, kdy se
25
z jak´ehokoliv z tˇehto binu˚ nabere materi´al, naberou se pˇri t´eto zast´avce i vˇsechy materi´aly z ostatn´ıch binu˚ v t´eto uliˇcce, jsou-li nˇejak´e obsaˇzeny v objedn´avce. Je zˇrejm´e, zˇ e do takov´eto uliˇcky nen´ı za zˇ a´ dnych okolnost´ı vyhodn´ e vracet se ´ ´ podruh´e. U uliˇcky se dvˇema vstupy/vystupy uˇz tomu tak sice byt ´ ´ nemus´ı, ale zahrneme-li do uv´ahy man´evr, ktery´ mus´ı obsluha vysokozdviˇzn´eho voz´ıku prov´est, aby do uliˇcky zatoˇcila a n´aslednˇe z n´ı vyjela (pˇri vyjezdu z uliˇcky je rovnˇezˇ ´ ˚ mu˚ potˇreba d´avat pozor, aby nedoˇslo ke kolizi dvou vysokozdviˇznych ´ voz´ıku), zˇ eme si situaci ulehˇcit t´ım, zˇ e i biny z takov´eto uliˇcky sjednot´ıme do jednoho ˇ sen´ı nalezen´e v zjednoduˇsen´em grafu potom sice nemus´ı byt vrcholu. Reˇ ´ nejlepˇs´ı moˇzn´e co se celkov´e vzd´alenosti tyˇ ´ ce, pˇredpokl´ad´ame vˇsak, zˇ e bude cˇ asovˇe vyhodnˇ ejˇs´ı nebo rovnocen´e. Z´asadn´ı vyhodou tohoto pˇr´ıstupu ovˇsem je, zˇ e vy´ ´ ´ znamnˇe sn´ızˇ ´ı poˇcet vrcholu˚ v grafu, kterym ´ budeme sklad reprezentovat. T´ım dojde ke sn´ızˇ en´ı cˇ asov´e n´aroˇcnosti algoritmu. Nyn´ı se pod´ıv´ame na kostrukci grafu, ktery´ pro n´as bude pˇredstavovat model reprezentuj´ıc´ı sklad. Jelikoˇz tento graf budeme kostruovat v z´avislosti na mapˇe skladu, bude tato cˇ a´ st uvedena v neveˇrejn´e kapitole 9. Vysledn y´ graf, zobrazen na Obr´azku 15, je vhodnym ´ ´ zjednoduˇsuj´ıc´ım modelem skladu. Strukturu skladu a pohyb mezi ”biny”jeˇstˇe dobˇre popisuje podle ˚ skuteˇcnosti, ale jen s vyuˇzit´ım minim´aln´ıho poˇctu vrcholu. ˚ vyuˇzijeme postupu, kterym Pˇri zpˇetn´em sestavov´an´ı vysledn´ eho poˇrad´ı binu, ´ ´ jsme sestavovali model skladu. Jelikoˇz kaˇzdy´ vrchol v grafu reprezentuj´ıc´ı sklad obsahuje vˇzdy pouze biny z jedn´e uliˇcky, kter´a m´a jeden pˇr´ıpadnˇe dva vstupy/vystupy, je vˇzdy jedna z moˇznost´ı nabrat materi´al zleva doprava (podle cˇ ´ısla ´ pozice binu v uliˇcce vzestupnˇe) nebo zprava doleva (podle cˇ ´ısla pozice binu v uliˇcce sestupnˇe) optim´aln´ı. Vybˇ ´ er jedn´e z moˇznost´ı je z´avisy´ na um´ıstˇen´ı pˇredchoz´ıho vrcholu v optimalizovan´em poˇrad´ı. Nach´azel-li se pˇredchoz´ı vrchol na obr´azku 15 vpravo od aktu´aln´ıho, proch´az´ıme biny v sestupn´em poˇrad´ı, jinak proch´az´ıme biny ve vzestupn´em poˇrad´ı.
26
Obr´azek 15: Zjednoduˇseny´ graf popisuj´ıc´ı situaci ve skladu. Tento graf budeme pouˇz´ıvat jako model reprezentuj´ıc´ı sklad.
27
6
Optimalizace
Nyn´ı si uk´azˇ eme algoritmus, pomoc´ı kter´eho budeme cestu ve skladu optimalizovat. Zde by bylo vhodn´e zm´ınit, zˇ e pro deterministicky´ algoritmus je zcela z´asadn´ı volba modelu reprezentuj´ıc´ı sklad, o cˇ emˇz jsme pojedn´avali v podkapitole 5.4. Model mus´ı byt ´ dostateˇcnˇe zjednoduˇsuj´ıc´ı a souˇcasnˇe pokryt ´ vˇsechny ˚ zit´e aspekty pro hled´an´ı skuteˇcn´e, fyzicky existuj´ıc´ı optim´aln´ı trasy. Tˇemto duleˇ ˚ bude zajist´e vyhovovat v´ıce modelu. ˚ My jsme, po peˇcliv´e uv´aze, zvolili krit´erium model reprezentuj´ıc´ı sklad grafem na obr´azku 15. V t´eto kapitole nejdˇr´ıve pop´ısˇ eme vlastn´ı funguj´ıc´ı program s konkr´etn´ımi ˚ Pot´e si pˇribl´ızˇ ´ıme algoritmus v obecn´e n´avrhy na rˇ eˇsen´ı nˇekterych probl´emu. ´ podobˇe tak, aby mohl byt ´ implementov´am v jak´emkoliv programovac´ım jazyce. Pˇri implementaci algoritmu jsme vych´azeli z myˇslenky Christofidova algoritmu, ˚ popsan´em v podkapitole 4.1.2, a pˇrizpusobili jsme ho naˇs´ı konkr´etn´ı situaci.
6.1
Implementace Algoritmu
Pro vlastn´ı potˇrebu autora diplomov´e pr´ace vznikal postupnˇe program rˇ eˇs´ıc´ı optimalizaci cesty v konkr´etn´ım modelu skladu na re´alnych datech zaslanych ´ ´ ¨ firmou Molnlycke Health Care. Uk´azka vstupn´ıch dat je pˇriloˇzena v kapitole 9 na stranˇe ??. Vstupn´ı data osahovala nˇekolik objedn´avek, kaˇzd´a sest´avaj´ıc´ı z nˇekolika komponent, kterym ´ bylo pˇriˇrazeno cˇ ´ıslo binu, kde se maj´ı vyzvednout. Vstupn´ı hodnoty tedy reprezentovaly body na mapˇe skladu. Oˇcek´avany´ vystup ´ potom mˇel obsahovat seˇrazen´ı binu˚ pod´el nejkratˇs´ı cesty pro kaˇzdou objedn´avku. Pˇr´ıklad vystupn´ ıch dat je rovnˇezˇ v kapitole 9. ´ c pouˇzit´ım bal´ıku˚ MatProgram byl implementov´an v softwaru MATLAB⃝s graph [6] a grTheory [7] pro pr´aci s grafy a grafovymi algoritmy. Tento software ´ ˚ byl vybr´an z duvodu, zˇ e jiˇz s n´ım byl autor pr´ace dˇr´ıve sezn´amen, algoritmus samotny´ je moˇzn´e implementovat v libovoln´em programovac´ım jazyce. ˇ Nejdˇr´ıve bylo potˇreba vytvoˇrit graf G (obr´azek 15 na stranˇe 26), onen zminovany´ model skladu, se kterym budeme d´ a le pracovat, ´ g=graph; %mrizka 22x6 (cesta krat cesta) grid(g,22,6) ; %odstranime hrany a vrcholy ktere do grafu nepatri a=[67,89,111]; b=5:22; c=27:44; d=53:66; r=[a,b,c,d ]’;
28
delete(g,r ) ; o1=38:57; o2=39:58; O=[o1’,o2 ’]; delete(g,O); p1=5:7; p2=6:8; P=[p1’,p2 ’]; delete(g,P); L=[11,18;12,19;14,21;15,22]; delete(g,L);
Vypis 1: vytvoˇr´ı graf uvedeny´ na obr´azku 16. ´
Obr´azek 16: Graf reprezentuj´ıc´ı sklad (vykreslen v MATLABu). a sestavit matici D d´elek najkratˇs´ı cesty, Di,j = ρ(i, j),
29
kde ρ je metrika zaveden´a v definici 4.1 resp. 4.2 na stranˇe 17. Uloˇzit si matici ˚ V algoritmu budeme cˇ asto D je vyhodn´ e i pˇres to, zˇ e obsahuje |(V (G))|2 prvku. ´ potˇrebovat zjistit vzd´alenost dvou vrcholu˚ a v takov´em pˇr´ıpadˇe bude staˇcit vybrat pˇr´ısluˇsny´ prvek z matice D. D=dist(g);
Vypis 2: vytvoˇr´ı matici D. ´ ¨ Naˇcteme data zaslan´a firmou Molnlycke Health Care, resp. pouze tu cˇ a´ st dat kterou budeme pro n´asˇ algoritmus potˇrebovat. Jedn´a se o tˇri sloupce ze souboru.xls obsahuj´ıc´ı cˇ ´ıslo objedn´avky, poˇrad´ı poloˇzky v r´amci objedn´avky a um´ıstˇen´ı poloˇzky ve skladu uveden´ım binu. Na obr´azku ?? v neveˇrejn´e cˇ a´ sti – kapitola 9 jsou pˇr´ısluˇsn´e sloupce oznaˇceny barevnˇe. [L1,L2,L3]=nactip(’VstupniData.txt’ ) ;
Vstupn´ı data se naˇc´ıtaj´ı z textov´eho souboru, do kter´eho jseme si dˇr´ıve uloˇzili zm´ınˇen´e tˇri sloupce dat. Kaˇzdy´ ze sloupcu˚ si uloˇz´ıme jako vektor cˇ ´ısel, resp. ˚ znaku. function[objednavka,poradi,bin] = nactip( pickinglist ) % funkce nacte picking list fid = fopen( pickinglist ) ; mydata = textscan(fid, ’ %n %n %s’); fclose( fid ) ; objednavka=mydata{1}; poradi=mydata{2}; bin=mydata{3};
Vypis 3: funkce pro naˇcten´ı dat. ´ Nyn´ı naˇcten´a data projdeme, oddˇel´ıme od sebe jednotliv´e objedn´avky, a pro ˚ My kaˇzdou objedn´avku pot´e provedeme optimalizaci poˇrad´ı uvedenych binu. ´ jsme pouˇzili n´asleduj´ıc´ı jednoduchy´ postup u kter´eho jsme nav´ıc kontrolovali zda se nejedn´a o posledn´ı poloˇzku seznamu. %seznam vrcholu grafu g, ktere musime projit v ramci jedne objednavky u =[]; %seznam binu v ramci jedne objednavky ubin={}; %pocet polozek v nactenem seznamu delkapickinglistu =length(L1); %ukazatel v ramci objednavky cislo polozky=1; for ukazatel=1:delkapickinglistu if ukazatel == delkapickinglistu %vypise se vse co zbyva %podobny postup jako v casti else s jednim volanim optimalizace zapis navic.
30
else if L2(ukazatel)==cislo polozky %do objednavky se vlozi dalsi polozka polozka=L3(ukazatel); u(cislo polozky )=bin(polozka{1}); ubin(cislo polozky )=L3(ukazatel); %cislo polozky se zvysi o 1 cislo polozky=cislo polozky+1; else %ulozi cislo zkompletovane objednavky obj=L1(ukazatel−1); % zavola cast programu pro optimalizaci a zapis do souboru optimalizace zapis % vzmaze stavajici hodnoty, priprava pro novou objednavku u =[]; ubin={}; ret=L3(ukazatel); % vlozi prvni polozku do nove objednavky u(1)=bin(ret{1}); ubin(1)=L3(ukazatel); %nastavi ukazatelatel na druhou polozku cislo polozky=2; end end end
Vypis 4: proch´azen´ı naˇctenych ´ ´ dat. Pˇri proch´azen´ı dat jsme pro kaˇzdou objedn´avku vytvoˇrili seznam vrcholu˚ ˚ u, jehoˇz prvky odpov´ıdaj´ı vrcholum, kter´e je pˇri kompleteci objedn´avky tˇreba ˚ kter´e tento vrchol reprezentuje, obsahuj´ı navˇst´ıvit, jelikoˇz jeden nebo v´ıce binu, poloˇzku z objedn´avky. Seznam vrcholu˚ u obsahuje cˇ ´ısla, pomoc´ı kterych ´ je moˇzno jednoznaˇcnˇe identifikovat vrchol z grafu G pomoc´ı obr´azku 16 (v algoritmu se k vrcholu pˇristupuje pˇr´ımo pˇres cˇ ´ıslo, pod kterym ´ je ve struktuˇre grafu uloˇzen). Pˇri naˇcten´ı a n´asledn´em rozdˇelen´ı dat jsem mˇeli k dispozici pouze seznam ˚ tak jak n´am ho poskytla firma Molnlycke ¨ binu, Health Care, viz obr´azek ?? v neveˇrejn´e cˇ a´ sti na stranˇe ??. Uk´azˇ eme si, jak jsme v algoritmu vyˇreˇsili cˇ a´ st, kterou jsme popsali v podkapitole 5.4, kdy pod jeden vrchol v n´ami zvolen´e modelov´e ˚ Pro tento uˇ ´ cel je potˇreba sestavit urˇcity´ pˇrekladaˇc, ktery´ situaci spad´a v´ıce binu. zadan´emu binu bude schopen pˇriˇradit vrchol (ˇc´ıslo vrcholu), ktery´ tento bin v naˇsem modelu reprezentuje. Probl´em zpˇetn´eho pˇrekladu pak jiˇz nen´ı tˇreba rˇ eˇsit, nebot’ pr´avˇe rozdˇelen´ı binu˚ do jednotlivych ´ vrcholu˚ bylo konstruov´ano tak, aby v r´amci jednoho vrcholu bylo moˇzn´e seˇradit biny jen podle jejich uspoˇra´ d´an´ı v uliˇcce. Pˇrekladaˇc v tuto chv´ıli pˇrekl´ad´a jen biny, kter´e jsou zad´any ve form´atu sklad uliˇcka – patro – pozice v uliˇcce. V pickinglistu se vyskytuj´ı i biny v jin´em
31
form´atu (zbytkov´e zboˇz´ı), ty ale bez pˇresn´e znalosti m´ısta uloˇzen´ı, kter´e v tuto chv´ıli nem´ame k dispozici, nemohou byt ´ do optimalizace zaˇrazeny. function[n] = bin(s) %funkce vraci cislo vrcholu reprezentujici zadany bin s % vstup −− s retezec znaku % vystup −− n cislo vrcholu
Vypis 5: funkce pˇriˇrad´ı binu vrchol grafu G. (funkˇcn´ı verze funkce je uvedena na ´ konci neveˇrejn´e cˇ a´ sti pr´ace) V tuto chv´ıli m´ame pˇripraveny´ jak graf G, matici D obsahuj´ıc´ı vzd´alenosti ˚ kter´e potˇrebujeme navˇst´ıvit. jednotlivych ´ vrcholu˚ grafu G tak i seznam vrcholu, Nejdˇr´ıve si uk´azˇ eme cˇ a´ st programu, kter´a zapisuje vysledek do vystupn´ ıho sou´ ´ ˚ zitˇejˇs´ı cˇ a´ sti optimalizace, kterou tato cˇ a´ st vol´a. boru, pot´e pˇrejdeme k nejduleˇ ´ N´asleduj´ıc´ı cˇ a´ st zdrojov´eho kodu zapisuje optim´alnˇe seˇrazen´e biny z jednotlivych objedn´avek do souboru ”output2.txt”. Pro kaˇzdou objedn´avku vytiskne ´ jej´ı cˇ ´ıslo a v pˇr´ıpadˇe, zˇ e je poˇcet vrcholu˚ k optimalizaci5 alesponˇ 3 (1 nebo 2 vrcholy nen´ı tˇreba optimalizovat, jak´ekoliv ”poˇrad´ı je optim´aln´ı”) zavol´a funkci, ˚ podle kter´eho se potom vyp´ısˇ ou biny do kter´a nalezne optim´aln´ı poˇrad´ı vrcholu, vystupn´ ıho souboru. ´ %Otevre soubor pro zapis file 2 = fopen(’output2.txt ’ , ’ a’ ) ; %Vytiskne cislo aktualni objednavky fprintf ( file 2 , ’ −−−−−−−−−−−OBJEDNAVKA %d −−−−−−−−−−\n’,obj); %Vytiskne biny z objednavky for i =1:length(ubin) fprintf ( file 2 , ’ o %s \n’,ubin{i}); end %Vytiskne vstupni vektor s vrcholy ktere se maji navstivit for j =1:length(u) fprintf ( file 2 , ’ %d ’,u(j ) ) ; end %Ulozi puvodni poradi vrcholu uu=u; vysledneporadi=[]; %Seradi vrcholy podle prirazenych cisel, odstrani duplicity a pripadne %hodnoty 0. u=unique(u); if u(1)==0 u=u(2:length(u)); end %Overeni vstupnich podminek %Pokud mame na vstupu 1 nebo 2 vrcholy, jsou uz optimalne serazene. if length(u)<3 5
˚ Ve skuteˇcnosti by staˇcilo optimalizovat poˇrad´ı 4 a v´ıce vrcholu.
32
fprintf ( file 2 , ’ NIZKY−POCET−VRCHOLU \n’); fprintf ( file 2 , ’ vysledne poradi vrcholu je:\n’); fprintf ( file 2 , ’ −− %d’,u); vysledneporadi=u; %Jinak se zavola funkce pro optimalizaci else %zavola funkci ktera najde optimalni poradi vrcholu %vstup funkce je graf g, matice vzdalenosti D a vektor vrcholu u. [poradi,delka,cas] = optimalizace(g,D,u); fprintf ( file 2 , ’ ooo−−−−−−DIPLOMOVA−PRACE−−−−−−−ooo\n’); fprintf ( file 2 , ’ vysledne poradi vrcholu je: \n’) ; fprintf ( file 2 , ’ −− %d’,poradi); fprintf ( file 2 , ’ delka je: %d \n’,delka); fprintf ( file 2 , ’ cas nalezeni: %d \n’,cas); vysledneporadi=poradi; % pokud je vrcholu mene nez 8 (jinak by jsme cekali prilis dlouho) % muzeme nasi funkci porovnat s funkci TSP pro nalezeni cesty % obchodniho cestujiciho, ktera je implementovana v toolboxu grTheory if length(u)<8; [TSPporadi,TSPdelka,TSPcas] = najdi tsp(D,u); fprintf ( file 2 , ’ o−−−−−−−−−TSP−MATLAB−−−−−−−−−o\n’); fprintf ( file 2 , ’ vysledne poradi TSP je: \n’); fprintf ( file 2 , ’ −− %d’,TSPporadi); fprintf ( file 2 , ’ delka TSP je: %3.1f \n’,TSPdelka); fprintf ( file 2 , ’ cas nalezeni TSP: %d \n’,TSPcas); %a pokud by se vysledne delky tras odlisovaly, upozornime na to. if (int32 (mdelka)) ˜= (int32 (TSPdelka)) fprintf ( file 2 , ’ POZOR−DELKY JSOU RUZNE \n’); end end end %Nyni zname poradi vrcholu a potrebujeme jeste vysledne poradi binu. count=1; listbin ={}; %Seradime je podle poradi vrcholu a jeste v ramci ulicky , %posledni dve cisla binu udavaji jeho pozici v ulicce . for i =1:length(vysledneporadi) sprvni={}; bprvni =[]; pozicevrcholu=find(uu==vysledneporadi(i)); for j =1:length(pozicevrcholu) sprvni{j}=ubin{pozicevrcholu(j)}; end for jj =1:length(pozicevrcholu) a bin=sprvni{ jj }; bprvni(k)=((10∗(str2double(a bin(7)) ) )+(str2double(a bin(8)) ) ) ; end [A,X]=sort(bprvni); for jjj =1:length(pozicevrcholu)
33
listbin {count}=sprvni{X(jjj ) }; count=count+1; end end % vypiseme vysledne poradi binu. fprintf ( file 2 , ’ Vysledne poradi binu je: \n’); for i =1:length( listbin ) %s \n’, listbin {i }) ; fprintf ( file 2 , ’ x end fclose( file 2 ) ;
Vypis 6: vytiskne poˇzadovany´ vysledek optimalizace do souboru ´ ´ ´ Uveden´a cˇ a´ st 6 zdrojov´eho kodu v jedn´e f´azi vol´a funkci najdi_tsp, kter´a pˇriprav´ı vstupn´ı parametry pro funkci TSP a tu pot´e zavol´a. Funkce TSP, o kter´e jsme zde jiˇz mluvili, je implementov´ana v toolboxu grTheory a pouˇz´ıvali jsme ji k porovn´an´ı vysledk u˚ s naˇsim algoritmem. Funkce najdi_tsp byla vol´ana jen ´ v pˇr´ıpadˇe, zˇ e byl poˇcet vrcholu˚ kter´e je tˇreba proj´ıt, menˇs´ı neˇz 8, jinak by se na vysledek t´eto funkce cˇ ekalo pro kaˇzdou objedn´avku i nˇekolik minut. ´ function [pTS,fmin]=TravSalePro(C) % Function [pTS,fmin]=grTravSale(C) solve the nonsymmetrical % traveling salesman problem. % Input parameter: % C(n,n) − matrix of distances between cities, % maybe, nonsymmetrical; % n − number of cities. % Output parameters: % pTS(n) − the order of cities ; % fmin − length of way. % Uses the reduction to integer LP−problem: % Look: Miller C.E., Tucker A. W., Zemlin R. A. % Integer Programming Formulation of Traveling Salesman Problems. % J.ACM, 1960, Vol.7, p. 326−329. % Author: Sergii Iglin % e−mail:
[email protected] % personal page: http :// iglin .exponenta.ru
Vypis 7: koment´arˇ k funkci TSP ´ Nyn´ı se uˇz koneˇcnˇe pod´ıv´ame na samotnou funkci optimalizace, kter´a zadany´ probl´em rˇ eˇs´ı a hled´a optim´aln´ı poˇrad´ı vrcholu˚ zadanych ´ ve vektoru u. Funkce optimalizace poˇzaduje jako vstupn´ı hodnoty graf G, reprezentuj´ıc´ı model skladu, matici D, s d´elkou nejkretˇs´ı (i, j)-cesty v grafu G uloˇzenou v i-t´em sloupci a j-t´em rˇ a´ dku a seznam vrcholu˚ kter´e je tˇreba navˇst´ıvit. Vystupn´ ı ´ ˚ celkov´a d´elka trasy a doba bˇehu hodnoty jsou potom optim´aln´ı poˇrad´ı vrcholu, algoritmu. Funkce optimalizace pouˇz´ıv´a funkce implementovan´e v toolboxu grTheory
34
grMinSpanTree() funkce pro nalezen´ı minim´aln´ı kostry. Algoritmy pro nalezen´ı minim´aln´ı kostry jsme diskutovali v podkapitole 5.1 grMaxMatch() funkce pro nalezen´ı maxim´aln´ıho p´arov´an´ı. Minim´aln´ı p´arov´an´ı ˚ zeme z´ıskat pomoc´ı p´arov´an´ı maxim´aln´ıho, pokud od pevnˇe zvolen´e muˇ konstanty odeˇcteme hodnotu hran. Probl´em minim´aln´ıho p´arov´an´ı jsme diskutovali v podkapitole 5.2 euler trail() funkce pro nalezen´ı eulerovsk´eho tahu. Eulerovsky´ tah jsme probrali v podkapitole 5.1 function[u poradi,delka,cas] = optimalizace(g,D,u) %−−−−−−−−vystupy %poradi=vysledne poradi vrcholu. %delka= celkova delka trasy. %cas=doba trvani algoritmu. %−−−−−−−−vstupy %g−graf g, sklad. %D−matice vydalenosti. %u−vektor obsahujici cisla vrcholu, ktere se maji navstivit . %zacneme merit cas tic ; l =length(u); %vytvori matici E, ktera reprezentuje hrany kompletniho grafu na %vrcholech z vektoru u. %Kaydy radek matice E reprezentuje jednu hranu. %V prvnich dvou sloupcich jsou ulozeny koncove vrcholy hrany ve tretim %sloupci je potom delka teto hrany odpovidajici delce cesty ve skladu. E=zeros((l∗(l−1)/2),3) ; c=1; for i =1:( l −1) for j =(1+i) : l E(c,1)=u(i ) ; E(c,2)=u(j ) ; E(c,3)=D(u(i) ,u( j ) ) ; c=c+1; end end %Najde minimalni kostru k kompletniho grafu na vrcholech u, s ohodnocenymi %hramami podle matice E. %Volame metodu z toolboxu grTheory, ktera najde minimalni kostru grafu, viz %Kruskaluv algoritmus v kapitole 5.1.1 t=grMinSpanTree(E); k=graph; copy(k,g); label (k) ; clear edges(k)
35
for q=1:(length(t)) fp=find path(g,E(t(q),1) ,E(t(q),2) ) ; for z=1:(length(fp)−1) add(k,fp(z) , fp(z+1)); end end %ulozi delku souctu hran v minimalni kostre k. mdel1=ne(k); %score grafu (minimalni kostry) k. stup=deg(k); %najdeme vrcholy licheho stupne. liche =[]; cc=1; for i =1:(length(stup)) if mod(stup(i),2)==1 liche (cc)=str2double(get label(k, i ) ) ; cc=cc+1; end end %Nyni budeme hledat minimalni uplne parovani na mnozine vrcholu L minimalni %kostry k, ktere jsou licheho stupne(tech bude sudy pocet). %Matice F reprezentuje hrany kompletniho grafu na vrcholech L. %V prvnich dvou sloupcich jsou ulozeny koncove vrcholy hrany ve tretim %sloupci je potom delka teto hrany odpovidajici delce cesty ve skladu. lll =length(liche); F=zeros(( lll ∗( lll −1)/2),3) ; ccc=1; for i =1:( lll −1) for j =(1+i) : lll F(ccc,1)=liche( i ) ; F(ccc,2)=liche( j ) ; F(ccc,3)=D(liche( i ) , liche ( j ) ) ; ccc=ccc+1; end end %Jelikoz budeme volat funkci pro nalezeni maximalniho parovani, ale my %potrebujeme parovani minimalni, odecteme stavajici hodnotu hran v matici F %od konstanty, my zvolime konstantu 30, a nasledne ziskane hrany parovani %budou tvorit minimalni parovani. fv=(size(F)) ; for s=1:(fv (1) ) F(s,3)=30−F(s,3); end %Volame metodu z toolboxu grTheory, ktera najde minimalni parovani. M=grMaxMatch(F); %ulozime hrany minimalniho parovani a secteme jejich delku, nezapomeneme ze %jsme predtim odecitali skutecnou hodnotu hran od konstanty 30. m=graph; copy(m,g);
36
label (m); clear edges(m) mdel2=0; for p=1:(length(M)) add(m,F(M(p),1),F(M(p),2)); mdel2=mdel2+(30−(F(M(p),3))); end %Vytvorime multigraf spojenim minimalni kostry k a minimalniho parovani m. eg=graph; copy(eg,k) union(eg,k,m); %Vznikly multigraf je sudy, nalezneme Eulerovsky tah. %Volame metodu z toolboxu grTheory, ktera najde Eulerovsky tah. Eporadi= euler trail (eg); %ziskame poradi hran, pomoci koncovych vrcholu techto hran dostaneme poradi %vrcholu v Eulerovskem tahu. poradi=Eporadi(:,1); %Nyni z poradi vrcholu odstranime ty vrcholy ktere nas nezajimaji, %to jsou ty ktere nebyly obsazeny ve vstupu u. u poradi =[]; f=1; for i =1:(length(poradi)) for j =1:(length(u)) if poradi( i )==ut(j ) u poradi( f )=mporadi(i); f=f+1; u( j )=0; end end end %secteme delku minimalni kostry a minimalniho parovani. delka=mdel1+mdel2; %ulozime jak dlouho algoritmus bezel. cas=toc;
Vypis 8: funkce vr´at´ı optim´aln´ı poˇrad´ı vrcholu˚ a celkovou d´elku trasy. ´ Vyˇ ´ se popsany´ program jsem otestoval na vstupn´ıch datech, kter´a zaslala firma ¨ Molnlycke Health Care. Vstupn´ı data obsahovala 121 objednavek a na poˇc´ıtaˇci s procesorem Intel Core i5 3, 2GHz a 4GB RAM trval pˇribliˇrnˇe 9 sekund. Ve vˇsech pˇr´ıpadech, kdy se vysledek porovn´aval s vysledkem funkce TSP z toolboxu grThe´ ´ ory, byly d´elky navrhovanych ´ tras obou algoritmu˚ stejn´e.
37
6.1.1
ˇ ı Moˇzna´ vylepsen´
V nˇekterych ´ pˇr´ıpadech, nastane situace, kdy algoritmus najde takov´e rˇ eˇsen´ı, kter´e se lidsk´emu vn´ım´an´ı nezd´a pˇr´ıliˇs vhodn´e.
Obr´azek 17: Pˇr´ıklad 8, 13, 50, 52, 48, 41.
diskutabiln´ıho
rˇ eˇsen´ı
s
nalezenym ´
poˇrad´ım
˚ A k tomuto rˇ eˇsen´ı cˇ asto existuje jin´e, kter´e je stejnˇe dlouh´e jako puvodn´ ı, ˇ ale pro cˇ lovˇeka uˇz nen´ı tolik ”kontroverzn´ı”. Reˇsen´ı nalezen´e na obr´azku 17 s ´ ych poˇrad´ım vrcholu˚ 8, 13, 50, 52, 48, 41 je sice v s´ıti pravouhl ´ uliˇcek spr´avnˇe, je ale trochu nepˇr´ıjemn´e, zˇ e z trojice vrcholu˚ 48, 50, 52 nejdˇr´ıve jdeme do prostˇredn´ıho vrcholu 50 potom do vrcholu 52 a potom se ”vrac´ıme”do vrcholu 48. Mnohem pˇrirozenˇejˇs´ı by bylo navˇst´ıvit je popoˇradˇe 48, 50, 52 nebo pˇr´ıpadnˇe v poˇrad´ı obr´acen´em. Na tomto m´ıstˇe vˇsak poznamenejme, zˇ e celkov´a d´elka cesty bude ve vˇsech tˇehto pˇr´ıpadech stejn´a. Tento drobny´ probl´em nast´av´a ve chv´ıli, kdy algoritmus hled´a minim´aln´ı p´arov´an´ı, kter´e mnohdy nen´ı jednoznaˇcne urˇceno. V t´eto chv´ıli bychom chtˇeli donutit algoritmus aby upˇrednostnoval nˇekter´a rˇ eˇsen´ı
38
pˇred jinymi. Konkr´etnˇe bychom chtˇeli, aby se v minim´aln´ım p´arov´an´ı nevysky´ ´ tovaly pˇr´ıliˇs dlouh´e hrany, kter´e dovoluj´ı urˇcit´e useky, do kterych ´ je potom nutn´e ˚ zeme dos´ahnout tak, zˇ e k extr´emnˇe dlouhym se ”vracet”, pˇreskoˇcit. Toho muˇ ´ hran´am pˇriˇcteme nˇejakou konstantu, kter´a bude vyˇssˇ´ı neˇz konstanta pˇriˇcten´a k hran´am kratˇs´ım. Celkov´a hodnota konstanty by ale mˇela byt ´ niˇzsˇ´ı neˇz je nejratˇs´ı moˇzn´a d´elka hrany, tedy 1, abychom nemuseli hl´ıdat, zda jde skuteˇcnˇe jeˇstˇe o minim´aln´ı p´arov´an´ı. Zde se nab´ız´ı pˇriˇc´ıst druhou mocnimu d´elky hrany (nejdelˇs´ı hrana m´a d´elku 27.) vydˇelenou 1000. V takov´em pˇr´ıpadˇe budou zachov´any vyˇ ´ se popsan´e poˇzadavky a algoritmus do minim´aln´ıho p´arov´an´ı nevybere extr´emnˇe dlouh´e hrany. ´ Po t´eto upravˇ e n´am d´a program n´asleduj´ıc´ı rˇ eˇsen´ı, kter´e uˇz je ”pocitovˇe”pˇrijateln´e.
´ Obr´azek 18: Nalezen´e rˇ eˇsen´ı po upravˇ e 8, 13, 52, 50, 48, 41.
39
6.2
Algoritmus
Nyn´ı uvedeme v obecn´e podobˇe algoritmus, ktery´ najde optim´aln´ı poˇrad´ı zadanych ´ vrcholu˚ u, kter´e reprezentuj´ı bin, nebo v´ıce binu˚ z objedn´avky. Algoritmus pracuje s modelem skladu (obr´azek 15), ktery´ jsme odvodili v kapitole 5.4. Model skladu je stˇezˇ ejn´ı bod optimalizace, a kdyby byl navrˇzen jinak, nemusel by d´ale popsany´ algoritmus korektnˇe fungovat. Algoritmus 1. Algoritmus m´a dva vstupn´ı parametry: graf G, pˇredstavuj´ıc´ı model skladu a mnoˇzinu vrcholu u, coˇz jsou vrcholy, kter´e v modelu reprezentuj´ı biny ze kterych ´ je potˇreba nabrat materi´al pro objedn´avku, u ∈ V (G). 2. Sestav´ıme matici D d´elek kejkratˇs´ıch cest mezi vrcholy i, j ∈ V (G). Di,j = nejkratˇs´ı (i, j)-cesta v grafu G. 3. Vygenerujeme kompletn´ı graf Ku na u vrcholech a kaˇzdou hranu tohoto grafu ohodnot´ıme f ({i, j}) = Di,j , ∀{i, j} ∈ E(Ku ) ( pˇriˇrad´ıme hodnotu d´elky nejkratˇs´ı (i, j)-cesty v grafu G). 4. V grafu Ku nalezneme minim´aln´ı kostru za pouˇzit´ı Kruskalova algoritmu, viz kapitola 5.1. 5. V grafu G nalezneme strom T , odpov´ıdaj´ıc´ı minim´aln´ı kostˇre grafu Ku . Hrany minim´aln´ı kostry pˇrevedeme na jim odpov´ıdaj´ıc´ı cesty v grafu G. Mnoˇzina hran E(T ) bude obsahovat sjednocen´ı hrany, kter´e jsou souˇca´ st´ı tˇehto cest (duplicitn´ı hrany budou zahrnuty pouze jednou, nebude se jednat o multigraf). 6. Vrcholy lich´eho stupnˇe grafu T oznaˇc´ıme W , W ⊆ V (G). Poznamenejme, zˇ e podle principu sudosti bude tˇehto vrcholu˚ sudy´ poˇcet |W | ≡ 0 (mod 2). 7. Vygenerujeme kompletn´ı graf KW na W vrcholech a kaˇzdou hranu tohoto grafu ohodnot´ıme f ({i, j}) = Di,j , ∀{i, j} ∈ E(KW ). ( pˇriˇrad´ıme hodnotu d´elky nejkratˇs´ı (i, j)-cesty v grafu G) ´ 8. Nalezneme minim´aln´ı upln´ e p´arov´an´ı M vrcholu˚ W na grafu KW . 9. Sjednocen´ım hran E(T ) a M dostaneme sudy´ multigaf H, ktery´ bude souvisly. ´ 10. Najdeme uzavˇreny´ Eulerovsky´ tah E.
40 11. Vrcholy u seˇrad´ıme podle jejich vyskytu v Eulerovsk´em tahu E, pokud se ´ 6 vrchol v tahu nach´az´ı v´ıcekr´at , ponech´ame pouze jeho prvn´ı vyskyt. ´ ˚ Vysledn´ T´ım z´ısk´ame vysledn´ e poˇrad´ı vrcholu. e poˇrad´ı binu˚ potom z´ısk´ame ´ ´ postupem, kdy proch´az´ıme vrcholy v nalezen´em vysledn´em poˇrad´ı a u kaˇzd´eho vrcholu vyp´ısˇ eme vˇsechny biny, kter´e dany´ vrchol pro danou objedn´avku re´ prezentuj´ı. Rozdˇelen´ı binu˚ do vrcholu˚ jsme pˇri tom konstruovali umyslnˇ e tak sˇ ikovnˇe, zˇ e pokud je pˇredchoz´ı vrchol ohodnocen niˇzsˇ´ım cˇ ´ıslem vypisujeme biny podle pozice v uliˇcce vzestupnˇe, pokud je pˇredchoz´ı vrchol ohodnocen vyˇssˇ´ım cˇ ´ıslem vypisujeme biny podle pozice v uliˇcce sestupnˇe. Ohodnocen´ı vrcholu˚ lze nal´ezt na obr´azku 16 na stranˇe 28. Toto m´a nav´ıc vyznam jen pro vrcholy ´ 5, 6, 7, 8, 10, 13, 16, 17, 20, 23 a vrcholy 38 aˇz 58 kde jsou biny um´ıstˇen´e v uliˇcce do kter´e je moˇzno vjet z obou stran. U vˇsech ostatn´ıch vrcholu˚ toto nehraje roli, jelikoˇz ve slep´e uliˇcce je vˇzdy potˇreba dojet aˇz pro materi´al, ktery´ je od vjezdu do uliˇcky nejvzd´alenˇejˇs´ı, a po cestˇe zpˇet (nebo po cestˇe tam) nabrat postupnˇe materi´al zbyvaj´ ´ ıc´ı.
6
˚ ze teoreticky nastat, napˇr´ıklad mezi skladem B a C jsou pouze tˇri pruchody ˚ Tato situace muˇ a je moˇzn´e, zˇ e nejvyhodnˇ ejˇs´ı bude pouˇz´ıt jeden z nich dvakr´at. ´
41
7
´ er ˇ Zav
Tato diplomov´a pr´ace rˇ eˇs´ı probl´em optimalizace trasy pro vyzvednut´ı jednot¨ Health Care. Pro zpracov´an´ı livych ´ poloˇzek ve skladu, zadany´ firmou Molnlycke ˚ ern´e (napˇr. diplomov´e pr´ace poskytl zadavatel informace, kter´e povaˇzuje za duvˇ ˚ mapa skladu) a nepˇreje si jejich zveˇrejnˇen´ı. Z tohoto duvodu je diplomov´a pr´ace rozdˇelena na cˇ a´ st veˇrejnou a neveˇrejnou. Diplomov´a pr´ace je koncipov´ana tak, aby pˇr´ıpadny´ cˇ ten´arˇ byl schopen pochopit n´ami zvoleny´ pˇr´ıstup k probl´emu a jeho rˇ eˇsen´ı i bez pˇr´ıstupu k neveˇrejn´e cˇ a´ sti pr´ace. V pr´aci jsme zadany´ probl´em peˇclivˇe zformulovali a popsali jsme situaci ve ˚ a definic´ım z teorie grafu, ˚ skladu. Samostatnou kapitolu 3 jsme vˇenovali pojmum ˚ ehu cel´e pr´ace pouˇz´ıvali a kter´e byly potˇreba pˇri formulov´an´ı kter´e jsme v prubˇ teoretick´eho pˇr´ıstupu k probl´emu. Navrhli jsme urˇcit´a zobecnˇen´ı a zjednoduˇsili jsme teoreticky´ model zadan´eho praktick´eho probl´emu tak, aby obsahoval pouze informace maj´ıc´ı vliv na nalezen´ı nejkratˇs´ı trasy. Informace, kter´e mˇeli zˇ a´ dny, ´ nebo zanedbatelny´ vliv na hledany´ vysledek, nebyly do modelu zahrnuty. Syst´em, ´ jakym pˇri optima´ byl model reprezentuj´ıc´ı sklad sestaven, m´a z´asadn´ı vyznam ´ lizaci a tvoˇr´ı vyznamnou cˇ a´ st diplomov´e pr´ace. D´ale jsme si pˇredstavili probl´em ´ obchodn´ıho cestuj´ıc´ıho a aproximaˇcn´ı algoritmy, kter´e ho rˇ eˇs´ı. Nakonec jsme popsali algoritmus pro rˇ eˇsen´ı zadan´eho probl´emu a s pouˇzit´ım cˇ a´ st´ı zdrojov´eho c popsali postup jeho implementace. ´ kodu aplikace, psan´e v jazyce MATLAB⃝, c kter´a pro zadanou objedn´avku najde optim´aln´ı Aplikace v jazyce MATLAB⃝, ˚ nen´ı souˇca´ st´ı t´eto pr´ace s ohledem na skuteˇcnost, zˇ e firma Moln¨ poˇrad´ı binu, ˚ ernych lycke Health Care projevila z´ajem o nezveˇrejnˇen´ı duvˇ ´ informac´ı, kter´e jsou ´ v nˇekterych obsaˇzeny. Mimo to, vlastn´ı aplikace nebyla ´ cˇ a´ stech zdrojov´eho kodu zamyˇ t´eto diplomov´e pr´ace, sp´ısˇ e slouˇzila k odzkouˇsen´ı navrho´ slena jako vystup ´ van´eho algoritmu a zjiˇstˇen´ı pˇribliˇzn´e doby bˇehu algoritmu na re´alnych ´ vstupn´ıch datech, coˇz se podaˇrilo. C´ıle pr´ace bylo dosaˇzeno s konstatov´an´ım, zˇ e zvoleny´ algoritmus negarantuje sice nalezen´ı naprosto nejkratˇs´ı cesty, ale pˇri testov´an´ı na datech z re´aln´eho provozu, byly d´elky vˇsech nalezenych ´ tras shodn´e s d´elkami tras, kter´e naˇsel TSP algoritmus implementovany´ v toolboxu MATLABu [7]. Doba bˇehu obou algoritmu˚ byla sice pro objedn´avky obsahuj´ıc´ı maly´ poˇcet komponent rˇ a´ dovˇe stejn´a, uˇz vˇsak pro objedn´avky s poˇctem a um´ıstˇen´ım jednotlivych ´ komponent tak, zˇ e ˚ ych je nutn´e navˇst´ıvit pˇribliˇznˇe deset ruzn m´ıst ve skladu, nach´az´ı n´ami navr´ ˇ hovany´ algoritmus rˇ eˇsen´ı v rˇ a´ du sekund, zat´ımco zminovan y´ TSP algoritmus v rˇ a´ du minut. Uˇzit´ı navrhovan´eho algoritmu samozˇrejmˇe nen´ı nijak v´az´ano na c stejn´e vysledky ˚ zeme oˇcek´avat v libovoln´em prograsoftware MATLAB⃝a muˇ ´ movac´ım jazyce. Samotn´a implementace algoritmu je dle dohody v kompetenci ¨ firmy Molnlycke Health Care, protoˇze bude souˇca´ st´ı jejich st´avaj´ıc´ıho softwaru.
42
Tato pr´ace tak´e ukazuje praktick´e vyuˇzit´ı teorie grafu˚ pˇri rˇ eˇsen´ı re´aln´eho pro˚ bl´emu v prumyslu a moˇznost spolupr´ace akademick´e obce se soukromym ´ sekto¨ rem. Na tuto spolupr´aci se d´a v pˇr´ıpadˇe z´ajmu Molnlycke Health Care nav´azat s n´avrhem lepˇs´ı organizace uloˇzen´ı komponent ve skladu, aby se minimalizovaly d´elky tras pˇri kompletaci objedn´avek.
43
8
Literatura
ˇ [1] P. K OV A´ Rˇ , Teorie grafu˚ (uˇcebn´ı text), VSB-TU Ostrava, 2012. ´ [2] D. L. A PPLEGATE , R. E. B IXBY, V. C HV ATAL , W. J. C OOK , The Traveling Salesman Problem: A Computational Study, Princeton University Press, 606pp, 2006. [3] W. J. C OOK , In Pursuit of the Traveling Salesman: Mathematics at the Limits of Computation, Princeton University Press, 2012. [4] J. B. K RUSKAL , J R ., On the Shortest Spanning Subtree of a Graph and the Traveling Salesman Problem. Proceedings of the American Mathematical Society, 1956. ˇ ERN Y´ , Z´akladn´ı grafov´e algoritmy. KAM, MFF UK - Praha, 2010, Verze [5] J. C 0.95. [6] E. S CHEINERMAN , Matgraph –matlab toolbox for working with simple, undirected graphs. 2008 (pouˇzit´a verze 2012). http://www.ams.jhu.edu/ ers/matgraph/ [7] S. I GLIN , grTheory –Graph Theory Toolbox with functions for different tasks of c 2003 (pouˇzit´a verze 2012). graph theory for MATLAB⃝, [8] L. G ODDYN , Edmonds’ Minimum Weight Perfect Matching Algorithm, Math 408, 2012. http://people.math.sfu.ca/ goddyn/Courseware/edmonds.pdf [9] H. G ABOW, An Efficient Implement at ion of Edmonds’ Maximum – Matching Algorithm, Stanford University, 1972 (Technical Report No. 31). ftp://reports.stanford.edu/pub/cstr/reports/cs/tr/72/328/CS-TR-72328.pdf [10] Algoritmy.net [online], Probl´em obchodn´ıho cestuj´ıc´ıho, 2012. Dostupn´e z: http://www.algoritmy.net/article/5407/Obchodni-cestujici ˇ [11] P. K OV A´ Rˇ , On Magic Graph Labelings, Ph.D. Thesis, VSB-TU Ostrava, 2004. [12] R. E. B URKARD et al. , Well-solvable special cases of the traveling salesman problem: a survey, Society for Industrial and Applied Mathematics, Vol. 40, No. 3, 1998.
44
9
´ Neveˇrejna´ cˇ ast
Tato verze diplomov´e pr´ace je veˇrejn´a a s ohledem na to v t´eto verzi nejsou ¨ um´ıstˇen´e citliv´e informace firmy Molnlycke Health Care. Veˇsker´e informace, na kter´e se odkazujeme v textu vyˇ ´ se, jsou uveden´e v neveˇrejn´e verzi diplomov´e pr´ace.