Page 1

Problém „P = NP ?“ Problém obchodního cestujícího Barvení grafu Balení ruksaku Přehledová studie do předmětu MAT-2

Louženský Luboš biosoup@gmail.com VŠE – Podnikové informační systémy – E1 Vyučující: Ing. Jiří Pátek, CSc. 2006/2007

-1-


Úvod Hlavním tématem této přehledové studie je popis problému obchodního cestujícího, a to hlavně za pomoci mravenčích kolonií. Toto řešení zdá se mi jako nejvhodnější pro řešení problému v rámci současných matematických možností. Problém obchodního cestujícího patří mezi „sedm problému tisíciletí“ kdy na vyřešení každého z nich je vypsána odměna 1 000 000 dolarů. Jsou to tyto problémy: 1. 2. 3. 4. 5. 6. 7.

P versus NP (problém optimalizace výpočtů – např. problém obch. cestujícího) Hodgeova domněnka 1) Poincaréova domněnka Riemannova hypotéza 2) Yangova-Millsova teorie a problém hmotnosti 3) Navierovy-Stokesovy rovnice a jejich hladkost 4) Birchova a Swinnertonova-Dyerova domněnka 5

Pro úvod do problému obchodního cestujícího je třeba uvést problém „P = NP ?“. Dovolil jsem si ocitovat pasáž z kvalitního článku publikovaného na toto téma. 6) K tématu mravenčích kolonií jsem využil diplomové práce Miloše Němce z roku 2006. 7)

1

Každá harmonická diferenciální forma (jistého typu) nesingulární projektivní algebraické variety je racionální kombinací kohomologických tříd algebraických cyklů. 2 Riemannova hypotéza popisuje frekvenci rozložení prvočísel mezi „obyčejnými“ čísly. 3 Yangovou-Millsovou teorií spočívají v delikátní kvantově mechanické vlastnosti, které se anglicky říká mass gap. Přesněji řečeno, kvantová částice má kladnou hmotnost, přestože klasické vlny se pohybují rychlostí světla. Tato vlastnost byla objevena experimentálními fyziky, a ověřena pomocí počítačových simulací. 4 Navier-Stokesova rovnice je rovnice popisující proudění nestlačitelné Newtonské tekutiny. 5 Pokud je hodnota zeta funkce v bodě jedna rovná nule, pak existuje nekonečně mnoho řešení. 6 Zdroj a odkaz v požitých zdrojích 7 Zdroj a odkaz v požitých zdrojích

-2-


Obsah Úvod ........................................................................................................................................... 2 Obsah.......................................................................................................................................... 3 Problém „P = NP ?“ ................................................................................................................... 4 Problém obchodního cestujícího ................................................................................................ 7 Úvod do problematiky............................................................................................................ 7 Zadání................................................................................................................................. 7 Teorie ................................................................................................................................. 7 Praxe................................................................................................................................... 8 Optimalizace....................................................................................................................... 8 Mravenčí kolonie – inspirace ................................................................................................. 9 Příklad zpracování problému obchodního cestujícího za pomoci mravenčích kolonií.... 14 Zevrubný popis ACO algoritmu pro řešení TSP.............................................................. 16 Problém barvení grafu.............................................................................................................. 17 Úvod do problematiky.......................................................................................................... 17 Definice ............................................................................................................................ 17 Některé vlastnosti χ(G)..................................................................................................... 17 Farbenie všeobecných a rovinných grafov ) ..................................................................... 17 Problém 4 barev ............................................................................................................... 18 Problém balení batohu.............................................................................................................. 19 Úvod do problematiky.......................................................................................................... 19 Zadání............................................................................................................................... 19 Praxe................................................................................................................................. 19 Použité zdroje........................................................................................................................... 25 Vysvětlivky ...................................................................................................................... 26

-3-


Problém „P = NP ?“ Každý problém, na který je jednoznačná odpověď ano či ne, se dá pomocí vhodné definice formulovat jako otázka rovnosti dvou tříd. To platí i o slavném problému, označovaném „P = NP?“, který se týká složitosti výpočtů. Nejdříve si však uveďme několik příkladů otázek na složitost výpočtů. Jeden z nejznámějších takových problémů je otázka, kolik aritmetických operací je potřeba na vynásobení dvou matic n×n. Pokud násobíme matice podle definice, potřebujeme, kromě jiného, alespoň n3 operací násobení (pro každý prvek výsledné matice potřebujeme provést n násobení). Roku 1969 Volker Strassen nalezl poměrně jednoduchý algoritmus, který potřebuje pouze const.n2,80... operací. Podstatně složitějšími metodami se později postupně podařilo snížit počet operací až na const.n2,37... Naopak pouze víme, že je potřeba alespoň n2 operací, protože potřebujeme alespoň jednu operaci pro každý prvek výsledné matice. Nikdo neumí zatím zlepšit tento triviální dolní odhad. Další důležitý problém je složitost rozkladu přirozených čísel v součinu. Chceme-li najít vlastního dělitele čísla N, stačí vyzkoušet čísla menší nebo rovná √N, protože pokud je N složené číslo, má dělitele alespoň jednoho ≤ √N. Pokud budeme uvažovat algoritmy, které používají náhodné generátory, lze pomocí složitějších algoritmů najít dělitele v průměru rychleji. Přesto i nejlepší algoritmy jsou schopny rozkládat čísla s počtem cifer jen o málo větším než 100. S rozkladem čísel souvisí testování, zda je dané číslo prvočíslo. Tato úloha je však podstatně lehčí, protože stačí testovat některé příznaky prvočísel, aniž bychom zkoušeli dělitele. Následující úloha je poněkud jiného druhu. Máme dáno n bodů v rovině a náš úkol je najít nejkratší čáru, která vychází z nějakého z nich, prochází všemi dalšími body a vrací se do výchozího bodu. 1) Tato úloha se nazývá příznačně úloha obchodního cestujícího. Název naznačuje jednu možnou aplikaci (i když ve skutečnosti se pro tento účel asi sotva používá), další najdeme všude, kde je potřeba vykonávat činnost na různých místech a je potřeba minimalizovat časové ztráty spojené s přesuny z místa na místo. Typické příklady jsou sběr odpadků ve městě a vrtání děr do čipů. To, co nás zajímá, není řešení jednoho konkrétního případu, ale chceme najít rychlý algoritmus pro všechny možné případy. Protože se takový algoritmus nedaří najít, domníváme se, že neexistuje, ale zatím to neumíme dokázat. Pojem algoritmu byl matematicky formalizován až ve třicátých letech tohoto století. Už zpočátku bylo zřejmé, že pro praktické účely není zcela adekvátní. Podle definice je úloha algoritmicky řešitelná, když existuje postup, který po konečném počtu kroků dá správnou odpověď. Nicméně „konečný počet“ může být z praktického hlediska téměř nekonečný. Např. algoritmus založený na vyzkoušení všech dělitelů 100ciferného čísla N, i kdybychom zkoušeli jen dělitele menší než √N, by potřeboval zhruba 10√50 kroků. Zatímco 100ciferná čísla lze, pokud máme dost trpělivosti, sčítat a násobit i na papíře a na počítači proběhnou tyto operace ve zlomcích sekund, není množství 10√50 operací myslitelné ani při jakémkoliv zlepšení technologie. Protože s praktickými výpočty bylo málo zkušeností, nebylo jasné, kde stanovit hranici mezi uskutečnitelným a neuskutečnitelným. V sedmdesátých letech se informatika již 1

