Strona główna Algorytmy i Struktury Danych Optymalizator ewolucji różnicowej

🧬 Optymalizator ewolucji różnicowej

Ewolucja różnicowa (DE/rand/1/bin): mutant v = x_r1 + F(x_r2 - x_r3), krzyżowanie ze współczynnikiem CR. Wariant samoadaptacyjny dostraja F i CR. Testy na funkcjach Rosenbrocka, Rastrigina i Ackleya.

Algorytmy i Struktury Danych2DŚredni60 FPS
differential-evolution ↗ Otwórz osobno
Interfejs samej symulacji jest w języku angielskim.

Jak to działa

DE utrzymuje populację NP kandydujących wektorów. Co pokolenie, dla każdego wektora docelowego x_i, wybierane są trzy losowe wektory x_r1, x_r2, x_r3. Mutant v = x_r1 + F·(x_r2 - x_r3). Krzyżowanie dwumianowe tworzy próbny wektor u: każdy wymiar pobrany z v z prawdopodobieństwem CR lub z x_i w przeciwnym razie. Jeśli f(u) <= f(x_i), u zastępuje x_i (selekcja zachłanna).

Mutacja: v_i = x_r1 + F · (x_r2 − x_r3) Krzyżowanie: u_ij = v_ij jeśli rand() < CR lub j==j_rand x_ij w przeciwnym razie Selekcja: x_i(t+1) = u_i jeśli f(u_i) <= f(x_i) x_i w przeciwnym razie Rosenbrock: f = (1−x)²+100(y−x²)² min=0 przy (1,1) Rastrigin: f = 20 + x²−10cos(2πx) + y²−10cos(2πy) Ackley: f = −20e^(−0.2√(x²+y²)/2) − e^(cos(2πx)+cos(2πy))/2 + 20+e

Wykres konturowy pokazuje krajobraz przystosowania (ciemniejszy=niższy). Niebieskie kropki to populacja; czerwona gwiazda oznacza najlepsze rozwiązanie. Wykres zbieżności (na dole) pokazuje najlepsze przystosowanie na pokolenie w skali logarytmicznej.

Najczęściej zadawane pytania

Czym jest ewolucja różnicowa (DE)?

Ewolucja różnicowa to stochastyczny algorytm optymalizacji oparty na populacji, autorstwa Storna i Price'a (1997). Ewoluuje kandydujące rozwiązania, używając mutacji (różnic wektorów), krzyżowania i selekcji bez potrzeby informacji o gradiencie.

Jak działa mutacja DE/rand/1/bin?

Z populacji wybierane są trzy losowe wektory x_r1, x_r2, x_r3. Wektor mutanta to v = x_r1 + F·(x_r2 - x_r3), gdzie F ∈ [0,2] to współczynnik skali mutacji kontrolujący rozmiar kroku przeszukiwania.

Czym jest operacja krzyżowania w DE?

W krzyżowaniu dwumianowym (bin) każdy wymiar wektora próbnego u jest pobierany z mutanta v z prawdopodobieństwem CR lub z celu x w przeciwnym razie. Co najmniej jeden wymiar zawsze pochodzi z mutanta.

Czym są parametry F i CR w DE?

F (współczynnik mutacji) kontroluje rozmiar kroku mutacji, zwykle F ∈ [0,4, 1,0]. CR (współczynnik krzyżowania) kontroluje ułamek parametrów pochodzących z mutanta, zwykle CR ∈ [0,1, 0,9]. Wyższe CR = więcej eksploracji.

Czym jest funkcja Rosenbrocka?

f(x,y) = (1-x)² + 100(y-x²)² ma wąską zakrzywioną dolinę. Jej minimum globalne znajduje się w (1,1) z f=0. Dolinę łatwo znaleźć, ale minimum trudno precyzyjnie zlokalizować.

Czym jest funkcja Rastrigina?

Funkcja Rastrigina jest silnie wielomodalna: f(x,y) = 20 + x²-10cos(2πx) + y²-10cos(2πy). Minimum globalne znajduje się w (0,0) z f=0. Testuje zdolność optymalizacji globalnej.

Czym jest funkcja Ackleya?

Funkcja Ackleya ma niemal płaski region zewnętrzny z głębokim minimum globalnym w początku układu. Wyzwaniem dla algorytmów jest uniknięcie przedwczesnej zbieżności do optimów lokalnych w płaskim regionie.

Jak DE wypada w porównaniu z innymi algorytmami ewolucyjnymi?

DE zwykle przewyższa algorytmy genetyczne i rój cząstek na ciągłych benchmarkach. Jest prostsze niż CMA-ES i dobrze skaluje się do ~100 wymiarów. CMA-ES jest często lepsze dla bardzo wysokowymiarowych gładkich problemów.

