Algorytmy genetyczne (AG) to metoda optymalizacji inspirowana darwinowską teorią ewolucji. Zamiast szukać idealnego rozwiązania analitycznie, AG hodują populację rozwiązań-kandydatów, pozwalając najlepszym przetrwać, łączyć się i mutować — pokolenie po pokoleniu — aż wyłoni się rozwiązanie bliskie optymalnemu.
Kiedy używać algorytmów genetycznych?
AG sprawdzają się, gdy:
- Przestrzeń rozwiązań jest zbyt duża do pełnego przeszukania (np. problem komiwojażera z 50 miastami: 50! ≈ 3×10⁶⁴ permutacji)
- Funkcja celu nie jest różniczkowalna — nie możesz użyć gradient descent, bo nie ma gradientów
- Krajobraz fitness jest multimodalny — wiele lokalnych optimów, potrzebna eksploracja
- Rozwiązanie nie musi być idealne — wystarczająco dobre rozwiązanie w rozsądnym czasie
Typowe zastosowania: planowanie tras, harmonogramowanie, projektowanie obwodów, optymalizacja hiperparametrów, projektowanie struktur (kratownice, anteny NASA), gry i sztuczne życie.
Terminologia biologiczna → obliczeniowa
| Biologia | Algorytm genetyczny |
|---|---|
| Osobnik | Rozwiązanie-kandydat |
| Populacja | Zbiór rozwiązań |
| Chromosom | Reprezentacja rozwiązania (np. wektor bitów) |
| Gen | Pojedynczy element chromosomu |
| Fenotyp | Faktyczne rozwiązanie (po dekodowaniu) |
| Fitness (przystosowanie) | Jakość rozwiązania (wartość funkcji celu) |
| Pokolenie | Jedna iteracja algorytmu |
Algorytm genetyczny krok po kroku
Krok 1: Inicjalizacja populacji
Utwórz początkową populację N losowych rozwiązań. Każde rozwiązanie jest zakodowane jako chromosom — najczęściej wektor bitów (binarny), ale może to być wektor liczb rzeczywistych, permutacja lub drzewo.
Przykład: szukamy maksimum funkcji f(x) = x² dla x ∈ [0, 31]. Kodujemy x binarnie na 5 bitach:
- Osobnik 1: 10110 (= 22, fitness = 484)
- Osobnik 2: 01001 (= 9, fitness = 81)
- Osobnik 3: 11000 (= 24, fitness = 576)
- Osobnik 4: 00101 (= 5, fitness = 25)
Krok 2: Ewaluacja (obliczenie fitness)
Oblicz wartość funkcji celu (fitness) dla każdego osobnika. To jedyny krok, w którym algorytm „wie", co optymalizuje — reszta mechaniki jest uniwersalna.
Krok 3: Selekcja
Wybierz osobniki, które staną się „rodzicami" nowego pokolenia. Lepiej przystosowane mają większą szansę na wybór, ale słabsze też mogą przetrwać (utrzymanie różnorodności).
Popularne metody selekcji: selekcja ruletkowa, turniejowa i rankingowa.
Krok 4: Krzyżowanie (crossover)
Para rodziców wymienia fragmenty chromosomów, tworząc potomków łączących cechy obu rodziców.
Krzyżowanie jednopunktowe:
- Rodzic 1: 10|110
- Rodzic 2: 01|001
- Potomek 1: 10|001
- Potomek 2: 01|110
Punkt krzyżowania wybierany jest losowo. Potomkowie dziedziczą fragmenty obu rodziców.
Prawdopodobieństwo krzyżowania (pₓ): typowo 0,7–0,9. Nie każda para się krzyżuje — część przechodzi do nowego pokolenia bez zmian.
Krok 5: Mutacja
Losowa zmiana pojedynczych genów z małym prawdopodobieństwem. Dla chromosomu binarnego: odwrócenie bitu (0→1 lub 1→0).
Przykład:
- Przed mutacją: 10001
- Po mutacji: 10101 (trzeci bit zmutowany)
Prawdopodobieństwo mutacji (pₘ): typowo 0,001–0,05. Mutacja jest rzadka, ale kluczowa — wprowadza nową informację genetyczną, zapobiegając przedwczesnej zbieżności.
Krok 6: Utworzenie nowego pokolenia
Potomkowie (po krzyżowaniu i mutacji) zastępują starą populację. Opcjonalnie: elityzm — najlepsze osobniki z poprzedniego pokolenia przechodzą bezpośrednio do nowego (chroni najlepsze dotychczasowe rozwiązanie).
Krok 7: Warunek stopu
Powtarzaj kroki 2–6, aż:
- Osiągnięto maksymalną liczbę pokoleń
- Fitness najlepszego osobnika nie poprawia się od N pokoleń (stagnacja)
- Osiągnięto wystarczająco dobre rozwiązanie (znany próg)
Reprezentacja problemu — klucz do sukcesu
Sposób kodowania rozwiązania jako chromosomu fundamentalnie wpływa na skuteczność AG:
Kodowanie binarne
Klasyczne, najprostsze. Rozwiązanie jako ciąg bitów. Dobre dla problemów dyskretnych.
Kodowanie rzeczywiste
Chromosom to wektor liczb zmiennoprzecinkowych. Naturalne dla optymalizacji ciągłych funkcji. Wymaga zmodyfikowanych operatorów krzyżowania (np. blend crossover: potomek = α·rodzic₁ + (1-α)·rodzic₂).
Kodowanie permutacyjne
Chromosom to permutacja (np. kolejność miast w TSP). Wymaga specjalnych operatorów krzyżowania zachowujących poprawność permutacji (np. Order Crossover, Partially Mapped Crossover).
Kodowanie drzewiaste
Chromosom to drzewo (np. wyrażenie matematyczne, program komputerowy). Używane w programowaniu genetycznym (GP).
Parametry algorytmu genetycznego
| Parametr | Typowa wartość | Wpływ |
|---|---|---|
| Rozmiar populacji (N) | 50–500 | Większa → lepsza eksploracja, wolniejsza |
| Praw. krzyżowania (pₓ) | 0,7–0,9 | Wyższe → szybsza zbieżność |
| Praw. mutacji (pₘ) | 0,001–0,05 | Niskie → stabilność, wysokie → eksploracja |
| Elityzm | 1–5 osobników | Chroni najlepsze rozwiązanie |
| Liczba pokoleń | 100–10000 | Dłużej → lepsze wyniki (z malejącym zwrotem) |
Zalety algorytmów genetycznych
- Uniwersalność — działają na dowolnym problemie, o ile potrafisz zdefiniować fitness i reprezentację
- Brak wymagań matematycznych — nie potrzebują gradientów, ciągłości ani różniczkowalności
- Eksploracja globalna — populacja przeszukuje wiele regionów przestrzeni jednocześnie, zmniejszając ryzyko utknięcia w lokalnym minimum
- Równoległość — osobniki można ewaluować niezależnie (idealnie do GPU/klastrów)
- Elastyczność — łatwo dodać ograniczenia, zmieniać funkcję celu, łączyć z innymi metodami
Ograniczenia
- Brak gwarancji optymalności — AG znajduje rozwiązanie „dobre", ale niekoniecznie najlepsze
- Kosztowna ewaluacja — jeśli obliczenie fitness trwa długo (np. symulacja fizyczna), AG jest wolny
- Trudność parametryzacji — rozmiar populacji, pₓ, pₘ wymagają eksperymentowania
- Przedwczesna zbieżność — populacja może „utknąć" wokół nieoptymalnego rozwiązania, jeśli różnorodność genetyczna spada zbyt szybko
Algorytmy genetyczne vs. gradient descent
| Aspekt | AG | Gradient descent |
|---|---|---|
| Wymaga gradientów | Nie | Tak |
| Typ przeszukiwania | Globalny | Lokalny |
| Szybkość | Wolny | Szybki (dla gładkich funkcji) |
| Gwarancja zbieżności | Brak | Tak (funkcje wypukłe) |
| Zastosowania | Optymalizacja kombinatoryczna | Sieci neuronowe |
AG i gradient descent to komplementarne narzędzia. Sieci neuronowe uczą się gradient descentem, ale AG mogą optymalizować ich architekturę (Neural Architecture Search) lub hiperparametry.