Uvažuje se i obecnější úloha, kde jsou zadány vzdálenosti mezi n prvky zcela libovolně. Stejně těžkou úlohu dostaneme, když budeme uvažovat vzdálenosti pouze dvě: 1 a ∞.

-4-


bouřlivě rozvíjela a představy o této hranici vykrystalizovaly k zásadnímu rozlišení: úlohy, u nichž počet elementárních kroků potřebných k řešení při daných vstupních datech roste (v závislosti na velikosti těchto dat) způsobem, který lze omezit nějakou polynomiální funkcí (např. n3), a úlohy, u nichž má tento růst exponenciální charakter (odpovídá např. funkci 3n). Základní důvod pro toto rozlišení je, že pro „obvyklé“ exponenciální funkce dostáváme extrémně velké hodnoty již pro malé argumenty, zatímco pro „obvyklé“ polynomiální funkce tomu tak není. Pro konkrétní algoritmy v praxi dostáváme v naprosté většině právě takovéto funkce, tedy skutečně to funguje. Existuje ale ještě další dobré zdůvodnění. Představme si, že při současné technologii můžeme řešit úlohy, které vyžadují nanejvýše zhruba t kroků. Mějme např. nějaké dvě úlohy A a B, pro A stačí n2 kroků, B vyžaduje 2n kroků pro vstupní data velikosti n. Můžeme tedy zpracovávat data velikosti √t pro A a nanejvýš velikosti log2t pro B. Je zřejmé, že √t roste podstatně rychleji než log2t, ale zajímavější je následující pozorování. Pokud se technologie zlepší tak, že místo t budeme mít k dispozici řekněme 4t, budeme moci zpracovat data dvakrát větší pro A, ale jen o 2 větší pro B! Tedy pro takto exponenciální úlohy máme poměrně ostrou hranici, kam až můžeme jít. Konkrétně např. pro hledání rozkladu čísel: jestliže s dnešními algoritmy umíme rozkládat 120ciferná čísla, můžeme doufat, že se dostaneme se zlepšením technologie k 130ciferným až 140ciferným, ale 200ciferná čísla nerozložíme, pokud nenajdeme lepší algoritmy. Můžeme uvést další praktické důvody pro tuto hranici, ale pro mnoho matematiků je možná důležitější, že je s tím spojen zajímavý a těžký matematický problém. Pro mnoho úloh máme totiž jen exponenciální algoritmy a rádi bychom věděli, jestli pro ně existují algoritmy polynomiální. Dva takové problémy jsme popsali nahoře, rozklad čísel a úlohu obchodního cestujícího; podobných problémů byly popsány stovky.

Hierarchie obtížnosti algoritmických úloh. Problém, zda třídy P a NP jsou stejné, je otevřen.

-5-


Problém „P = NP?“ je otázka po rovnosti dvou tříd problémů. První třída, P, je třída problémů, pro které existují polynomiální algoritmy (algoritmy s počtem kroků omezeným nějakým polynomem v závislosti na velikosti vstupu). Definovat třídu NP je poněkud obtížnější. Zhruba řečeno, daný problém náleží do třídy NP, když jeho řešení lze ověřit (tedy nikoliv vypočíst) v polynomiálním počtu kroků. Většina běžně používaných algoritmů pracuje v polynomiálním čase. Např. algoritmy pro základní aritmetické operace, které se učíme ve škole, jsou v podstatě polynomiální. Další příklady jsou Eukleidův algoritmus pro největšího společného dělitele dvou přirozených čísel a Gaussova eliminační metoda řešení soustavy lineárních rovnic. Toto sice nejsou rozhodovací úlohy, ale snadno z nich takové vyrobíme. Důležitá rozhodovací úloha, kterou můžeme takto dostat, zní, zda daná soustava lineárních rovnic má řešení. Tato rozhodovací úloha má polynomiální algoritmus, protože takové systémy rovnic umíme dokonce vyřešit v polynomiálním čase. Formálně tedy říkáme: množina systémů lineárních rovnic, které mají řešení, náleží do třídy P. Příkladem množiny v NP jsou složená čísla. Pro složené číslo N je libovolný vlastní dělitel M certifikátem náležení do množiny složených čísel i). M je jistě nejvýše polynomiálně delší než N (je dokonce kratší, protože je menší než N). Obvyklý algoritmus pro dělení se zbytkem vyžaduje pouze polynomiální čas, takže se takto můžeme přesvědčit, že M je skutečně certifikátem. Množinu A ε NP si můžeme představovat jako množinu, u níž sice nemusíme umět snadno rozhodovat, zda do ní nějaký prvek náleží, ale když už nám někdo, kdo má nadpřirozené schopnosti, nějaký prvek z A nabídne, snadno si ověříme, že je opravdu prvkem A. (V případě, že nenáleží do A, je to horší, protože v definici NP nepožadujeme certifikáty pro „nenáležení“.) Všimněme si, že z definice NP úlohy vyplývá, že každá taková úloha má exponenciální algoritmus. Nechť např. jsou certifikáty kódovány posloupnostmi nul a jedniček a nechť je jejich délka omezena polynomem n2. Potom můžeme rozhodnout, zda x ε A, pro x délky n tak, že probereme všech 2n2+1 – 1 možností pro potenciální certifikáty 1). Problém „P = NP“ můžeme tedy parafrázovat jako problém, zda se lze vyhnout zdlouhavému probírání všech možností. Naše praktické životní zkušenosti nám říkají, že se tomu vyhnout nelze. Když zapomeneme, kam jsme dali knížku, nezbývá nám než prohledat všechny police knihovny. Tento intuitivní argument ale není dobrý. Vezměme si zase jako příklad problém najít dělitele čísla N. Pokud je N dáno, jsou dělitelé jednoznačně určeni a nemůžeme se na vlastnost býti dělitelem dívat jako na náhodnou vlastnost.

