Tento repozitář obsahuje řešení 4. cvičení z předmětu Biologicky inspirované algoritmy. Cílem je implementace genetický algoritmus pro Problém Obchodního Cestujícího (TSP - Travelling Salesman Problem)
https://michaelmachu.eu/data/pdf/bia/Exercise4.pdf
Travelling Salesman Problem (TSP) je klasický optimalizační problém, kde hledáme nejkratší cestu procházející všemi městy právě jednou a vracející se do počátečního města.
- 20 evropských měst s náhodnými 2D souřadnicemi (0-1000 km)
- Města: Praha, Bratislava, Berlin, Budapest, Moscow, Ankara, Vienna, Warsaw, Rome, Athens, Paris, London, Madrid, Amsterdam, Brussels, Stockholm, Oslo, Copenhagen, Helsinki, Lisbon
Najít optimální pořadí návštěvy měst minimalizující celkovou ujetou vzdálenost pomocí Genetického algoritmu.
Notebook genetic_algorithm_tsp.ipynb obsahuje následující sekce:
numpy- matematické operace a práce s maticemimatplotlib.pyplot- vizualizace tras a městrandom- generování náhodných hodnotcopy- kopírování struktur dat
- Generování 20 evropských měst s náhodnými 2D souřadnicemi
- Každé město má název a souřadnice (x, y) v rozsahu 0-1000 km
- Nastavení
random.seed(42)pro reprodukovatelnost výsledků
- Výpočet Euklidovské vzdálenosti mezi všemi dvojicemi měst
- Vzorec:
$d = \sqrt{(x_i - x_j)^2 + (y_i - y_j)^2}$ - Vytvoření matice 20×20 s předpočítanými vzdálenostmi
- Výpočet celkové délky trasy
- Trasa je reprezentována jako permutace indexů měst:
[0, 5, 3, 1, 2, 4, ...] - Cíl: minimalizovat celkovou vzdálenost
- Vytvoření počáteční populace 100 náhodných tras
- Každý jedinec je náhodná permutace všech měst
tournament_selection(population, distance_matrix, tournament_size=5)- Náhodně vybere 5 jedinců z populace
- Vrátí toho s nejlepší (nejkratší) trasou
- Zajišťuje tlak na kvalitu řešení
ordered_crossover(parent1, parent2)- Vybere náhodný úsek z prvního rodiče
- Zkopíruje ho do potomka
- Zbylá města doplní z druhého rodiče v pořadí jejich výskytu
- Zajišťuje, že každé město je v trase právě jednou
- Vytvoří dva potomky prohozením rolí rodičů
swap_mutation(route)- Náhodně prohodí dvě města v trase
- Pomáhá udržet diverzitu populace
- Zabraňuje uvíznutí v lokálním optimu
| Parametr | Hodnota | Popis |
|---|---|---|
POPULATION_SIZE |
100 | Počet jedinců v populaci |
GENERATIONS |
500 | Počet iterací algoritmu |
TOURNAMENT_SIZE |
5 | Velikost turnaje pro selekci |
CROSSOVER_RATE |
0.8 | Pravděpodobnost křížení (80%) |
MUTATION_RATE |
0.2 | Pravděpodobnost mutace (20%) |
- Elitismus - zachování nejlepšího jedince
- Selekce rodičů turnajovou selekcí
- Křížení rodičů (80% pravděpodobnost)
- Mutace potomků (20% pravděpodobnost)
- Nahrazení staré populace novou generací
numpy
matplotlib- Otevřete
genetic_algorithm_tsp.ipynbv Jupyter Notebooku nebo VS Code - Spusťte všechny buňky postupně (nebo všechny najednou)
- Notebook zobrazí:
- Tabulku měst s jejich souřadnicemi
- Ukázku matice vzdáleností
- Průběžné výpisy optimalizace (každých 50 generací)
- Vizualizaci počáteční trasy (červená)
- Vizualizaci optimalizované trasy (zelená)
- Zobrazena červenou barvou
- Reprezentuje nejhorší trasu z náhodné počáteční populace
- Ukazuje kvalitu náhodného řešení
- Zobrazena zelenou barvou
- Nejlepší nalezené řešení po 500 generacích
- Výrazně kratší než počáteční řešení
Notebook zobrazí:
- Nejlepší nalezenou vzdálenost v km
- Zlepšení oproti nejhorší počáteční trase v km
- Procentuální zlepšení (typicky 30-50%)
- Průběh optimalizace po generacích