Ćwiczenie nr 6 Algorytmy Genetyczne Schemat blokowy

Transkrypt

Ćwiczenie nr 6 Algorytmy Genetyczne Schemat blokowy
Inteligencja obliczeniowa
Ćwiczenie nr 6
Algorytmy Genetyczne
Schemat blokowy podstawowego algorytmu genetycznego; Reprezentacja osobników
Kodowanie rozwiązań; Funkcja celu; Podstawowe operacje: selekcja, krzyżowanie, mutacja
1. Wprowadzenie
Algorytmy genetyczne są algorytmami stochastycznymi, których sposób przeszukiwania
przestrzeni potencjalnych rozwiązań naśladuje pewne procesy naturalne takie jak:
dziedziczenie genetyczne i darwinowską walkę o przeżycie. Przenośnia leżąca u podstaw
algorytmów genetycznych jest związana z ewolucją w naturze. W trakcie procesu ewolucji
każdy gatunek styka się z problemem lepszego przystosowania się do skomplikowanego i
zmiennego środowiska. Doświadczenie, jakie uzyskuje każdy osobnik zostaje wbudowane w
jego układ chromosomów.
Do opisu algorytmów genetycznych używa się słownictwa zapożyczonego z genetyki
naturalnej. Mówimy w niej o osobnikach w populacji, często osobniki nazywane są łańcuchami
lub chromosomami. Chromosomy składają się z genów uszeregowanych liniowo, a każdy gen
decyduje o dziedziczności jednej lub kilku cech.
Biologiczny odpowiednik algorytmów genetycznych można znaleźć w postaci różnych
populacji żywych istot żyjących na naszej planecie i podlegających nieugiętym prawom natury
oraz dążących do przetrwania w celu przeżycia danego gatunku. Populacja znajdująca się w
algorytmie genetycznym składa się z różnego rodzaju osobników, a przeważnie każdy osobnik
jest inny. Cechy danego osobnika (jego przystosowanie do funkcji celu) zwiększają lub
zmniejszają jego szanse na przetrwanie. Identyczne odwzorowanie znajdujemy w świecie
naturalnym, gdzie również każda populacja składa się z pewnej liczby osobników, z których
każdy jest inny. Również i tutaj cechy danego osobnika składają się na jego ogólne
przystosowanie do środowiska naturalnego i powodują to, że dany osobnik ma większe lub
mniejsze szanse przeżycia. Zgodnie z prawami natury przetrwają tylko osobniki najlepiej
przystosowane. W środowisku naturalnym osobniki, które przetrwały krzyżują się ze sobą w
celu wydania nowego pokolenia. Pokolenie to jest lepiej przystosowane do środowiska poprzez
dziedziczenie cech od swoich rodziców. Identyczna sytuacja zachodzi również w algorytmach
genetycznych, gdzie ciągi (chromosomy), które są lepiej przystosowane przeżywają i wydają w
wyniku krzyżowania nowe pokolenie, będące przeważnie lepiej przystosowane na skutek
dziedziczenia cech od swoich rodziców. W środowisku naturalnym można spotkać się również z
mutacją; jest to operator genetyczny, który powoduje losową zmianę genu, przez co osobnik
albo zyskuje na wartości (jego pewna cecha ulega polepszeniu) i staje się bardziej
przystosowany do środowiska, albo zmiana taka powoduje pewną degradację osobnika np.
skutkiem mutacji może być wystąpienie pewnej choroby genetycznej, która zmniejszy jego
szanse na przetrwanie. W algorytmach genetycznych również można znaleźć operator mutacji,
który jest drugim po krzyżowaniu podstawowym operatorem genetycznym i tak jak w
środowisku naturalnym może on doprowadzić do zmiany przystosowania danego osobnika do
funkcji celu. Osobnik poddany operatorowi mutacji może zwiększyć lub zmniejszyć swoje
prawdopodobieństwo przetrwania. Z powyższych rozważań widać wyraźnie jak bardzo
algorytmy genetyczne są skorelowane ze swoim biologicznym odpowiednikiem, od którego się
wywodzą.
Algorytmy genetyczne © dr inż. Adam Słowik
1
Inteligencja obliczeniowa
2. Podstawy działania AG
W podpunkcie tym zostanie przedstawione działanie algorytmu genetycznego dla prostego
zadania optymalizacji. Rozważaniu podlegać będzie zadanie maksymalizacji funkcji f, jednak
jeśli zadanie optymalizacji będzie polegać na minimalizacji funkcji f, to jest ono równoważne
maksymalizacji funkcji g, przy czym należy zaznaczyć, że g=-f, czyli
min { f(x) } = max { g(x) } = max { - f(x) }
(1)
Dodatkowo można przyjąć, że funkcja przyjmuje wartości dodatnie w swojej dziedzinie, jeżeli
tak nie jest można zawsze dodać pewną dodatnią stałą C, ponieważ
max { g(x) } = max { g(x) + C }
(2)
Załóżmy teraz, że chcemy maksymalizować funkcję k zmiennych f(x1, ..., xk) oraz, że każda
zmienna może przybierać wartości z przedziału Di = [a i , bi ] ⊆ R i f ( x1 ,..., x k ) >0 dla wszystkich
x i ∈ Di . Wiemy również, że chcemy optymalizować funkcję f z pewną żądaną dokładnością. Dla
każdej i-tej zmiennej należy określić jej dokładność ZDi. Poniższa zależność pozwala obliczyć
ile genów musi przypadać na i-tą zmienną, aby otrzymać określoną wcześniej dokładność:
bi − ai
≤ ZDi
2 mi − 1
(3)
czyli liczba genów dla i-tej zmiennej ma spełniać nierówność:
b − ai
2 mi ≥ i
+1
(4)
ZDi
mi oznacza najmniejszą liczbę całkowitą spełniającą nierówność (4). Wówczas reprezentacja,
w której każda zmienna x i jest zakodowana jako łańcuch binarny o długości mi , w oczywisty
sposób będzie spełniała wymagania dokładności. Natomiast wartość każdej i-tej zmiennej
można otrzymać w sposób jawny stosując zależność:
x i = a i + dec(1010...110012 ) ⋅ (bi − a i ) / ( 2 mi − 1)
(5)
gdzie dec (łańcuch binarny) jest równy dziesiętnej wartości łańcucha binarnego.
W algorytmie genetycznym każdy osobnik – chromosom (jako potencjalne rozwiązanie) jest
reprezentowany przez łańcuch o długości:
k
m = ∑ mi
(6)
i =1
Pierwsze m1 bitów odpowiada wartościom zmiennej x1 z przedziału [a1 , b1 ] , druga grupa m 2
bitów odpowiada wartościom zmiennej x2 z przedziału [a 2 , b2 ] , i tak dalej, aż do ostatniej grupy
m k bitów, które odpowiadają wartościom zmiennej xk z przedziału [a k , bk ] . W celu ustalenia
populacji początkowej złożonej z PopSize chromosomów generuje się losowo bit po bicie
każdego z nich, jednak jeśli dysponujemy pewną wiedzą o rozkładzie możliwych optimów,
można wówczas użyć tej informacji do odpowiedniego rozmieszczenia początkowych
(potencjalnych) rozwiązań. Reszta algorytmu jest oczywista. W każdym pokoleniu będą
oceniane wszystkie chromosomy (używając funkcji celu), będzie wybierana nowa populacja
zgodnie z rozkładem prawdopodobieństwa określonym na wartościach dopasowań
Algorytmy genetyczne © dr inż. Adam Słowik
2
Inteligencja obliczeniowa
poszczególnych chromosomów do funkcji celu oraz będą stosowane operatory genetyczne
takie jak krzyżowanie i mutacja. Po pewnej liczbie pokoleń, gdy nie będzie już poprawy
generowanych wyników (lub zostały spełnione warunki zakończenia algorytmu) najlepsze
chromosomy reprezentują najkorzystniejsze rozwiązanie danego problemu. Algorytm
genetyczny często jest zatrzymywany po ustalonej liczbie iteracji, w zależności od szybkości i
pamięci posiadanego komputera.
Załóżmy, że utworzono losowo pewną populację chromosomów (osobników) reprezentujących
potencjalne rozwiązania problemu. Następnie należy ocenić i utworzyć nową populację zgodnie
z funkcją celu. Dokonujemy tego w procesie selekcji (reprodukcji), a wybór nowej populacji
następuje zgodnie z rozkładem prawdopodobieństwa określonym na wartościach dopasowań.
Używa się tutaj najczęściej metodę ruletki o wielkości pól zgodnej z wartościami dopasowań.
Ruletkę taką konstruuje się w następujący sposób (poniżej zakładamy, że wartości
dopasowania są dodatnie, jeżeli tak nie jest należy odpowiednio przeskalować wartości):
•
oblicz wartość dopasowania eval (v i ) dla każdego chromosomu
v i (i = 1,....., PopSize)
•
oblicz całkowite dopasowanie populacji F =
PopSize
∑ eval (v ) ,
i =1
•
oblicz prawdopodobieństwo wyboru p i każdego chromosomu
v i (i = 1,....., wielkość_populacji)
•
i
p i = eval (v i ) / F ,
wyznacz przedziały ruletki [RMin, RMax) dla każdego i-tego osobnika zgodnie z
zależnością:
RMini = RMaxi-1; RMaxi=RMini+pi
Proces selekcji jest oparty na obrocie ruletką PopSize razy i wyborze za każdym razem jednego
chromosomu do nowej populacji w następujący sposób:
•
•
wygeneruj liczbę przypadkową (zmiennopozycyjną) r z zakresu [0,1)
jeśli (r >= RMini) oraz (r<RMaxi) wówczas do nowej populacji wybierz osobnika o
numerze i-tym
Oczywiście pewne chromosomy będą wybrane więcej niż raz.
Po utworzeniu nowej populacji stosujemy na niej operatory genetyczne. Pierwszym jest
operator krzyżowania, który występuje w systemie genetycznym zgodnie z parametrem
określanym prawdopodobieństwem krzyżowania p k . Prawdopodobieństwo to umożliwia nam
obliczenie oczekiwanej liczby chromosomów p k ⋅ PopSize, które ulegną operacji krzyżowania.
Aby zastosować ten operator postępujemy w następujący sposób:
•
•
dla każdego chromosomu generujemy liczbę losową (zmiennopozycyjną) r z zakresu
[0,1)
jeśli dla i-tego chromosomu r< p k , to wybieramy i-ty chromosom do krzyżowania.
Mając określoną pulę chromosomów, które będą podlegać krzyżowaniu, dobieramy wybrane
chromosomy w pary (oczywiście również losowo). Gdy liczba wybranych chromosomów jest
parzysta wówczas możemy je łatwo połączyć, jednak gdy liczba chromosomów jest nieparzysta
Algorytmy genetyczne © dr inż. Adam Słowik
3
Inteligencja obliczeniowa
należy albo dodać, albo odjąć jeden chromosom, oczywiście także losowo. Po połączeniu
chromosomów w pary, dla każdej z nich generujemy losową liczbę poz z zakresu [1,m-1], gdzie
m jest całkowitą długością – liczbą bitów – chromosomu. Wylosowana liczba poz określa nam
punkt cięcia chromosomu do wymiany. Tak więc dwa chromosomy
(d 1 d 2 ...d poz d poz +1 ...d m ) i (e1 e 2 ...e poz e poz +1 ...e m )
są zamieniane na parę potomków
(d 1 d 2 ...d poz e poz +1 ...e m ) i (e1 e 2 ...e poz d poz +1 ...d m )
Następną operacją jest mutacja, która wykonywana jest bezpośrednio na bitach. Na podstawie
parametru algorytmu genetycznego, prawdopodobieństwa mutacji p m , możemy obliczyć
oczekiwaną liczbę zmutowanych bitów p m ⋅ m ⋅ PopSize. Każdy bit (we wszystkich
chromosomach i w całej populacji) ma równe szanse na mutację, to znaczy zmiany z 0 na 1 lub
odwrotnie. W przypadku mutacji postępujemy następująco:
•
•
dla każdego chromosomu bieżącej populacji (po krzyżowaniu) i dla każdego bitu
w chromosomie wygeneruj liczbę losową (zmiennopozycyjną) r z zakresu [0,1)
jeżeli liczba r< p m , to zmutuj dany gen (bit).
Po zakończeniu mutacji obliczane jest ponownie przystosowanie całej populacji, następnie
sprawdzany jest warunek czy można zakończyć pracę algorytmu genetycznego, jeśli tak to
wyprowadzamy wyniki na ekran i kończymy pracę algorytmu genetycznego, jeśli nie to
dokonujemy kolejno: selekcji, krzyżowania i mutacji i cały proces powtarza się.
Poniżej przedstawiono schemat działania algorytmu genetycznego:
1. Utwórz losowo populację początkową
2. Oceń przystosowanie osobników do funkcji celu
3. Dopóki nie osiągnięto kryterium stopu wykonaj
4. selekcję osobników
5. operację krzyżowania chromosomów
6. mutację osobników
7. ocenę przystosowania osobników do funkcji celu
8. Wyprowadź otrzymany wynik (wyniki)
3. Optymalizacja funkcji jednej zmiennej - przykład
Jako funkcję testową dla tego zadania użyto:
y = f ( x) = 50 − 5 ⋅ sin(10 ⋅ π ⋅ x) − 10 ⋅ ( x − 1.5) 2
x ∈ [0,3]
Powyższa funkcja jest wielomodalna tzn. posiada wiele maksimów oraz minimów.
W prezentowanym przykładzie skupimy się nad znalezieniem maksimum globalnego funkcji w
podanym przedziale od 0 do 3. W celu lepszego zobrazowania wzoru funkcji została ona
zaprezentowana graficznie na wykresie przedstawionym na rys. 1.
Algorytmy genetyczne © dr inż. Adam Słowik
4
Inteligencja obliczeniowa
Rys. 1 – Funkcja testowa f(x) w formie graficznej.
Jak widać funkcja w podanym przedziale x ∈ [0,3] (Xmin=0; Xmax=3) przyjmuje wiele
maksimów oraz wiele minimów, jednak posiada w tym przedziale tylko jedno maksimum
globalne, które algorytm genetyczny będzie się starał wyznaczyć.
Rys. 2 – Funkcja testowa f(x) – globalne ekstremum.
Z wykresu przedstawionego na rys. 2 wynika, że funkcja przyjmuje wartość maksymalną:
f(x) ≈ 54.9715 dla argumentu x ≈ 1.551. Również z wykresu (rys. 5.1.2) widać, że niewielkie
zmiany argumentu mogą prowadzić do „wskoczenia” algorytmu w maksimum lokalne.
Załóżmy, że chcemy aby zmienna x zmieniała się z dokładnością 0.01, wówczas z nierówności
(4) wynika, że:
2m ≥
3−0
+ 1 => 2 m ≥ 301
0.01
Najmniejsza liczba całkowita m dla której jest spełniona powyższa nierówność wynosi 9.
W związku z tym każdy osobnik będzie się składał z 9 genów (LG=9) w których zapisana będzie
zmienna x.
Algorytmy genetyczne © dr inż. Adam Słowik
5
Inteligencja obliczeniowa
Również postanowiono zarezerwować 6 dodatkowych komórek, na następujące wartości:
wartość dziesiętną dec, odkodowaną wartość x, wartość funkcji y, wartość przystosowania
względnego, wartość RMin, wartość RMax. Czyli do zapisania wszystkich wartości wystarczy
wektor złożony z 15 elementów. Przyjęto również, że populacja składa się z 20 osobników.
W związku z tym fragment kodu tworzący populację osobników może wyglądać następująco:
Population1=zeros(20,15); // Populacja podstawowa
Population2=zeros(20,15); // Populacja tymczasowa
Xmin=0; Xmax=3; LG=9;
for i=1:20
for j=1:9
if rand()<0.5
Population1(i,j)=1;
else
Population1(i,j)=0;
end
end
end
Rys. 3 – Fragment kodu tworzącego populacje osobników (losowo)
Następnie poniższe kroki wykonywane są k razy aż do zakończenia algorytmu:
W pierwszym kroku oblicza, się wartość dec, wartość x, wartość y, oraz przystosowanie łączne
(PL), a następnie wartości te są wpisywane do odpowiednich komórek.
//---- PL – przystosowanie laczne
PL=0;
for i=1:20
dec=0;
for j=1:9
if Population1(i,j)==1
dec=dec+Population1(i,j)*(2^(9-j));
end;
end;
Population1(i,10)=dec;
X=((Xmax-Xmin)/(2^LG-1))*dec+Xmin;
Population1(i,11)=X;
Y=50-5*sin(10*3.14*X)-10*(X-1.5)^2;
Population1(i,12)=Y;
PL=PL+Y;
end;
Rys. 4 – Fragment kodu wyznaczającego: PL, dec, x i y
W drugim kroku oblicza się przystosowanie względne oraz wyznacza się przedziały koła ruletki
dla każdego osobnika.
Algorytmy genetyczne © dr inż. Adam Słowik
6
Inteligencja obliczeniowa
//------------------- oblicz przystosowanie wzgledne
for i=1:20
Population1(i,13)=Population1(i,12)/PL;
end;
//------------------- oblicz przedzialy ruletki
Population1(1,14)=0;
Population1(1,15)=Population1(1,14)+Population1(1,13);
for i=2:20
Population1(i,14)=Population1(i-1,15);
Population1(i,15)=Population1(i,14)+Population1(i,13);
end;
Rys. 5 – Fragment kodu obliczającego przystosowanie względne oraz wyznaczającego
przedziały koła ruletki
W następnym kroku, dokonuje się selekcji osobników z populacji podstawowej „Population1” do
populacji tymczasowej „Population2”. Selekcja jest dokonywana metodą ruletki.
(PL), a następnie wartości te są wpisywane do odpowiednich komórek.
//-------------------- dokonaj selekcji
for i=1:20
los=rand(); Nr=0;
for j=1:20
if (los>=Population1(j,14)) & (los<Population1(j,15))
Nr=j;
end;
end;
Population2(i,:)=Population1(Nr,:);
end;
Rys. 6 – Przykładowy kod realizujący selekcję osobników metodą ruletki
W następnym kroku dokonuje się operacji krzyżowania oraz mutacji. Kod realizujący operację
mutacji oraz krzyżowania w wersji uproszczonej (bez dobierania osobników w pary)
przedstawiono na rys. 7.PCross – oznacza prawdopodobieństwo krzyżowania, PMut – oznacza
prawdopodobieństwo mutacji.
//-------------------- dokonaj krzyzowania
for i=1:20
los=rand();
if los<Pcross
Nr=round(rand()*19)+1;
Cut=round(rand()*7)+1;
c1=Population2(i,(Cut+1):9);
c2=Population2(Nr,(Cut+1):9);
Population2(i,(Cut+1):9)=c2;
Population2(Nr,(Cut+1):9)=c1;
end;
end;
//-------------------- dokonaj mutacji
for i=1:20
for j=1:9
los=rand();
Algorytmy genetyczne © dr inż. Adam Słowik
7
Inteligencja obliczeniowa
if (los<PMut)
if (Population2(i,j)==1)
Population2(i,j)=0;
else
Population2(i,j)=1;
end;
end;
end;
end;
Rys. 7 – Fragment kodu realizujący operację krzyżowania oraz mutacji
W następnym kroku należy przepisać zawartość populacji tymczasowej „Population2” do
populacji podstawowej „Population1”, co można zrealizować następująco:
for i=1:20 Population1(i,:)=Population2(i,:); end;
Obliczenia (do rys. 4 do rys. 7) powtarzamy aż spełniony zostanie warunek zakończenia
algorytmu (np. osiągnięcie określonej liczby pokoleń). Po zakończeniu pracy algorytmu
otrzymanym wynikiem jest rezultat zapisany w najlepszym osobniku (o największej wartości
przystosowania).
Poniżej na rys. 8 przedstawiono prosty algorytm genetyczny napisany w SCILAB’ie. Algorytm
dąży do odnalezienia maksimum funkcji przedstawionej na rys. 1.
//--- przyjecie wartosci parametrow
x=zeros(2,301);
PMut=0.1;
PCross=0.5;
Generations=10;
//--- wykreslenie ksztaltu optymalizowanej funckji
for i=1:301 x(1,i)=(i-1)/100; end;
for i=1:301 x(2,i)=50-5*sin(10*3.14*x(1,i))-10*(x(1,i)-1.5)^2;
end;
plot(x(1,:),x(2,:));
//-------------- utworz populacje zlozona z 20 osobnikow
Population1=zeros(20,15); // Populacja podstawowa
Population2=zeros(20,15); // Populacja tymczasowa
Xmin=0; Xmax=3; LG=9;
for i=1:20
for j=1:9
if rand()<0.5
Population1(i,j)=1;
else
Population1(i,j)=0;
end
end
end
Algorytmy genetyczne © dr inż. Adam Słowik
8
Inteligencja obliczeniowa
for k=1:Generations
//---------- oblicz dec, x, y (przystosowanie)
//---------- oraz przystosowanie laczne PL
PL=0;
for i=1:20
dec=0;
for j=1:9
if Population1(i,j)==1
dec=dec+Population1(i,j)*(2^(9-j));
end;
end;
Population1(i,10)=dec;
X=((Xmax-Xmin)/(2^LG-1))*dec+Xmin;
Population1(i,11)=X;
Y=50-5*sin(10*3.14*X)-10*(X-1.5)^2;
Population1(i,12)=Y;
PL=PL+Y;
end;
//------------------- oblicz przystosowanie wzgledne
for i=1:20 Population1(i,13)=Population1(i,12)/PL;end;
//------------------- wypisz najlepsze rozwiazanie na ekran
Max=Population1(1,12);
NrMax=1;
for i=2:20
if (Population1(i,12)>Max)
Max=Population1(i,12);
NrMax=i;
end;
end;
disp(Population1(NrMax,12));
//------------------- oblicz przedzialy ruletki
Population1(1,14)=0;
Population1(1,15)=Population1(1,14)+Population1(1,13);
for i=2:20
Population1(i,14)=Population1(i-1,15);
Population1(i,15)=Population1(i,14)+Population1(i,13);
end;
//-------------------- dokonaj selekcji
for i=1:20
los=rand(); Nr=0;
for j=1:20
if (los>=Population1(j,14)) & (los<Population1(j,15))
Nr=j;
end;
end;
Population2(i,:)=Population1(Nr,:);
end;
Algorytmy genetyczne © dr inż. Adam Słowik
9
Inteligencja obliczeniowa
//-------------------- dokonaj krzyzowania
for i=1:20
los=rand();
if los<PCross
Nr=round(rand()*19)+1;
Cut=round(rand()*7)+1;
c1=Population2(i,(Cut+1):9);
c2=Population2(Nr,(Cut+1):9);
Population2(i,(Cut+1):9)=c2;
Population2(Nr,(Cut+1):9)=c1;
end;
end;
//-------------------- dokonaj mutacji
for i=1:20
for j=1:9
los=rand();
if (los<PMut)
if (Population2(i,j)==1)
Population2(i,j)=0;
else
Population2(i,j)=1;
end;
end;
end;
end;
//--------------------- przepisz populacje
for i=1:20 Population1(i,:)=Population2(i,:); end;
end;// end do glownej petli algorytmu
Rys. 8 – Prosty algorytm genetyczny (SCILAB)
4. Zadania do wykonania
a) uruchomić algorytm genetyczny z Rys. 8
b) do programu z rys. 8 dopisać fragment kodu wykreślający wartość najlepszego osobnika
(rozwiązania) w funkcji kolejnych pokoleń dla parametru Generations=100; Oś „x” ma
reprezentować kolejne pokolenia, oś „y” najlepsze rozwiązanie w danym pokoleniu.
Rys. 9 – Wartość najlepszego rozwiązania w funkcji kolejnych pokoleń (generacji)
Algorytmy genetyczne © dr inż. Adam Słowik
10
Inteligencja obliczeniowa
c) zmodyfikować program z rys. 8, dodając elitarystyczny model selekcji, który polega, na tym
że najlepsze znalezione do tej pory rozwiązanie jest zapamiętywane w oddzielnym osobniku o
nazwie np.TheBest. W każdej iteracji sprawdza się czy w danej populacji istnieje lepsze lub
identyczne rozwiązanie do rozwiązania zawartego w osobniku TheBest jeśli tak wówczas
wstawia się je do osobnika TheBest, jeśli nie wówczas osobnik TheBest jest wstawiany do
populacji w miejsce najgorszego osobnika. Osobnik najlepszy – osobnik o największej wartości
funkcji przystosowania (w tym przypadku o największej wartości „y”). Osobnik najgorszy –
osobnik o najmniejszej wartości funkcji przystosowania (w tym przypadku o najmniejszej
wartości „y”).
d) do programu z punktu c) dopisać fragment kodu wykreślający wartość najlepszego osobnika
(rozwiązania) w funkcji kolejnych pokoleń dla parametru Generations=100; Oś „x” ma
reprezentować kolejne pokolenia, oś „y” najlepsze rozwiązanie w danym pokoleniu. Otrzymany
wykres porównać z wykresem otrzymanym w punkcie b)
e) zaprogramować algorytm genetyczny z elitarystycznym modelem selekcji wyznaczający
maksymalną wartość funkcji dwóch zmiennych postaci:
[
]
y ( x1 , x 2 ) = − (x12 − 10 ⋅ cos(2 ⋅ π ⋅ x1 )) + (x 22 − 10 ⋅ cos(2 ⋅ π ⋅ x 2 )) + 80
x1 ∈ [− 5.12; 5.12], x 2 ∈ [− 5.12; 5.12]
W funkcji tej, globalne maximum o wartości 100 występuje dla x1=0 i x2=0. W algorytmie
genetycznym przyjąć rozdzielczość (dokładność) zmiennej x1 oraz x2 na poziomie 0.01.
Przeprowadzić obliczenia dla różnych wartości parametrów PopSize, PCross i PMut (na
początku przyjąć PopSize=20; PCross=0.3; PMut=0.01). Jako kryterium zakończenia przyjąć
osiągnięcie przez algorytm 100-tnej generacji.
Rys. 10 – Graficzna prezentacja optymalizowanej funkcji
Algorytmy genetyczne © dr inż. Adam Słowik
11

Podobne dokumenty