1

Algoritmus probírání všech možností se nazývá příhodně algoritmus Britského muzea, protože v Britském muzeu v Londýně najdeme odpověď na každou otázku, pokud máme dost času a trpělivosti.

-6-


Problém obchodního cestujícího

Úvod do problematiky Problém obchodního cestujícího je obtížný diskrétní optimalizační problém, matematicky vyjadřující a zobecňující úlohu nalezení nejkratší možné cesty procházející všemi zadanými body na mapě.

Zadání Na mapě je zvoleno N měst a jejich vzájemná vzdálenost pro každou z dvojic. Problémem obchodního cestujícího je určit takové pořadí návštěv jednotlivých měst, aby každé město bylo navštíveno právě jednou, výsledná délka cesty byla nejkratší a cestující se vrátil zpět do města, kde cestu začal.

Teorie Tato úloha patří mezi tzv. NP-úplné úlohy. NP (zkratka nedeterministicky polynomiální) je množina problémů, které lze řešit v polynomiálně omezeném čase na nedeterministickém turingově stroji – na počítači, který umožňuje v každém kroku rozvětvit výpočet na n větví, v nichž se posléze řešení hledá současně. Ekvivalentně se hovoří o stroji, který na místě rozhodování uhodne správnou cestu výpočtu. Alternativně lze tyto problémy definovat tak, že je to množina problémů, u kterých lze pro dodaný výsledek v polynomiálním čase ověřit jeho správnost (ale obecně nikoliv nalézt řešení v polynomiálním čase). NP-úplné (NP-complete, NPC) problémy jsou takové nedeterministicky polynomiální problémy, na které jsou polynomiálně redukovatelné všechny ostatní problémy z NP. To znamená, že třídu NP-úplných úloh tvoří v jistém smyslu ty nejtěžší úlohy z NP. Pokud by byl nalezen deterministický polynomiální algoritmus pro nějakou NP-úplnou úlohu, znamenalo by to, že všechny nedeterministicky polynomiální problémy jsou řešitelné v polynomiálním čase, tedy že třída NP se „zhroutí“ do třídy P (NP = P). Otázka, zda nějaký takový algoritmus existuje, zatím nebyla rozhodnuta, předpokládá se však, že NP ≠ P. Že jde o nedeterministicky polynomiální problém je patrné z toho, že nedeterministický počítač, umožňující v každém kroku rozvětvit výpočet na libovolný počet větví, by mohl začít v některém „městě“, rozdělit propočet délky trasy na tolik větví, kolik z města vede silnic, a v každém z cílových měst postupovat stejně – s výjimkou tras vedoucích do již navštívených měst. Tak by prohledal všechny možné trasy v n výpočetních krocích, pokud počet měst činí n, a rozvětvil by se maximálně do (n − 1)! větví.

-7-


Praxe V praxi se podobná úloha obvykle řeší pouze přibližně (heuristickými algoritmy, např. genetickými algoritmy, tabu prohledáváním atd.). Tím se (za cenu vzdání se nároku na nalezení přesného řešení) dosahuje prakticky použitelných časů. Genetický algoritmus (GA) je heuristický postup, který se snaží aplikací principů evoluční biologie nalézt řešení složitých problémů, pro které neexistuje použitelný exaktní algoritmus. Genetické algoritmy, resp. všechny postupy patřící mezi tzv. evoluční algoritmy používají techniky napodobující evoluční procesy známé z biologie – dědičnost, mutace, přirozený výběr a křížení – pro „šlechtění“ řešení zadané úlohy. Princip práce genetického algoritmu je postupná tvorba generací různých řešení daného problému. Při řešení se uchovává tzv. populace, jejíž každý jedinec představuje jedno řešení daného problému. Jak populace probíhá evolucí, řešení se zlepšují. Tradičně je řešení reprezentováno binárními čísly, řetězci nul a jedniček, nicméně používají se i jiné reprezentace (strom, pole, matice, …). Typicky je na začátku simulace (v první generaci) populace složena z naprosto náhodných členů. V přechodu do nové generace je pro každého jedince spočtena tzv. fitness funkce, která vyjadřuje kvalitu řešení reprezentovaného tímto jedincem. Podle této kvality jsou stochasticky vybráni jedinci, kteří jsou modifikováni (pomocí mutací a křížení), čímž vznikne nová populace. Tento postup se iterativně opakuje, čímž se kvalita řešení v populaci postupně vylepšuje. Algoritmus se obvykle zastaví při dosažení postačující kvality řešení, případně po předem dané době.

Pravděpodobnostní (náhodnostní) algoritmus se může náhodně rozhodovat mezi různými možnostmi jak pokračovat. Pro stejný vstup může dávat takový algoritmus různé výsledky, které mohou být dokonce nesprávné. Mnohdy se tedy na daném vstupu spustí pravděpodobnostní algoritmus vícekrát, aby se s větší pravděpodobností dospělo ke správnému výsledku. Varianty pravděpodobnostních algoritmů • • •

Výpočetní strom je binární, v každém uzlu se provede hod mincí. V každém výpočetním uzlu je definováno pravděpodobnostní rozložení na hranách. Na začátku se vybere náhodně deterministický algoritmus, který provede výpočet.

Všechny tři varianty jsou ekvivalentní.

Optimalizace Optimalizační problémy se vyskytují téměř v každém oboru lidské činnosti. Každodenně řešíme řadu problémů, jak něco provést nejlepším způsobem. Vedle tradičních metod optimalizace, mezi které patří například lineární a nelineární programování, numerické -8-


