Algorytmy ewolucyjne
`
Wstęp
Czym są algorytmy ewolucyjne?
Rodzaje algorytmów ewolucyjnych
Algorytmy genetyczne
Strategie ewolucyjne
Programowanie genetyczne
Zarys historyczny
Alan Turing, 1950
Nils Aall Barricelli, Pierwsza komputerowa symulacja ewolucji, 1954
Bienert, Rechenberg, Schwefel, 1960, Strategie ewolucyjne i zastosowanie w
praktyce
J. Holland, Książka popularyzująca algorytmy ewolucyjne,1960 r.
Fogel, lata 80-te, Współczesna wersja programowania ewolucyjnego
Od początku lat 90-tych algorytmy genetyczne są coraz częściej stosowane w
praktyce
Podstawowe pojęcia
Osobnik
Populacja
Fenotyp
Genotyp
Chromosom
Kodowanie rozwiązań
Funkcja przystosowania
- Rozwiązanie zadania
- Zbiór rozwiązań branych pod uwagę
- Parametry, cechy rozwiązania
- Ciąg bitów
- Miejsce przechowywania rozwiązania
- Sposób kodowanie (np. ciąg bitów)
- Fitess, funkcja celu. Wskaźnik
poprawności, stosowalności
Algorytm genetyczny - przebieg
Genotypy osobników z populacji ulegają modyfikacji podczas
rozmnażania. Zmiany te wynikają z:
Mutacji
Mieszania
Oceniamy przystosowanie nowopowstałych osobników
Czym lepiej przystosowany jest osobnik, tym większe ma
prawdopodobieństwo na wzięcie udziało w tworzeniu następnego
pokolenia. Osobniki z najmniejszym przystosowaniem giną
Algorytm genetyczny - przykład
Problem: Znaleźć maksimum funkcji rzeczywistej f(x) na pewnym
zboiorze X.
Algorytm genetyczny - przykład
1. Wstęp – kodowanie problemu
1.
2.
Wszystkie potencjalne rozwiązania to np. binarne przedstawienie liczby
long
f(x) – w tym przypadku może być wskaźnikiem przystosowania rozwiązania
2. Ustalamy wielkość populacji N, a następnie losujemy N genotypów
(osobników)
3. Ustalamy ile procent bitów („genów”) w populacji ulega mutacji w
jednym pokoleniu (najczęściej od 0.1% do 0.5%). Ustalamy też
prawdopodobieństwo skrzyżowania dwóch osobników (najczęściej
od 20% do 80%)
4. Sprawdzamy „dostosowanie” naszych osobników przy użyciu
funkcji celu. Oceniamy fenotyp, czyli zinterpretowany (dla danego
problemu) kod genetyczny
Algorytm genetyczny - przykład
5. Selekcja osobników na podstawie wskaźnika przystosowania. Z obecniej
populacji N osobników losujemy N osobników nowej populacji stosując
tzw. Roulette Selection, gdzie prawdopodobieństwo wylosowania każdego z
osobników:
6. Nowa populacja staje się populacją bierzącą i wracamy do punktu 3.
Algorytm genetyczny – podsumowanie
Zalety
Algorytm jest uniwersalny
Nie musimy wiedzieć co optymalizujemy (metoda czarno skrzynkowa)
Wystarczy nawet selekcja turniejowa
Algorytm niedeterministyczny, więc możemy próbować optymalizować
wielokrotnie
Stosunkowo duża szybkość działania
Algorytm genetyczny – podsumowanie
Wady
Uniwersalność – mniejsza skuteczność niż alg. Specjalistyczne
Wolniejsza od metod zachłannych
Małe prawdopodobieństwo znalezienia rozwiązania optymalnego
Wszystko zależy od dobranej funkcji fitness
Algorytm genetyczny – przykłady
Evolved antenna
Algorytm genetyczny – przykłady
Evolved Virtual Creatures, Karl Sims, 1994
Starfish Self Modeling Robot
Strategie ewolucyjne
Zmienna długość kodu genetycznego (liczby zmiennoprzecinkowe)
Opiera się na mutacji, a nie na rekombinacji
Autoadaptacja – możliwość zmiany parametrów w czasie
W prostych strategiach: tzw. Reguła 1/5 sukcesów Rechenberga
Możliwe kodowanie parametrów w osobniku
Strategie ewolucyjne – problem
Maksymilizacja funkjci f: Rn -> R na zadanym przedziale [a1, b1] x … x
[an, bn]
Strategie ewolucyjne – Algorytm ES(1 + 1)
Populacja: 1
Kolejne populacje wybierane są ze zbioru rodziców (rodzica) i zbioru
dzieci (dziecka)
Mechanizm adaptacji: Reguła 1/5 sukcesów Rechenberga
Strategie ewolucyjne – Algorytm ES(1 + 1)
EVOLUTION-STRATEGY(F, σ0, θ1, θ2)
1. σ ← σ0;
2. x ← RANDOM-INDIVIDUAL();
3. INDIVIDUAL-EVALUATION(x, F);
4. while not TERMINATION-CONDITION(σ)
5. do
6.
y ← MUTATION(x, σ);
7.
INDIVIDUAL-EVALUATION(y, F);
8.
if F(x) < F(y)
9.
then
10.
x ← y;
11.
SIGMA-UPDATING(σ, θ1, θ2);
Strategie ewolucyjne – Algorytm ES(1 + 1)
Mutacja
Osobnik x = (x1, x2, …, xd) ∈ Rd
Z osobnika x tworzymy nowego osobnika y = (y1, y2, …, yd) ∈ Rd
yi = xi + εi dla i = 1, 2, …, d
gdzie εi jest liczbą rzeczywistą wygenerowaną losowo z rozkładen
normalnym 𝑁(0, 𝜎 2 ) o średniej 0 i wariacji σ2.
Parametr σ określa zasięg mutacji. Jest on modyfikowany podczas
działania algorytmu (Sigma-Updating, Reguła 1/5 sukcesów
Rechenberga)
Strategie ewolucyjne – Algorytm ES(1 + 1)
Sigma-Updating
Aktualizuje σ przy użyciu reguły 1/5 sukcesów Rechenberga z
parametrami θ1 i θ2.
Parametry te można dowolnie dobrać, ale doświadczenie pokazało, że
1
najlepsze uzyskuje się dla 𝜃1 =
≈ 1.22 i 𝜃2 = 0.82
0.82
Strategie ewolucyjne – Algorytm ES(1 + 1)
Reguła 1/5 sukcesów Rechenberga
Jeżeli prez k iteracji liczba mutacji zakończonych sukcesem była większa niż
1/5 ogólnej liczby wykonanych mutacji, to zasięg mutacji jest zwiększany
𝜎 ← 𝜃1 𝜎
dla pewnego 𝜃1 > 1
Jeżeli przez ostatnie k iteracji liczba mitacji zakończonych sukscesem była
mniejsza niż 1/5 ogólnej liczby wykonanych mutacji, to zasięg mutacji jest
zmienszany
𝜎 ← 𝜃2 𝜎
dla pewnego 𝜃2 < 1
W przeciwnym wypadku, zasięg mutacji nie zmienia się
Strategie ewolucyjne – Algorytm ES(1 + 1)
Wrażliwość na minima lokalne funkcji
Użyta metoda autoadaptacji może prowadzić do przedwczesnej
zbieżności
Rozszerzenie ES(μ + 1)
Strategie ewolucyjne – Algorytm ES(1 + 1)
Przykład zastosowania
Optymlizacja dyszy dwufazowej (Hans-Paul Schwefel)
Wydajność ok. 55%
Wydajność ok. 80%
Strategie ewolucyjne – Algorytmy ES(μ + λ) i
ES(μ, λ)
ES(μ + λ)
Populacja μ osobników generuje λ potomków
Kolejne pokolenie (populację) wybieramy z sumy zbiorów rodziców i dzieci,
czyli z μ + λ osobników
ES(μ, λ)
Populacja μ osobników generuje λ potomków
Kolejne pokolenie (populację) wybieramy ze zbioru potomków, czyli z λ
osobników
Mechaniz autoadaptacji oparty o kodowanie parametrów
ewolucyjnych w pojedynczym osobniku
Zazwyczaj μ = 20 i λ = 7μ
Strategie ewolucyjne – Algorytmy ES(μ + λ) i
ES(μ, λ)
Obserwacja
W początkowej fazie działania algorytmu pożyteczne są „duże”
mutacje
„Małe mutacje” są korzystniejsze w końcowej fazie algorytmu
Możliwy jest przypadek, gdzie kożystna „wielkość” mutacji będzie się
zmieniać naprzemiennie: duża, mała, duża, mała itd.
Strategie ewolucyjne – Algorytmy ES(μ + λ) i
ES(μ, λ)
Wnioski
Algorytm musi sam dostosowywać (optymalizować) „wielkość”
mutacji potrzebnej w danym momencie na podstawie obserwacji (np.
przy użyciu reguły 1/5 sukcesów)
Każdy osobnik powinien przechowywać własną „wielkość” mutacji
Strategie ewolucyjne – Algorytmy ES(μ + λ) i
ES(μ, λ)
Osobnik w populacji ma postać:
𝒚 = [𝒙𝟏 , 𝒙𝟐 , … , 𝒙𝒏 , 𝝈]
gdzie 𝒙𝟏 , 𝒙𝟐 , … , 𝒙𝒏 ∈ ℝ𝒏
Strategie ewolucyjne – Algorytmy ES(μ + λ) i
ES(μ, λ)
• Mutacja osobnika y tworzy nowego osobnika 𝑦′
𝑦 = 𝑥1 , 𝑥2 , … , 𝑥𝑛 , 𝜎
𝑦 ′ = 𝑥 ′1 , 𝑥 ′ 2 , … , 𝑥 ′ 𝑛 , 𝜎 ′
• Obliczenie następnej „wielkości” (kroku) mutacji 𝜎′
𝜎 ′ = 𝜎 ∗ 𝑒𝑥𝑝 𝜏0 ∗ 𝑁 0, 1
𝑖𝑓 𝜎 ′ == 𝜀0 𝜎 ′ = 𝜀0
• Następnie dla każdego 𝑥𝑖 :
𝑥′𝑖 = 𝑥𝑖 + 𝑁𝑖 (0, 𝜎′)
Parametr 𝜏0 to parametr „szybkości uczenia”
1
𝑛
(Schwefal, 1995)
𝜏0 ~
Strategie ewolucyjne – Algorytmy ES(μ + λ) i
ES(μ, λ)
Każdy gen ma swój własny krok „wielkość” mutacji
𝑦 = 𝑥1 , 𝑥2 , … , 𝑥𝑛 , 𝜎1 , 𝜎2 , … , 𝜎𝑛
𝑦 ′ = 𝑥 ′1 , 𝑥 ′ 2 , … , 𝑥 ′ 𝑛 , 𝜎 ′1 , 𝜎 ′ 2 , … , 𝜎′𝑛
Uaktualnienie kroku mutacji
𝜎′𝑖 = 𝜎𝑖 ∗ 𝑒𝑥𝑝 𝜏0 ∗ 𝑁 0, 1 + 𝜏1 ∗ 𝑁𝑖 0,1
Proponowane paramerty:
𝜏0 ~
1
2𝑛
𝜏1 ~
Dla każdego 𝑥𝑖 :
𝑥′𝑖 = 𝑥𝑖 + 𝑁𝑖 (0, 𝜎′𝑖 )
1
2 𝑛
Strategie ewolucyjne – Algorytmy ES(μ + λ) i
ES(μ, λ)
Problemy:
• W alkorytmie ES(μ + λ) może dojść do utworzenia
„niezastępowalnego” osobnika
• ES(μ, λ) dla funkcji wielomodalnych daje zazwyczaj lepsze wyniki
Strategie ewolucyjne – Algorytmy ES(μ/ρ + λ)
i ES(μ/ρ, λ)
Rekombinacja – tworzenie „dzieci”
1. Wybieramy 𝜌 osobników z 𝜇 rodziców
2. Tworzymy potomka poprzez rekombinacje chromosomów
wybranych 𝜌 rodziców
3. Poddajemu mutacji nowopowstałe dziecko i dodajemy je do
populacji dzieci
Takich potomków tworzymy 𝜆.
Algorytmy z rekombinacją to: ES(μ/ρ + λ) i ES(μ/ρ, λ)
Strategie ewolucyjne – Algorytmy ES(μ/ρ + λ)
i ES(μ/ρ, λ)
Przy rekombinacji wartości genów nowego osobnika obliczamy:
𝑟𝑗
𝑥′𝑗 = 𝑥𝑗
gdzie 𝑟𝑗 jest wylosowanym numerem rodzica
„Wielkość” mutacji obliczamy w sposób:
1
𝜎′𝑗 =
𝜌
𝜌
𝜎𝑗𝑖
𝑖=1
Programowanie genetyczne - Wstęp
Programowanie genetyczne to zautomatyzowana metoda mająca na
celu tworzenie programów komputerowych w oparciu o ogólną
definicję problemu. (Wikipedia)
Programowanie genetyczne - Wstęp
Po raz pierwszy przedstawone w pracy Nichaela L. Cramera w 1985 r.
Spopularyzowane przez Johna Kozę w 1992 r. (Genetic Programming:
On the Programming of Computers by Means of Natural Selection)
Programowanie genetyczne - Wstęp
Tzw. Drzewa składowe (parse tree) reprezentują program
Wymaga potężnych zasobów obliczeniowych
Rozmiar populacji to często miliony osobników
Populacja
programów
Tworzenie
potomków
(nowe programy)
Ewolucja
(testowanie i
selekcja)
Programowanie genetyczne – Parse tree
Reprezentacja wyrażenia logicznego
𝑥
𝑦⇒ 𝑥
𝑧
( 𝑧 ⟺ (𝑤
𝑣)
Programowanie genetyczne – Parse tree
Reprezentacja kodu
1.
2.
3.
4.
5.
i = 1;
while ( i < 20 )
{
i = i + 1
}
;
=
i
while
1
<
i
=
20
i
+
i
1