Operatory genetyczne to mechanizmy napędzające ewolucję w algorytmach genetycznych. Trzy fundamentalne operatory — selekcja, krzyżowanie i mutacja — odpowiadają za eksplorację przestrzeni rozwiązań i eksploatację znalezionych dobrych regionów. Ich prawidłowy dobór decyduje o skuteczności algorytmu.
Selekcja — kto przetrwa?
Selekcja to proces wybierania osobników z bieżącej populacji, które staną się rodzicami następnego pokolenia. Kluczowa zasada: osobniki o wyższym fitness mają większą szansę na wybór, ale nie gwarantowaną — element losowości utrzymuje różnorodność genetyczną.
Selekcja ruletkowa (Roulette Wheel Selection)
Każdy osobnik otrzymuje „wycinek" ruletki proporcjonalny do swojego fitness. Im wyższy fitness, tym większy wycinek — i większa szansa na wybór.
Przykład:
| Osobnik | Fitness | Udział w ruletce |
|---|---|---|
| A | 400 | 40% |
| B | 300 | 30% |
| C | 200 | 20% |
| D | 100 | 10% |
| Suma | 1000 | 100% |
Losujemy liczbę z [0, 1). Jeśli 0,35 → osobnik A (zakres 0,00–0,40). Jeśli 0,85 → osobnik C (zakres 0,70–0,90).
Zalety:
- Proporcjonalność — lepsze osobniki mają większą szansę
- Prostota implementacji
Wady:
- Dominacja super-osobnika — jeśli jeden osobnik ma fitness wielokrotnie wyższy niż reszta, dominuje populację, prowadząc do przedwczesnej zbieżności
- Słaba presja selekcyjna — gdy fitness jest zbliżony, selekcja jest prawie losowa
- Nie działa dla ujemnych wartości fitness
Selekcja turniejowa (Tournament Selection)
Losowo wybierz k osobników z populacji (turniejowa grupa). Najlepszy z nich wygrywa i zostaje rodzicem. Powtarzaj dla kolejnych rodziców.
Parametr: rozmiar turnieju k (typowo 2–7).
- k = 2 (turniej binarny) → słaba presja selekcyjna, duża różnorodność
- k = N (cała populacja) → deterministic — zawsze wygrywa najlepszy, minimalna różnorodność
Zalety:
- Łatwa kontrola presji selekcyjnej (przez k)
- Działa niezależnie od skali fitness (nie wymaga normalizacji)
- Równoległa (turnieje niezależne)
- Najczęściej stosowana w praktyce
Wady:
- Wybór k wpływa na zachowanie algorytmu
Selekcja rankingowa (Rank Selection)
Osobniki sortowane są według fitness. Prawdopodobieństwo wyboru zależy od rangi (pozycji w rankingu), nie od wartości fitness.
| Ranga | Osobnik | Fitness | Praw. (liniowe) |
|---|---|---|---|
| 1 (najlepszy) | C | 576 | 0,40 |
| 2 | A | 484 | 0,30 |
| 3 | B | 81 | 0,20 |
| 4 | D | 25 | 0,10 |
Zalety:
- Eliminuje problem dominacji super-osobnika
- Stabilna presja selekcyjna niezależna od rozkładu fitness
Wady:
- Wymaga sortowania (O(N log N))
- Ignoruje bezwzględne różnice fitness (osobnik z fitness 1000 i 999 mają bardzo różne rangi, ale niemal identyczny fitness)
Elityzm
Nie jest metodą selekcji per se, lecz strategią: najlepszych e osobników z bieżącej populacji przechodzi bezpośrednio do nowego pokolenia, bez krzyżowania ani mutacji. Chroni najlepsze znalezione dotychczas rozwiązanie.
Typowo e = 1–5. Elityzm jest standardową praktyką — AG bez elityzmu może „stracić" najlepsze rozwiązanie przez pechowe krzyżowanie/mutację.
Krzyżowanie (Crossover) — wymiana genów
Krzyżowanie to proces łączenia materiału genetycznego dwóch rodziców w celu utworzenia potomków. Cel: potomek dziedziczy dobre cechy obu rodziców, potencjalnie tworząc rozwiązanie lepsze od każdego z nich.
Krzyżowanie jednopunktowe (One-point Crossover)
Losowy punkt dzieli chromosom. Potomek 1 = lewa część rodzica 1 + prawa część rodzica 2 (i odwrotnie).
Rodzic 1: 11001|010
Rodzic 2: 00110|101
Potomek 1: 11001|101
Potomek 2: 00110|010
Krzyżowanie dwupunktowe (Two-point Crossover)
Dwa losowe punkty wyznaczają segment do wymiany:
Rodzic 1: 11|001|010
Rodzic 2: 00|110|101
Potomek 1: 11|110|010
Potomek 2: 00|001|101
Krzyżowanie jednorodne (Uniform Crossover)
Każdy gen jest niezależnie losowany od rodzica 1 lub rodzica 2 (z prawdopodobieństwem 0,5):
Maska: 0 1 1 0 1 0 1 0
Rodzic 1: 1 1 0 0 1 0 1 0
Rodzic 2: 0 0 1 1 0 1 0 1
Potomek: 0 1 1 0 0 0 0 0
Krzyżowanie dla permutacji — Order Crossover (OX)
Dla problemów permutacyjnych (np. TSP) zwykłe krzyżowanie tworzy niepoprawne rozwiązania (powtórzone miasta). OX zachowuje fragment permutacji rodzica 1, a pozostałe pozycje wypełnia elementami rodzica 2 w oryginalnej kolejności.
Przykład (TSP z 8 miastami):
Rodzic 1: 1 2 |3 4 5| 6 7 8
Rodzic 2: 3 7 2 8 1 4 6 5
Potomek: 8 1 |3 4 5| 2 6 7
Segment [3 4 5] skopiowany z rodzica 1. Pozostałe: z rodzica 2 w kolejności, pomijając już użyte (3, 4, 5).
Krzyżowanie dla kodowania rzeczywistego
- Blend Crossover (BLX-α): potomek losowany z rozszerzonego zakresu między rodzicami
- Simulated Binary Crossover (SBX): symuluje efekt jednopunktowego krzyżowania binarnego na liczbach rzeczywistych
Prawdopodobieństwo krzyżowania (pₓ)
Nie każda para rodziców jest krzyżowana. Typowo pₓ = 0,7–0,9. Nieskrzyżowani rodzice przechodzą do nowego pokolenia bez zmian.
Mutacja — przypadkowe zmiany
Mutacja wprowadza małe, losowe zmiany w chromosomie. Cel: eksploracja — szukanie nowych regionów przestrzeni rozwiązań, które nie byłyby osiągalne wyłącznie przez krzyżowanie.
Mutacja bitowa (Bit Flip)
Dla chromosomu binarnego: z prawdopodobieństwem pₘ każdy bit jest odwracany (0→1 lub 1→0).
Przed: 1 0 0 1 1 0 1 0
Po: 1 0 1 1 1 0 1 0 (bit 3 zmutowany)
Mutacja dla kodowania rzeczywistego
- Mutacja gaussowska: dodaj losowy szum z rozkładu normalnego N(0, σ)
- Mutacja jednorodna: zastąp gen losową wartością z dozwolonego zakresu
Mutacja dla permutacji
- Swap mutation: zamień dwa losowe elementy miejscami
- Inversion mutation: odwróć kolejność segmentu
- Insertion mutation: przenieś losowy element w nowe miejsce
Prawdopodobieństwo mutacji (pₘ)
Typowo pₘ = 0,001–0,05 (na gen, nie na osobnika). Reguła kciuka: pₘ ≈ 1/L, gdzie L = długość chromosomu (średnio 1 mutacja na chromosom).
Za niskie pₘ: algorytm traci różnorodność, wpada w przedwczesną zbieżność. Za wysokie pₘ: algorytm staje się losowym przeszukiwaniem, nie ewolucją.
Balans eksploracji i eksploatacji
Fundamentalne napięcie w algorytmach genetycznych:
- Eksploatacja — intensywne przeszukiwanie okolic najlepszych znalezionych rozwiązań (silna selekcja, krzyżowanie)
- Eksploracja — szukanie nowych, potencjalnie lepszych regionów (słaba selekcja, mutacja, duża populacja)
| Operator | Główna rola |
|---|---|
| Selekcja | Eksploatacja (silna presja) |
| Krzyżowanie | Eksploatacja + eksploracja (łączenie cech) |
| Mutacja | Eksploracja (nowa informacja) |
| Duża populacja | Eksploracja (więcej punktów startowych) |
| Elityzm | Eksploatacja (ochrona najlepszych) |
Za dużo eksploatacji → przedwczesna zbieżność. Za dużo eksploracji → wolna zbieżność. Dobry AG balansuje oba aspekty.
Rekomendacje praktyczne
- Selekcja: turniejowa (k=2–3) — najczęstszy i najbezpieczniejszy wybór
- Krzyżowanie: jednopunktowe lub dwupunktowe (binarne); OX (permutacje); BLX-α (rzeczywiste)
- Mutacja: bitowa z pₘ ≈ 1/L (binarne); gaussowska (rzeczywiste); swap (permutacje)
- Elityzm: zawsze — przynajmniej 1 osobnik
- Rozmiar populacji: 50–200 dla prostych problemów, 200–500 dla złożonych
Operatory genetyczne to silnik ewolucji. Algorytm genetyczny bez dobrze dobranych operatorów to jak samochód bez silnika — ma strukturę, ale nie jedzie.