metody, variační metody nebo dynamické programování, existují optimalizační algoritmy, které bychom mohli s trochou nadsázky nazývat „inteligentní“. Jedná se například o genetické algoritmy, simulované žíhání, metody Monte-Carlo, statistické teorie optimalizace nebo různé heuristické algoritmy. Tyto algoritmy nacházejí uplatnění především při řešení problémů, na které neznáme exaktní algoritmus, nebo které jsou pro exaktní algoritmy příliš rozsáhlé. V takovém případě se musíme spokojit s postupem, který dokáže v krátkém výpočetním čase najít sice ne optimální, ale velmi kvalitní řešení. Rojová inteligence Rojová inteligence je technika umělé inteligence založená na studiu kolektivního chování decentralizovaných samoorganizujících se systémů. Systémy rojové inteligence se typicky skládají z populace jednoduchých agentů interagujících lokálně mezi sebou a s okolním prostředím. Agenti spolu mohou komunikovat přímo, nebo nepřímo působením na lokální prostředí. Ačkoli tyto systémy nemají žádnou centrální kontrolu chování agentů, lokální interakce mezi agenty a jednoduché vzory chování agentů často vedou k emergenci globálního chování. Tyto systémy mohou být v přírodě pozorovány například u mravenců, včel, nebo bakterií. Algoritmy založené na rojové inteligenci, jakými jsou například mravenčí kolonie (ACO – Ant Colony Optimization), nebo rojení částic (PSO – Particke Swarm Optimization), byly úspěšně aplikovány na řešení náročných optimalizačních úloh.

Mravenčí kolonie – inspirace Aplikací jednoduchých pravidel, jimiž se řídí jednotliví jedinci, vzniká komplexní chování celku, schopné řešit složité optimalizační úlohy. Získávání potravy Mravenci jsou považováni za sociální hmyz – jejich chování směřuje k zachování kolonie. Mnoho druhů mravenců se vyznačuje specifickým chováním při získávání potravy: každý mravenec, při pohybu od hnízda ke zdroji potravy a zpět, ukládá chemickou látku zvanou feromon. Ostatní mravenci umí detekovat feromony (a rozlišovat mezi různými koncentracemi) zanechané svými soukmenovci a vybírají si cestu s největší koncentrací feromonu. Toto chování aplikované na celou kolonii mravenců může vést k emergenci nejkratší cesty. Útočné obrazce mravenčích armád Armády mravenců patří mezi největší a nejvíce soudržné společnosti. Systém získávání potravy koordinuje stovky tisíc jedinců a pokrývá tisíce čtverečních metrů. Útočné obrazce jsou dynamické, ale vždy vykazují stejnou základní strukturu. Konkrétní tvar koresponduje s prostorovým rozložením vhodné potravy pro jednotlivé druhy. Simulace prokazují, že stejný program (počítačový program s ekvivalentním chováním) může řešit různé problémy, nebo se adaptovat na různá prostředí. V tomto -9-


případě, jediný algoritmus založený na samoorganizaci je schopný generovat optimální struktury, nebo distribuční sítě, bez jakéhokoli centrálního řízení. Pro účely implementace optimalizačních algoritmů je vytvářen umělý mravenec, jehož chování je inspirováno chováním skutečných mravenců. Ovšem oproti skutečným mravencům byly některé vlastnosti umělých mravenců posíleny tak, aby došlo ke zlepšení výsledků algoritmů řešících konkrétní problémy. Podobnosti se skutečnými mravenci: • • • •

Kolonie kooperujících mravenců Feromonová stopa Nepřímá komunikace mravenců zprostředkovaná pomocí feromonu Pravděpodobnostní rozhodování, lokálnost strategie

Rozdíly oproti skutečným mravencům: • • • • •

Diskrétní svět Vnitřní stavy – osobní pamět zaznamenávající doposud vykonané akce Nejsou zcela slepí Množství zanechaného feromonu je fukcí kvality nalezeného řešení Problémově závislé časování ukládání feromonu

Mravenčí kolonie (ACO) Mravenčí kolonie mohou být použity pro řešení jakéhokoliv diskrétního optimalizačního problému, pro který lze použít nějakou konstruktivní heuristickou proceduru. Mravenci použití v mravenčích koloniích fungují jako stochastické konstruktivní procedury, které vytvářejí řešení interaktivním přidáváním komponent do částečného řešení, přičemž při výběru každé další komponenty uvažují • •

heuristickou informaci o řešeném problému, která směruje výpočet ke slibným řešením a zkušenosti získané všemi mravenci od začátku výpočtu, reprezentované feromonovými stopami, které se během výpočtu neustále adaptují

Stochastická složka umožňuje vygenerování velkého počtu různých řešení. Využití mravenčích kolonií v problému obchodního cestujícího Základní ideou algoritmu je použití mechanismu kladné zpětné vazby, založeném na analogii s označováním a sledováním cesty některými druhy mravenců. Virtuální feromon umožňuje udržet v paměti dobrá řešení, odkud mohou být použita k doplnění ještě lepších řešení. Samozřejmě, je třeba vyhnout se tomu, aby některá dobrá, ale ne dost dobrá řešení, vedla k předčasnému uváznutí algoritmu. Proto je implementována záporná zpětná vazba spočívající ve vypařování feromonu, čímž je do algoritmu zahrnuto časové měřítko. Toto časové měřítko

- 10 -


nesmí být příliš dlouhé, jinak může dojít k uváznutí v lokálním extrému. Ale nesmí být také příliš krátké, jinak by nedošlo k využití efektu spolupráce. Spolupráce je dalším důležitým pojmem: algoritmus mravenčích kolonií využívá současného vyhledávání různých řešení souborem identických mravenců. Mravenci, kteří pracují v dané iteraci dobře, ovlivňují výzkum mravenců v budoucích iteracích, neboť ti využívají feromonovou cestu jako průvodce pro své výzkumy. U problému obchodního cestujícího je cílem najít uzavřenou cestu minimální délky spojující n měst. Každé město musí být navštíveno právě jednou. Nechť dij je vzdálenost mezi městy i a j. Problém může být definován v Euklidovském prostoru, potom

d ij = [( xi − x j ) 2 + ( y i − y j ) 2 ]1/ 2 kde xi a yi jsou souřadnice města i, nebo může být obecně definován na grafu (V, E), kde města jsou vrcholy V a spojení mezi městy jsou hrany grafu E. Matice vzdáleností nemusí být symetrická: pokud je asymetrická, délka hrany spojující dvě města i a j závisí na tom, zdali jde z i do j, nebo z j do i. Ale zdali je problém symetrický nebo asymetrický, nemění nic na tom, jak je řešen algoritmem mravenčích kolonií. Mravenci budují řešení pohybem po grafu problému z jednoho města do druhého, dokud nedokončí kompletní cestu. Během iterace ACO algoritmu každý mravenec k, k = 1,...,m, buduje cestu provedením n = |N| kroků. Iterace jsou indexovány pomocí t, tmax je uživatelem definovaný maximální počet povolených iterací. Pro každého mravence, přechod z města i do města j v iteraci t algoritmu závisí: •

