Podręcznik
3. Algorytmy genetyczne
3.2. Klasyczny algorytm genetyczny
Zgodnie z definicją podaną przez Goldberga (1995), algorytmy genetyczne stanowią klasę algorytmów poszukujących, które opierają swoje działanie na inspiracji mechanizmami znanymi z biologii: dziedzicznością oraz doborem naturalnym. Ich funkcjonowanie odzwierciedla sposób, w jaki ewolucja kształtuje populacje organizmów w naturze.
W ramach tego podejścia, algorytm operuje na całej populacji potencjalnych rozwiązań danego problemu – a nie tylko na pojedynczym rozwiązaniu, jak ma to miejsce w klasycznych metodach optymalizacji. Każdy osobnik w tej populacji stanowi konkretną propozycję rozwiązania. Osobniki funkcjonują w środowisku - które umożliwia ocenianie i porównywanie osobników, i jest zależne od funkcji celu. Każdy osobnik ma przyporządkowaną wartość liczbową, nazywaną stopniem przystosowania lub po prostu przystosowaniem. Przystosowanie określa bezpośrednio jakość danego osobnika, i zazwyczaj jest ona wyliczana na na podstawie funkcji celu, odpowiadającej konkretnemu zadaniu optymalizacyjnemu.
W naturze przetrwanie i możliwość rozmnażania się zależy od tego, jak dobrze organizm radzi sobie w danym środowisku. Im lepiej jest przystosowany, tym większe ma szanse na przekazanie swoich genów potomstwu. AG próbują wykorzystać tę ideę do rozwiązywania problemów optymalizacyjnych. Szukają rozwiązań, które w danym kontekście mają największe "szanse przetrwania" – czyli są najlepsze w sensie przyjętej funkcji celu.
Zamiast operować tylko na jednym kandydacie rozwiązania (jak robi to wiele klasycznych metod), AG pracują na całej populacji. Każdy osobnik tej populacji to konkretne rozwiązanie problemu – lepsze lub gorsze. W każdej iteracji (czyli pokoleniu) populacja ewoluuje: osobniki są selekcjonowane, krzyżowane, poddawane mutacjom. Dzięki temu, z pokolenia na pokolenie, jakość populacji (czyli jakość rozwiązań) zwykle się poprawia.
Genotyp i fenotyp – czym się różnią?
W AG każdy osobnik opisuje potencjalne rozwiązanie zadania, ale żeby algorytm mógł nad tym pracować, musi jakoś je zapisać. Dlatego stosuje się dwa poziomy reprezentacji:
-
Genotyp to zakodowana forma rozwiązania. Można o nim myśleć jak o "DNA" osobnika. Zwykle jest to wektor (lista) liczb, np.:
g = [g1, g2, ..., gng]
W zależności od problemu, te liczby mogą być bitami (0 lub 1), wartościami rzeczywistymi, permutacjami elementów itd. Algorytm operuje właśnie na genotypie – krzyżuje go, mutuje itd. Sama forma genotypu jest zrozumiała dla AG, natomiast może być nieczytelna dla rozwiązującego. Jest to punkt w przestrzeni kodów - a nie konkretny zestaw parametrów stanowiących rozwiązanie problemu.
-
Fenotyp to rozkodowane (czyli przekształcone) rozwiązanie, które można bezpośrednio ocenić. To forma, którą rozumie funkcja celu – np. zestaw parametrów wejściowych do jakiegoś modelu lub układu. Fenotyp wynika z genotypu poprzez proces dekodowania (który może być prosty lub złożony, zależnie od zastosowania).
Przykład: jeśli mamy zadanie doboru parametrów regulatora PID, to:
- genotyp może zawierać binarne lub rzeczywiste zakodowanie wartości Kr, Ti, Td;
- fenotyp to konkretne wartości tych parametrów użyte do symulacji układu i obliczenia błędu regulacji.
Zatem genotyp to sposób przechowywania i operowania rozwiązaniami w AG, a fenotyp to to, co naprawdę reprezentują – ich realna "forma" z punktu widzenia zadania optymalizacyjnego.
Inne istotne pojęcia, które "odziedziczyliśmy" z nauk biologicznych:
- Populacja – zbiór osobników w danym pokoleniu. Jest to główny obiekt przetwarzania w AG – algorytm nie działa na jednym rozwiązaniu, lecz na całej grupie.
- Osobnik – pojedynczy element populacji. Reprezentuje jedno konkretne rozwiązanie problemu.
- Chromosom – struktura danych opisująca genotyp osobnika. Można go traktować jako kompletną reprezentację rozwiązania w postaci zakodowanej.
- Gen – najmniejszy element składowy chromosomu. Odpowiada jednej zmiennej problemu lub jednej cechy rozwiązania.
- Genotyp – cały zbiór genów osobnika, zakodowany w chromosomie. To właśnie na nim operują krzyżowanie i mutacja.
- Allel – wartość konkretnego genu. Czyli: gen to miejsce w chromosomie, allel to to, co tam siedzi. Np. jeśli gen odpowiada za kolor, to allel to „czerwony”, „zielony” itp.
- Locus – pozycja genu w chromosomie. Umożliwia jednoznaczną identyfikację, gdzie dany gen się znajduje.
Wszystkie te pojęcia wspólnie tworzą podstawowy język, w którym opisujemy działanie algorytmów genetycznych. W praktyce – dobre zrozumienie tych terminów pomaga w projektowaniu skutecznych algorytmów.