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