Na tom, zda-li město již bylo navštíveno. Pro každého mravence je udržována paměť, která roste během cesty a která je vyprázdněna mezi cestami. Paměť je užita pro definování: pro každého mravence k, množina navštívit, když je v městě i (na začátku Využitím

J ik měst, které mravenec stále má

J ik obsahuje všechna města s výjimkou i).

J ik se mravenec k může vyhnout návštěvě města více než jednou.

Na převrácené hodnotě vzdálenosti η ij

= 1/d ij , zvané dohlednost. Dohlednost je

založena na striktně lokální informaci a reprezentuje vhodnou heuristiku výběru města j z města i. Dohlednost může být použita k přímému hledání, ačkoli konstruktivní metoda založená na tomto základu může produkovat velmi nekvalitní řešení. Heuristická informace je statická, nemění se tedy v průběhu řešení problému. •

Na množství virtuálních feromonových stop

τ ij (t ) na hraně spojující město i s

městem j. Feromonové stopy jsou aktualizovány on-line a jsou reprezentací naučené vhodnosti výběru města j z města i. Oproti vzdálenosti jsou feromonové stopy více globální druh informace. Tato informace se během řešení problému mění a reflektuje zkušenosti získané mravenci. Pravidlo přechodu. Mravenec k ve městě i vybírá město j podle následujícího pravidla: - 11 -


β ⎧ ⎫ ⎧ ⎪arg maxijeJ ij ⎨ [τ iu (t )] ∗ [ηiu ] ⎪ j=⎨ ⎬ ⎩ ⎪J ⎪ ⎩ ⎭

kde q je náhodná veličina s rovnoměrným rozložením [0,1], q0 je nastavitelný parametr z intervalu [0,1] a J z množiny pravděpodobnosti

J ik je město, které bylo náhodně vybráno podle

[τ iJ ] ∗ [ηiJ ]β p (t ) = β [ τ ( t )] ∗ [ η ] i ∑leJ il il k iJ

j

β je nastavitelný parametr, který reguluje relativní váhu dohlednosti ηij. Za zmínku stojí, že hodnota pravděpodobnosti poněvadž

pijk (t ) může být rozdílná pro dva mravence ve stejném městě i,

pijk (t ) je funkcí J ik , to jest dílčího řešení stavěného mravencem k. q ≤ q0

odpovídá využití známých znalostí o problému, to jest heuristických znalostí o vzdálenostech mezi městy a naučených znalostí uložených ve formě feromonových stop, kdežto q > q0 upřednostňuje více výzkumu. Omezení výzkumu naladěním q0 dovoluje koncentrovat aktivitu systému na nejlepší řešení, namísto stálého prohledávání. Když q0 je blízko 1, je vybráno jen lokálně optimální řešení (ale kombinace lokálně optimálních řešení nemusí vyústit v globálně optimální řešení), zatímco když q0 je blízko 0, zkoumána jsou všechna lokální řešení, ačkoli značná váha je dána lokálně optimálnímu řešení. Globální aktualizace feromonových stop. V algoritmu mravenčích kolonií, pouze mravenec, který generuje nejlepší cestu od začátku, může globálně aktualizovat koncentraci feromonu. Mravenci jsou proto povzbuzováni k hledání cest v nejbližším okolí doposud nejlepší nalezené cesty. Globální aktualizace foromonovývh stop je aplikována jen na hrany náležící nejlepší trase od začátku cesty. Aktualizační pravidlo je:

τij(t)← (1 - ρ).τij(t) + ρ.Δ τij(t),

kde (i,j) jsou hrany náležící T+, nejlepší trasy od začátku, ρ je parametr řídící rozklad feromonu a Δ τij(t) = 1/L+, kde L+ je délka T+. Je vidět, že tato procedura dovoluje pouze nejlepší cestě být zpevněna globální aktualizací. Lokální aktualizace jsou nicméně také prováděny, takže další řešení mohou vyjít najevo.

- 12 -


Lokální aktualizace feromonových stop. Lokální aktualizace jsou prováděny následovně: když je mravenec k ve městě i a vybírá město aktualizována podle následujícího pravidla:

j ∈ J ik , koncentrace feromonu na (i, j) je

τij(t)← (1 - ρ).τij(t) + ρ.τ0.

Hodnota τ0 je stejná jako počáteční hodnota feromonových stop a bylo experimentálně -1

zjištěno, že nastavením τ0 = (n.Lnn) , kde n je počet měst a Lnn je délka cesty produkovaná heuristikou nejbližšího souseda, dává dobré výsledky.

Když mravenec navštíví hranu, aplikace pravidla lokální aktualizace zapříčiní snížení hladiny feromonu v hraně. Toto má vliv na vytváření efektu menší a menší atraktivity navštívených hran, nepřímo tedy vede k povzbuzení průzkumu dosud nenavštívených hran. Když mravenci prozkoumávají různé cesty, je tu větší pravděpodobnost, že jeden z nich najde lepší řešení, než v případě, když všichni konvergují ke stejné cestě. Touto cestou mravenci lépe využijí feromonovou informaci: bez lokální aktualizace by všichni mravenci mohli hledat v těsném sousedství nejlepší předchozí trasy. Použití seznamu kandidátů. Algoritmus mravenčích kolonií využívá seznam kandidátů, datovou strukturu často používanou při řešení problému obchodního cestujícího. Seznam kandidátů je seznam preferovaným měst k návštěvě z daného města: namísto průzkumu všech možností z jakéhokoli daného města jsou nejprve prozkoumána nenavštívená města na seznamu kandidátů a jen když všechna města na seznamu kandidátů již byla navštívena, další města jsou prozkoumána. Seznam kandidátů jakéhokoli města obsahuje cl měst (cl je parametrem algoritmu), je to cl nejbližších měst. Města na seznamu kandidátů jsou seřazena podle vzrůstající vzdálenosti a seznam je procházen sekvenčně. Vlastní algoritmus mravenčích kolonií pracuje na problému obchodního cestujícího následovně: mravenec nejprve omezí výběr příštího města na ty v seznamu kandidátů a uváží další města jen v případě, když všechna města na seznamu již byla navštívena. Pokud jsou města na seznamu kandidátů, potom další město j je vybráno podle výše uvedených rovnic (pravidlo přechodu). Jinak j je nejbližší dosud nenavštívené město.