Czym jest samoadaptacyjne DE (SaDE)?

SaDE automatycznie dostosowuje F i CR podczas optymalizacji na podstawie ich wskaźników sukcesu, eliminując potrzebę ręcznego dostrajania. Udane wartości parametrów są zapisywane i wykorzystywane do generowania nowych wartości parametrów.

Kiedy powinienem używać ewolucji różnicowej?

Używaj DE dla optymalizacji typu czarna skrzynka, niedyferencjowalnej, wielomodalnej lub zaszumionej ze zmiennymi ciągłymi, zwykle 5–50 wymiarów. Dobre do dopasowywania parametrów i projektowania inżynieryjnego. Metody gradientowe są lepsze, gdy dostępne są pochodne.

O tej symulacji

Ten symulator uruchamia pętlę ewolucyjną DE/rand/1/bin na żywo w przeglądarce: co pokolenie, każdy członek populacji tworzy mutanta z trzech innych losowo wybranych wektorów, miesza go z celem poprzez krzyżowanie dwumianowe i przetrwa tylko wtedy, gdy jego przystosowanie pokona oryginał. Obserwuj, jak populacja kropek pełznie po mapie konturowej Rosenbrocka, Rastrigina lub Ackleya w stronę czerwonej gwiazdy, podczas gdy panel po prawej stronie kreśli najlepsze przystosowanie w skali logarytmicznej.

🔬 Co pokazuje

Żywą populację kandydujących punktów (x, y) zbiegających do minimum globalnego wybranej funkcji benchmarkowej, z krajobrazem przystosowania renderowanym jako kontur od ciemnego do jasnego oraz zbieżnością śledzoną na wykresie w skali logarytmicznej.

🎮 Jak korzystać

Wybierz Funkcję (Rosenbrock, Rastrigin, Ackley), dostrój suwaki Populacji NP, Mutacji F i Krzyżowania CR, a następnie naciśnij ▶ Odtwórz lub Krok →, by przechodzić przez pokolenia pojedynczo. Naciśnij R, by zrestartować, lub P, by wstrzymać.

💡 Czy wiesz, że?

DE w ogóle nie potrzebuje gradientów — wnioskuje użyteczne kierunki przeszukiwania wyłącznie z rozrzutu różnic wektorów wewnątrz własnej populacji, dlatego radzi sobie z zaszumionymi, nieciągłymi celami typu czarna skrzynka, które pokonują optymalizatory oparte na rachunku różniczkowym.

Najczęściej zadawane pytania

Dlaczego algorytm potrzebuje trzech losowych wektorów na aktualizację?

Dwa z nich (x_r2, x_r3) tworzą wektor różnicy kodujący prawdopodobny kierunek przeszukiwania i rozmiar kroku, wywiedziony z bieżącego rozrzutu populacji; trzeci (x_r1) zakotwicza mutanta. To samoreferencyjne próbkowanie pozwala DE automatycznie dostosowywać rozmiar kroku w miarę zbiegania populacji.

Co się dzieje, gdy ustawię CR blisko 1,0?

Niemal każdy wymiar wektora próbnego pochodzi z mutanta zamiast z celu, więc przeszukiwanie eksploruje bardziej agresywnie — przydatne dla funkcji separowalnych, wielomodalnych, takich jak Rastrigin, ale często wolniejsze w dostrajaniu ostatecznego minimum.

Dlaczego Rosenbrock wygląda na łatwy na konturze, ale zbiega powoli?

Jego zakrzywiona dolina jest szeroka i wyraźnie widoczna, więc populacja znajduje ją w garstce pokoleń, ale dno doliny blisko (1,1) jest niemal płaskie w kierunku ruchu, więc poprawy przystosowania stają się niewielkie, a linia zbieżności w skali logarytmicznej się wypłaszcza.

Dlaczego rozmiar populacji (NP) ma znaczenie?

Większe NP próbkuje więcej wektorów różnicy na pokolenie, dając bogatszy zbiór kierunków mutacji i redukując ryzyko przedwczesnej zbieżności na krajobrazach wielomodalnych, takich jak Rastrigin, kosztem większej liczby ewaluacji funkcji na pokolenie.

Czy DE może utknąć, i jak zobaczę to tutaj?

Tak — jeśli różnorodność zapadnie się zbyt wcześnie, odchylenie standardowe populacji (pokazane w panelu Statystyk) spada blisko zera, podczas gdy najlepsze przystosowanie zatrzymuje się powyżej prawdziwego minimum; podniesienie F lub CR, albo restart z większym NP, zwykle przywraca postęp.

Podobne symulacje