Univerzita Karlova v Praze Matematicko-fyzik´aln´ı fakulta
´ RSK ˇ ´ PRACE ´ BAKALA A
Veronika Steffanov´a Softwarov´y bal´ık pro pr´aci s polyedry Katedra aplikovan´e matematiky
Vedouc´ı bakal´aˇrsk´e pr´ace: Mgr. Milan Hlad´ık, Ph.D. Studijn´ı program: Informatika Studijn´ı obor: Obecn´a informatika
Praha 2012
R´ada bych na tomto m´ıstˇe podˇekovala vedouc´ımu m´e pr´ace za jeho nekoneˇcnou trpˇelivost a sv´e rodinˇe za podporu a toleranci, bez kter´ych by tato pr´ace nikdy nemohla vzniknout.
Prohlaˇsuji, zˇ e jsem tuto bakal´aˇrskou pr´aci vypracovala samostatnˇe a v´yhradnˇe s pouˇzit´ım citovan´ych pramen˚u, literatury a dalˇs´ıch odborn´ych zdroj˚u. Beru na vˇedom´ı, zˇ e se na moji pr´aci vztahuj´ı pr´ava a povinnosti vypl´yvaj´ıc´ı ze z´akona cˇ . 121/2000 Sb., autorsk´eho z´akona v platn´em znˇen´ı, zejm´ena skuteˇcnost, zˇ e Univerzita Karlova v Praze m´a pr´avo na uzavˇren´ı licenˇcn´ı smlouvy o uˇzit´ı t´eto pr´ace jako sˇkoln´ıho d´ıla podle §60 odst. 1 autorsk´eho z´akona.
V Praze dne 30. cˇ ervence 2012
Veronika Steffanov´a
N´azev pr´ace: Softwarov´y bal´ık pro pr´aci s polyedry Autor: Veronika Steffanov´a Katedra: Katedra aplikovan´e matematiky Vedouc´ı bakal´aˇrsk´e pr´ace: Mgr. Milan Hlad´ık, Ph.D., Katedra aplikovan´e matematiky Abstrakt: V pr´aci jsme se zamˇeˇrili na t´ema polyedr˚u a z´akladn´ıch algoritm˚u pro pr´aci s nimi. Nejdˇr´ıve je pˇredloˇzena vˇeta o ekvivalenci vrcholov´e a nerovnicov´e reprezentace a pot´e jsou pops´any vybran´e algoritmy, kter´e ˇreˇs´ı jejich vz´ajemn´y pˇrevod. Praktick´a cˇ a´ st se pak t´yk´a implementace tˇr´ı funkc´ı zaloˇzen´ych na zvolen´ych algoritmech a nˇekolika dalˇs´ıch, kter´e jsou jejich pˇr´ım´ym d˚usledkem. V´ysledkem je knihovna funkc´ı pro MATLAB, kter´a obsahuje n´astroje pro pˇrevod mezi jednotliv´ymi reprezentacemi, konvexn´ı sjednocen´ı dvou polyedr˚u, pr˚unik dvou polyedr˚u a odstranˇen´ı redundantn´ıch vrchol˚u (resp. nerovnic) z vrcholov´e (resp. nerovnicov´e) reprezentace. Kromˇe toho jsme porovnali dva n´ami implementovan´e algoritmy pro pˇrevod z vrcholov´e do nerovnicov´e reprezentace, a to jak z hlediska cˇ asov´e, tak i prostorov´e a implementaˇcn´ı n´aroˇcnosti. Kl´ıcˇ ov´a slova: polyedr, MATLAB, line´arn´ı programov´an´ı, konvexn´ı obal
Title: Software package for polyhedra operation Author: Veronika Steffanov´a Department: Department of Applied Mathematics Supervisor: Mgr. Milan Hlad´ık, Ph.D., Department of Applied Mathematics Abstract: The topic of the thesis is focused on convex polyhedra and algorithms for working with them. At first we give the theorem about vertex and facet description and then we describe selected algorithms connected to the problem of the conversion between these two descriptions. In the practical part we implement three functions using three selected algorithms and a few other functions, which are simple results of the three algorithms. Finally we get a MATLAB library, which contains functions for vertex enumeration, facet enumeration, convex union of two polyhedra, intersection of two polyhedra and irredudancy problem for facets and vertices, too. By the way we compare our two implemented algorithms for facet enumeration, but not only according the running time, also according the memory requirements and the implementation complexity. Keywords: polyhedron, MATLAB, linear programming, convex hull
Obsah ´ 1 Uvod ´ Uvod 1.1 1.2
3
Z´akladn´ı pojmy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Algoritmick´e ˇreˇsen´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.1 Seznam hlavn´ıch funkc´ı . . . . . . . . . . . . . . . . . . . .
2 Line´arn´ı programov´an´ı 2.1 Z´akladn´ı pojmy a tvrzen´ı . . . . . . . . . 2.2 Simplexov´a metoda . . . . . . . . . . . . 2.2.1 V´ychoz´ı pˇr´ıpustn´e b´azick´e ˇreˇsen´ı 2.2.2 Bˇezˇ n´y krok algoritmu . . . . . . 2.2.3 Vyhodnocen´ı posledn´ıho kroku .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
3 Pouˇzit´e algoritmy vyuˇz´ıvaj´ıc´ı simplexovou metodu 3.1 Algoritmus pro pˇrevod z nerovnicov´e do vrcholov´e reprezentace 3.1.1 Anal´yza algoritmu . . . . . . . . . . . . . . . . . . . . 3.1.2 Neomezen´e hrany . . . . . . . . . . . . . . . . . . . . . 3.2 Algoritmus pro pˇrevod z vrcholov´e do nerovnicov´e reprezentace 3.2.1 Dualita . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.2 Popis algoritmu . . . . . . . . . . . . . . . . . . . . . . 3.2.3 Anal´yza algoritmu . . . . . . . . . . . . . . . . . . . . 3.2.4 Fasety proch´azej´ıc´ı poˇca´ tkem . . . . . . . . . . . . . . 4 Konvexn´ı obal kombinatoricky v obecn´e dimenzi 4.1 Druhy algoritm˚u . . . . . . . . . . . . . . . . 4.1.1 Inkrement´aln´ı algoritmy . . . . . . . 4.1.2 Algoritmy proch´azen´ı grafem . . . . 4.1.3 Algoritmy rozdˇel-a-panuj . . . . . . . 4.2 Algoritmus dvojit´e reprezentace . . . . . . .
. . . . .
. . . . .
5 Uˇzivatelsk´a dokumentace 5.1 Datov´e struktury pro vstup a v´ystup . . . . . . . 5.2 Pˇrevod z nerovnicov´e do vrcholov´e reprezentace . 5.3 Pˇrevod z vrcholov´e do nerovnicov´e reprezentace . 5.4 Konvexn´ı sjednocen´ı . . . . . . . . . . . . . . . 5.5 Pr˚unik . . . . . . . . . . . . . . . . . . . . . . . 5.6 Odstranˇen´ı redundantn´ıch nerovnic . . . . . . . . 5.7 Odstranˇen´ı redundantn´ıch vrchol˚u . . . . . . . . 5.8 Pˇrizp˚usoben´ı pro Octave . . . . . . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . . . . .
. . . . .
. . . . .
. . . . . . . .
. . . . .
3 3 4 5
. . . . .
6 6 8 9 10 11
. . . . . . . .
12 12 13 14 15 15 16 17 17
. . . . .
18 18 19 20 21 21
. . . . . . . .
. . . . . . . .
. . . . . . . .
23 23 24 24 25 25 26 26 26
6 Program´atorsk´a dokumentace 6.1 Pˇrevod z nerovnicov´e do vrcholov´e reprezentace . . . . . . . . . . 6.2 Pˇrevod z vrcholov´e do nerovnicov´e reprezentace – du´aln´ı metoda . 6.3 Pˇrevod z vrcholov´e do nerovnicov´e reprezentace – kombinatoricky 6.4 Konvexn´ı sjednocen´ı . . . . . . . . . . . . . . . . . . . . . . . .
. . . .
. . . .
28 28 29 29 30
1
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
6.5 6.6 6.7 6.8
Pr˚unik . . . . . . . . . . . . . . . Odstranˇen´ı redundantn´ıch nerovnic Odstranˇen´ı redundantn´ıch vrchol˚u Zaokrouhlovac´ı chyby . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
7 Porovn´an´ı pouˇzit´ych algoritmu˚ 7.1 Omezen´ı na vstup . . . . . . . . . . . . . . . 7.2 Implementaˇcn´ı sloˇzitost . . . . . . . . . . . . 7.3 Prostorov´a n´aroˇcnost . . . . . . . . . . . . . 7.3.1 Asymptotick´a prostorov´a n´aroˇcnost . 7.3.2 Porovn´an´ı na konkr´etn´ıch pˇr´ıkladech ˇ 7.4 Casov´ a sloˇzitost . . . . . . . . . . . . . . . . 7.4.1 Asymptotick´a cˇ asov´a sloˇzitost . . . . 7.4.2 Porovn´an´ı na konkr´etn´ıch pˇr´ıkladech 7.5 Shrnut´ı v´ysledk˚u porovn´an´ı . . . . . . . . . .
. . . .
. . . . . . . . .
. . . .
. . . . . . . . .
. . . .
. . . . . . . . .
. . . .
. . . . . . . . .
. . . .
. . . . . . . . .
. . . .
. . . . . . . . .
. . . .
. . . . . . . . .
. . . .
. . . . . . . . .
. . . .
. . . . . . . . .
. . . .
. . . . . . . . .
. . . .
. . . . . . . . .
. . . .
. . . . . . . . .
. . . .
31 31 31 32
. . . . . . . . .
33 33 33 33 34 34 35 35 36 37
Z´avˇer
39
Seznam pouˇzit´e literatury
40
Seznam tabulek
42
Seznam pouˇzit´ych zkratek
43
2
´ 1. Uvod C´ılem t´eto bakal´arˇsk´e pr´ace bylo sestavit knihovnu funkc´ı, kter´a by umˇela pracovat s polyedry v obecn´e dimenzi. Hned na poˇca´ tku vyvst´av´a ot´azka, jak polyedry reprezentovat. Existuje v´ıce moˇznost´ı (v´ıce ve tˇret´ı kapitole), ale mezi ty z´akladn´ı jistˇe patˇr´ı popis pomoc´ı nerovnic, kter´e zastupuj´ı poloprostory, jejichˇz pr˚unikem je popisovan´y polyedr, nebo popis pouˇz´ıvaj´ıc´ı seznam vrchol˚u, kde polyedr se rovn´a jejich konvexn´ımu obalu. Dvˇe z´akladn´ı moˇznosti popisu uˇz na zaˇca´ tku implikovaly nutnost nalezen´ı algoritm˚u pro jejich vz´ajemn´y pˇrevod. T´ımto probl´emem se zab´yval uˇz Fourier v roce 1824, ale dodnes z˚ustaly nˇekter´e ot´azky otevˇren´e. Jde pˇredevˇs´ım o hled´an´ı co nejefektivnˇejˇs´ıch algoritm˚u, ale i stanoven´ı hranice, kter´a urˇcuje minim´aln´ı moˇznou sloˇzitost. Softwarov´y bal´ık, kter´y nakonec vznikl, je naps´an v MATLABu a s jist´ymi u´ pravami m˚uzˇ e b´yt pouˇzit i pro zdarma dostupn´y Octave. Kromˇe funkc´ı pro pˇrevod obsahuje i funkce pro konvexn´ı sjednocen´ı, pr˚unik a odstranˇen´ı redundantn´ıch nerovnic nebo vrchol˚u z popisu polyedru. Po sezn´amen´ı cˇ ten´aˇre se z´akladn´ımi pojmy a form´aln´ı definic´ı probl´emu se vˇenujeme objasnˇen´ı teorie potˇrebn´e k pops´an´ı pouˇzit´ych algoritm˚u, pˇriˇcemˇz zmiˇnujeme i jin´e algoritmy, kter´e by bylo moˇzn´e pouˇz´ıt k ˇreˇsen´ı dan´ych u´ loh. Kapitoly cˇ tvrt´a a p´at´a se d˚ukladnˇe vˇenuj´ı popisu softwarov´eho bal´ıku nejdˇr´ıve z uˇzivatelsk´eho a pot´e z program´atorsk´eho hlediska. Posledn´ı kapitola pak porovn´av´a dva implementovan´e algoritmy pro pˇrevod z vrcholov´e do nerovnicov´e reprezentace, a to jak po teoretick´e str´ance, tak i praktick´ym vyzkouˇsen´ım na nˇekolika pˇr´ıkladech.
1.1 Z´akladn´ı pojmy Polyedry jako takov´e m˚uzˇ eme definovat dvˇema zp˚usoby: Definice. H-polyedr je pr˚unik koneˇcnˇe mnoha uzavˇren´ych poloprostor˚u v Rd . H-polytop je omezen´y H-polyedr. Definice. V-polytop je konvexn´ı obal koneˇcnˇe mnoha bod˚u v Rd . D´ale budeme term´ın polyedr vyuˇz´ıvat jako zkratku pro pojem H-polyedr a polytopem budeme oznaˇcovat omezen´y polyedr. Druh´e pojmenov´an´ı bychom nemohli pouˇz´ıvat bez n´asleduj´ıc´ı vˇety: Vˇeta 1. Kaˇzd´y H-polytop je i V-polytop. Kaˇzd´y V-polytop je i H-polytop. D˚ukaz. Nejdˇr´ıve uk´azˇ eme, zˇ e kaˇzd´y H-polytop je i V-polytop. Budeme postupovat indukc´ı pˇres dimenzi. Pro d = 1 je situace trivi´aln´ı, pokraˇcujme pro d ≥ 2. Necht’ Π je koneˇcn´a mnoˇzina uzavˇren´ych poloprostor˚u takov´ych, zˇ e jejich pr˚unik je omezen´y, nepr´azdn´y a tedy pˇredstavuje H-polytop P. Pro ∀π ∈ Π definujme Fπ = P ∩ ∂π jako pr˚unik P a nadroviny urˇcuj´ıc´ı π. Pro kaˇzd´e nepr´azdn´e Fπ plat´ı, zˇ e m´a dimenzi nanejv´ysˇ d − 1 (nadrovina m´a dimenzi d − 1, pr˚unik m´a maxim´alnˇe stejnou) a je to H-polytop dimenze maxim´alnˇe d − 1 (jedn´a se st´ale o pr˚unik poloprostor˚u, kde nadrovina m˚uzˇ e b´yt ch´ap´ana jako dvojice opaˇcn´ych poloprostor˚u), tedy z indukˇcn´ıho pˇredpokladu vypl´yv´a, zˇ e je to V-polytop. Oznaˇcme jeho mnoˇzinu bod˚u Vπ . 3
∪ Nyn´ı zb´yv´a dok´azat, zˇ e P = conv(V), kde V = π∈Π Vπ . Vezmˇeme nˇejak´e x ∈ P a pˇr´ımku l, kter´a j´ım proch´az´ı. Pak pr˚unik pˇr´ımky a P je u´ seˇcka. Necht’ y a z jsou jej´ı koncov´e body. Potom existuj´ı Fη a Fζ , zˇ e y ∈ Fη a z ∈ Fζ (kdyby ne, mohli bychom po pˇr´ımce l popoj´ıt o kousek d´al a st´ale b´yt uvnitˇr P). Z toho dost´av´ame y ∈ conv(Vη ), z ∈ conv(Vζ ), tedy x ∈ conv(Vη ∪ Vζ ) ⊆ conv(V). Opaˇcn´y smˇer je zaloˇzen na dualitˇe, kter´a je definov´ana aˇz ve tˇret´ı kapitole, proto i tuto cˇ a´ st d˚ukazu je moˇzn´e nal´ezt aˇz ve tˇret´ı kapitole. Pr´avˇe tato vˇeta slouˇz´ı jako kl´ıcˇ ov´a motivace k cel´e naˇs´ı pr´aci, jej´ızˇ stˇezˇ ejn´ı cˇ a´ st se zab´yv´a hled´an´ım vrcholov´eho protˇejˇsku k H-polytopu a vice versa. Dalˇs´ı ot´azkou, kter´a se nab´ız´ı, je, zda-li je moˇzn´e nˇejak´ym zp˚usobem zobecnit pojem V-polytop na V-polyedr, tedy zapsat pomoc´ı vrchol˚u i neomezen´e polyedry. Rozhodli jsme se toto zobecnˇen´ı popsat tak, zˇ e k mnoˇzinˇe vrchol˚u pˇrid´ame i mnoˇzinu vektor˚u, ve kter´e kaˇzd´y vektor popisuje smˇer jedn´e neomezen´e hrany. Pro pˇresnost jeˇstˇe definujme, co pˇresnˇe pro n´as znamen´a stˇena, vrchol, hrana a faceta. Definice. Stˇenou polyedru P v Rd naz´yv´ame bud’ polyedr P samotn´y, nebo pr˚unik nadroviny h a polyedru P, kde jeden z uzavˇren´ych poloprostor˚u definovan´y nadrovinou h obsahuje cel´y polyedr. Znaˇcen´ı. Vrcholem naz´yv´ame stˇenu dimenze 0, hranou stˇenu dimenze 1. Fasetou rozum´ıme stˇenu dimenze d − 1. Ridge je stˇena dimenze d − 2. Polyedrem ve vrcholov´e reprezentaci rozum´ıme popis polyedru pomoc´ı jeho vrchol˚u (tedy V-polytop). Nerovnicovou reprezentaci ch´apeme jako popis polyedru jako pr˚unik poloprostor˚u (tedy H-polyedr).
1.2 Algoritmick´e rˇ eˇsen´ı V´ysˇe specifikovan´y probl´em dˇel´ıme na dvˇe z´akladn´ı cˇ a´ sti: • Pˇrevod z nerovnicov´e do vrcholov´e reprezentace • Pˇrevod z vrcholov´e do nerovnicov´e reprezentace K pˇrevodu z nerovnicov´e do vrcholov´e reprezentace pouˇz´ıv´ame algoritmus poprv´e publikovan´y v roce 1992 v [1]. V´ypoˇcetn´ı postup je zaloˇzen na simplexov´e metodˇe, kter´a se pouˇz´ıv´a k ˇreˇsen´ı u´ loh line´arn´ıho programov´an´ı. Jeho popisu se vˇenuje n´asleduj´ıc´ı kapitola a prvn´ı cˇ a´ st tˇret´ı kapitoly. K pˇrevodu z vrcholov´e do nerovnicov´e reprezentace jsme se rozhodli vyzkouˇset dva r˚uzn´e algoritmy. Prvn´ı vyuˇz´ıv´a principu duality a stejn´eho algoritmu jako pˇrevod z nerovnicov´e do vrcholov´e reprezentace. Jeho popis je obsaˇzen v druh´e cˇ a´ sti tˇret´ı kapitoly. Druh´y algoritmus je naopak ryze kombinatorick´y, konkr´etnˇe se jedn´a o nejjednoduˇssˇ´ı inkrement´aln´ı algoritmus. Pˇri jeho implementaci jsme kladli d˚uraz na jednoduchost bez velk´ych optimalizac´ı, aby se v´ysledek dobˇre choval i k pomˇernˇe mal´ym a degenerovan´ym vstup˚um, kde v´ıce neˇz na asymptotick´e cˇ asov´e sloˇzitosti z´aleˇz´ı na velikosti konstanty. Jeho popisu je vˇenov´ana druh´a kapitola. Dvoj´ı implementace algoritmu n´am dovolila v posledn´ı kapitole porovnat pr´aci obou algoritm˚u a vyhodnotit jejich rychlost, pamˇet’ovou n´aroˇcnost a implementaˇcn´ı sloˇzitost. 4
1.2.1 Seznam hlavn´ıch funkc´ı Zde pˇredkl´ad´ame seznam hlavn´ıch funkc´ı, kter´e m˚uzˇ e pˇr´ıpadn´y uˇzivatel pouˇz´ıt (seznam neobsahuje pomocn´e funkce, kter´e jsou vol´any z hlavn´ıch funkc´ı a kter´e nejsou prim´arnˇe urˇceny pro pouˇzit´ı uˇzivatelem) • ineqtovertices funkce pro pˇrevod z nerovnicov´e do vrcholov´e reprezentace • verticestoineqdual funkce pro pˇrevod z vrcholov´e do nerovnicov´e reprezentace, vyuˇz´ıv´a geometrickou dualitu a algoritmus pro pˇrevod z nerovnicov´e do vrcholov´e reprezentace • verticestoineqcomb funkce pro pˇrevod z vrcholov´e do nerovnicov´e reprezentace, vyuˇz´ıv´a kombinatorick´eho algoritmu z cˇ tvrt´e kapitoly • union funkce pro konvexn´ı sjednocen´ı dvou polyedr˚u • intersection funkce pro pr˚unik dvou polyedr˚u • rmineq funkce pro odstranˇen´ı redundantn´ıch nerovnic • rmvertices funkce pro odstranˇen´ı redundantn´ıch vrchol˚u V zad´an´ı jsme pˇrem´ysˇleli jeˇstˇe o implementaci funkce rozd´ılu, ale nakonec jsme se rozhodli tuto cˇ a´ st vynechat, protoˇze zm´ınˇen´a u´ loha se v´yraznˇe liˇs´ı od zbyl´ych funkc´ı a to zejm´ena t´ım, zˇ e jej´ım v´ysledkem nen´ı polyedr.
5
2. Line´arn´ı programov´an´ı Line´arn´ı programov´an´ı (d´ale LP) je jednou z mnoha cˇ a´ st´ı rozs´ahl´eho oboru aplikovan´e matematiky. Vzniklo na z´akladˇe poˇzadavk˚u pˇredevˇs´ım ekonomick´e praxe, kde se cˇ asto setk´av´ame s u´ lohami, ve kter´ych se hled´a nejlepˇs´ı ˇreˇsen´ı v r´amci prostoru ohraniˇcen´eho r˚uzn´ymi omezen´ımi, kter´e lze reprezentovat pomoc´ı line´arn´ıch rovnic nebo nerovnic. V nadch´azej´ıc´ıch odstavc´ıch se nebudeme ani tolik zab´yvat hloubkovou anal´yzou LP a moˇznostmi ˇreˇsen´ı, ale zamˇeˇr´ıme se pouze na tu cˇ a´ st, kterou v n´asleduj´ıc´ı kapitole aplikujeme na probl´em pˇrevodu mezi r˚uzn´ymi reprezentacemi polyedr˚u.
2.1 Z´akladn´ı pojmy a tvrzen´ı Definice. Obecnou u´ lohou line´arn´ıho programov´an´ı rozum´ıme min{cT x | A1 x = b1 , A2 x ≥ b2 , A3 x ≤ b3 , x ∈ Rn }
(2.1)
kde c ∈ Rn , Ai ∈ Rmi ×n , bi ∈ Rmi , ∀i. Pozn´amka. V definici bychom mˇeli jeˇstˇe uv´est moˇznost zamˇenit minimalizaci za maximalizaci. Vzhledem k tomu, zˇe v aplikaci pro n´as nebude c´ılov´a funkce d˚uleˇzit´a, budeme d´ale uvaˇzovat pouze u´ lohy minimalizaˇcn´ı.
´ Definice. Ulohou line´arn´ıho programov´an´ı v rovnicov´em tvaru rozum´ıme min{cT x | Ax = b, x ∈ Rn , x ≥ 0}
(2.2)
kde c ∈ Rn , A ∈ Rm×n , rank(A) = m, b ∈ Rm , b ≥ 0, 1 ≤ m < n. Tento tvar u´ lohy nˇekdy naz´yv´ame tak´e standardn´ı, protoˇze pr´avˇe ji na vstupu vyˇzaduje simplexov´a metoda. Znaˇcen´ı. Mnoˇzinu {x | Ax = b, x ∈ Rn , x ≥ 0} (resp. ≤) budeme naz´yvat konvexn´ım polyedrem u´ lohy a budeme ho obvykle znaˇcit p´ısmenem M. Uˇz jsme poznamenali, zˇ e budeme cht´ıt v dalˇs´ı cˇ a´ sti pouˇz´ıt simplexov´y algoritmus. Ten na vstupu vyˇzaduje u´ lohu v rovnicov´em tvaru, a proto nyn´ı dok´azˇ eme, zˇ e kaˇzdou u´ lohu lze pˇrev´est na rovnicov´y tvar. Pˇrevod rozdˇel´ıme do nˇekolika krok˚u. Zaˇcneme t´ım, zˇ e nerovnice pˇrid´an´ım promˇenn´e zmˇen´ıme na rovnice, aniˇz bychom zmˇenili ˇreˇsen´ı. Bez u´ jmy na obecnosti pˇredpokl´ad´ame, zˇ e vˇsechny nerovnice jsou ve tvaru ≤ , jinak vyn´asob´ıme −1. ´ Vˇeta 2. Ulohy min{cT x | Ax ≤ b, x ∈ Rn } min{cT x | Ax + Im x′ = b, x ∈ Rn , x′ ∈ Rm , x′ ≥ 0} jsou co do rˇeˇsitelnosti ekvivalentn´ı. D˚ukaz. Oznaˇcme cT x jako f (x), polyedr z prvn´ı u´ lohy jako M a polyedr z druh´e u´ lohy jako M ∗ . Necht’ funkce f (x) dosahuje minima na M v bodˇe x0 . Pak plat´ı n ∑
cα x0α ≤
α=1
n ∑ α=1
6
cα xα
∀x ∈ M. Definujme ′ x0r = br −
pro r = 1, . . . , m, pak zˇrejmˇe plat´ı pro n ∑
cα x0 α + 0
α=1
n ∑
arα x0α
α=1 ′ (x0 , x0 ) ∈
m ∑
x0′ r ≤
M∗
n ∑
cα xα + 0
α=1
r=1
m ∑
x′ r
r=1
∀(x, x′ ) ∈ M ∗ , tedy x0 , x0′ je minimum f (x) na M ∗ . Pro opaˇcn´y smˇer pouˇzijeme analogick´e vyj´adˇren´ı.
Pokraˇcujeme t´ım, zˇ e kaˇzdou promˇennou, kter´a m˚uzˇ e nab´yvat z´aporn´ych hodnot, rozdˇel´ıme na dvˇe nez´aporn´e. Pro snazˇs´ı formulaci pˇredpokl´adejme, zˇ e takov´e jsou vˇsechny. ´ Vˇeta 3. Ulohy min{cT x | Ax = b, x ∈ Rn } min{cT (x+ − x− ) | Ax+ − Ax− = b, x+ , x− ∈ Rn , x+ , x− ≥ 0} kde pro i-tou sloˇzku vektoru x plat´ı xi = xi+ − xi− , jsou co do rˇeˇsitelnosti ekvivalentn´ı. D˚ukaz. Nejdˇr´ıve uk´azˇ eme, zˇ e minimum druh´e u´ lohy odpov´ıd´a minimu prvn´ı u´ lohy. Druh´y smˇer bychom dok´azali analogicky. Oznaˇcme cT (x+ − x− ) jako f ∗ (x+ , x− ), M ∗ polyedr z druh´e u´ lohy a minimum f ∗ na M ∗ jako (x0+ , x0− ). Tot´ezˇ pro prvn´ı u´ lohu, ale bez hvˇezdiˇcek. Pro vˇsechna (x+ , x− ) ∈ M ∗ plat´ı, zˇ e n ∑ α=1
cα x0+ α
−
n ∑ α=1
cα x0− α
≤
n ∑
cα x
+
α
−
n ∑
cα x − α
α=1
α=1
a poloˇz´ıme-li x0α = x0+ α − x0− α (α = {1 . . . n}), pak zˇrejmˇe plat´ı, zˇ e x0 ∈ M a n ∑
cα x0α ≤
α=1
n ∑
cα xα
α=1
pro vˇsechna xα = x+ α − x− α , tedy i pro vˇsechna x ∈ M. Z toho vypl´yv´a, zˇ e funkce f dosahuje na M minima v x0 . Z p˚uvodn´ı u´ lohy 2.1 po v´ysˇe uveden´ych u´ prav´ach dost´av´ame ′
min{cT x | Ax = b, x ∈ Rd , x ≥ 0} kde d′ = 2n + m2 + m3 a Ax = b, A ∈ v n´asleduj´ıc´ım blokov´em sch´ematu: A1 −A1 −A2 A2 A3 −A3
(2.3)
′
Rm×d , b ∈ Rm , m = m1 + m2 + m3 , je vyj´adˇreno 0 0 x+ b1 Im2 0 x− = −b2 ′ 0 Im3 x b3
Tento tvar budeme pouˇz´ıvat jako vstup pro simplexovou metodu. Nejdˇr´ıve bychom ale mˇeli jeˇstˇe ovˇeˇrit, zˇ e jsou splnˇeny i zbyl´e podm´ınky rovnicov´eho tvaru: 7
rank( A) = m Pokud je hodnost matice menˇs´ı, m˚uzˇ eme z´avisl´e rovnice vylouˇcit. V praxi vˇsak nen´ı nutn´e tuto podm´ınku ovˇeˇrovat, inicializace algoritmu ji zajist´ı. b ≥ 0 Pokud podm´ınka nen´ı splnˇena, staˇc´ı pˇr´ısluˇsnou rovnici vyn´asobit −1. 1 ≤ m < d′ Jedin´a cˇ a´ st, kter´a by nemusela b´yt splnˇena, je m < d′ : Pokud je m ≥ d′ , tak lze u´ lohu ˇreˇsit jako obyˇcejnou soustavu rovnic, kter´a m´a bud’ jedin´e ˇreˇsen´ı, kter´e je t´ım p´adem i minim´aln´ım, nebo ˇreˇsen´ı nem´a zˇ a´ dn´e. Ani tuto podm´ınku nen´ı nutn´e v praxi ovˇeˇrovat, inicializace algoritmu ji zajist´ı.
2.2 Simplexov´a metoda Simplexov´y algoritmus byl poprv´e publikov´an v roce 1947 matematikem Danzigem. Z´akladn´ı myˇslenka spoˇc´ıv´a v tom, interpretovat podm´ınky u´ lohy line´arn´ıho programov´an´ı jako polyedr. Jak uˇz jsme v u´ vodu uk´azali, vrcholy polyedru reprezentuj´ı jeho extr´emy, tedy pokud hled´ame minimum nebo maximum nˇejak´e line´arn´ı funkce, m˚uzˇ eme se spolehnout na to, zˇ e ho najdeme pr´avˇe v nˇekter´em vrcholu. Pr˚ubˇeh algoritmu pak spoˇc´ıv´a v postupn´em upravov´an´ı vstupn´ı matice, kdy v kaˇzd´em kroku aktu´aln´ı hodnota x odpov´ıd´a nˇekter´emu z vrchol˚u zkouman´eho polyedru. Nav´ıc je k matici pˇrid´an jeden ˇra´ dek nav´ıc, kter´y urˇcuje dalˇs´ı krok algoritmu a jeho konec. Pˇred formulac´ı samotn´eho algoritmu je tˇreba nejdˇr´ıve definovat nˇekolik pojm˚u. Definice. Konvexn´ı polyedr M z (2.3) naz´yv´ame mnoˇzinou pˇr´ıpustn´ych rˇeˇsen´ı u´ lohy min x∈M cT x a kaˇzd´y bod x ∈ M pˇr´ıpustn´ym rˇeˇsen´ım stejn´e u´ lohy. Definice. Bod x0 ∈ M, pro kter´y plat´ı cT x0 ≤ cT x pro vˇsechny body x ∈ M, naz´yv´ame minim´aln´ım nebo tak´e optim´aln´ım rˇeˇsen´ım u´ lohy (2.3). Definice. Je-li β = {β1 , β2 , . . . , βm } ⊂ {1, . . . , n} indexov´a podmnoˇzina, pro kterou plat´ı ∑ a) syst´em rovnic β∈β arβ xβ = br (r = 1, . . . , m) m´a jednoznaˇcn´e rˇeˇsen´ı ( x˜β1 , . . . , x˜βm ) b) x˜βi ≥ 0 (i = 1, . . . , m) potom bod x˜ o souˇradnic´ıch ( x˜β1 , . . . , x˜βm , x˜ν1 = . . . = x˜νd′ −m = 0), kde νi ∈ {1, . . . , d′ }\β, naz´yv´ame pˇr´ıpustn´ym b´azick´ym rˇeˇsen´ım u´ lohy (2.3). Nen´ı-li splnˇena podm´ınka b), potom x˜ naz´yv´ame b´azick´ym rˇeˇsen´ım u´ lohy (2.3). Promˇenn´e xβ1 , . . . , xβm naz´yv´ame b´azick´ymi a xν1 , . . . , xνd′ −m neb´azick´ymi promˇenn´ymi. Nyn´ı m˚uzˇ eme vyslovit vˇetu kl´ıcˇ ovou nejen pro samotn´y simplexov´y algoritmus, ale hlavnˇe pro jeho pozdˇejˇs´ı interpretaci v algoritmu pˇrevodu z nerovnicov´e do vrcholov´e reprezentace polyedru. Vˇeta 4. Kaˇzd´emu pˇr´ıpustn´emu b´azick´emu rˇeˇsen´ı x˜ u´ lohy (2.3) odpov´ıd´a jeden vrchol konvexn´ıho polyedru M a kaˇzd´emu vrcholu M alespoˇn jedno pˇr´ıpustn´e b´azick´e rˇeˇsen´ı. D˚ukaz. Myˇslenka d˚ukazu v jednom smˇeru spoˇc´ıv´a ve speci´aln´ım rozˇs´ıˇren´ı matice b´azick´eho ˇreˇsen´ı a dok´az´an´ı toho, zˇ e jej´ı tvar odpov´ıd´a tolika vz´ajemnˇe nerovnobˇezˇ n´ym nadrovin´am, kolik jich je potˇreba k urˇcen´ı bodu (maj´ı pr˚unik dimenze 0). V druh´em smˇeru je k vrcholu nalezena odpov´ıdaj´ıc´ı matice a o n´ı je dok´az´ano, zˇ e jej´ı tvar odpov´ıd´a velikosti b´aze. M˚uzˇ e se st´at, zˇ e ji dokonce pˇrevyˇsuje, pak ˇreˇsen´ı nen´ı jednoznaˇcnˇe urˇceno, a proto jsme ve vˇetˇe nemohli pouˇz´ıt vazbu mezi vrcholy a ˇreˇsen´ımi jako jedna ku jedn´e. 8
Pˇresn´a formulace d˚ukazu vyˇzaduje mnoho dalˇs´ıch pomocn´ych tvrzen´ı a tak´e hlubˇs´ı studium polyedru urˇcen´eho line´arn´ı u´ lohou, a proto ho zde pomineme a na pˇresn´e znˇen´ı odkazujeme na [8, str. 34 – 35]. Nyn´ı uˇz m˚uzˇ eme v bodech vyj´adˇrit postup simplexov´eho algoritmu. 1. Sestaven´ı simplexov´e tabulky a nalezen´ı v´ychoz´ıho pˇr´ıpustn´eho b´azick´eho ˇreˇsen´ı. 2. Proveden´ı bˇezˇ n´eho kroku (pˇrechod od jedn´e b´aze k jin´e). 3. Vyhodnocen´ı v´ysledku po posledn´ım kroku a pˇr´ıp. konec. V n´asleduj´ıc´ıch cˇ a´ stech rozebereme jednotliv´e kroky.
2.2.1 V´ychoz´ı pˇr´ıpustn´e b´azick´e rˇ eˇsen´ı Pro u´ lohu (2.3) mohou nastat dvˇe moˇznosti. Bud’ je v´ychoz´ı pˇr´ıpustn´e b´azick´e ˇreˇsen´ı zˇrejm´e, nebo je potˇreba nejdˇr´ıve ˇreˇsit pomocnou, tzv. umˇelou u´ lohu, jej´ımˇz v´ysledkem bude v´ychoz´ı pˇr´ıpustn´e b´azick´e ˇreˇsen´ı p˚uvodn´ı u´ lohy. Prvn´ı pˇr´ıpad nast´av´a, pokud matice A obsahuje jednotkovou submatici ˇra´ du m × m. Potom b´azick´ym promˇenn´ym odpov´ıdaj´ı jednotkov´e sloupce a tyto promˇenn´e poloˇz´ıme rovny br (r = 1, . . . , m), kde r odpov´ıd´a souˇradnici s jedniˇckou. Ostatn´ı (neb´azick´e) promˇenn´e poloˇz´ıme rovny 0. D´ıky tomu, zˇ e br ≥ 0, tak je podm´ınka nez´apornosti ˇreˇsen´ı splnˇena a stejnˇe tak i vˇsechny ostatn´ı. Druh´y pˇr´ıklad se na prvn´ı pohled jev´ı o nˇeco komplikovanˇejˇs´ı. C´ılem je opˇet upravit soustavu rovnic tak, aby se vlevo nach´azela jednotkov´a submatice. Kdyby se vˇsak cˇ lovˇek pokusil pouˇz´ıt pˇr´ımo napˇr´ıklad Gaussovu eliminaci, mohlo by se st´at, zˇ e mu prav´e strany nevyjdou nez´aporn´e. Proto se bˇezˇ nˇe postupuje tak, zˇ e se zavede pomocn´a tzv. umˇel´a u´ loha LP, kter´a vyd´a v´ychoz´ı pˇr´ıpustn´e bazick´e ˇreˇsen´ı automaticky. Definice. Umˇelou u´ lohou k u´ loze (2.3) formulujeme jako ′
min{1T u | Ax + Im u = b, x ∈ Rd , u ∈ Rm , x, u ≥ 0}
(2.4)
Vˇsimnˇeme si, zˇ e tato u´ loha splˇnuje vˇsechny potˇrebn´e poˇca´ teˇcn´ı podm´ınky pro simplexovou metodu a nav´ıc jej´ı v´ychoz´ı pˇr´ıpustn´e ˇreˇsen´ı je zˇrejm´e (promˇenn´e u vol´ıme jako b´azick´e, ostatn´ı jako neb´azick´e). Tato u´ loha je ovˇsem jin´a neˇz p˚uvodnˇe zadan´a u´ loha, a proto mus´ıme jeˇstˇe objasnit vztah mezi ˇreˇsen´ımi umˇel´e a p˚uvodn´ı u´ lohy. Znaˇcen´ı. V n´asleduj´ıc´ı cˇ a´ sti budeme polyedr z pomocn´e u´ lohy oznaˇcovat jako M ∗ . Vˇeta 5. Existuje-li minim´aln´ı rˇeˇsen´ı (2.4) (x0 , u0 ), pro nˇezˇ plat´ı 1T u > 0, pak je konvexn´ı polyedr M z p˚uvodn´ı u´ lohy pr´azdn´y a p˚uvodn´ı u´ loha tedy nem´a rˇeˇsen´ı. D˚ukaz. Bod (x0 , u0 ) ∈ M ∗ splˇnuje vztah d′ ∑ α=1
cα x0α +
m ∑
u0r ≤
d′ ∑ α=1
r=1
cα xα +
m ∑
ur
r=1
pro vˇsechna (x, u) ∈ M ∗ . Pro spor nyn´ı pˇredpokl´adejme, zˇ e M , ∅. Potom pro libovoln´e x∗ ∈ M je (x∗ , O) ∈ ∗ M , tedy m˚uzˇ eme zvolit ur = O, ale pak doch´az´ı ke sporu s minimalitou 1T u > 0. 9
Vˇeta 6. Existuje-li minim´aln´ı rˇeˇsen´ı (2.4) (x0 , u0 ), pro nˇezˇ plat´ı 1T u = 0, pak je x0 pˇr´ıpustn´ym b´azick´ym rˇeˇsen´ım p˚uvodn´ı u´ lohy nebo ho lze snadno odvodit. D˚ukaz. Vezmˇeme (x0 , u0 ) = (x0 , O) ∈ M ∗ jako minim´aln´ı rˇeˇsen´ı umˇel´e u´ lohy. Protoˇze u ≥ 0 mus´ı platit u0 = O, pak jsou u mimo b´azi a nebo je z n´ı m˚uzˇ eme vylouˇcit pomoc´ı z´amˇeny s odpov´ıdaj´ıc´ı neb´azickou promˇennou. Po t´eto u´ pravˇe z´ısk´av´ame v´ychoz´ı b´azick´e ˇreˇsen´ı.
2.2.2 Bˇezˇ n´y krok algoritmu Necht’ m´ame nˇejak´e x0 jako v´ychoz´ı pˇr´ıpustn´e b´azick´e ˇreˇsen´ı a k nˇemu odpov´ıdaj´ıc´ı matici A′ , kterou oznaˇcujeme jako aktu´aln´ı simplexovou tabulku. Podle vˇety 4 v´ıme, zˇ e toto ˇreˇsen´ı odpov´ıd´a nˇekter´emu vrcholu konvexn´ıho polyedru M. V bˇezˇ n´em kroku simplexov´e metody hled´ame hranu vych´azej´ıc´ı z tohoto vrcholu, pod´el kter´e c´ılov´a funkce neroste nebo, l´epe, kles´a. Vzhledem k tomu, zˇ e v algoritmu na pˇrevod z nerovnicov´e do vrcholov´e reprezentace polyedru nebudeme potˇrebovat c´ılovou funkci, budeme se v n´asleduj´ıc´ıch odstavc´ıch zab´yvat pouze t´ım, jak se dostat do libovoln´eho dalˇs´ıho vrcholu bez ohledu na c´ılovou funkci. Jedinou moˇznost´ı, jak zmˇenit aktu´alnˇe dosaˇzen´e ˇreˇsen´ı na jin´e, je zmˇenit b´azi, resp. prohodit nˇekterou b´azickou promˇennou za neb´azickou. N´asleduj´ıc´ı vˇeta popisuje, jak´e dvojice pˇripadaj´ı v u´ vahu, aby nov´e ˇreˇsen´ı bylo opˇet pˇr´ıpustn´e. Vˇeta 7. Vstupuj´ıc´ı promˇennou se m˚uzˇe st´at kter´akoli neb´azick´a promˇenn´a, kter´e odpov´ıd´a sloupec A′ tak, zˇe v tomto sloupci existuje kladn´y cˇ len. D˚ukaz. V dan´em sloupci existuje kladn´y cˇ len, tedy n´asleduj´ıc´ı mnoˇzina pro v´ybˇer minima je nepr´azdn´a, a minimum tedy existuje. Pozn´amka. Sloupce, kter´e jsou cel´e nekladn´e, mohou reprezentovat neomezen´e hrany. Podrobnˇeji se t´eto ot´azce vˇenuje vˇeta 10. Vˇeta 8. Vystupuj´ıc´ı promˇennou pro danou vstupuj´ıc´ı promˇennou s indexem j je ta odpov´ıdaj´ıc´ı sloupci i-t´eho jednotkov´eho vektoru, kde i ∈ arg min{
bk , k ∈ {1, . . . , m}, akr > 0} akr
Pokud nen´ı minimum urˇceno jednoznaˇcnˇe, lze vybrat libovoln´e z nich. D˚ukaz. Nyn´ı mus´ıme ovˇeˇrit, zˇ e po u´ pravˇe tabulky bude ˇreˇsen´ı pˇr´ıpustn´e. B´azick´e je urˇcitˇe, protoˇze nemˇen´ıme poˇcet b´azick´ych promˇenn´ych. Pro spor pˇredpokl´adejme, zˇ e v´ysledn´e ˇreˇsen´ı x∗ nen´ı pˇr´ıpustn´e, tedy ∃r ∈ {1 . . . m} tak, zˇ e b∗r < 0. To by znamenalo, zˇ e br − ale to by byl spor s minimalitou pomˇeru
bi ar j < 0 ai j bi . ai j
Pozn´amka. Pokud nastane nejednoznaˇcnost ve v´ybˇeru vystupuj´ıc´ı promˇenn´e, znamen´a to, zˇe n´asleduj´ıc´ı rˇeˇsen´ı bude tzv. degenerovan´e. V bˇezˇn´e simplexov´e metodˇe tato situace m˚uzˇe zp˚usobit probl´emy, ale v naˇsem pˇr´ıpadˇe se j´ı nemus´ıme zab´yvat, protoˇze n´ahodn´y v´ybˇer nem˚uzˇe zp˚usobit, zˇe bychom nˇekter´y vrchol zcela pˇreskoˇcili (je vidˇet, zˇe vˇzdy existuje nˇekter´y sousedn´ı vrchol, ze kter´eho je cesta urˇcena jednoznaˇcnˇe). 10
2.2.3 Vyhodnocen´ı posledn´ıho kroku Jak uˇz jsme v´ysˇe poznamenali, situace, kdy konˇc´ı tradiˇcn´ı simplexov´y algoritmus, pro n´as nen´ı urˇcuj´ıc´ı, protoˇze my nehled´ame vrchol minim´aln´ı podle c´ılov´e funkce, ale hled´ame vrcholy vˇsechny. Na tomto m´ıstˇe proto vyslov´ıme pouze vˇetu o tom, zˇ e vrchol˚u polyedru je vˇzdy pouze koneˇcnˇe mnoho, a zˇ e tedy n´asˇ algoritmus, popsan´y v n´asleduj´ıc´ı kapitole, po koneˇcnˇe mnoha kroc´ıch skonˇc´ı. Vˇeta 9. Kaˇzd´y konvexn´ı polyedr urˇcen´y koneˇcn´ym poˇctem rovnic m´a pouze koneˇcn´y poˇcet vrchol˚u. D˚ukaz. Podle vˇety 4 v´ıme, zˇ e kaˇzd´emu vrcholu odpov´ıd´a nˇekter´e b´azick´e ˇreˇsen´ı. B´azick´ych ˇreˇsen´ı je maxim´alnˇ (d′e) tolik, kolika zp˚usoby lze vybrat promˇenn´e do b´aze (a nez´aleˇz´ı na poˇrad´ı), tedy m .
11
3. Pouˇzit´e algoritmy vyuˇz´ıvaj´ıc´ı simplexovou metodu 3.1 Algoritmus pro pˇrevod z nerovnicov´e do vrcholov´e reprezentace Uˇz v pˇredch´azej´ıc´ıch odstavc´ıch byl naznaˇcen pr˚ubˇeh algoritmu. V t´eto cˇ a´ sti se proto zamˇeˇr´ıme pˇredevˇs´ım na to, jak z´ıskat v´ysledn´e ˇreˇsen´ı a tak´e jak oˇsetˇrit pˇr´ıpadnou pˇr´ıtomnost neomezen´ych hran. V z´akladn´ı ideji algoritmu jsme se inspirovali cˇ l´ankem [1]. Na tomto m´ıstˇe bychom r´adi pˇripomnˇeli i dalˇs´ı autory, kteˇr´ı se zab´yvali stejn´ym probl´emem, napˇr´ıklad prof. Noˇziˇcku a jeho algoritmus popsan´y v knize [12] nebo Chv´atal˚uv algoritmus z [9]. Nejdˇr´ıve zformulujeme pˇresnˇe pr˚ubˇeh algoritmu. Postupujeme od v´ychoz´ıho vrcholu po hran´ach prohled´av´an´ım do sˇ´ıˇrky, pˇriˇcemˇz u kaˇzd´e poloˇzky ovˇeˇrujeme jak pˇr´ıtomnost b´aze mezi uˇz nalezen´ymi b´azemi, tak i pˇr´ıtomnost vrcholu ve v´ysledku. Pouˇzit´y pseudok´od se drˇz´ı syntaxe bl´ızk´e MATLABu. %VSTUP: Pole Rovnic(Eq) a Nerovnic(Ineq) %inicializace %fronta obsahuje simplexovou tabulku s poˇ c´ ateˇ cn´ ım ˇ reˇ sen´ ım queue = inicialize(Ineq, Eq); FoundBasis = []; FoundVertices = []; EndlessEdges = []; %tˇ elo algoritmu %v kaˇ zd´ em cyklu se zpracuje prvn´ ı vrchol fronty while ˜isEmpty(queue) [actual queue] = pop(queue); %v kaˇ zd´ em sloupeˇ cku se pokus´ ı nal´ ezt pivota for i = 1:columns(actual.matice) pivot = findPivot(actual.matice(:,i),actual.b); %pokud byl pivot nalezen, tabulka se podle nˇ ej uprav´ ı if definied(pivot) new = simplexOneStep(pivot, actual); %pokud novˇ e upraven´ a tabulka jeˇ stˇ e nebyla nalezena dˇ r´ ıve, %je zaˇ razena do prohled´ avac´ ı fronty if ˜in(new.basis,FoundBasis) Basis = add(new.basis, FoundBasis); queue = add(new, queue);
12
%pokud z´ aroveˇ n ˇ reˇ sen´ ı odpov´ ıd´ a dosud nenalezen´ emu vrcholu, %je nov´ y vrchol zaˇ razen do v´ ysledku if ˜in(new.vertex,FoundVertices) FoundVertices = add(new.vertex,FoundVertices); end %if end %if %pokud pivot nebyl nalezen, tak je sloupeˇ cek cel´ y nekladn´ y, %m˚ uˇ ze mu odpov´ ıdat nekoneˇ cn´ a hrana else %pokud mu nekoneˇ cn´ a hrana odpov´ ıd´ a, %je zaˇ razena do v´ ysledku if isEndlessEdge(actual,i) endlessEdge = computeEndlessEdge; if ˜in(endlessEdge,EndlessEdges) EndlessEdges = add(endlessEdge,EndlessEdges); end %if end %if end %if end %for end %while %V´ YSTUP: Vrcholy(FoundVertices) a Neomezen´ e hrany(EndlessEdges) %v´ ystup je na n´ asobnost oˇ setˇ ren v pr˚ ubˇ ehu algoritmu
3.1.1 Anal´yza algoritmu Z uveden´eho k´odu je jasn´a spr´avnost algoritmu, a to d´ıky tomu, zˇ e mezi kaˇzd´ymi dvˇema vrcholy existuje cesta po hran´ach a tato cesta je nalezena prohled´av´an´ım z jednoho vrcholu po hran´ach. Ve vˇetˇe 9 jsme z´aroveˇn vyslovili i podm´ınku pro koneˇcnost algoritmu, protoˇze v kaˇzd´em cyklu zpracuje algoritmus jednu z moˇzn´ych b´az´ı a tˇech je pouze koneˇcnˇe mnoho. Co se t´yk´a cˇ asov´e sloˇzitosti, ta asymptoticky odpov´ıd´a sloˇzitosti simplexov´e metody, protoˇze i pˇri t´e se teoreticky m˚uzˇ e st´at, zˇ e k nalezen´ı optim´aln´ıho ˇreˇsen´ı je tˇreba proj´ıt vˇsechny vrcholy. Nav´ıc je nutn´e ji jeˇstˇe vyn´asobit n´aroˇcnost´ı prohled´av´an´ı v kaˇzd´em kroku pˇri ovˇeˇrov´an´ı, jestli uˇz nebyl nov´y vrchol nalezen dˇr´ıve. Tento koeficient z´avis´ı na pouˇzit´ych vyhled´avac´ıch struktur´ach, ale vˇzdy se do nˇej prom´ıtne hlavnˇe poˇcet nebo struktura pˇr´ıpustn´ych b´az´ı, kter´e je nutn´e prohledat. O cˇ asov´e sloˇzitosti naˇs´ı konkr´etn´ı implementace se hovoˇr´ı v kapitole 7. Prostorov´a n´aroˇcnost je v tomto pˇr´ıpadˇe vyˇssˇ´ı neˇz v [1], protoˇze zat´ımco v cˇ l´ankem popsan´em algoritmu postupuj´ı od minim´aln´ıho ˇreˇsen´ı prohled´av´an´ım do hloubky smˇerem po maximalizaci p˚uvodnˇe minimalizovan´e funkce, v naˇsem algoritmu prob´ıh´a prohled´av´an´ı do sˇ´ıˇrky pˇres vˇsechny vrcholy, a je tedy nutn´e pamatovat si i vˇsechny dosud nalezen´e b´aze, nikoliv pouze nalezen´e vrcholy (pˇr´ıpustn´ych b´az´ı pak m˚uzˇ e b´yt i v´yraznˇe v´ıce, neˇz kolik je v´ysledn´ych vrchol˚u). Konkr´etn´ı prostorov´a n´aroˇcnost pak z´avis´ı pˇredevˇs´ım na pouˇzit´ych datov´ych struktur´ach, pˇriˇcemˇz pro naˇsi implementaci se 13
o n´ı hovoˇr´ı v kapitole 7. V celkov´em porovn´an´ı s [1] sice m˚uzˇ e na prvn´ı pohled n´asˇ algoritmus vych´azet h˚uˇre, ale na druhou stranu tu odpadaj´ı probl´emy s pˇr´ıpadn´ymi degenerovan´ymi vrcholy (takov´e, kde i b´azick´a promˇenn´a je rovna 0) a tak´e jasnˇe popisuje, jak se vyrovnat s neomezen´ymi hranami. O tomto probl´emu pojedn´av´a n´asleduj´ıc´ı cˇ a´ st.
3.1.2 Neomezen´e hrany V simplexov´e metodˇe jsou zkoum´any pouze ty neomezen´e hrany, po kter´ych neomezenˇe kles´a c´ılov´a funkce. Tato situace nast´av´a tehdy, kdy je pivotovac´ım pravidlem zvolen jeden sloupec odpov´ıdaj´ıc´ı vstupuj´ıc´ı promˇenn´e, ale v tomto sloupeˇcku uˇz nen´ı jedin´a kladn´a hodnota. Vzhledem k tomu, zˇ e v naˇsem algoritmu nepracujeme s c´ılovou funkc´ı, je tˇreba provˇeˇrit vˇsechny nekladn´e sloupeˇcky. Avˇsak ne kaˇzd´y nekladn´y sloupeˇcek odpov´ıd´a nˇejak´e neomezen´e hranˇe. Je nutn´e si uvˇedomit, zˇ e oproti p˚uvodn´ımu zad´an´ı n´am kv˚uli u´ pravˇe u´ lohy pro simplexovou metodu pˇribylo mnoho promˇenn´ych. Probl´em nast´av´a pˇredevˇs´ım s promˇenn´ymi, kter´e byly pˇrid´any kv˚uli podm´ınce nez´apornosti. Vzhledem k tomu, zˇ e dvojice xi+ , xi− pˇred sebou maj´ı vˇzdy jen o znam´enko jin´e koeficienty, je jasn´e, zˇ e pokud je jedna z dvojice v b´azi, tedy jej´ı odpov´ıdaj´ıc´ı sloupeˇcek je jednotkov´y, tak druh´a z dvojice m´a sloupeˇcek sloˇzen´y ze sam´ych 0 a jedn´e −1. N´asleduj´ıc´ı vˇeta formuluje pˇresnˇe podm´ınku nutnou a postaˇcuj´ıc´ı pro nalezen´ı neomezen´e hrany Vˇeta 10. Pr´avˇe kaˇzd´y nekladn´y sloupeˇcek matice A′ , kter´y se vyskytne v pr˚ubˇehu algoritmu a kter´y neodpov´ıd´a promˇenn´e xi+ (resp. x− ) tak, zˇe xi− (resp. x+ ) je v b´azi, definuje nˇejakou neomezenou hranu. Pozn´amka. Zd˚uraznˇeme jeˇstˇe, zˇe hranˇe m˚uzˇe odpov´ıdat v´ıce nekladn´ych sloupeˇck˚u, stejnˇe jako vrchol˚um m˚uzˇe odpov´ıdat v´ıce b´az´ı. D´ale je dobr´e upozornit, zˇe nalezen´ı neomezen´e hrany v urˇcit´em vrcholu nemus´ı nutnˇe znamenat, zˇe hrana vych´az´ı z nˇej, resp. nalezen´y vrchol se pak m˚uzˇe uk´azat, zˇe nen´ı vrcholem p˚uvodn´ıho polyedru, ale pouze vrcholem polyedru definovan´ym upravenou u´ lohou. D˚ukaz. V pˇredchoz´ı kapitole jsme pˇri formulaci simplexov´eho algoritmu uk´azali, zˇ e pokud existuje v nˇejak´em sloupeˇcku aspoˇn jedna kladn´a hodnota, vych´az´ı z vrcholu dan´eho ˇreˇsen´ım hrana, kter´a vede do jin´eho vrcholu odpov´ıdaj´ıc´ımu dalˇs´ımu ˇreˇsen´ı. Pro definici neomezen´e hrany tak pˇripadaj´ı v u´ vahu pouze nekladn´e sloupce. Staˇc´ı tedy uk´azat, zˇ e nekladn´e sloupce definuj´ı neomezen´e hrany a zˇ e sloupce z podm´ınky vˇety nikoliv. Necht’ A′∗s ≤ 0. Je jasn´e, zˇ e s nen´ı z b´aze, a proto m˚uzˇ eme definovat zβ = −A′∗s , z s = 1, z j = 0 jinak Vid´ıme, zˇ e z ≥ 0 a proto m˚uzˇ eme vyj´adˇrit Az = Aβ zβ + A∗s = −Aβ (A−1 β A)∗s + A∗s = −A∗s + A∗s = 0 Vezmˇeme polopˇr´ımku x + zα, α ∈ R, α ≥ 0, kde x je nˇejak´e pˇr´ıpustn´e b´azick´e ˇreˇsen´ı. Protoˇze A(x + zα) = Ax = b 14
je kaˇzd´y bod definovan´e polopˇr´ımky pˇr´ıpustn´ym ˇreˇsen´ım, tedy polopˇr´ımka je obsaˇzena v polyedru M. To, zˇ e polopˇr´ımka urˇcuje hranu, bychom dok´azali obdobnˇe, jako zˇ e pˇr´ıpustn´e b´azick´e ˇreˇsen´ı urˇcuje vrchol. Nyn´ı se pod´ıvejme na sloupce z podm´ınky ve vˇetˇe. Uvˇedomme si, zˇ e formulace polopˇr´ımky je v dimenzi d′ , ale n´asˇ p˚uvodn´ı polyedr je v dimenzi n. Po pˇrevodu do p˚uvodn´ı dimenze by se vektor z vynuloval (A∗s = −ek ), proto sloupce z podm´ınky neurˇcuj´ı neomezenou hranu. Pozn´amka. Z d˚ukazu vypl´yv´a, jak konstruovat neomezen´e hrany, kter´e tedy urˇcuje vektor z pˇreveden´y do p˚uvodn´ı dimenze.
3.2 Algoritmus pro pˇrevod z vrcholov´e do nerovnicov´e reprezentace 3.2.1 Dualita Dualita je speci´aln´ım geometrick´ym zobrazen´ım, kter´e bodu pˇriˇrazuje nadrovinu a vice versa. T´ımto zp˚usobem je tedy moˇzn´e z vrchol˚u polyedru odvodit, jak vypad´a jeho du´aln´ı obraz, s t´ım rozd´ılem, zˇ e jeho popis dostaneme v nerovnicov´e reprezentaci. To se n´am ovˇsem hod´ı, protoˇze pak na du´aln´ı obraz m˚uzˇ eme pouˇz´ıt algoritmus z pˇredch´azej´ıc´ı cˇ a´ sti a z jeho v´ysledku opˇet pˇres dualitu odvodit, jak vypad´a nerovnicov´a reprezentace p˚uvodn´ıho polyedru. Na okraj poznamenejme, zˇ e n´ami pouˇzit´a dualita je jednou z mnoha, kterou lze definovat, ale pro naˇse potˇreby je tato nejzn´amˇejˇs´ı forma zcela dostaˇcuj´ıc´ı. Definice. Du´aln´ı obraz bodu a ∈ Rd \ {0} je pˇriˇrazen zobrazen´ım oznaˇcen´ym D a definovan´ym pˇredpisem D(a) = {x ∈ Rd | ⟨a, x⟩ = 1} a analogicky nadrovinˇe h, kter´a neproch´az´ı poˇca´ tkem a m˚uzˇe b´yt jednoznaˇcnˇe pops´ana jako h = {x ∈ Rd | ⟨a, x⟩ = 1} je pˇriˇrazen D(h) = a ∈ Rd . Podobnˇe m˚uzˇ eme definovat i du´aln´ı obraz k nˇejak´e podmnoˇzinˇe Rd . Definice. Du´aln´ı obraz mnoˇziny X ⊆ Rd definujeme jako X ∗ = {y ∈ Rd | ⟨x, y⟩ ≤ 1, x ∈ X}. Nyn´ı vyslov´ıme vˇetu o tom, zˇ e du´aln´ı obraz du´aln´ı mnoˇziny je mnoˇzina prim´arn´ı za urˇcit´ych pˇredpoklad˚u. D´ıky tomu m˚uzˇ eme pouˇz´ıt v´ysˇe naznaˇcen´y algoritmus pro pˇrevod z vrcholov´e do nerovnicov´e reprezentace polyedru. Vˇeta 11. Necht’ X ⊆ Rd uzavˇren´a, konvexn´ı a {0} ∈ X. Pak plat´ı, zˇe (X ∗ )∗ = X. Pˇred uveden´ım d˚ukazu mus´ıme jeˇstˇe vyslovit tzv. oddˇelovac´ı vˇetu (separation theorem), kterou budeme cht´ıt pouˇz´ıt. Ovˇeˇrit, zˇ e tato vˇeta plat´ı, nen´ı jednoduch´e, ale ani pro n´as d˚uleˇzit´e, proto pouze odkazujeme napˇr´ıklad na d˚ukaz uveden´y v [10, Mat02, str. 6]. Vˇeta 12. Necht’ C, D ⊂ Rd jsou konvexn´ı mnoˇziny, kter´e se neprot´ınaj´ı. Pak ∃v ∈ Rd a b ∈ R tak, zˇe ∀c ∈ C plat´ı ⟨c, v⟩ ≤ b a ∀d ∈ D plat´ı ⟨d, v⟩ ≥ b. Pokud jsou nav´ıc mnoˇziny uzavˇren´e a aspoˇn jedna omezen´a, pak plat´ı nerovnosti ostˇre. 15
D˚ukaz. Vˇetu 11 dokazujeme pomoc´ı inkluze. Smˇer X ⊆ (X ∗ )∗ je jasn´y z definice du´aln´ı mnoˇziny, proto se podrobnˇeji pod´ıv´ame pouze na druh´y smˇer. Pro spor pˇredpokl´adejme, zˇ e ∃x ∈ X, ale x < (X ∗ )∗ . Z definice vypl´yv´a, zˇ e (X ∗ )∗ je uzavˇren´a, proto podle oddˇelovac´ı vˇety existuje vektor v normovan´y tak, zˇ e ∀y ∈ (X ∗ )∗ plat´ı ⟨v, y⟩ < 1 a ⟨v, x⟩ > 1 (protoˇze (X ∗ )∗ obsahuje poˇca´ tek). Z toho vypl´yv´a, zˇ e v ∈ X ∗ , ale protoˇze v ∈ X, mus´ı tedy ⟨h, v⟩ ≤ 1, a to je spor. V t´eto chv´ıli uˇz m´ame vˇsechny teoretick´e podklady pro to zformulovat algoritmus. Jeˇstˇe pˇred t´ım se vˇsak na tomto m´ıstˇe vr´at´ıme k d˚ukazu vˇety z u´ vodu o ekvivalenci reprezentace polytop˚u. D˚ukaz. Vˇety 1. Nyn´ı dok´azˇ eme, zˇ e kaˇzd´y V-polytop je tak´e H-polytopem. Mˇejme P = conv(V), kde V je koneˇcn´a mnoˇzina vrchol˚u a nav´ıc bez u´ jmy na obec∩ nosti P obsahuje poˇca´ tek. Nejdˇr´ıve dok´azˇ eme pomocn´e lemma, zˇ e P∗ = v∈V D(v)− , tedy pr˚unikem poloprostor˚u urˇcen´ych du´aln´ımi nadrovinami k vrchol˚um a obsahuj´ıc´ıch poˇca´ tek. Pr˚unik zkr´acenˇe oznaˇc´ıme jako D. Je vidˇet, zˇ e P∗ ⊂ D. Ve druh´em smˇeru pro spor pˇredpokl´adejme, zˇ e existuje w ∈ P∗ = conv(V)∗ , ale w < D. Tedy ∃v ∈ V tak, zˇ e w < D(v)− . To by znamenalo, zˇ e ⟨v, w⟩ > 1, ale to by byl spor s t´ım, zˇ e w ∈ P∗ . Vrat’me se k hlavn´ımu d˚ukazu. Protoˇze P obsahuje poˇca´ tek, tak jeho du´aln´ı obraz je omezen´y, a jak jsme dok´azali pˇredchoz´ım lemmatem, je to pr˚unik poloprostor˚u. Uˇz m´ame dok´az´ano, zˇ e pro kaˇzd´y omezen´y pr˚unik poloprostor˚u existuje jeho vrcholov´a reprezentace. Na tuto reprezentaci opˇet aplikujeme dualitu a opˇet d´ıky tomu, zˇ e P obsahuje poˇca´ tek, a vˇetˇe 11 dost´av´ame p˚uvodn´ı polyedr v nerovnicov´e reprezentaci.
3.2.2 Popis algoritmu Jak jiˇz bylo naps´ano v´ysˇe, idea algoritmu pracuje s t´ım, zˇ e na z´akladˇe zadan´ych vrchol˚u je vypoˇc´ıt´an du´aln´ı obraz polyedru, kter´y je pops´an nerovnicovou reprezentac´ı. D´ıky tomu je moˇzn´e na nˇej pouˇz´ıt algoritmu z cˇ a´ sti (3.1). Z v´ysledku jsou pak opˇet pˇres dualitu odvozeny nerovnice popisuj´ıc´ı fasety p˚uvodn´ıho polyedru. Tento posledn´ı krok bychom nemohli uˇcinit, pokud by neplatila vˇeta 11. Abychom ji vˇsak v˚ubec mohli pouˇz´ıt, mus´ıme posunout souˇradnou soustavu tak, aby se poˇca´ tek nach´azel uvnitˇr polyerdu v´ıce viz 3.2.4. Podm´ınka uzavˇrenosti je pro libovoln´y polyedr splnˇena automaticky. Pro pops´an´ı algoritmu opˇet zvol´ıme formu pseudok´odu, kter´y se drˇz´ı syntaxe MATLABu. %VSTUP: Vrcholy(Vertices) dim = columns(Vertices); ´tku %v´ ypoˇ cet a posunut´ ı poˇ ca newOrigin = middle(Vertices); Vertices = moveOrigin(newOrigin,Vertices); %vytvoˇ ren´ ı du´ aln´ ıho obrazu Dual = []; 16
for i =1:rows(Vertices) Dual = add(dual(Vertices(i,:)),Dual); end %for %pouˇ z´ ıt´ ı algoritmu z (2.3) DualResult = facetsVerticesTransformation(Dual); %pˇ revod zpˇ et na prim´ arn´ ı polyedr for i = 1:rows(DualResult) Inequalities = add(dual(DualResult(i,:)),Inequalities); end %for %posun v´ ysledn´ ych nerovnic do p˚ uvodn´ ıch souˇ radnic for i = 1:rows(Inequalities) Inequalities(i,:) = moveoriginineq(Inequalities(i,:),-neworigin); end %for %V´ YSTUP: Nerovnice(Inequalities)
3.2.3 Anal´yza algoritmu Algoritmus je zcela jistˇe koneˇcn´y, protoˇze jeho vstup je koneˇcn´y a koneˇcnost pouˇzit´eho algoritmu pro pˇrevod z nerovnicov´e do vrcholov´e reprezentace byla dok´az´ana v jedn´e z pˇredch´azej´ıc´ıch cˇ a´ st´ı. Spr´avnost algoritmu je zajiˇstˇena vˇetou 11 a t´ım, zˇ e je v cel´em algoritmu pouˇzita pˇr´ım´a dualita. Jedin´y probl´em by mohl nastat, pokud nˇekter´a ze stˇen proch´azela poˇca´ tkem. Tomuto probl´emu se podrobnˇeji vˇenuje n´asleduj´ıc´ı cˇ a´ st. ˇ Casov´ a sloˇzitost je z´avisl´a na sloˇzitosti pomocn´eho algoritmu. Vˇsechny ostatn´ı operace, pˇredevˇs´ım tedy pˇrev´adˇen´ı du´alu a posouv´an´ı poˇca´ tku jsou line´arnˇe z´avisl´e na vstupu. Prostorov´a sloˇzitost opˇet odpov´ıd´a pomocn´emu algoritmu, bˇehem pˇrevodu nejsou kladeny dalˇs´ı n´aroky na pamˇet’.
3.2.4 Fasety proch´azej´ıc´ı poˇca´ tkem Probl´em v algoritmu by mohl nastat ve chv´ıli, kdy by v p˚uvodn´ım polyedru nˇekter´e nadroviny urˇcuj´ıc´ı r˚uzn´e fasety proch´azely posunut´ym poˇca´ tkem. Takov´e fasety totiˇz nemaj´ı definov´an du´aln´ı obraz, takˇze by je nebylo moˇzn´e jednoznaˇcnˇe dostat jako du´aln´ı obraz vypoˇcten´ych vrchol˚u. Mus´ıme se tud´ızˇ t´eto situaci vyhnout, cˇ ehoˇz lze dos´ahnout vhodn´ym posunut´ım poˇca´ tku. V naˇsem pˇr´ıpadˇe jsme vzali vˇsechny zadan´e vrcholy polyedru a pomoc´ı n´asleduj´ıc´ıho vztahu jsme urˇcili stˇred: ∑n ∑n (an )i i=1 (a1 )i ; . . . ; i=1 ] (3.1) S =[ n n Takto definovan´y stˇred je jistˇe v polyedru obsaˇzen (je konvexn´ı kombinac´ı vˇsech vrchol˚u). Vzhledem k nez´avislosti volen´ych vrchol˚u, kterou jsme ovˇeˇrili na poˇca´ tku algoritmu, tento vrchol nem˚uzˇ e leˇzet v zˇ a´ dn´e stˇenˇe. 17
4. Konvexn´ı obal kombinatoricky v obecn´e dimenzi Probl´em pˇrevodu z vrcholov´e na nerovnicovou reprezentaci polyedru je podmnoˇzinou rozs´ahl´eho probl´emu shrnut´eho do pojmu konvexn´ıho obalu. Zat´ımco samotn´y pˇrevod by mohl b´yt ch´ap´an tak, zˇ e jsou zad´any pouze skuteˇcn´e vrcholy, v u´ pln´e obecnosti lze samozˇrejmˇe zadat libovoln´e body a teprve v pr˚ubˇehu v´ypoˇctu se uk´azˇ e, jestli jsou vˇsechny opravdu vrcholy v´ysledn´eho polytopu. V t´eto kapitole se budeme vˇenovat nejdˇr´ıve obecnˇe konvexn´ımu obalu, r˚uzn´ych moˇznostech jeho v´ypoˇctu. Omez´ıme se vˇsak pouze na algoritmy vhodn´e pro aplikaci v obecn´e dimenzi a budeme uvaˇzovat pouze polytopy dimenze d v Rd . Neˇz pˇredstav´ıme jednotliv´e pˇr´ıstupy, mˇeli bychom jeˇstˇe pˇresnˇe specifikovat, co vlastnˇe m˚uzˇ e b´yt v´ysledkem v´ypoˇctu. Jedn´a se o r˚uzn´e moˇznosti, jak popsat polyedr. Vrcholov´a reprezentace: Mnoˇzina vˇsech vrchol˚u (bez redudance) Nerovnicov´a reprezentace: Mnoˇzina vˇsech faset popsan´ych line´arn´ımi nerovnicemi (bez redudance) Dvojit´a reprezentace: Mnoˇzina vˇsech vrchol˚u a vˇsech faset vˇcetnˇe vz´ajemn´e incidence (pops´ana zpravidla matic´ı incidence) Svazov´a reprezentace: Svaz vˇsech stˇen popsan´y Hasseov´ym diagramem (angl. Lattice description) Hraniˇcn´ı reprezentace: Triangulace povrchu (sloˇzen´a z d − 1-dimenzion´aln´ıch simplex˚u a nerovnic popisuj´ıc´ıch jejich polohu) R˚uzn´e popisy jsou vhodn´e pro r˚uzn´e dalˇs´ı probl´emy a pouˇzit´ı. Prvn´ı dva patˇr´ı do skupiny cˇ istˇe geometrick´ych popis˚u, protoˇze definuj´ı objekt ve smyslu geometrick´e nezbytnosti, zat´ımco druh´e tˇri patˇr´ı mezi tzv. kombinatorick´e popisy, protoˇze sice definuj´ı objekt jako takov´y, ale nav´ıc poskytuj´ı dodateˇcnou informaci o jeho kombinatorick´e sloˇzitosti. Kromˇe toho tak´e lze tyto reprezentace mezi sebou libovolnˇe pˇrev´adˇet bez pouˇzit´ı aritmetick´ych operac´ı na re´aln´ych cˇ´ıslech. Poznamenejme, zˇ e r˚uzn´e popisy se ale v´yraznˇe liˇs´ı co do velikosti a na poˇzadovan´em v´ystupu pak z´avis´ı v´ysledn´a sloˇzitost cel´eho algoritmu.
4.1 Druhy algoritmu˚ V t´eto cˇ a´ sti bychom r´adi podali struˇcn´y pˇrehled algoritm˚u, kter´e se pouˇz´ıvaj´ı pro v´ypoˇcet konvexn´ıho obalu na z´akladˇe mnoˇziny vrchol˚u {p1 , . . . , pn }. Jako i v dalˇs´ıch oblastech v´ypoˇcetn´ı geometrie i zde jsou vˇsechny algoritmy zaloˇzeny na z´akladn´ıch postupech, konkr´etnˇe na inkrement´aln´ım, proch´azej´ıc´ım graf a rozdˇel-a-panuj. Pˇred t´ım, neˇz pˇristoup´ıme k popisu obecn´ych algoritm˚u, zmiˇnme, zˇ e speci´aln´ım pˇr´ıpadem probl´emu je protˇr´ıdˇen´ı vrchol˚u tak, aby zˇ a´ dn´y v mnoˇzinˇe se nedal vyj´adˇrit jako konvexn´ı kombinace zbyl´ych. V angliˇctinˇe se tento typ u´ lohy naz´yv´a irredudancy problem. Du´aln´ım probl´emem k tomuto je odstranˇen´ı redundantn´ıch nerovnic z line´arn´ıho programu. K ˇreˇsen´ı se tedy pouˇz´ıv´a line´arn´ı program, kter´y pˇri testov´an´ı 18
kaˇzd´eho vrcholu bˇezˇ´ı v pevn´e dimenzi v cˇ ase O(n2 ). Clarkson [3] tuto metodu jeˇstˇe upravil tak, zˇ e kaˇzd´y program obsahuje pouze tolik nerovnost´ı, kolik je vrchol˚u ve v´ysledk˚u. Dos´ahl t´ım cˇ asov´eho vylepˇsen´ı na O(nV), kde V je pr´avˇe velikost v´ysledn´e mnoˇziny vrchol˚u.
4.1.1 Inkrement´aln´ı algoritmy Pravdˇepodobnˇe nejˇcastˇeji volenou metodou pro v´ypoˇcet konvexn´ıho obalu je ta inkrement´aln´ı. Pr´avˇe zde vˇsak nar´azˇ´ıme na probl´em s formou v´ystupu. Nˇekter´e z reprezentac´ı jsou sami o sobˇe velk´e (viz tabulka 4.1) a nav´ıc, v pr˚ubˇehu algoritmu jsou poˇc´ıt´any vˇsechny jednotliv´e mezikroky, kter´e mohou m´ıt tak´e v´yraznˇe vyˇssˇ´ı sloˇzitost neˇz v´ysledn´y polyedr. Tyto nesn´aze autoˇri algoritm˚u ˇreˇs´ı pˇredevˇs´ım sofistikovan´ymi metodami, kter´e jsou pouˇzity pˇri urˇcov´an´ı poˇrad´ı, ve kter´em budou vrcholy zpracov´av´any. Reprezentace Dvojit´a Svazov´a Hraniˇcn´ı
Nejhorˇs´ı pˇr´ıpad Nedegenerovan´y pˇr´ıpad d · µ(d, n) d·m d 2 · µ(d, n) 2d · m µ(d, n) m
Tabulka 4.1: Velikosti reprezentac´ı polytop˚u ( ) ( ) n − ⌈d/2⌉ n − 1 − ⌈(d − 1)/2⌉ µ(n, d) = + . ⌊d/2⌋ ⌊(d − 1)/2⌋ m = poˇcet faset polyedru Pˇred popisem inkrement´aln´ıho algoritmu definujme nˇekter´e z´akl´adn´ı pojmy. Definice. P je degenerovan´y polytop v Rd , pokud nˇekterou jeho stˇenu tvoˇr´ı v´ıce neˇz d vrchol˚u nebo z nˇekter´eho vrcholu vych´az´ı v´ıce neˇz d hran. Definice. Pro nedegenerovan´y polytop P v Rd a pro bod v < P rˇekneme, zˇe faseta f polytopu P je viditeln´a, pokud plat´ı, zˇe nadrovina h definuj´ıc´ı f oddˇeluje v a P (tj. nach´az´ı se v r˚uzn´ych poloprostorech). Jinak je faceta zakryt´a (angl. obscured). Horizontem naz´yv´ame mnoˇzinu ridges, kter´a oddˇeluje viditeln´e a zakryt´e fasety. Nyn´ı uˇz m˚uzˇ eme formulovat bˇezˇ n´y krok algoritmu. Pˇred n´ım samozˇrejmˇe mus´ı probˇehnout inicializace, bˇehem kter´e je vytvoˇren z nˇekolika vrchol˚u polytop pln´e dimenze a zpravidla je i urˇceno poˇrad´ı vkl´adan´ych vrchol˚u (pokud tak nen´ı uˇcinˇeno na zaˇca´ tku kaˇzd´eho bˇezˇ n´eho kroku). Bˇezˇ n´y krok algoritmu pak bere jako vstup polytop Pi−1 tvoˇren´y vrcholy {p1 , . . . , pi−1 }, ke kter´emu pˇrid´a vrchol pi a vytvoˇr´ı nov´y polyedr z vrchol˚u {p1 , . . . , pi }. Skl´ad´a se z tˇechto operac´ı: 1. Nalezen´ı (a vymaz´an´ı) vˇsech viditeln´ych faset 2. Identifikace horizontu 3. Vytvoˇren´ı nov´ych faset 19
Vˇsechny algoritmy se pak liˇs´ı pouze v tom, jak pˇristupuj´ı k jednotliv´ym bod˚um bˇezˇ n´eho kroku a v urˇcen´ı poˇrad´ı vkl´adan´ych vrchol˚u. Viditeln´e fasety: Nejednoduˇssˇ´ı zp˚usob, jak naj´ıt vˇsechny viditeln´e fasety, je otestovat vˇsechny fasety polytopu Pi−1 . Tento postup vol´ı napˇr´ıklad “beneath-beyond” algoritmus [13] nebo Motzkin˚uv algoritmus dvojit´e reprezentace [11]. Asymptotick´a cˇ asov´a sloˇzitost vych´az´ı na Ω(n⌊d/2⌋+1 ). Jin´y pˇr´ıstup pro zmˇenu udrˇzuje pro kaˇzd´y dosud nevloˇzen´y vrchol seznam z nˇeho viditeln´ych faset. Udrˇzov´an´ı t´eto struktury ale nakonec vych´az´ı v nejhorˇs´ım pˇr´ıpadˇe stejnˇe jako pˇredch´azej´ıc´ı pˇr´ıpad. Ukazuje se vˇsak, zˇ e pˇri randomizovan´em poˇrad´ı vkl´ad´an´ı vrchol˚u v pr˚umˇeru dopadne l´epe, konkr´etnˇe O(n⌊d/2⌋ ). Posledn´ı pouˇz´ıvan´y pˇr´ıstup spoˇc´ıv´a v udrˇzov´an´ı fasetov´eho grafu, kde vrcholy zastupuj´ı fasety a hrany ridges. Dva vrcholy jsou spojeny hranou pr´avˇe tehdy, kdyˇz nˇekter´e dvˇe fasety je obsahuj´ıc´ı sd´ıl´ı spoleˇcnou ridge. Ve chv´ıli vyhled´av´an´ı vˇsech viditeln´ych faset pak staˇc´ı nal´ezt pouze jednu a zbyl´e identifikovat prohled´av´an´ım grafu do hloubky. Poˇca´ teˇcn´ı fasetu je moˇzn´e nal´ezt prohled´av´an´ım vˇsech ve vhodn´em poˇrad´ı ([18]), udrˇzov´an´ım vˇzdy viditeln´ych faset jako u [5] a [4] nebo s vyuˇzit´ım line´arn´ıho programov´an´ı (opˇet [18]). Tento zp˚usob vych´az´ı cˇ asovˇe optim´alnˇe vzhledem k poˇctu viditeln´ych stˇen v kaˇzd´em kroku. Horizont: Jeho sestaven´ı je trivi´aln´ı ve fasetov´em grafu, odpov´ıd´a hran´am, kter´e vedou mezi viditeln´ymi a zakryt´ymi fasetami. Jinak vyˇzaduje pouˇzit´ı speci´aln´ıch datov´ych struktur, kter´e v kr´atk´em cˇ ase odhal´ı, kter´e zakryt´e fasety soused´ı s pr´avˇe jednou viditelnou fasetou. Nov´e fasety: Samotn´a konstrukce je jednoduch´a a vych´az´ı cˇ asovˇe odpov´ıdaj´ıc´ı poˇctu nov´ych faset. Aby jejich poˇcet z˚ustal co nejmenˇs´ı, je tˇreba zvolit vhodn´e poˇrad´ı vkl´adan´ych vrchol˚u. Nejjednoduˇs´ı je zvolit n´ahodn´e poˇrad´ı, kter´e v pr˚umˇern´em cˇ ase dopadne O(n⌊d/2⌋ ). Chazelle v roce 1993 publikoval dokonce deterministick´y algoritmus zaloˇzen´y na pseudon´ahodn´em v´ybˇeru, kter´y dopadne cˇ asovˇe optim´alnˇe i v nejhorˇs´ım pˇr´ıpadˇe. Degenerovan´y vstup: Pˇripomeˇnme, zˇ e vˇsechny v´ysledky byly uvedeny pouze ve vztahu k nedegenerovan´emu vstupu. Pokud dovol´ıme naprosto n´ahodn´y vstup, dopadaj´ı vˇsechny uveden´e algoritmy sˇpatnˇe, pˇriˇcemˇz hlavnˇe jejich datov´e struktury se podstatnˇe komplikuj´ı. Zat´ım nejlepˇs´ım algoritmem pro obecn´y vstup je algoritmus dvojit´e reprezentace, jejˇz jsme zvolili i my pro naˇsi implementaci. Proto o nˇem budeme podrobnˇe hovoˇrit aˇz ve vztahu k naˇs´ı implementaci v dalˇs´ı cˇ a´ sti. Na z´avˇer bychom jeˇstˇe r´adi zd˚uraznili podm´ınku na plnou dimenzi zpracov´avan´eho polyedru. Pokud by tato nebyla splnˇena, museli bychom naj´ıt nejmenˇs´ı afinn´ı podprostor, kter´y obsahuje cel´y polyedr, prov´est projekci do prostoru odpov´ıdaj´ıc´ı dimenze a pokraˇcovat ve v´ypoˇctu v niˇzsˇ´ı dimenzi. V p˚uvodn´ı dimenzi bychom nevˇedˇeli, jak vypadaj´ı fasety polyedru (jakou maj´ı dimenzi) a problematick´y by byl i jejich popis pomoc´ı nerovnic (ˇslo by o pr˚unik nejednoznaˇcnˇe urˇcen´ych nadrovin a zm´ınˇen´eho afinn´ıho podprostoru).
4.1.2 Algoritmy proch´azen´ı grafem Algoritmy tohoto druhu proch´azej´ı graf faset polytopu P pˇres jeho ridges. Z fasety F pˇres ridge R hledaj´ı sousedn´ı fasetu F ′ tak, zˇ e maximalizuj´ı u´ hel mezi nimi. V dimenzi dvˇe a tˇri je tento postup zn´am´y pod pojmem gift-wrapping. Mimochodem, du´aln´ı algoritmus proch´az´ı vrcholy po hran´ach, a jedn´a se tedy o algoritmy ze stejn´e tˇr´ıdy jako 20
uveden´e metody z druh´e kapitoly. Z´akladn´ı idea algoritmu spoˇc´ıv´a v nalezen´ı nˇejak´e inicializaˇcn´ı fasety a vˇsech jej´ıch ridges. Ty jsou z poˇca´ tku vˇsechny oznaˇceny jako otevˇren´e, protoˇze jeˇstˇe nezn´ame zˇ a´ dnou fasetu, kter´a by s nˇekterou z nich sousedila z druh´e strany. V obecn´em kroku algoritmu jde o nalezen´ı libovoln´e dalˇs´ı fasety, kter´a soused´ı s nˇekterou z dosud nalezen´ych facet pˇres otevˇrenou ridge. U nov´e fasety jsou spoˇc´ıt´any vˇsechny jej´ı ridges a je rozhodnuto, zda-li jsou otevˇren´e cˇ i nikoliv. Tady nast´av´a probl´em, protoˇze ne vˇsechny ridges nov´e fasety mus´ı b´yt nutnˇe otevˇren´e, nov´a faseta m˚uzˇ e sousedit s dalˇs´ımi jiˇz nalezen´ymi fasetami. Po vyhodnocen´ı, kter´e ridges jsou otevˇren´e a kter´e jsou naopak z otevˇren´ych vylouˇceny, se postup opakuje, dokud existuje otevˇren´a ridge. Z v´ysˇe popsan´eho postupu vypl´yvaj´ı n´asleduj´ıc´ı probl´emy: 1. Jak co nejrychleji nal´ezt samotnou fasetu F ′ 2. Jak co nejrychleji nal´ezt ridges nov´e fasety F ′ 3. Jak spravovat otevˇren´e ridges Pokud budeme nejdˇr´ıve pro jednoduchost pˇredpokl´adat, zˇ e vstup nen´ı degenerovan´y, automaticky n´am odpadne probl´em 2. Pˇr´ım´a cesta k vyˇreˇsen´ı 3 vede pˇres pouˇzit´ı datov´e struktury zaloˇzen´e na dictionary. Nakonec k nalezen´ı fasety F ′ vede nejpˇr´ımˇejˇs´ı cesta pˇres vyzkouˇsen´ı pˇres vˇsechny vrcholy, kde jeden takov´y krok pobˇezˇ´ı v cˇ ase odpov´ıdaj´ıc´ımu poˇctu vrchol˚u na vstupu. Sofistikovanˇejˇs´ı algoritmy ale mohou m´ıt lepˇs´ı nejen cˇ asovou, ale hlavnˇe prostorovou sloˇzitost. Velmi praktick´ym se jev´ı algoritmus, kter´y popsali Avis a Fukuda v [1], kter´y proch´az´ı fasetov´y graf do hloubky pˇres jeho kostru, takˇze nen´ı nutn´e v pr˚ubˇehu ukl´adat informace o ridges. Jin´y algoritmus, tentokr´at je jeho autorem Seidel, postupuje po smˇeru pˇr´ımky shelling of P [16]. Pokud pˇripust´ıme degenerovan´y vstup, tak jako prvn´ı se nab´ız´ı jeho u´ prava perturbac´ı jednotliv´ych vrchol˚u. Jin´a cesta vede pˇres u´ pravu algoritm˚u na v´ypoˇcet svazov´e reprezentace nebo v´ysˇe zm´ınˇen´ych pro obecnou polohu. Rote [15] se pokusil optimalizovat algoritmus Avise a Fukudy, ale bohuˇzel se uk´azalo, zˇ e nen´ı tak praktick´y jako jeho vzor. I Seidelova metoda byla upravov´ana, a to samotn´ym autorem ve stejn´em roce v [17].
4.1.3 Algoritmy rozdˇel-a-panuj Tento druh algoritmu se zat´ım nepovedlo generalizovat pro obecnou dimenzi, respektive jeho pouˇzit´ı se zat´ım jev´ı jako velmi nepraktick´e. Na druhou stranu jako jeden z m´ala zp˚usob˚u lze efektivnˇe pouˇz´ıt pro dimenzi 4 a 5, na kter´e bˇezˇ n´e algoritmy pro malou dimenzi nestaˇc´ı. T´eto problematice se vˇenovali Chan, Snoeyink a Yap v [6] nebo Amato a Ramos v [2].
4.2 Algoritmus dvojit´e reprezentace Tento algoritmus patˇr´ı do tˇr´ıdy inkrement´aln´ıch algoritm˚u a b´yv´a vyuˇz´ıv´an jako snadn´a metoda pro v´ypoˇcet degenerovan´ych vstup˚u. Pro nedegenerovan´y vstup sice nen´ı optim´aln´ı, ale samozˇrejmˇe je moˇzn´e ho vyuˇz´ıt. Z d˚uvodu t´eto obecnosti jsme se rozhodli vz´ıt ho jako inspiraci pro n´asˇ algoritmus. 21
Viditeln´e fasety jsou vyhled´any jednoduch´ym testov´an´ım vˇsech faset. Na v´ypoˇcet horizontu se pak vyuˇz´ıv´a dvojit´e reprezentace, na z´akladˇe kter´e je vypoˇc´ıt´an pr˚unik kaˇzd´e viditeln´e a zakryt´e fasety. Pokud tento pr˚unik je podmnoˇzinou nˇekter´e dalˇs´ı fasety z Pi−1 , pak nem˚uzˇ e tvoˇrit ridge, a tedy nen´ı ani horizont´aln´ı ridge. V naˇsem algoritmu jsme vyuˇzili pˇredevˇs´ım n´apad neuchov´avat ridges v nˇejak´e struktuˇre. Po nalezen´ı nˇekter´e viditeln´e hrany, dopoˇc´ıt´av´ame uveden´ym zp˚usobem jednotliv´e ridges, ale d´ıky datov´e struktuˇre popsan´e v n´asleduj´ıc´ı kapitole pod heslem dvojit´e reprezentace, nemus´ıme prohled´avat vˇsechny moˇzn´e fasety, ale jen ty, kter´e obsahuj´ı nˇejak´y vrchol z aktu´alnˇe prohled´avan´e. Tam, kde prohled´av´an´ı konˇc´ı, automaticky v´ıme, zˇ e se nach´az´ı horizont. V´yhoda algoritmu v degenerovan´em pˇr´ıpadˇe spoˇc´ıv´a v tom, zˇ e nen´ı potˇreba vypoˇc´ıt´avat ridges degenerovan´ych faset, na coˇz by bylo nutn´e pouˇz´ıt napˇr´ıklad rekurzi nebo line´arn´ı program. V silnˇe degenerovan´ych pˇr´ıpadech tyto cˇ asovˇe pˇr´ıp. prostorovˇe n´aroˇcn´e metody selh´avaj´ı.
22
5. Uˇzivatelsk´a dokumentace N´asˇ program je postaven jako bal´ık funkc´ı, kter´e slouˇz´ı k pr´aci s polyedry. Uˇzivateli je urˇceno pˇet z´akladn´ıch funkc´ı, pˇriˇcemˇz dvˇe z toho jsou co do funkˇcnosti ekvivalentn´ı. Rozhodli jsme se pro programovac´ı jazyk MATLAB, pˇriˇcemˇz jsme se pokusili zachovat kompatibilitu s freewarem Octave. Bohuˇzel se n´am to nepodaˇrilo stoprocentnˇe, ale d´ıky tomu, zˇ e nˇekter´e zdrojov´e k´ody Octavu je moˇzn´e upravovat, doc´ılili jsme po mal´ych zmˇen´ach v nainstalovan´ych bal´ıc´ıch kompatibility. Tato kapitola by mˇela slouˇzit pˇredevˇs´ım jako uˇzivatelsk´a dokumentace a jej´ı pˇreklad do anglick´eho jazyka je moˇzn´e nal´ezt na pˇriloˇzen´em CD.
5.1 Datov´e struktury pro vstup a v´ystup V programu se vyskytuj´ı v z´asadˇe tˇri druhy datov´ych struktur, pˇriˇcemˇz kaˇzd´a z nich m˚uzˇ e b´yt pouˇzita jako vstupn´ı nebo v´ystupn´ı u vˇetˇsiny funkc´ı. 1. Nerovnice/Rovnice: jsou uchov´av´any jednom objektu sloˇzen´em ze dvou cˇ a´ st´ı: A zastupuje matici, tedy lev´e strany nerovnost´ı/rovnost´ı, b prav´e strany. V objektu nen´ı urˇceno, zda-li se jedn´a o rovnice cˇ i nerovnice, jejich povaha je vˇzdy zˇrejm´a z kontextu. Je moˇzn´e pouˇz´ıt konstruktor inequalities(A,b) Pˇr´ıklad: ( ) ( ) 1 2 5 ≤ 3 4 6 Nerovnice.A = [1 2;3 4]; Nerovnice.b = [5;6] %nebo Nerovnice = inequalities([1 2;3 4],[5;6]) 2. Vrcholy jsou zad´any jednoduˇse v matici, kaˇzd´y na jednom ˇra´ dku. Pˇr´ıklad: △ABC, A[0; 0], B[0; 1], C[1; 0] ABC = [0 0; 0 1; 1 0]; 3. Dvojit´a reprezentace je uloˇzena do ponˇekud komplikovanˇejˇs´ı struktury tak, aby vz´ajemn´e propojen´ı vrchol˚u a facet mohlo b´yt prohled´av´ano v konstantn´ım cˇ ase. Mˇejme polyedr P, pak P.c vr´at´ı souˇradnice jednotliv´ych vrchol˚u. Pro i-t´y vrchol P(i).c vr´at´ı jeho souˇradnice. P(i).ineq uchov´av´a informace o faset´ach, ve kter´ych i-t´y vrchol leˇz´ı. P(i).ineq(j) vr´at´ı j-tou fasetu. Informace o jedn´e fasetˇe se skl´ad´aj´ı ze dvou cˇ a´ st´ı: inequal – obsahuje nerovnici a1 + . . . + ad ≤ b jako pole [a1 , . . . , ad , b]; vert – obsahuje seznam index˚u, kter´e odkazuj´ı na pozice vrchol˚u, kter´e leˇz´ı ve fasetˇe (vˇcetnˇe i-t´eho vrcholu). Pˇr´ıklad: △ABC, A[0; 0], B[0; 1], C[1; 0], AB : −y ≤ 0, AC : −x ≤ 0, BC : x + y ≤ 1 ABC.c ans = 0 0 23
ans = 0 1 ans = 1 0 ABC(1).c ans = 0 0 ABC(1).ineq(1) inequal = 0 -1 0 vert = 1 2 ABC(1).ineq(2) inequal = -1 0 0 vert = 1 3 %v´ ypis vˇ sech nerovnic Nerovnice = extractineq(ABC) %v´ ypis vˇ sech vrchol˚ u do jedn´ e matice Vrcholy = extractvertices(ABC)
5.2 Pˇrevod z nerovnicov´e do vrcholov´e reprezentace Pro pˇrevod z nerovnicov´e do vrcholov´e reprezentace slouˇz´ı funkce [Vrcholy, Hrany] = ineqtovertices(Nerovnice,Rovnice,’S’) kde tˇret´ı parametr je voliteln´y. Do parametru Nerovnice se zad´avaj´ı nerovnice, a to ve tvaru (1) a vˇsechny s porovn´avac´ım znam´enkem ≤. Za parametr Rovnice se dosazuj´ı rovnice v tomt´ezˇ tvaru. Tˇret´ı voliteln´y parametr m˚uzˇ e m´ıt pouze hodnotu ’S’ a znamen´a, zˇ e uˇzivatel nechce vr´atit pouze seznam vrchol˚u tvoˇr´ıc´ıch polyedr, ale chce vr´atit polyedr v dvojit´e reprezentaci (3). Pokud uˇzivatel nem´a zad´any zˇ a´ dn´e nerovnice resp. rovnice, nech´a na jejich m´ıstˇe pr´azdn´e pole, tj []. Funkce m´a dva v´ystupn´ı parametry, pˇriˇcemˇz druh´y je voliteln´y. V prvn´ım je podle toho, jestli je nebo nen´ı definov´an tˇret´ı parametr, seznam vrchol˚u polyedru, nebo polyedr v dvojit´e reprezentaci. Druh´y parametr Hrany obsahuje seznam vektor˚u, kter´e urˇcuj´ı smˇer neomezen´ych hran. Pokud takov´e existuj´ı, znamen´a to, zˇ e polyedr je neomezen´y a tato informace je vˇzdy vyps´ana i na konzoli, i kdyˇz nen´ı poˇzadov´an druh´y v´ystup. Jako polyedr m˚uzˇ e b´yt zad´ana libovoln´a kombinace nerovnic a rovnic dimenze 1 a v´ıce. Pokud nem´a polyedr zˇ a´ dn´y vrchol, ale je nepr´azdn´y, je vr´aceno pr´azdn´e pole Vrcholy. Neomezen´e hrany nejsou bez vrcholu dobˇre definov´any, a proto druh´y parametr ned´av´a smysl.
5.3 Pˇrevod z vrcholov´e do nerovnicov´e reprezentace Pro pˇrevod z vrcholov´e do nerovnicov´e reprezentace slouˇz´ı dvˇe funkce: Polyedr = verticestoineqcomb(Vrcholy, ’S’) Polyedr = verticestoineqdual(Vrcholy, ’S’) 24
kter´e se liˇs´ı v pouˇzit´em algoritmu pro v´ypoˇcet, ale v´ystup maj´ı stejn´y. Prvn´ı funkce pouˇz´ıv´a inkrement´aln´ı algoritmus zaloˇzen´y na algoritmu dvojit´e reprezentace, druh´a vyuˇz´ıv´a du´aln´ı pˇrevod a line´arn´ı programov´an´ı. Na vstupu se zad´av´a seznam vrchol˚u podle (2). Druh´y parametr je voliteln´y, m˚uzˇ e nab´yvat pouze hodnoty ’S’ a znamen´a, zˇ e uˇzivatel chce m´ısto nerovnic vr´atit polyedr v dvojit´e reprezentaci podle (3). V´ysledek funkce vrac´ı jako nerovnice ve tvaru (1), nebo, pokud je zad´an druh´y vstupn´ı parametr, jako polyedr ve dvojit´e reprezentaci podle (3). U tˇechto funkc´ı je podm´ınka na vstup takov´a, zˇ e mezi vrcholy mus´ı existovat d + 1 afinnˇe nez´avisl´ych, protoˇze jinak by netvoˇrily polyedr pln´e dimenze. Pokud je vrchol˚u m´alo nebo neobsahuj´ı afinnˇe nez´avislou podmnoˇzinu, skuteˇcnost je ozn´amena na konzoli a v´ystup z˚ust´av´a pr´azdn´y.
5.4 Konvexn´ı sjednocen´ı Konvexn´ı sjednocen´ı je bin´arn´ı operace, jej´ımˇz v´ysledkem je nejmenˇs´ı konvexn´ı mnoˇzina obsahuj´ıc´ı oba operandy. V naˇsem pˇr´ıpadˇe sjednocujeme konvexn´ı polyedry a v´ysledkem je tedy opˇet konvexn´ı polyedr. Pro konvexn´ı sjednocen´ı je definov´ana funkce [Polyedr, Hrany] = union(Polyedr1, Polyedr2, vystup) kde Polyedr1 a Polyedr2 zastupuj´ı operandy a tˇret´ı argument znaˇc´ı, v jak´em tvaru m´a b´yt prvn´ı v´ystupn´ı parametr. Polyedr1 i Polyedr2 mohou b´yt zad´any v kter´emkoli ze tˇr´ı pˇr´ıpustn´ych tvar˚u, oba mus´ı b´yt definov´any v prostoru se stejnou dimenz´ı. Vstupn´ı tvar nen´ı tˇreba nijak specifikovat, funkce sama zjist´ı, kter´a forma byla zvolena. Pokud je nˇekter´y nebo oba vstupy ve sˇpatn´em tvaru, je tato skuteˇcnost ozn´amena v´ypisem na konzoli a v´ystup z˚ust´av´a pr´azdn´y. I tady plat´ı podm´ınka, zˇ e polyedr ve vrcholov´e reprezentaci mus´ı m´ıt plnou dimenzi a v nerovnicov´em tvaru mus´ı m´ıt aspoˇn jeden vrchol. Parametr vystup m˚uzˇ e nab´yvat tˇr´ı hodnot: ’S’ – v´ysledek se vrac´ı v dvojit´e reprezentaci, ’F’ – v´ysledek se vrac´ı v nerovnicov´e (fasetov´e) reprezentaci, ’V’ – v´ysledek se vrac´ı ve vrcholov´e reprezentaci. V´ystup obsahuje dvˇe hodnoty, pˇriˇcemˇz druh´a je voliteln´a. Prvn´ı parametr obsahuje v´ysledek v tvaru specifikovan´em tˇret´ım vstupn´ım argumentem, druh´y parametr obsahuje seznam neomezen´ych hran. Tento parametr m´a v´yznam pouze, pokud se na vstupu objevil polyedr v nerovnicov´e reprezentaci. Pokud zˇ a´ dn´e neomezen´e hrany neexistuj´ı, vrac´ı se pole pr´azdn´e. Kromˇe v´ystupn´ıch parametr˚u m˚uzˇ e b´yt na konzoli vytisknuta i informace o tom, zˇ e nˇekter´y polyedr nebo oba jsou neomezen´e, coˇz znamen´a, zˇ e i v´ysledek je neomezen´y.
˚ 5.5 Prunik V´ysledkem bin´arn´ı operace pr˚unik je maxim´aln´ı mnoˇzina, kter´a byla obsaˇzena v obou vstupn´ıch mnoˇzin´ach. V pˇr´ıpadˇe pr˚uniku konvexn´ıch polyedr˚u jde opˇet o konvexn´ı polyedr. Definice funkce pr˚uniku je v podstatˇe analogick´a k funkci sjednocen´ı
25
[Polyedr, Hrany] = intersection(Polyedr1, Polyedr2, vystup) Polyedr1 i Polyedr2 mohou b´yt zad´any v kter´emkoli ze tˇr´ı pˇr´ıpustn´ych tvar˚u, oba mus´ı b´yt definov´any v prostoru se stejnou dimenz´ı. Vstupn´ı tvar nen´ı tˇreba nijak specifikovat, funkce sama zjist´ı, kter´a forma byla zvolena. Pokud je nˇekter´y nebo oba vstupy ve sˇpatn´em tvaru, je tato skuteˇcnost ozn´amena v´ypisem na konzoli a v´ystup z˚ust´av´a pr´azdn´y. I tady plat´ı podm´ınka, zˇ e polyedr ve vrcholov´e reprezentaci mus´ı m´ıt plnou dimenzi a v nerovnicov´em tvaru mus´ı m´ıt aspoˇn jeden vrchol. Parametr vystup m˚uzˇ e nab´yvat tˇr´ı hodnot: ’S’ – v´ysledek se vrac´ı v dvojit´e reprezentaci, ’F’ – v´ysledek se vrac´ı v nerovnicov´e (fasetov´e) reprezentaci, ’V’ – v´ysledek se vrac´ı ve vrcholov´e reprezentaci. V´ystup obsahuje dvˇe hodnoty, pˇriˇcemˇz druh´a je voliteln´a. Prvn´ı parametr obsahuje v´ysledek v tvaru specifikovan´em tˇret´ım vstupn´ım argumentem, druh´y parametr obsahuje seznam neomezen´ych hran. Tento parametr m´a v´yznam pouze, pokud se na vstupu objevily dva polyedry v nerovnicov´e reprezentaci. Pokud zˇ a´ dn´e neomezen´e hrany neexistuj´ı, vrac´ı se pole pr´azdn´e.
5.6 Odstranˇen´ı redundantn´ıch nerovnic Pro odstranˇen´ı redundantn´ıch nerovnic slouˇz´ı funkce Nerovnice = rmineq(Nerovnice) kde jako vstupn´ı parametr jsou zad´any nerovnice ve tvaru (1) a v´ysledkem jsou nerovnice ve stejn´em tvaru tak, zˇ e kaˇzd´a urˇcuje jednu fasetu polyedru, kter´y p˚uvodn´ı nerovnice definovaly.
5.7 Odstranˇen´ı redundantn´ıch vrcholu˚ Pro odstranˇen´ı redudantn´ıch vrchol˚u je vyuˇz´ıv´ana funkce Vrcholy = rmvertices(Vrcholy) kde jako vstupn´ı parametr jsou zad´any vrcholy ve tvaru (2) a v´ysledkem jsou vrcholy ve stejn´em tvaru tak, zˇ e kaˇzd´y je extr´emn´ı, tj. konvexn´ı obal vˇsech vrchol˚u a mnoˇziny bez jednoho z vrchol˚u se liˇs´ı.
˚ 5.8 Pˇrizpusoben´ ı pro Octave Pokud bude uˇzivatel cht´ıt spustit funkce z knihovny v prostˇred´ı Octave, je nutn´e nahradit ve sloˇzce bal´ıcˇ ku optim (Octave/gcc-ˇc. verze/share/octave/packeges/optim-ˇc. verze) soubor linprog.m stejnojmenn´ym souborem pˇriloˇzen´ym k bal´ıku. Funkce linprog bˇezˇ nˇe pouˇz´ıvan´a v MATLABu pro line´arn´ı programov´an´ı je v Octavu nahrazena funkc´ı glpk. Aby byla zachov´ana kompatibilita mezi Octavem a MATLABem, linprog v Octavu zpracuje zadan´e parametry a k v´ypoˇctu je nakonec pouˇzita funckce glpk. V p˚uvodn´ım souboru linprog.m bylo vˇsak nˇekolik bug˚u a nav´ıc nebyla moˇznost dos´ahnout na vˇsechny n´avratov´e hodnoty dostupn´e pro origin´aln´ı linprog.
26
Upraven´y soubor linprog.m umoˇznˇ uje rˇeˇsit vˇsechny u´ lohy, kter´e zvl´adl p˚uvodn´ı soubor, nav´ıc um´ı vr´atit tˇret´ı v´ystupn´ı parametr funkce linprog, kter´y ˇr´ık´a, jestli bylo dosaˇzeno optim´aln´ıho ˇreˇsen´ı, a pokud nebylo, z jak´eho d˚uvodu. Pro naˇs´ı potˇrebu staˇcilo zjistit, jestli ˇreˇsen´ı existuje (Octave k´od 180), pak vrac´ı 1, jinak vrac´ı 0.
27
6. Program´atorsk´a dokumentace V t´eto cˇ a´ sti pop´ısˇeme podrobnˇe pouˇzit´e datov´e struktury a algoritmy. Hlavn´ı cˇ a´ st bude vˇenov´ana pˇrevod˚um mezi r˚uzn´ymi reprezentacemi, protoˇze algoritmy sjednocen´ı a pr˚uniku v podstatˇe pouze vyuˇz´ıvaj´ı pˇredchoz´ıch dvou funkc´ı.
6.1 Pˇrevod z nerovnicov´e do vrcholov´e reprezentace Jak uˇz bylo ˇreˇceno v pˇredchoz´ı kapitole, pouˇz´ıvanou funkc´ı je [Vrcholy, Hrany] = ineqtovertices(Nerovnice,Rovnice,’S’) Algoritmus pouˇzit´y v implementaci t´eto funkce je zaloˇzen na pivotovac´ım algoritmu z (3.1). M˚uzˇ eme ho rozdˇelit na tˇri cˇ a´ sti: inicializaci, hlavn´ı cˇ a´ st a form´atov´an´ı v´ysledku. Inicializace se skl´ad´a ze zaveden´ı promˇenn´ych, anal´yzou vstupu a pokud je vstup spr´avnˇe, je spuˇstˇena funkce fronta = iniineqtovertices(Nerovnice, Rovnice, dimenze) kter´a uprav´ı vstupn´ı omezen´ı pro potˇreby simplexov´e metody podle pravidel z prvn´ı kapitoly, odstran´ı redundantn´ı rovnice a najde vstupn´ı pˇr´ıpustn´e b´azick´e ˇreˇsen´ı. Vrac´ı pak frontu, ve kter´e se nach´az´ı poˇca´ teˇcn´ı vrchol ve tvaru: vrchol.v obsahuje souˇradnice vrcholu vrchol.mat obsahuje redukovanou simplexovou tabulku vˇcetnˇe sloupeˇcku obsahuj´ıc´ıho b. vrchol.bz obsahuje indexy b´azick´ych promˇenn´ych vrchol.n obsahuje indexy neb´azick´ych promˇenn´ych Hlavn´ı cˇ a´ st je uzavˇrena do while-cyklu. V kaˇzd´em jeho kroku je odstranˇen a zpracov´an prvn´ı prvek fronty, dokud ta nen´ı pr´azdn´a. Ve vnoˇren´em for-cyklu jsou prohled´av´any sloupeˇcky simplexov´e tabulky aktu´aln´ıho prvku a jsou hled´ani pivoti, podle pravidel popsan´ych v druh´e kapitole. Pokud je pivot v dan´em sloupeˇcku nalezen, je tabulka upravena a spolu s n´ı vznikne nov´y prvek, kter´y je moˇzn´e zaˇradit do fronty. Pˇred t´ım je otestov´ano, zda-li uˇz dˇr´ıve nebyl nalezen prvek se stejnou b´az´ı. Pokud nikoliv, prvek je zaˇrazen do fronty. Pot´e prob´ıh´a jeˇstˇe test ˇreˇsen´ı, a to jestli jemu odpov´ıdaj´ıc´ı vrchol uˇz je ve v´ysledku. Pokud ne, zaˇrad´ı se do promˇenn´e Vrcholy, kter´a zastupuje seznam vrchol˚u polyedru. Vzhledem k velk´emu poˇctu moˇzn´ych b´az´ı, byla k jejich ukl´ad´an´ı zvolena trie. Vyhled´av´an´ı pak prob´ıh´a vˇzdy v O(rd), kde r znaˇc´ı poˇcet promˇenn´ych. Vrchol˚u je naproti tomu ˇra´ dovˇe m´enˇe, a proto jsme si vystaˇcili s line´arn´ım seznamem. Pokud pro dan´y sloupeˇcek nebyl nalezen pivot, otestuje se, opˇet podle pravidla z druh´e kapitoly, jestli tento sloupeˇcek reprezentuje neomezenou hranu, a pokud ano, je tato zaˇrazena do v´ysledku. V z´avˇereˇcn´e u´ pravˇe v´ysledku je ovˇeˇreno, zˇ e vˇsechny nalezen´e vrcholy jsou skuteˇcnˇe vrcholy (podle toho, zˇ e n´aleˇz´ı aspoˇn do d stˇen). Tento test je nutn´y, protoˇze kv˚uli
28
u´ prav´am promˇenn´ych na kladn´e se mohou objevit vrcholy, kter´e ve skuteˇcnosti vrcholy nejsou, i kdyˇz jsou v polyedru samozˇrejmˇe obsaˇzeny. Kromˇe toho jsou tak´e protˇr´ıdˇeny neomezen´e hrany, aby se do v´ysledku dostaly pouze unik´atn´ı hrany, a to i co do n´asobku. Pokud je na v´ystupu vyˇzadov´an polyedr ve dvojit´e reprezentaci, je tato spoˇc´ıt´ana z p˚uvodn´ıch omezen´ı a v´ysledn´ych vrchol˚u.
6.2 Pˇrevod z vrcholov´e do nerovnicov´e reprezentace – du´aln´ı metoda Jedna ze dvou funkc´ı, kter´e slouˇz´ı k pˇrevodu z vrcholov´e do nerovnicov´e reprezentace Vrcholy = verticestoineqdual(Vrcholy, ’S’) pouˇz´ıv´a ve sv´em algoritmu dualitu a pˇrevod z nerovnicov´e do vrcholov´e reprezentace. Funkce samotn´a obsahuje v podstatˇe pouze pˇrevod na du´aln´ı polyedr a zpˇet a mezit´ım ve sv´em tˇele vol´a funkci ineqtovertices. Nejdˇr´ıve je ovˇeˇrena vstupn´ı podm´ınka na afinn´ı nez´avislost. Pot´e probˇehne inicializace pomoc´ı funkce [Vrcholy,centroid,OriginalV] = inivertoineqdual(Vrcholy) kter´a spoˇc´ıt´a nov´y stˇred souˇradn´e soustavy vzhledem k p˚uvodn´ım souˇradnic´ım (centroid) a vr´at´ı vrcholy vzhledem k nov´ym souˇradnic´ım (Vrcholy) a k p˚uvodn´ım souˇradnic´ım (OriginalV). Kromˇe toho, pokud by byl zad´an polyedr dimenze 1, okamˇzitˇe ho spoˇc´ıt´a a v n´asleduj´ıc´ım kroku je uloˇzen do v´ysledku a hlavn´ı funkce konˇc´ı. Po inicializaci probˇehne pˇrevod na du´aln´ı polyedr a je spuˇstˇen algoritmus pro pˇrevod z nerovnicov´e reprezentace. Po jeho dobˇehnut´ı jsou vrcholy pˇrevedeny zpˇet na prim´arn´ı polyedr, pot´e jsou v´ysledn´e nerovnice upraveny do p˚uvodn´ı souˇradn´e soustavy. Pokud uˇzivatel poˇzadoval v´ystup v dvojit´e reprezentaci, je v´ysledek dopoˇc´ıt´an na z´akladˇe p˚uvodn´ıch vrchol˚u a nerovnic.
6.3 Pˇrevod z vrcholov´e do nerovnicov´e reprezentace – kombinatoricky Druh´a ze dvou funkc´ı pro pˇrevod z vrcholov´e do nerovnicov´e reprezentace Vrcholy = verticestoineqcomb(Vrcholy, ’S’) vyuˇz´ıv´a kombinatorick´eho inkrement´aln´ıho algoritmu, pˇriˇcemˇz tento je inspirov´an algoritmem dvojit´e reprezentace, kter´y je pops´an v posledn´ı cˇ a´ sti cˇ tvrt´e kapitoly. Inicializace se skl´ad´a ze dvou krok˚u. V prvn´ım je ovˇeˇrena podm´ınka na afinn´ı nez´avislost, a v dalˇs´ım shrnut´em do funkce [Nerovnice, Polyedr, Vrcholy] = inivertoineqcomb(Vrcholy) je vytvoˇren poˇca´ teˇcn´ı polyedr (jehlan) pln´e dimenze v dvojit´e reprezentaci (Polyedr), vyps´any nerovnice, kter´e ho definuj´ı (Nerovnice), a urˇceno poˇrad´ı pro vkl´ad´an´ı dalˇs´ıch vrchol˚u (Vrcholy). N´asleduje hlavn´ı cyklus, ve kter´em jsou postupnˇe pˇrid´av´any dalˇs´ı vrcholy do poˇca´ teˇcn´ıho polyedru. Pˇrid´an´ı jednoho vrcholu je zabaleno do souhrnn´e funkce 29
[Nerovnice, Polyedr] = addvertex(Vrcholy(i,:), Nerovnice, Polyedr) kter´a vˇzdy vr´at´ı polyedr Pi v dvojit´e reprezentaci (Polyedr) a fasety, kter´e ho definuj´ı (Nerovnice). Pˇrid´an´ı vrchol˚u prob´ıh´a v nˇekolika f´az´ıch. Nejdˇr´ıve je nalezena prvn´ı viditeln´a faseta nebo faseta, ve kter´e pˇrid´avan´y vrchol leˇz´ı. Tato faseta je zaˇrazena do fronty, kter´a bude slouˇzit k prohled´av´an´ı. Pokud nav´ıc nastane druh´a situace, je tato stˇena uloˇzena pro pozdˇejˇs´ı pouˇzit´ı. Poznamenejme jeˇstˇe, zˇ e viditeln´a faseta je vyhled´av´ana mezi vˇsemi fasetami postupnˇe v poˇrad´ı podle cˇ asu pˇrid´an´ı od nejnovˇejˇs´ı. V dalˇs´ı f´azi zaˇc´ın´a prohled´av´an´ı do sˇ´ıˇrky od jedn´e viditeln´e stˇeny k ostatn´ım. D´ıky dvojit´e reprezentaci jsou v konstantn´ım cˇ ase nalezeny vˇsechny vrcholy, kter´e patˇr´ı do aktu´alnˇe prob´ıran´e fasety. U kaˇzd´eho z nich jsou prohled´any vˇsechny jeho fasety a hled´a se pr˚unik tˇechto faset s prob´ıranou. Pokud maj´ı spoleˇcn´ych aspoˇn d − 1 vrchol˚u a tyto vrcholy nejsou podmnoˇzinou jin´e fasety, je mezi tˇemito dvˇema fasetami ridge. Pokud je nov´a faseta tak´e viditeln´a, je zaˇrazena do prohled´av´an´ı. Pokud nen´ı, ridge se st´av´a souˇca´ st´ı horizontu. Kromˇe toho je tak´e z polyedru odstranˇena prob´ıran´a faseta. Nakonec prob´ıh´a konstrukce nov´ych faset. Ty se nach´az´ı mezi nov´ym vrcholem a kaˇzdou ridge z horizontu. Pokud byly cestou nalezeny fasety, do kter´ych patˇril pˇrid´avan´y vrchol, jsou tyto o nˇej rozˇs´ıˇreny, a pokud byly smaz´any, jsou znovu do polyedru pˇrid´any. D´ıky povaze struktury pouˇz´ıvan´e k dvojit´e reprezentaci jsou vˇsechny tyto operace provedeny v line´arn´ım cˇ ase vzhledem k poˇctu nov´ych faset. Po tom, co jsou vˇsechny vrcholy zpracov´any, jsou ze seznamu faset odstranˇeny nulov´e ˇra´ dky, kter´e tu zbyly po faset´ach, kter´e byly pozdˇeji odstranˇeny. Pokud je nav´ıc na v´ystupu poˇzadov´an polyedr ve dvojit´e reprezentaci, je tato jeˇstˇe jednou pˇrepoˇc´ıt´ana, protoˇze polyedr, kter´y je v´ysledkem algoritmu, m˚uzˇ e obsahovat body, kter´e nejsou extr´emn´ı.
6.4 Konvexn´ı sjednocen´ı Funkce konvexn´ıho sjednocen´ı [Polyedr, Hrany] = union(Polyedr1,Polyedr2,vystup) vrac´ı nejmenˇs´ı polyedr, ve kter´em jsou Polyedr1 a Polyedr2 obsaˇzeny. Algoritmus zaˇc´ın´a anal´yzou vstupu, pˇri kter´e je zjiˇstˇeno, v jak´e reprezentaci jsou polyedry zad´any, a pˇr´ıpadnˇe jsou oba upraveny na vrcholovou reprezentaci (z dvojit´e reprezentace jsou vytaˇzeny pouze vrcholy, na nerovnicovou reprezentaci je pouˇzita funkce pro pˇrevod z nerovnicov´e do vrcholov´e reprezentace). V´yjimeˇcn´a situace nast´av´a ve chv´ıli, kdy jsou oba polyedry zad´any ve vrcholov´e reprezentaci a na v´ystup je poˇzadov´an opˇet vrcholov´a reprezentace, pak je m´ısto funkce pro pˇrevod z vrcholov´e do nerovnicov´e reprezentace pouˇzita funkce pro odstranˇen´ı redundantn´ıch vrchol˚u. Seznamy vrchol˚u obou polyedr˚u jsou spojeny do jednoho, kter´y reprezentuje sjednocen´ı. Aby byly vylouˇceny body, kter´e nejsou extr´emn´ı, je pouˇzita funkce pro pˇrevod z vrcholov´e do nerovnicov´e reprezentace. Ta nav´ıc vyd´a polyedr ve dvojit´e reprezentaci, ze kter´eho je moˇzn´e vypsat i seznam faset. Na z´avˇer je v´ysledek upraven do formy, kterou si vyˇza´ dal uˇzivatel specifikac´ı tˇret´ıho parametru. Pokud byl nˇekter´y z polyedr˚u zad´an v nerovnicov´e reprezentaci, je moˇzn´e, zˇ e pˇri jeho pˇrevodu se objevily nˇejak´e neomezen´e hrany. V takov´em pˇr´ıpadˇe je 30
jejich seznam vr´acen na m´ıstˇe druh´eho parametru, pˇriˇcemˇz, pokud mˇely oba polyedry neomezen´e hrany, jsou tyto porovn´any a jsou odstranˇeny pˇr´ıpadn´e redudance.
˚ 6.5 Prunik Funkce pr˚uniku [Polyedr, Hrany] = intersection(Polyedr1,Polyedr2,vystup) vrac´ı nejvˇetˇs´ı polyedr, kter´y je obsaˇzen v obou zadan´ych. Algoritmus zaˇc´ın´a anal´yzou vstupu, pˇri kter´e je zjiˇstˇeno, v jak´e reprezentaci jsou polyedry zad´any, a pˇr´ıpadnˇe jsou oba upraveny na nerovnicovou reprezentaci (z dvojit´e reprezentace jsou vytaˇzeny pouze nerovnice, na vrcholovou reprezentaci je pouˇzita funkce pro pˇrevod z vrcholov´e do nerovnicov´e reprezentace). V´yjimeˇcn´a situace nast´av´a ve chv´ıli, kdy jsou na vstupu oba polyedry v nerovnicov´e reprezentaci a na v´ystupu je opˇet poˇzadov´ana nerovnicov´a reprezentace. Pak je m´ısto funkce pro pˇrevod z nerovnicov´e do vrcholov´e reprezentace pouˇzita funkce na odstranˇen´ı redundantn´ıch nerovnic. Seznamy faset obou polyedr˚u jsou spojeny do jednoho, kter´y reprezentuje pr˚unik. Aby byly vylouˇceny nerovnice, kter´e nedefinuj´ı zˇ a´ dnou fasetu, je pouˇzita funkce pro pˇrevod z nerovnicov´e do vrcholov´e reprezentace. Ta nav´ıc vyd´a polyedr ve dvojit´e reprezentaci, ze kter´eho je moˇzn´e vypsat i seznam vrchol˚u. Na z´avˇer je v´ysledek upraven do formy, kterou si vyˇza´ dal uˇzivatel specifikac´ı tˇret´ıho parametru. Pokud byly oba polyedry zad´any v nerovnicov´e reprezentaci, je moˇzn´e, zˇ e se ve v´ysledku objevily nˇejak´e neomezen´e hrany. V takov´em pˇr´ıpadˇe je jejich seznam vr´acen na m´ıstˇe druh´eho parametru.
6.6 Odstranˇen´ı redundantn´ıch nerovnic K odstranˇen´ı redundantn´ıch nerovnic z popisu polyedru se pouˇz´ıv´a funkce Nerovnice = rmineq(Nerovnice) kter´a je zaloˇzena na testov´an´ı pomoc´ı line´arn´ıho programov´an´ı. V cyklu je postupnˇe kaˇzd´a nerovnice stanovena jako maximalizaˇcn´ı c´ılov´a funkce. Pokud optim´aln´ı ˇreˇsen´ı vyjde s konkr´etn´ı hodnotou, je tato dosazena do zvolen´e nerovnice a pokud pˇri porovn´an´ı vych´az´ı lev´a strana menˇs´ı nebo rovna prav´e, je nerovnice z popisu polyedru odstranˇena.
6.7 Odstranˇen´ı redundantn´ıch vrcholu˚ K odstranˇen´ı redundantn´ıch vrchol˚u z popisu polyedru se pouˇz´ıv´a funkce Vrcholy = rmvertices(Vrcholy) kter´a pouˇz´ıv´a pˇrevod z vrcholov´e do nerovnicov´e reprezentace a pot´e testuje, zda-li je kaˇzd´y bod ze zadan´ych vrcholem cˇ i nikoliv. Tento zp˚usob nen´ı pˇr´ıliˇs efektivn´ı, zvolili jsme ho zejm´ena z d˚uvodu snadn´e implementace. 31
Funkce pˇrevodu z vrcholov´e do nerovnicov´e reprezentace vrac´ı seznam vˇsech nerovnic, kde kaˇzd´a urˇcuje jednu fasetu. D´ıky tomu je moˇzn´e testovat, zda-li je nˇejak´y bod vrcholem, t´ım, do kolika nadrovin urˇcen´ych nerovnicemi patˇr´ı. Pokud patˇr´ı alespoˇn do d nez´avisl´ych nadrovin, znamen´a to, zˇ e dan´y bod je vrcholem polyedru.
6.8 Zaokrouhlovac´ı chyby Na z´avˇer t´eto kapitoly bychom jeˇstˇe r´adi zm´ınili probl´em s numerickou stabilitou. Pˇri vˇsech aritmetick´ych operac´ıch vznikaj´ı drobn´e zaokrouhlovac´ı chyby, pˇriˇcemˇz nˇekter´e algoritmy jsou na nˇe citlivˇejˇs´ı neˇz jin´e, mezi jin´ymi napˇr´ıklad i pouˇz´ıvan´a Gaussova eliminace. Rozhodli jsme pˇri veˇsker´em porovn´av´an´ı cˇ´ısel br´at ohled jen na prvn´ıch pˇet desetinn´ych m´ıst. V bˇezˇ n´ych pˇr´ıpadech je tato konstanta ide´aln´ı, protoˇze spr´avnˇe urˇc´ı, kter´a cˇ´ısla jsou skuteˇcnˇe stejn´a a kter´a se naopak liˇs´ı aˇz pˇr´ıliˇs. Je vˇsak moˇzn´e, zvl´asˇtˇe u rozs´ahl´ych vstup˚u, kter´e vyˇzaduj´ı velk´e mnoˇzstv´ı aritmetick´ych operac´ı, zˇ e se numerick´a chyba postupnˇe zaˇcne projevovat i na prvn´ıch pˇeti desetinn´ych m´ıstech. Jindy se naopak m˚uzˇ e st´at, zˇ e skuteˇcnˇe r˚uzn´a cˇ´ısla jsou po zaokrouhlov´an´ı rozpozn´ana jako identick´a. Probl´emu s numerickou stabilitou se nelze vyvarovat, protoˇze v geometrii situace, kdy mal´a odchylka znamen´a velkou zmˇenu vlastnost´ı, nast´avaj´ı. Vzpomeˇnme pˇr´ıklad dvou rovnobˇezˇ n´ych pˇr´ımek, kdy uˇz drobn´a nepˇresnost zp˚usob´ı, zˇ e p˚uvodnˇe rovnobˇezˇ n´e pˇr´ımky se nakonec nˇekdy protnou.
32
7. Porovn´an´ı pouˇzit´ych algoritmu˚ V t´eto cˇ a´ sti bychom r´adi porovnali dva zvolen´e algoritmy pro pˇrevod z vrcholov´e do nerovnicov´e reprezentace. Vzhledem k tomu, zˇ e jeden z algoritm˚u pouˇz´ıv´a algoritmus pro pˇrevod z nerovnicov´e do vrcholov´e reprezentace, dojde v t´eto kapitole na anal´yzu dvou hlavn´ıch algoritm˚u pouˇzit´ych v cel´em bal´ıku funkc´ı. Porovn´av´ame algoritmus zaloˇzen´y na geometrick´e dualitˇe a pivotovac´ım algoritmu, jehoˇz j´ardo spoˇc´ıv´a ve vhodn´e u´ pravˇe simlexov´e metody, kter´y je zastoupen´y funkc´ı verticestoineqdual (1), a algoritmus zaloˇzen´y na kombinatorick´e metodˇe dvojit´e reprezentace, kter´y je zastoupen funkc´ı verticestoineqcomb (2). Znaˇcen´ı. d′ : poˇcet promˇenn´ych v simplexov´em algoritmu d′ = 2 · d + m kde m = poˇcet facet.
7.1 Omezen´ı na vstup Oba algoritmy vyˇzaduj´ı na vstupu mnoˇzinu vrchol˚u, kter´a obsahuje afinnˇe nez´avislou podmnoˇzinu s d + 1 vrcholy. Toto omezen´ı je d´ano v (2) t´ım, zˇ e algoritmus je potˇreba inicializovat na polyedr pln´e dimenze. V (1) by sice teoreticky mohl b´yt v´ysledkem polyedr menˇs´ı dimenze, ale takov´y postup by vyˇzadoval naj´ıt nejmenˇs´ı afinn´ı podprostor Rd , kter´y by obsahoval dan´y polyedr, a vyhled´av´an´ı bodu, do kter´eho by bylo potˇreba posunout poˇca´ tek, by se tak´e znaˇcnˇe komplikovalo. Rozhodli jsme se tedy v obou pˇr´ıpadech nechat na uˇzivateli nalezen´ı takov´eho podprostoru a vytvoˇren´ı projekce do niˇzsˇ´ı dimenze, ve kter´e uˇz bude n´asˇ algoritmus fungovat.
7.2 Implementaˇcn´ı sloˇzitost Vzhledem k tomu, zˇ e souˇca´ st´ı bal´ıku mˇela b´yt funkce pro pˇrevod z nerovnicov´e do vrcholov´e reprezentace, vych´az´ı n´am implementaˇcnˇe jednoduˇssˇ´ı (1), protoˇze v nˇem pouze jednoduˇse upravujeme vstup pro dˇr´ıve naimplementovanou funkci. Pokud bychom mˇeli do porovn´an´ı zahrnout i programov´an´ı algoritmu pro pˇrevod z nerovnicov´e do vrcholov´e reprezentace, doˇsli bychom k opaˇcn´emu z´avˇeru. Zat´ımco (2) pouˇz´ıv´a pouze z´akladn´ı kombinatorick´e a programovac´ı triky, pomocn´a funkce (1) vyˇzadovala ruˇcne implementovat simplexov´y algoritmus (kv˚uli pr´aci se simplexovou tabulkou), pouˇzit´ı sloˇzitˇejˇs´ıch datov´ych struktur, napˇr´ıklad trie, jej´ızˇ naprogramov´an´ı bez moˇznosti pouˇz´ıt pointery nebylo pˇr´ımoˇcar´e, ale napˇr´ıklad i ladˇen´ı programu se st´avalo nepˇrehledn´ym napˇr´ıklad v okamˇziku, kdy se objevilo mnoho pˇr´ıpustn´ych b´az´ı a mezi nimi se ztr´acela jedna neomezen´a hrana.
7.3 Prostorov´a n´aroˇcnost Anal´yzu prostorov´e n´aroˇcnosti bychom r´adi rozdˇelili na dvˇe cˇ a´ sti. V prvn´ı rozebereme asymptotick´e chov´an´ı algoritm˚u, zat´ımco v druh´e porovn´ame pomoc´ı tabulky namˇeˇren´ych hodnot n´aroky na pamˇet’ u r˚uzn´ych pˇr´ıklad˚u zad´an´ı. 33
7.3.1 Asymptotick´a prostorov´a n´aroˇcnost Hlavn´ı n´aroky na pamˇet’ v (1) jsou obsaˇzeny v pomocn´em algoritmu, protoˇze jinak jsou uchov´av´any pouze u´ daje line´arnˇe odpov´ıdaj´ıc´ı vstupu. Nejz´asadnˇejˇs´ı prostorov´e n´aroky algoritmu pro pˇrevod z nerovnicov´e do vrcholov´e reprezentace spoˇc´ıvaj´ı v udrˇzov´an´ı fronty, ve kter´e jeden jej´ı cˇ len m´a kv˚uli simpleˇ u fronty m˚uzˇ e b´yt maxim´alnˇe tolik, kolik xov´e tabulce ˇra´ dovˇe velikost O(d (d′ )· m). Clen˚ existuje pˇr´ıpustn´ych b´az´ı, tedy m , kde m je poˇcet vrchol˚u na vstupu. Podobn´y objem pamˇeti mus´ıme vyhradit ( ′ )i pro uloˇzen´ı jiˇz nalezen´ych b´az´ı, pouˇz´ıvan´a trie m´a celkem maxim´aln´ı velikost O( dm d2 ) Inkrement´aln´ı algoritmus vyˇzaduje pamˇet’ pouze na uloˇzen´ı aktu´aln´ı podoby polyedru, coˇz znamen´a line´arn´ı prostor pro vrcholy a prostor na fasety. Tˇech m˚uzˇ e b´yt v pr˚ubˇehu algoritmu v´yraznˇe v´ıce neˇz ve v´ysledku, pˇriˇcemˇz jsme nepouˇzili zˇ a´ dnou heuristiku, kter´a by poˇcet faset zmenˇsovala. Jejich mnoˇzstv´ı tedy odhadneme jako maxim´aln´ı poˇcet faset pro polyedr o n vrcholech ( n ) v R. Pouˇzijeme tzv. Upper bound theorem, kter´y ˇr´ık´a, zˇ e facet je maxim´alnˇe 2 ⌊d/2⌋ . Po rozeps´an´ı vˇsech v´yraz˚u dojdeme k v´ysledku, zˇ e (2) by mˇel vych´azet l´epe.
7.3.2 Porovn´an´ı na konkr´etn´ıch pˇr´ıkladech Pro porovn´an´ı na konkr´etn´ıch pˇr´ıkladech jsme se rozhodli vygenerovat n´ahodn´a data pro nˇekolik dimenz´ı v r˚uzn´em rozsahu. Konkr´etn´ı hodnoty se nach´az´ı v souboru testData.txt na pˇriloˇzen´em CD. K vygenerov´an´ı dat jsme implementovali jednoduchou konzolovou aplikaci pro C#, kter´a generuje r˚uzn´e typy polyedr˚u a zapisuje je do souboru. I tento program je moˇzn´e dohledat na pˇriloˇzen´em CD. K mˇeˇren´ı pamˇet’ov´ych n´arok˚u jsme pouˇzili funkci memory = whos jej´ızˇ v´ystupem je na pozici memory.bytes cˇ´ıslo, kter´e zastupuje poˇcet byt˚u aktu´alnˇe vyuˇz´ıvan´ych pro lok´aln´ı promˇenn´e. U funkce (1) jsme mˇeˇren´ı vloˇzili na konec hlavn´ıho cyklu pomocn´eho algoritmu, pˇriˇcemˇz v kaˇzd´e obr´atce cyklu bylo testov´ano, zda-li aktu´aln´ı n´aroky na pamˇet’ jsou vyˇssˇ´ı neˇz dˇr´ıve dosaˇzen´a hodnota, a pokud ano, je p˚uvodn´ı hodnota pˇreps´ana novou vˇetˇs´ı. Nakonec je hodnota vr´acena jako dalˇs´ı v´ystupn´ı parametr (1). Funkci (2) jsme mˇeˇrili obdobnˇe a test pamˇeti jsme um´ıstili dokonce na dvˇe m´ısta, konkr´etnˇe na konec funkce [Nerovnice, Polyedr, pamet] = addvertex(vrchol, nerovnice, Polyedr) a pak do cyklu, ve kter´em jsou vyhled´av´any viditeln´e fasety. Mimo to bylo nutn´e drobnˇe upravit funkci [Nerovnice, Polyedr, Vrcholy, pamet] = inivertoineqcomb(Vrcholy) protoˇze i v n´ı je pouˇz´ıv´ana funkce pro pˇrid´an´ı vrcholu a nav´ıc, pokud je zad´ano pouze d + 1 vrchol˚u, tak uˇz v n´ı je dosaˇzeno v´ysledn´eho polyedru. Vˇsechny funkce, kter´e bylo nutn´e upravit, pouˇzit´e skripty ke spouˇstˇen´ı test˚u a jejich v´ysledky jsou opˇet k dispozici na pˇriloˇzen´em CD. 34
N´asleduj´ı tabulky v´ysledk˚u, kter´ych bylo dosaˇzeno bˇehem test˚u. Kaˇzd´a tabulka zastupuje jednu dimenzi, pro kterou byly testy provedeny, jde konkr´etnˇe o dimenze dva, tˇri, cˇ tyˇri a deset. V kaˇzd´e dimenzi jsme poˇc´ıtali pˇr´ıklady s d + 1 (simplex s vrcholem v poˇca´ tku a s jedn´ım vrcholem na kaˇzd´e kladn´e souˇradnicov´e poloose), 15, 50 a 100 vrcholy (n´ahodn´ymi), s krychl´ı a osmistˇenem (v pˇr´ısluˇsn´e dimenzi). Kaˇzd´y ˇra´ dek tabulky odpov´ıd´a jednomu pˇr´ıkladu a ve sloupeˇcc´ıch jsou uvedeny namˇeˇren´e hodnoty pro obˇe funkce v bytech. Znaˇcen´ı. Znak ? znamen´a, zˇe program na tomto vstupu nedobˇehl a nebylo tedy moˇzn´e urˇcit jeho pamˇet’ov´e n´aroky. D˚uvodem selh´an´ı byla pˇr´ıliˇsn´a cˇ asov´a n´aroˇcnost (viz d´ale). 2D d+1 15 50 100 krychle osmistˇen
4D d+1 15 50 100 krychle osmistˇen
comb 584 2373 4565 8149 1077 1077
comb 2328 20877 86965 166661 9085 7533
dual 2168 18640 16720 33376 3232 3664
3D d+1 15 50 100 krychle osmistˇen
dual 44696 365200 2966912 9066064 6517872 78256
comb dual 1256 8632 21141 332400 19957 424896 33253 600752 2917 76456 2757 17288
10D d+1 15 50 100 krychle osmistˇen
comb dual 22536 ? 637581 ? ? ? ? ? ? ? ? ?
Tabulka 7.1: Prostorov´a n´aroˇcnost algoritm˚u Jak je vidˇet, prostorov´a n´aroˇcnost vych´az´ı vˇzdy l´epe pro kombinatorick´y algoritmus, coˇz jsme po naˇsem odvozen´ı oˇcek´avali. Nejvˇetˇs´ı rozd´ıl nast´av´a v pˇr´ıpadu krychle, tedy velmi degenerovan´em vstupu.
ˇ 7.4 Casov´ a sloˇzitost Stejnˇe jako u prostorov´e n´aroˇcnosti i zde budeme postupovat ve dvou kroc´ıch: teoretick´em a praktick´em.
7.4.1 Asymptotick´a cˇ asov´a sloˇzitost ˇ Pod´ıvejme se nejdˇr´ıve na algoritmus (1). Casov´ a n´aroˇcnost pomocn´eho algoritmu se odv´ıj´ı od sloˇzitosti simplexov´e metody. V nejhorˇs´ım pˇr´ıpadˇe je nutn´e proj´ıt vˇsechny b´aze, pˇriˇcemˇz jeden krok je line´arn´ı vzhledem k d′( a)poˇctu v´ysledn´ych vrchol˚u V. Jak ′ uˇz jsme vidˇeli v pˇredchoz´ı cˇ a´ sti, moˇzn´ych b´az´ı je dm , takˇze celkov´a sloˇzitost vych´az´ı ( ′) na O( dm (V + d′ )). 35
ˇ Casov´ a n´aroˇcnost inkrement´aln´ıho algoritmu (2) z´avis´ı na sloˇzitosti jednoho kroku, pˇriˇcemˇz krok˚u je celkem n. Prvn´ı viditeln´a faseta je nalezena pr˚umˇernˇe v O(d) (leˇz´ı kolem posledn´ıho pˇridan´eho vrcholu a okolo nˇej leˇz´ı pr˚umˇernˇe O(d) faset). Dalˇs´ı kroky spoˇc´ıvaj´ı ve vyhled´an´ı vˇsech viditeln´ych faset, pˇriˇcemˇz sloˇzitost tohoto kroku je O(i·dd−2 ), kde i je poˇcet viditeln´ych faset v Pi z aktu´aln´ıho vrcholu, pˇriˇcemˇz v´ysledkem kroku je nejen nalezen´ı a smaz´an´ı viditeln´ych faset, ale i vytvoˇren´ı horizontu. Zb´yv´a uˇz pouze vytvoˇrit nov´e fasety, pˇriˇcemˇz cˇ asu k tomu potˇrebn´y je line´arn´ı k poˇctu nov´ych faset. Jeˇstˇe poznamenejme, zˇ e odhad poˇctu viditeln´ych facet uvaˇzujeme jako nejhorˇs´ı moˇzn´y, tedy jako maxim´aln´ı poˇcet vˇsech stˇen v polyedru s odpov´ıdaj´ıc´ım poˇctem vrchol˚u. Po seˇcten´ı sloˇzitost´ı n´am vych´az´ı O(nd dd−2 ), coˇz je v porovn´an´ı s prvn´ım algoritmem v pr˚umˇern´em pˇr´ıpadˇe horˇs´ı v´ysledek.
7.4.2 Porovn´an´ı na konkr´etn´ıch pˇr´ıkladech Pro porovn´an´ı cˇ asov´e n´aroˇcnosti jsme pouˇzili stejn´a testovac´ı data a skripty jako pˇri porovn´an´ı prostorov´e n´aroˇcnosti. Na mˇeˇren´ı cˇ asu jsme vyuˇzili dvojici funkc´ı tic; time = toc; kde prvn´ı zahajuje mˇerˇen´ı na intern´ıch stopk´ach a druh´a ho ukonˇcuje, pˇriˇcemˇz vrac´ı aktu´aln´ı dosaˇzenou hodnotu. Funkce jsme um´ıstili vˇzdy na u´ pln´y zaˇca´ tek a konec k´odu funkc´ı, pˇriˇcemˇz jsme pˇridali dalˇs´ı v´ystupn´ı parametr obsahuj´ıc´ı namˇeˇren´y cˇ as. Upraven´y k´od a testovac´ı skript je opˇet nahr´an na pˇriloˇzen´em CD. Na rozd´ıl od pamˇeti je cˇ as z´avisl´y i na tom, na jak´em stroji je spouˇstˇen a v jak´em prostˇred´ı. Testov´an´ı prob´ıhalo na na notebooku HP Compaq 6710b s 32bitov´ym operaˇcn´ım syst´emem Windows Vista Business, procesorem Intel(R) Core(TM)2 Duo T8100 2.10 GHz 3MB L2 Cache, 2 GB pamˇet´ı. Stejnˇe jako v cˇ a´ sti o pamˇet’ov´e n´aroˇcnosti i zde uv´ad´ıme tabulky s v´ysledky ze ´ vˇsech mˇeˇren´ı, a to opˇet ve stejn´em tvaru. Udaje jsou v sekund´ach. Znaˇcen´ı. ∞ znamen´a, zˇe program s tˇemito vstupn´ımi daty bˇezˇel v´ıce neˇz dvacet minut a jeho v´ypoˇcet se nebl´ızˇil konci. 2D d+1 15 50 100 krychle osmistˇen
comb 0,01400009996723384 0,18700005987193440 0,75299997790716590 1,56900008092634400 0,02299995883367956 0,02299989399034530
36
dual 0,09399992250837386 0,30200002365745600 0,50499995693098750 0,90099990926682950 0,13399995688814670 0,09799989208113402
3D d+1 15 50 100 krychle osmistˇen
comb 0,02000006556045264 1,63999990921001900 2,75500009045936200 6,37000005797017400 0,11699993396177890 0,06799989589489996
dual 0,4910000846721232 5,5500000427709890 3,5100000484380870 4,7490000064717610 2,5930000693770130 0,3860000560525805
4D d+1 15 50 100 krychle osmistˇen
comb 0,03100005607120693 1,57100007892586300 17,1250000904547100 48,2310000217985000 0,93500000843778250 0,23600009805522860
dual 2,691999991191551 5,539999979780987 31,05799992452376 77,56999989587350 636,4840000655968 2,208000037004240
10D d+1 15 50 100 krychle osmistˇen
comb dual 0,1079999237554148 ∞ 75,539999956148680 ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞
ˇ Tabulka 7.2: Casov´ a n´aroˇcnost algoritm˚u
Z uveden´ych tabulek je jasnˇe vidˇet, zˇ e s vˇetˇs´ım n´ahodn´ym vstupem se algoritmus zaloˇzen´y na dualitˇe chov´a l´epe, ale pouze pokud velikost vstupu v´yraznˇe pˇrevyˇsuje dimenzi. V dimenzi dva a tˇri se pˇri naˇs´ı velikosti vstupu tato vlastnost jeˇstˇe projev´ı, ale v dimenzi cˇ tyˇri uˇz vych´az´ı du´aln´ı algoritmus vˇzdy jako pomalejˇs´ı. Zaj´ımavou se uk´azala dimenze deset. Du´aln´ı algoritmus nedobˇehl ani v tom nejjednoduˇssˇ´ım pˇr´ıpadˇe a uk´azalo se tedy, zˇ e ve vyˇssˇ´ıch dimenz´ı je naprosto nepouˇziteln´y. Kombinatorick´y algoritmus se sice snadno vyrovnal s nejjednoduˇssˇ´ım vstupem, ale patn´act vrchol˚u uˇz zpracov´aval d´ele neˇz minutu. Pˇri spuˇstˇen´ı na vˇetˇs´ı vstup se uk´azalo, zˇ e pˇrid´an´ı 17. vrcholu trv´a kolem pˇeti minut a 18. vrchol nebyl pˇrid´an ani po deseti minut´ach bˇehu. Jak je vidˇet, pˇrid´an´ı pades´ati vrchol˚u by bylo cˇ asovˇe naprosto ne´unosn´e.
7.5 Shrnut´ı v´ysledku˚ porovn´an´ı Z porovn´an´ı na konkr´etn´ıch datech vyˇsel l´epe kombinatorick´y algoritmus i pˇresto, zˇ e na skuteˇcnˇe velk´ych vstupech v mal´ych dimenz´ıch by pravdˇepodobnˇe zaˇcal vych´azet v´yraznˇe h˚uˇre co do cˇ asov´e n´aroˇcnosti. 37
Bohuˇzel se uk´azalo, zˇ e ani jeden algoritmus nestaˇc´ı na vˇetˇs´ı vstupy ve vyˇssˇ´ıch dimenz´ıch a spoˇc´ıtat napˇr´ıklad nerovnice faset deseti-dimenzion´aln´ı krychle se uk´azalo jako naprosto nemoˇzn´e.
38
Z´avˇer V´ysledkem pr´ace je pˇredevˇs´ım odladˇen´a knihovna funkc´ı pro pokroˇcilou pr´aci s polyedry, kterou jsme publikovali na https://sourceforge.net/p/polyhedrainmatl/ Mimoto jsme implementovali hned dvˇe funkce pro pˇrevod z vrcholov´e do nerovnicov´e reprezentace, a to n´am umoˇznilo je vz´ajemnˇe porovnat a ovˇeˇrit si naˇse teoretick´e z´avˇery. Bohuˇzel se uk´azalo, zˇ e pro velk´e vstupy se naˇse funkce pˇr´ıliˇs nehod´ı, protoˇze bˇezˇ´ı ne´umˇernˇe dlouho v porovn´an´ı s jin´ymi knihovnami dostupn´ymi na internetu (qhull, Fukudova knihovna [7], a dalˇs´ı). Nicm´enˇe pro menˇs´ı vstupy se m˚uzˇ e st´at snadno a zdarma dostupnou knihovnou jak pro MATLAB, tak pˇredevˇs´ım pro Octave, pro kter´y zˇ a´ dn´a podobn´a knihovna na internetu nen´ı dostupn´a. V budoucnosti je moˇzn´e pokraˇcovat ve v´yvoji knihovny, doimplementovat napˇr´ıklad rozd´ıl polyedr˚u, triangulaci, algoritmy pro pˇrevod do dalˇs´ıch reprezentac´ı, ale tak´e vylepˇsit st´avaj´ıc´ı funkce, aby se dostaly na u´ roveˇn sv´ych konkurent˚u.
39
Seznam pouˇzit´e literatury [1] D. Avis, K. Fukuda. A pivoting algorithm for convex hulls and vertex enumeration of arrangements and polyhedra. Discrete Comput. Geom., 8:295-313, 1992. [2] N.M. Amato, E.A. Ramos. On computing Voronoi diagrams by divide-pruneand-conquer. In Proc. 12th Annu. ACM Sympos. Comput. Geom., 1996. [3] K.L. Clarkson. More output-sensitive geometric algorithms. In Proc. 35th Annu. IEEE Sympos. Found. Comput. Sci., 1994. [4] K.L. Clarkson, K. Mehlhorn, R. Seidel. Four results on randomized incremental constructions. Comput. Geom. Theory Appl., 3:185-212, 1993 [5] K.L. Clarkson, P.W. Shor. Application of random sampling in computational geometry, II. Discrete Comput. Geom. 4:387-421, 1989 [6] T.M. Chan, J. Snoeyink, C.K. Yap. Output sensitive construction of polytopes in four dimensions and clipped Voronoi diagrams in three. In Proc. 6th ACM-SIAM Sympos. Discrete Algorithms (SODA ’95), 1995. [7] K. Fukuda. Vertex Enumeration Package for Convex Polytopes and Arrangements, Version 0.41 Beta http://library.wolfram.com/infocenter/Demos/440/ ´ [8] L. Grygarov´a. Uvod do line´arn´ıho programov´an´ı. 1. vyd´an´ı Praha: St´atn´ı pedagogick´e nakladatelstv´ı, 1975. [9] V. Chv´atal. Linear Programming. 1. vyd´an´ı. New York: W. H. Freeman, 1983. ISBN 0-716-71587-2. [10] J. Matouˇsek. Lectures on Discrete Geometry. Volume 212 of Graduate texts in Math. 1. vyd´an´ı New York: Springer-Verlag, 2002. ISBN 0-387-95374-4 [11] T.S. Motzkin, H. Raiffa, G.L. Thompson, R.M. Thrall. The double description method. In H.W. Kuhn, A.W. Tucker, editors, Contributions to the Theory of Games II, volume 8 of Ann. of Math. Stud. Princeton: Princeton University Press, 1953. ISBN 0-691-07935-8 [12] Noˇziˇcka F., Guddat J., Bank B., Hollatz H. Theorie der linearen parametrischen Optimierung. Berlin: Akademie- Verlag, 1974. [13] F.P. Preparata, M.I. Shamons. Computational Geometry: An Introduction. 3. vyd´an´ı New York: Springer-Verlag,1985. ISBN 0-387-96131-3 [14] J. Rohn. Line´arn´ı algebra a optimalizace na slidech. http://uivtx.cs.cas.cz/ rohn/publist/laslidesrev.ps revidovan´a verze, 2004. [15] G. Rote. Degenerate convex hulls in high dimensions withou extra storage. In Proc. 8th Annu. ACM Sympos. Comput. Geom., 1992. [16] R. Seidel. Constructing higher dimensional convex hulls at logaritmic cost per face. In Proc. 18th Annu. ACM Sympos. Theory Comput., 1986. 40
[17] R Seidel. Output-size sensitive algorithms for constructive problems in computational geometry. Ph.D. thesis, Dept. Comput. Sci., Cornel Univ., Ithaca, 1986. Tech. Rep. TR 86-784. [18] R. Seidel. Small-dimensional linear programming and convex hull made easy. Discrete Comput. Geom., 6:423-434, 1991 [19] R. Seidel Convex hull computations. In J.E. Goodman, J. O’Rourke, editors, Handbook of Computational and Discrete Geometry, first edition Boca Raton: CRCPress, 1997. ISBN 0-849-38524-5 [20] G.M. Ziegler. Lectures on Polytopes. Volume 152 of Graduate texts in Math. 1. vyd´an´ı New York: Springer-Verlag, 1994. ISBN 0-387-94329-3
41
Seznam tabulek 4.1 Tabulka 4.1. Velikosti reprezentac´ı polytop˚u 7.1 Tabulka 7.1. Prostorov´a n´aroˇcnost algoritm˚u ˇ 7.2 Tabulka 7.2. Casov´ a n´aroˇcnost algoritm˚u
42
Seznam pouˇzit´ych zkratek Rd Euklidovsk´y prostor dimenze d In Jednotkov´a matice s rozmˇerem n × n cT Transpozice vektoru c rank(A) Hodnost matice A 1 Vektor sloˇzen´y ze sam´ych jedniˇcek (dimenze urˇcena z kontextu) O Vektor sloˇzen´y ze sam´ych nul (dimenze je urˇcena z kontextu) ei jednotkov´y vektor s jedniˇckou na i-t´e pozici A∗s S-t´y sloupec matice A ⟨a, b⟩ Skal´arn´ı souˇcin vektor˚u a, b conv(X) Konvexn´ı obal mnoˇziny X (kde X ⊂ Rd )
43