- 13 -


Příklad zpracování problému obchodního cestujícího za pomoci mravenčích kolonií Pomocí JAVA Appletu ( http://www.milosnemec.cz/clanek.php?77 ) Na začátku:

Po prvních výpočtech:

- 14 -


Pravděpodobný výsledek (za použití pouze 1000 iteraci):

- 15 -


Zevrubný popis ACO algoritmu pro řešení TSP /* Inicializace */ For každá hrana (i,j) do τij(0) = τ0 End For For k = 1 do m do Umístit mravence k do náhodně vybraného města End For Let T+ je nejkratší od začátku nalezená cesta a L+ její délka /* Hlavní smyčka */ For t = 1 do tmax do For k = 1 do m do Postavit cestu Tk(t) aplikací následujících kroků n - 1 krát: If existuje alespoň jedno město j ∈ sezam kandidátů potom Vybrat příští město j, j ∈

kde J ∈

, mezi cl městy na seznamu kandidátů následujícím způsobem

je vybráno podle pravděpodobnosti

a kde i je aktuální město Else vybrat nejbližší j ∈ End If Po každém přesunu mravenec k aplikuje lokální aktualizační pravidlo: τij(t)← (1 - ρ).τij(t) + ρ.τ0 End For For k = 1 do m do Vypočítat délku Lk(t) cesty Tk(t) produkované mravencem k End For If byla nalezena lepší cesta then aktualizovat T+ a L+ End If For každou hranu (i, j) ∈ T+ do Aktualizova feromonové stopy aplikací následujícího pravidla: τij(t)← (1 - ρ).τij(t) + ρ.Δ τij(t) kde Δ τij(t) = 1/L+ End For For Každou hranu (i,j) do τij(t+1) = τij(t) End For End For Print nejkratší cestu T+ a její délku L+ Stop

- 16 -


Problém barvení grafu

Úvod do problematiky Barvení grafu je jednou z disciplín teorie grafů, která se zabývá přiřazováním barev (téměř vždy reprezentovaných přirozenými čísly) různým objektům v grafu – vrcholům, hranám, stěnám atd. Nejčastěji jde o barvení vrcholů, ostatní případy lze na tento jednoduše převést.

Definice Nechť G = (V, E) je graf, k přirozené číslo. Zobrazení

nazveme

obarvením grafu G pomocí k barev, pokud pro každou hranu platí . Barevnost grafu (také chromatické číslo G je minimální počet barev potřebný pro obarvení G. Značí se χ(G).

Některé vlastnosti χ(G) 1. χ(G) = 1 právě tehdy, skládá-li se G z izolovaných vrcholů 2.

právě tehdy, obsahuje-li G kružnici liché délky (ekvivalentně, není-li G bipartitní)

3.

pro libovolný rovinný graf (viz slavný problém čtyř barev)

Farbenie všeobecných a rovinných grafov

1)

Majme graf G = (V,H) zafarbený k farbami tak, že žiadne dva susedné vrcholy nie sú zafarbené tou istou farbou. Relácia „vrchol vi je zafarbený tou istou farbou ako vrchol vj“ je reláciou ekvivalencie na množine vrcholov V , a preto definuje rozklad množiny V na triedy ekvivalencie, Pocet neprázdnych tried tohoto rozkladu je práve k. V každej triede ekvivalencie sú všetky vrcholy rovnakej farby. Z vlastnosti zafarbenia vyplýva, že žiadne dva vrcholy v tej istej triede rozkladu nie sú susedné – triedy rozkladu sú tzv. nezávislé množiny. Pre rýchly horný odhad chromatického císla grafu môže slúžit nasledujúci algoritmus farbenia grafu, ktorý však nedáva zarucene optimálne riešenie. Sekvencné farbenie grafu • Krok 1. Nech P = v1, v2, . . . , vn je lubovolná postupnost vrcholov grafu G = (V,H). • Krok 2. Postupne pre i = 1, 2, . . . , n urob: Ofarbi vrchol vi farbou najmenšieho císla takou, že žiaden z ofarbených susedov vrcholu vi nie je ofarbený touto farbou. Algoritmus na sekvencné farbenie grafu potrebuje na zafarbenie lubovolného grafu najviac maxv2V {deg(v)} + 1 farieb. Algoritmus na sekvencné farbenie grafu zafarbí vrchol 1 farbou 1. Nech už máme zafarbných i vrcholov v1, v2, . . . , vi s použitím najviac maxv2V {deg(v)} + 1 farieb. Další vrchol vi+1 1

K tomuto problému jsem nasel nejlepší vysvětlení ve slovenském jazyce. Z důvodu zachování smyslu textu jsem ho ponechal ve slovenském jazyce.

- 17 -


algoritmus ofarbí farbou najnižšieho císla, ktorá nie je priradená žiadnemu jeho susedovi. Kedže vrchol vi+1 môže mat najviac maxv2V {deg(v)} susedov, medzi maxv2V {deg(v)} + 1 ostáva aspon jedna, ktorou môžeme ofarbit vrchol vi+1. Dôsledkom tejto vety je nasledujúce tvrdenie. Pre chromatické císlo lubovolného grafu platí:

Problém 4 barev První zmínka o problému pochází od A. F. Mobiuse, který o něm pojednává ve své přednášce v roce 1840. Druhá zmínka je datována do roku 1852, A. de Morgan píše W. R. Hamiltovi o svém studentovi, který zjistil, že politickou mapu Anglie je možné zbarvit 4 barvami. Zmiňovaný student byl Frederic Guthrie. O témže problému referoval A.Cayley v roce 1878 na zasedání Londýnské matematické společnosti. Významný americký matematik v oblasti teorie množin a logiky C. S. Peirce se pokusil o důkaz hypotézy 4 barev a přednášel o něm na Harwardu v roce 1860. Protože C. S. Peirce svoji práci nepublikoval, má se za to, že důkaz zřejmě nebyl správný, protože se nedochovalo ani jeho autentické znění. V roce 1879 uveřejnil svůj nezdařený pokus hypotézy 4 barev A. B. Kempe v časopise American Journal of Mathematics. V roce 1890 totiž upozornil P. J. Heawood, že se Kempe dopustil chyby. Nicméně Heawood Kempeho úvahu modifikoval a upravil tak, že se mu podařilo dokázat, že 5 barev spolehlivě stačí k zabarvení každé mapy. Toto tvrzení, kterému se též říká hypotéza 5 barev bylo na několik desetiletí jediným výsledkem s definitivní platností až do roku 1976, kdy se podařilo hypotézu o 4 barvách dokázat. Když se důkaz tohoto tvrzení (4 barvy) nedařil, snažili se mnozí zájemci o řešení sestrojit kontrapříklady. které by domněnku vyvrátily. Při zkoumání malých map 4 barvy postačovaly. Ukazovalo se proto, že půjde o podstatně složitější mapy. Průkopníkem v uvedené oblasti byl P. Franklin, která v roce 1922 dokázal, že mapa s méně než 24 státy je 4 zbarvitelná. Na 28 zvýšil počet států C. N. Reynolds v létech 1927-27. Na 32 to byl opět Franklin v roce 1938. Na 36 C. E. Win v roce 1940. Na 40 potom O. Ore s G. J. Stemplem v roce 1970, v zápětí G. A. Doněc a Stromquist na 45. Zajímavou postavou v popisovaném „zápolení“ je bezesporu J. Mayer, který nebyl matematikem, nýbrž profesor francouzské literatury na univerzitě Montpellie ve Francii. Začátkem 70. let Mayer zvýšil hranici na 48 a Stromquist odpovídá hranicí 52. Krátce nato dosáhl Mayer skoro neuvěřitelných hodnot 72 a 96. To bylo v roce 1974, v době konání II. československého sympózia o teorii grafů, kde se o řešení problému živě diskutovalo, ale ještě se nevědělo, že rozuzlení „záhady“ je blízko. Konečně v roce 1976, K. Appel a W. Haken z univerzity v Illinois oznámili, že problém vyřešili. Řešení si vyžádalo 1200 hodin strojového času. Plný důkaz má 56 stran textu a 114 stran obrázků (30 na každé straně). Podrobný popis problému barvení grafu jsem našel jen ve slovenském jazyce. Kupříkladu na http://frcatel.fri.utc.sk/users/paluch/ .

- 18 -


Problém balení batohu

Úvod do problematiky Problém batohu spočívá v nalezení optimálního naplnění batohu věcmi tak, aby nebyla překročena jeho nosnost a zároveň aby sumární cena věcí uvnitř byla a) nejvyšší – exaktní řešení, b) co možná nejvyšší – rychlé řešení.

Zadání Je dáno celé číslo n (počet věcí) celé číslo M (kapacita batohu) konečná množina V={v1, v2, ... ,vn } (hmotnosti věcí) konečná množina C={c1, c2, ... ,cn } (ceny věcí) 0/1 problém batohu. Nejznámější varianta je optimalizační. Pokud se mluví o „problému batohu„ bez bližšího určení, většinou se rozumí tato verze. Zkonstruujte množinu X={x1, x2, ... ,xn }, kde každé xi je 0 nebo 1, tak, aby platilo v1x1+v2x2 +… + vnxn <= M (batoh nebyl přetížen). výraz c1x1+c2x2 + ... + cnxn nabýval maximální hodnoty pro všechny takové množiny (cena věcí v batohu byla maximální).

Praxe Řešení hrubou silou Algoritmus, řešící problém hrubou silou, postupně generuje všechny možné kombinace věcí umisťovaných do batohu a testuje obě podmínky (zda zvolená kombinace nepřetíží batoh a zda cenová funkce nabývá maxima). V popisu uvedeném výše zkouší program 2n kombinací. Pokud považujeme složitost zkoušení jedné instance za lineární (pro každou kombinaci program počítá hmotnost a cenu řešení skalárním součinem n-složkových vektorů), pak je asymptotická složitost O(n*2n).

- 19 -


Řešení s heuristikou Algoritmus, řešící problém pomocí heuristiky, využívá zkušenosti, jak by postupoval člověk, kdyby měl batoh zaplnit. Algoritmus vybírá věci vkládané do batohu podle kritéria cena/hmotnost (shora), lidsky: „Nejprve vezmu nejdražší a zároveň nejlehčí předměty.“ Program řešící problém algoritmem s heuristikou řadí pole triviální metodou hledání největšího. Jeho časová složitost je asymptoticky O(n2). Pak zkouší vložit jednotlivé věci do batohu po jedné a testuje plnost batohu, tato operace má asymptotickou složitost O(n), celková asymptotická složitost (nejvyšší řád) je tedy O(n2). Heuristika pro všechny velikosti instance běžela neměřitelně krátkou dobu. Chyba heuristiky je značná, to je dáno tím, že se zastaví okamžitě, jakmile nelze vložit další věc, chybu lze výrazně snížit, toto je diskutováno v závěru.

- 20 -


Užití metody větví a hranic Algoritmus je založen na řešení hrubou silou z první úlohy. Rozdíl je v tom, že některé větve nejsou prozkoumávány, rozvíjení skončí už když se dostane do situace, že rozvíjená větev nemůže být lepší než dosud dosažené řešení – tj. libovolnou kombinací zbývajících předmětů nemůže být zlepšena cena batohu. Jedná se o ořezávání neperspektivních větví = název metody. Očividně takto určená horní mez někdy značně nadhodnocuje možnosti rozvíjeného řešení. Teoreticky je v nejhorším případě složitost stejná jako u metody hrubá síla (asymptoticky O(2n)), prakticky však bývá výrazně nižší. K implementaci tohoto řešení bylo nutné původní program na hledání řešení hrubou silou výrazně pozměnit, protože zde je mnohem příhodnější užít rekurzi (původní řešení pouze čítalo 64bit proměnnou ve for cyklu). Užití dynamického programování Jádrem tohoto řešení je rozložení problému na dva menší problémy. Rekurzivním opakováním tohoto postupu dospějeme až k triviálním úlohám, které lze řešit v konstantním čase. Až potud by měl algoritmus opět složitost O(2n). Výhoda dynamického programování spočívá v tom, že si pamatujeme to, co jsme již počítali a nepočítáme to znovu. Využíváme k tomu fakt, že pro prvních k věcí a danou nosnost je nejlepší řešení vždy stejné, nezávisle na cestě, která k němu vedla. Využijeme triviální dvourozměrné pole obsahující nejlepší možné řešení pro prvých k věcí a nosnost batohu w.

- 21 -


Pro dělení úlohy využijeme faktu, že je-li řešení problému s k věcmi a nosností N optimální a obsahuje k-tou věc, pak optimální řešení problému s prvními k-1 věcmi a nosností (N – váha k) je toto řešení bez k-té věci. Podíváme-li se na fakt z druhé strany, tak zjistíme, že abychom stanovili optimální řešení pro n věcí, musíme znát: • •

optimální řešení problému s vyjmutou n-tou věcí (v případě, že n-tá věc v optimálním řešení není), a optimální řešení problému s vyjmutou n-tou věcí a kapacitou batohu sníženou o hmotnost té věci (v případě, že n-tá věc je součástí optimálního řešení).

Výsledky Cena řešení Výsledky pro instance nabízené při zadání úlohy. Průměry vždy pro 50 instancí s daným rozsahem.

věcí 4 10 15 20 22 25 27 30 32 35 37 40

metoda dynamické hrubá síla větví a heuristika programování (optimální) hranic 352 352 347 352 1125 1125 1110 1125 1814 1814 1808 1814 2335 2335 2321 2335 2501 2501 2488 2501 2954 2954 2941 2954 3143 3143 3122 3143 3581 3581 3563 3581 3694 3694 3678 3694 4081 4081 4067 4081 4222 4222 4205 4222 4628 4628 4612 4628

- 22 -


Počet kroků Výsledky pro instance nabízené při zadání úlohy. Průměry vždy pro 50 instancí s daným rozsahem.

věcí 4 10 15 20 22 25 27 30 32 35 37 40

metoda dynamické hrubá síla větví a heuristika programování (optimální) hranic 16 12 4 16 1000 146 10 1024 3000 178 15 32768 5000 3491 20 1048576 5500 12755 22 4194304 7500 33225 25 33554432 9450 38631 27 134217728 12000 184291 30 1073741824 14400 263077 32 4294967296 17500 677279 35 34359738368 20350 721623 37 137438953472 24000 8576258 40 1099511627776

- 23 -


- 24 -


Použité zdroje •

• • • •

PUDLÁK, Pavel. Staré a nové problémy v matematice: Od teorie čísel k teorii složitosti. Vesmír [online]. 1995, roč. 24, č. 6 [cit. 2007–05-13], s. 305–305. Dostupný z WWW: <http://www.vesmir.cz/clanek.php3?stranka=305&cislo=6&rok=1995>. ISSN 1214–4029. Problém obchodního cestujícího. Wikipedie : Česká wikipedie [online]. 2006 [cit. 2007–05-13]. Dostupný z WWW: <http://cs.wikipedia.org/wiki/Probl%C3%A9m_obchodn%C3%ADho_cestuj%C3%A Dc%C3%ADho>. Barvení grafu. Wikipedie : Česká wikipedie [online]. 2006 [cit. 2007–05-13]. Dostupný z WWW: <http://cs.wikipedia.org/wiki/Barven%C3%AD_grafu>. NĚMEC, Miloš. Optimalizace pomocí mravenčích kolonií. Praha, 2006. 63 s. České vysoké učení technické v Praze. Vedoucí diplomové práce Ing. Petr Pošík. Dostupný z WWW: <http://www.milosnemec.cz/download/dp.pdf>. PALÚCH, Stanislav. Skripta z teorie grafov. Kapitola 8., 2003. Dostupný z WWW: <http://frcatel.fri.utc.sk/users/paluch/grkap8-nopics.pdf>. s. 111–125. KUBEŠ, Tomáš. Řešení problému Batohu [online]. 2005 [cit. 2009–05-13]. Dostupný z WWW: <http://tomaskubes.net/CVUT/batoh3.htm>.

- 25 -


Vysvětlivky i

Především pro zjednodušení se uvažují pouze rozhodovací úlohy, tj. úlohy, kde odpověď je jenom ano nebo ne. Matematicky je rozhodovací úloha množina nějakých konečných objektů: posloupností v konečné abecedě, čísel, grafů apod. Jednotlivé objekty jsou vstupní data a cíl je rozhodnout, zda patří do dané množiny. Dále musíme stanovit, co rozumíme velikostí vstupu. To se provede tak, že nějakým přirozeným a efektivním způsobem zakódujeme objekty jako posloupnosti v nějaké konečné abecedě. Velikost vstupu je potom délka kódující posloupnosti. Např. přirozená čísla můžeme kódovat binárním zápisem, tj. posloupnostmi nul a jedniček. Délka čísla N je tedy zhruba log2N. Další pojem, který potřebujeme, je pojem elementárního kroku (operace). Spokojme se s tím, že to znamená krok v algoritmu, který změní vždy jen pevný počet bitů. (Přesná definice by vyžadovala zavedení tzv. Turingova stroje, jakéhosi abstraktního „počítače“, u něhož lze přasně formalizovat, co je to krok, výpočet apod.) Například při násobení velkých čísel nemůžeme považovat součin za elementární operaci, ale vynásobení dvou cifer těchto čísel a uložení do paměti můžeme počítat jako elementární krok. Říkáme, že algoritmus pracuje v polynomiálním čase nebo stručně, že je polynomiální, pokud existuje polynom p tak, že pro každý vstup délky n algoritmus provede nejvýše p(n) elementárních kroků. Třídu P definujeme jako třídu rozhodovacích úloh, pro které existují polynomiální algoritmy. Nechť A je množina objektů, které nějaká rozhodovací úloha přijímá (odpovídá ano). Množina A patří do NP, pokud pro prvky xεA existují polynomiálně velké „certifikáty“ náležení do A. Certifikát je nějaká konečná struktura y (číslo, graf, slovo v konečné abecedě), která s x souvisí. Certifikát může být definován libovolně, pouze požadujeme, aby existoval polynomiální algoritmus, který rozhodne, zda y je certifikátem pro x. Nepožadujeme, aby bylo možno certifikát nějak snadno nalézt, ani aby byl jednoznačně určen. Certifikát nám slouží pouze jenom jako důkaz, že xεA. (Zkratka NP pochází z termínu nedeterministicky polynominální algoritmy, pomocí kterých se dá NP také definovat. Nedeterministický algoritmus je zobecněný algoritmus, kde následující operace nemusí být určena jednoznačně z předchozího stavu).

- 26 -

Přehledová studie - Problém p=np  

Problém obchodního cestujícího, Problém barvení grafu, Mravenčí kolonie

Read more
Read more
Similar to
Popular now
Just for you