6 Klasyczny algorytm genetyczny cz2

Transkrypt

6 Klasyczny algorytm genetyczny cz2
6. Algorytm genetyczny –
przykłady zastosowań.
1. Zagadnienie magicznych kwadratów.
Opis działania algorytmu
Zagadnienie magicznych kwadratów polega na wygenerowaniu kwadratu n×n, w
którym elementami są liczby 1, 2, ..., n2 ułożone tak, by w każdej kolumnie, wierszu
2
i przekątnej suma wartości liczb była taka sama i wynosiła 1+n
· n.
2
8 1 6
3 5 7
4 9 2
Rysunek 1: Magiczny kwadrat dla n = 3.
Jest to zadanie łatwe jeżeli n jest stosunkowo małe. W przypadku dużych n zagadnienie jest trudne do rozwiązania. Jeżeli chcielibyśmy sprawdzić wszystkie możliwości rozmieszczenie liczb w kwadracie to otrzymamy n2 ! różnych rozmieszczeń, a
to przy dużych n jest bardzo duża liczba.
Algorytm genetyczny wykorzystujący operatory krzyżowania
i mutacji
Do rozwiązania zagadnienia magicznych kwadratów wykorzystaliśmy algorytmy
genetyczne. Fenotypem w naszym zadaniu jest kwadrat o boku n z rozmieszczonymi liczbami naturalnymi od 1 do n2 . Rozmieszczenie liczb w kwadracie może być
dowolne, nam jednak chodzi o takie rozmieszczenie, dla którego suma elementów
każdego wiersza, kolumny i przekątnej będzie taka sama.
Algorytm przebiega w etapach:
1) losowanie osobników,
2) tworzenie potomstwa,
3) ocena otrzymanego potomstwa,
4) usuwanie powtarzających się chromosomów,
1
5) sortowanie populacji.
Pojedynczy genotyp (chromosom) wchodzący w skład populacji jest ciągiem
n −elementowym o genach należących do zbioru {1, 2, ..., n2 } (przy czym wartość
genu nie powtarza się - pojedynczy chromosom jest permutacją ciągu (1 2 ... n2 ).
Tworzenie potomstwa odbywa się przy wykorzystaniu operatorów genetycznych
mutacji i krzyżowania oraz dodatkowej operacji zamiany segmentów genów.
Krzyżowanie polega na wymianie segmentów genów między dwoma chromosomami. Mamy dwóch rodziców: rodzica 1 i rodzica 2. Aby skrzyżować dwa chromosomy
dokonujemy podzielenia każdego z nich na trzy segmenty w taki sposób aby segment
środkowy był jednakowej długości w obu chromosomach. Długość segmentu może
2
być jedną z wartości {1, 2, ..., n2 }. Tworzymy dwa nowe chromosomy takie same jak
rodzic 1 i rodzic 2. Nowe chromosomy będziemy modyfikować tak, aby wymienić
między nimi środkowe segmenty. Ponieważ geny nie są liczbami 0, 1 więc wymiana nie może być bezpośrednim zastąpieniem jednego segmentu drugim, ponieważ
otrzymane chromosomy zawierałyby powtórzone geny. Aby tego uniknąć stosujemy
zamianę elementów przeprowadzoną w sposób następujący. Modyfikujemy pierwszego potomka. Sprawdzamy jaki gen znajduje się na pierwszym miejscu w środkowym
segmencie drugiego rodzica. Zamieniamy w pierwszym potomku gen o tej samej
wartości z genem znajdującym się na pierwszym miejscu w segmencie środkowym.
Tę samą procedurę powtarzamy dla wszystkich genów segmentu środkowego. W
analogiczny sposób modyfikujemy drugiego potomka. Przykład działania operatora
krzyżowania jest przedstawiony na rys. 2.
2
Para rodziców:
I iteracja:
II iteracja:
III iteracja:
Para potoków:
[1 3 5 k 8 6 4 2 k 7 9]
[1 3 8 k 5 6 4 2 k 7 9]
[1 3 8 k 5 6 4 2 k 7 9]
[1 3 4 k 5 6 8 2 k 7 9]
[2 3 4 k 5 6 8 1 k 7 9]
[4 k 5 6 8 1 k 2 3 9 7]
[4 k 8 6 5 1 k 2 3 9 7]
[4 k 8 6 5 1 k 2 3 9 7]
[5 k 8 6 4 1 k 2 3 9 7]
[5 k 8 6 4 2 k 1 3 9 7]
Rysunek 2: Przykład działania operatora krzyżowania dla n = 3.
Mutacja chromosomu to zamiana losowych dwóch genów miejscami. Taki sposób mutacji wynika z wartości genów chromosomu. Ponieważ genami są różne liczby
naturalne, a nie wartości binarne, to nie ma możliwości zmiany wartości genu na
przeciwną. Ponieważ chromosom jest ciągiem n2 liczb naturalnych, wiec mutacja
jest losową transpozycją.
Dodatkowo stosujemy operatory zamiany segmentów genów długości n odpowiadających kolumnom, wierszom lub przekątnym. Jest to na przykład zamiana miejscami dwóch wierszy, dwóch kolumn, wiersza i kolumny lub przekątnej z wierszem
czy kolumną. Omówione operatory genetyczne są stosowane w udziale procentowym:
− transpozycja
50%,
− krzyżowanie
30%,
− zamiany
20%.
Po wygenerowaniu potomstwa dokonujemy oceny potomków. Wykorzystując funkcję oceny tworzymy nową populację główną. Do populacji tej dołączane są te chromosomy, dla których wartość funkcji oceny jest największa. Funkcja oceny przyjmuje wartości odpowiadające ilości kolumn, wierszy i przekątnych, dla których suma
2
2
wartości genów wynosi 1+n
· n. Maksymalną wartością funkcji oceny jest wartość
2
2n + 2 odpowiadająca wygenerowaniu chromosomu spełniającego warunki zadania,
tzn. chromosomu, któremu odpowiada kwadrat z jednakową sumą elementów w każdym wierszu, kolumnie i na przekątnych.
Jeżeli nowowygenerowane chromosomy powtarzają się z chromosomami już istniejącymi to je usuwamy.
Po utworzeniu nowej populacji dokonujemy sortowania chromosomów znajdujących się w populacji w taki sposób, aby chromosomy były ułożone od największej
do najmniejszej wartości funkcji oceny. Do sortowania chromosomów używamy algorytmu sortowania przez zliczanie. Jest to algorytm działający w czasie liniowym.
Program kończy działanie kiedy generuje chromosom, dla którego funkcja oceny
wynosi 2n + 2. Jeżeli funkcja oceny nie osiągnie takiej wartości, wówczas program
kończy działanie po wykonaniu maksymalnej ilości iteracji. Maksymalna ilość iteracji test ustalona w opcjach programu. W momencie wykonania maksymalnej ilości
iteracji następuje sprawdzenie wartości funkcji oceny w ostatnich iteracjach (w połowie maksymalnej liczby iteracji). Jeżeli wzrastała wartość funkcji oceny wraz ze
wzrostem ilości iteracji, to czas działania programu zostaje wydłużony o połowę
maksymalnej ilości iteracji.
Algorytm umożliwiający działanie programu w sposób rozproszony
Program jest tak napisany aby móc działać na kilku komputerach wykonujących
równolegle operacje generowania nowych potomków. Wszystkie komputery wykonują operacje obliczeniowe poza jednym komputerem zarządzającym pracą całej sieci
zwanym serwerem.
Serwer pośredniczy w przesyłaniu danych (chromosomów) między klientami.
Serwer nie wykonuje żadnych operacji obliczeniowych. W serwerze znajduje się populacja generalna (główna) składająca się z N chromosomów o najwyższej funkcji
oceny. Serwer odbiera pakiety od klientów ocenia i modyfikuje populację generalną i
rozsyła chromosomy do klientów. Klient wykonując algorytm genetyczny generuje
z populacji podstawowej zbiór potomków, aktualizuje populację główną i przesyła
do serwera chromosomy o najwyższej funkcji oceny.
Rysunek 3: Działanie serwera.
Serwer ma dwa wątki podstawowe, wątek główny i wątek serwera połączeń oraz
3
wątki odbierające dane (po jednym dla każdego połączenia). Wysylanie danych do
klientów realizowane jest przez wątek główny. Wątek główny nie obsługuje odbioru.
Dane odbierają wątki odbiorcze (każdy ma swoje połączenie). Watek główny dołącza
odebrane z sieci pakiety i dołącza je co jakiś czas do populacji głównej. Schemat
działania serwera przedstawia rys. 3.
Ogólnie można powiedzieć, że serwer połączeń:
1) nasłuchuje na gnieździe,
2) jeżeli łączy się z nim klient to tworzy połączenie i generuje nowy wątek ”odbiorcy” dla tego połączenia,
3) dla kolejki połączeń jest synchronizacja dostępu do zasobu za pomocą mutexsu,
4) w sekcji krytycznej gniazd dodaje nowy element.
Wątek odbiorcy:
− dodaje gniazdo sieciowe,
− nasłuchuje w nieskończonym czasie,
◦ jeśli odebrał cały chromosom to zapisuje go do populacji tymczasowej,
◦ jeśli otrzymał część genów chromosomu to czeka na pozostały fragment,
Wątek główny (co X sekund):
− dołącza populację tymczasową do populacji głównej,
− sortuje chromosomy w populacji,
− wysyła niewysłane chromosomy do klientów.
Poniewaą poszczególne wątki korzystają ze wspólnych zasobów konieczna jest
ich synchronizacja. W programie serwera posiadamy dwa zasoby współdzielone: kolejkę połączeń z klientami oraz populację tymczasową. Do synchronizacji dostępu
stosujemy mutexy. Ochrona zasobów realizowana jest w następujący sposób.
Zasoby dzielone i synchronizacja serwera
− kolejka połączeń,
◦ każdy wpis to nowe połączenie,
◦ dodawanie w wątku serwera połączeń,
◦ usuwanie elementów w wątku odbiorcy po zerwaniu połączenia,
◦ przeglądanie kolejki w wątku głównym
◦ (ostanie trzy - synchronizacja dostępu do zasobu za pomocą mutexu),
− populacja tymczasowa,
◦ tablica i licznik osobników oczekujących do włączenia do populacji głównej
◦ wątki ”odbiorcy” zapisują nowy odebrany chromosom,
◦ wątek główny odczytuje chromosom i dołącza go do poulacji głównej,
4
◦ (ostanie dwa - synchronizacja dostępu do zasobu za pomocą mutexu),
− jeśli połączenie zostaje zerwane to ( w sekcji krytycznej gniazd) usuwa gniazdo
z kolejki i kończy pracę,
− jeśli odbierze coś z sieci to:
◦ jeśli odebrał cały chromosom to zapisuje go do populacji tymczasowej,
◦ jeśli otrzymał część genów chromosomu to czeka na pozostały fragment,
Rysunek 4: Komunikacja sieciowa serwera.
Rysunek 5: Zarządzanie populacją w serwerze.
Jeśli chodzi o komunikację sieciową serwer i klient działają podobnie. Działanie
klienta w komunikacji sieciowej można podzielić na:
− wątek główny,
◦ generuje potomstwo nowej populacji,
◦ dołącza populację tymczasową,
5
◦ sortuje,
− wątek odbiorcy,
◦ nasłuchuje na gnieździe sieciowym,
◦ jeśli zerwie połączenie to ponownie nawiązuje połączenie po upływie 10s
(czynność te jest powtarzana wskazaną w programie ilość razy),
◦ jeśli odbiera dane to w przypadku gdy otrzymuje cały chromosom to
dodaje go do populacji tymczasowej, jeśli zaś tylko fragment – czeka na
pozostałą część chromosomu,
− wątek wysyłący,
◦ co Xs wysyła do serwera chromosomy (jeszcze nie wysłane),
◦ czeka,
terline
Rysunek 6: Komunikacja sieciowa i zarządzanie populacją klienta.
Klient przechowuje chromosomy w dwóch różnych populacjach. Populacja główna zawiera chromosomy, które będą wysyłane do serwera. Jest tworzona z populacji
tymczasowej przez wybór najlepszych osobników. Populacja tymczasowa zawiera
chromosomy pochodzące z sieci, czyli od serwera, służące do nowej generacji, oraz
chromosomy otrzymane w wyniku stosowania operatorów genetycznych.
Synchronizacja dostępu do zasobów klienta
Program serwera, podobnie jak serwer, posiada zasoby współdzielone przez wiele
wątków. Z tego powodu konieczna jest ich ochrona za pomocą mutexow. Program
klienta posiada następujące zasoby dzielone:
− populacja główna,
◦ wątek główny przekazuje na niej cały czas, modyfikuje potomstwo i sortuje,
◦ wątek wysyłający musi co pewien czas odczytać wszystkie chromosomy,
by móc wysłać nowe,
◦ (powyższe - synchronizacja dostępu do zasobu za pomocą mutexu),
− populacja tymczasowy,
6
◦ wątek odbiorcy,
· dodaje odebranych z sieci osobników do populacji tymczasowej,
◦ wątek główny,
· dołącza do populacji głównej na podstawie kryterium.
Każdy komputer kliencki wykonuje operacje obliczeniowe generowania nowych
osobników. Posiada populację główną osobników, którą tworzy z osobników pochodzących z własnej generacji oraz z osobników otrzymywanych z sieci od serwera.
Istotne jest, jakie kryteria decydują o dołączeniu osobnika z sieci do populacji głównej klienta. Osobniki dołączane do populacji głównej klienta pochdzą z dwóch źródeł: populacji tymczasowej klienta, która jest utworzona z potomków otrzymanych
w ostatniej iteracji, oraz otrzymane od serwera. Istnieje kilka sposobów dołączania
nowych osobników. Jednym z nich jest tryb jedno-stado. Kryterium to pozwala na
dołączenie nowego osobnika tylko w oparciu o funkcję oceny. Po upływie pewnego
czasu wszyscy klienci mają bardzo podobne populacje główne. Klienci wymieniają
się osobnikami z najlepszymi ocenami tak, że większość osobników jest jednakowa.
Tryb jedno stado:
− wszyscy klienci są tak jakby jednym klientem,
− wszyscy mają identyczny zestaw osobników (przeprowadzana jest co pewien
czas synchronizacja, ale z czasem wszyscy klienci mają tę samą populację),
Innym kryterium dołączania nowego osobnika do populacji głównej klienta jest
kryterium X% emigrantów. Kryterium to uwzględnia dotychczasową strukturę populacji głównej klienta. Nowych elementów dołączonych do populacji głównej może
być co najwyżej X%. Taki algorytm zachowuje dużą różnorodność populacji głównych klientów i tym samym dużą różnicę między generowanymi potomkami.
X% emigrantów:
− tylko X% osobników może być pochodzenia obcego,
− jeżeli populacja główna zawiera już X% osobników obcego pochodzenia to
nadpisywani są najlepsi spośród nich,
− nie pozwala na zdominowanie jednej gałęzi nad wszystkimi stadami,
Trzecią metodą dołączania osobników obcego pochodzenia jest sposób ”proporcjonalny”. W ramach chromosomów o tej samej wartości funkcji oceny ma się znajdować tyle samo osobników własnego pochodzenia co obcego. Takie kryterium pozwala na zachowanie różnic w populacjach głównych poszczególnych klientów i przez
to prowadzi do generowania przez nich innych osobników.
7
Proporcjonalny:
− przyjmowanych jest tyle samo osobników obcego pochodzenia o danej ocenie
ilu osobników własnego pochodzenia znajduje się w populacji,
− preferowana jest zawsze najlepsze oceny wypierając słabsze osobniki,
− nie pozwala na dominację obcych osobników.
Z obserwacji wynika, iż dominacja wszystkich populacji przez jeden typ osobnikow moze uniemożliwić rozwiązanie zadania. Może się tak stać jeśli osobnik z wysoka
ocena zostanie szybko znaleziony, ale jego modyfikacje nie prowadza do rozwiązania,
a jedynie do osobników o bardzo wysokiej ocenie. Na przykład osobnik ma ocenę 40
a optymalne rozwiązanie ma ocenę 42. W takim przypadku może się nie udać tak
zmodyfikować tego osobnika, żeby dostać wynik.
Przykład dołączania chromosomu do populacji głównej klienta.
Jedno-stado
Populacja głowna składa się z 20 chromosomów:
10
chromosomów o ocenie
19
7
chromosomów o ocenie
17
3
chromosomów o ocenie
15
dołączamy chromosom o ocenie 18
Nowa populacja:
10
chromosomów o ocenie
19
1
chromosom o ocenie
18
7
chromosomów o ocenie
17
2
chromosomów o ocenie
15
Ponieważ ”wygrywa” chromosom, którego funkcja oceny ma największą wartość.
X% emigrantów
Populacja głowna składa się z 20 chromosomów:
10
chromosomów o ocenie
19
w tym
7
chromosomów o ocenie
17
w tym
3
chromosomów o ocenie
15
w tym
5 obcych
4 obce
0 obcych
dołączamy chromosom o ocenie 18
Nowa populacja:
10
chromosomów o ocenie
19
1
chromosom o ocenie
18
6
chromosomów o ocenie
17
3
chromosomów o ocenie
15
5 obcych
1 obcy
3 obce
0 obcych
w tym
w tym
w tym
w tym
Ponieważ nowy chromosom zastąpił ”najsłabszego” spośród ”obcych”. W ramach
chromosomów z oceną 17 nastąpiła wymiana chromosomu.
8
Proporcjonalny
Populacja głowna składa się z 20 chromosomów:
10
chromosomów o ocenie
19
w tym
7
chromosomów o ocenie
17
w tym
3
chromosomów o ocenie
15
w tym
5 obcych
3 obce
1 obcy
dołączamy chromosom o ocenie 18
Nowa populacja:
10
chromosomów o ocenie
19
7
chromosomów o ocenie
17
3
chromosomów o ocenie
15
5 obcych
3 obce
1 obcy
w tym
w tym
w tym
Chromosom nie został dołączony do populacji ponieważ bazowa populacja nie zawierała chromosomu o ocenie 18.
Gdyby dołączyć chromosom o ocenie 17 to nowa populacja:
10
chromosomów o ocenie
19
w tym
5 obcych
7
chromosomów o ocenie
17
w tym
3 obce
3
chromosomów o ocenie
15
w tym
1 obcy
W ramach chromosomów z oceną 17 nastąpiła wymiana chromosomu.
2. Zadanie optymalizacji kształtu.
Przedstawienie zadania.
Mamy do rozwiązania „typowe” zadanie optymalizacyjne. Na pewnym obszarze
Ω ∈ R2 jest określona funkcja f : Ω → R. Należy tak zmodyfikować obszar Ω,
aby zmaksymalizować wartość funkcji na nim określonej. Jedynym dopuszczalnym
sposobem modyfikowania obszaru jest wycinanie w nim dziur. Wycięcie dziury rozumiemy tutaj jako określenie wartości funkcji f na pewnym podobszarze obszaru Ω
jako równych zero. Jest to więc zadanie typowe dla zastosowań algorytmów genetycznych, gdyż mamy tutaj do czynienia z dużą przestrzenią poszukiwań i potencjalnie
z wieloma rozwiązaniami optymalnymi lub ε-optymalnymi, tj. różniącymi się od
optymalnego o nie więcej jak pewne ustalone ε1 .
Sprecyzowanie warunków zadania
Na potrzeby praktycznej realizacji zadania przyjmijmy, że obszar Ω jest określony
jak poniżej
Ω = [0, 8] × [0, 8].
Na obszarze tym określmy funkcję f jak poniżej
f (x) =

−20








−10
+10
0
gdy x ∈ [5, 5.5] × [2, 2.5] ∪ [6, 6.5] × [4.5, 5] ∪ [2, 2.5] × [4, 4.5]
gdy x ∈ [5, 5.5] × [2, 2.5] ∪ [6, 6.5] × [4.5, 5] ∪ [2, 2.5] × [4, 4.5]
gdy x ∈ [5, 5.5] × [2, 2.5] ∪ [6, 6.5] × [4.5, 5] ∪ [2, 2.5] × [4, 4.5]
w pozostałych przypadkach.
1
Oczywiście nie możemy zagwarantować, że algorytm genetyczny znajdzie rozwiązanie εoptymalne, ale z praktyki wiemy, że są duże szanse, iż tak się stanie.
9
Rysunek ?? przedstawia rozkład obszarów na które funkcja f dzieli obszar Ω. Jak
widać w tym konkretnym zadaniu dla uproszczenia można na obszar nałożyć siatkę,
podobnie jak na wspomnianym rysunku. Dzięki temu zawęzimy dziedzinę poszukiwań do zbioru liczb {0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 6, 6.5, 7, 7.5}, które będą
określały odpowiednie „kwadraty” z tak podzielonego obszaru. I tak np.
• kwadratowi o współrzędnych (2, 5.5) odpowiada podobszar [2, 2.5] × [5.5, 6];
• kwadratowi o współrzędnych (0, 0) (a więc w lewym górnym rogu) odpowiada
podobszar [0, 0.5] × [0, 0.5];
• kwadratowi o współrzędnych (0, 7.5) (a więc w prawym górnym rogu) odpowiada podobszar [0, 0.5] × [7.5, 8];
• kwadratowi o współrzędnych (7.5, 0) (a więc w lewym dolnym rogu) odpowiada
podobszar [7.5, 8] × [0, 0.5];
• kwadratowi o współrzędnych (7.5, 7.5) (a więc w prawym dolnym rogu) odpowiada podobszar [7.5, 8] × [7.5, 8].
Mając tak uproszczone zadanie, możemy określić jak wygląda chromosom. Przyjmijmy, że jeden chromosom składa się z 6 genów. Sześciu, bo chcemy wyciąć 3 otwory
a jeden otwór ma dwie współrzędne. Gen natomiast jest liczbą. Jako liczby przyjmijmy sobie liczby rzeczywiste z przedziału [0, 7.5] reprezentowane z dokładnością
0.5. Oznacza to, ze do reprezentacji liczb można użyć reprezentacji stałoprzecinkowej, przeznaczając 1 bit na znak liczby, 3 na zapisanie bitów reprezentujących część
całkowitą i 1 na zapisanie bitów reprezentujących część ułamkową. Zatem format
ten wygląda jak poniżej
zc2 c1 c0 u1 ,
gdzie u1 – część ułamkowa, c1 , . . . , c3 – część całkowita, z – znak liczby. Wartość w
takiego ciągu bitów wynosi:
(
w=
+( 2i=0 ci 2i + 1i=1 ui 0.5i ),
P
P
−( 2i=0 ci 2i + 1i=1 ui 0.5i ),
P
P
gdy z = 0,
gdy z = 1.
Oto wszystkie możliwe do reprezentowania w tak przyjętym formacie liczby rzeczywiste:
00000
00001
00010
00011
00100
00101
00110
00111
01000
01001
01010
01011
01100
01101
01110
01111
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
+0.0
+0.5
+1.0
+1.5
+2.0
+2.5
+3.0
+3.5
+4.0
+4.5
+5.0
+5.5
+6.0
+6.5
+7.0
+7.5
10000
10001
10010
10011
10100
10101
10110
10111
11000
11001
11010
11011
11100
11101
11110
11111
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
-0.0
-0.5
-1.0
-1.5
-2.0
-2.5
-3.0
-3.5
-4.0
-4.5
-5.0
-5.5
-6.0
-6.5
-7.0
-7.5
10
Pozostają jeszcze do określenia operatory genetyczne jakie będziemy stosować i
jak one będą działać.
Mutacja
Operacji mutacji podlegają pojedyncze bity genu (liczby rzeczywistej). Aby przeprowadzić operację mutacji należy określić dwa prawdopodobieństwa: p1 i p2 oraz
dwie liczby n1 i n2 . Wartość p1 określa z jakim prawdopodobieństwem gen (liczba)
wybierany jest do mutacji. Wartość p2 określa z jakim prawdopodobieństwem mutowany jest wybrany bit genu podlegającego mutacji. Wartość n1 określa ile razy
wybieramy bit do mutacji z części całkowitej, natomiast n2 określa ile razy wybieramy bit do mutacji z części ułamkowej (w obu przypadkach ten sam bit może być
wybrany kilka razy).
Krzyżowanie
Wybieramy bardzo prostą metodę krzyżowania – prześledźmy ją na poniższym przykładzie. Dane mamy dwa chromosomy c1 i c2 :
c1 = g1,1 g1,2 g1,3 g1,4 g1,5 g1,6
oraz
c2 = g2,1 g2,2 g2,3 g2,4 g2,5 g2,6
gdzie g1,i oraz g2,i dla i = 1, . . . , 6 są genami. Wybieramy losowo pewien punkt krzyżowania – powiedzmy, że wylosowaliśmy 4. Wykonujemy teraz krzyżowanie zgodnie z
zadanym prawdopodobieństwem, otrzymując w jego wyniku dwa nowe chromosomy
C1 i C2 :
C1 = g2,1 g2,2 g2,3 g1,4 g1,5 g1,6
oraz
C2 = g1,1 g1,2 g1,3 g2,4 g2,5 g2,6 .
Selekcja
Również do selekcji osobników wchodzących w skład populacji użyjemy najprostszej
metody – metody ruletki. Metoda ta każdemu chromosomowi przypisuje pewien
fragment koła – fragment zależny od wartości funkcji oceny dla danego chromosomu. Im lepiej chromosom odpowiada warunkom zadania, tym większy fragment
odpowiada jemu na kole. Następnie losuje się pewną liczbę z zadanego przedziału,
powiedzmy, że od 0 dp 100, i przyjmując, że cały obwód koła ma 100, patrzymy do
którego obszaru wpadnie wylosowana liczba. Obszar, do którego wpadła wyznacza
nam chromosom. Taka metoda wyboru jest sprawiedliwa o tyle, że największe szanse wyboru mają osobniki najlepiej przystosowane, ale nie odrzuca się tych gorzej
przystosowanych.
Przy tak przyjętej metodzie wyboru należy pamiętać, że daje się ona stosować
tylko wtedy, gdy wartości funkcji oceny są dodatnie. Jeśli takiej gwarancji nie mamy,
a tak jest właśnie w omawianym zadaniu, wówczas musimy dokonywać tymczasowego przesunięcia otrzymanych wartości funkcji oceny. Tak więc algorytm utworzenia
koła ruletki dla zadanej populacji o rozmiarze n wygląda następująco.
1. Przpisanie każdemu chromosomowi, wartości funkcji oceny vi , i = 1, . . . , n.
11
2. Wybranie najmniejszej z wartości vi i oznaczenie jej jako vmin .
3. Przypisanie każdemu chromosomowi tymczasowej wartości funkcji oceny, wg.
wzoru
vitmp = vi − vmin + 0.1
Jak widać z powyższego wzoru, najmniejsza tymczasowa wartość funkcji oceny
wynosi 0.1.
4. Wyznaczenie przedziałów pi , i = 1, . . . , n, odpowiadających chromosomom,
wg. poniższych wzorów
v1tmp
,
sum
v tmp
= pgi , i
,
sum
(1)
p1 =
(2)
pi
0.0,
dla i = 2, . . . , n,
gdzie
• sum określone jest wzorem sum =
Pn
i=1
vitmp ,
• pgi określa górny kraniec przedziału pi .
Szkic algorytmu
Poniżej przedstawiamy szkic algorytmu genetycznego z uwzględnieniem jego najważniejszych etapów.
1. Ustalenie wartości zmiennej t na 1 (t jest zmienną czasową określającą kolejne
populacje).
2. Utworzenie populacji pop(t) liczącej n osobników.
3. Ocena chromosomów (wyliczenie wartości vi , i = 1, . . . , n).
4. Wyliczenie tymczasowych wartości funkcji oceny vitmp , i = 1, . . . , n.
5. Wyliczenie przedziałów pi , i = 1, . . . , n.
6. Krzyżowanie k par chromosomów. Po tym kroku, populacja liczy n+2kosobników.
Zakładamy, że chromosomy potomne wchodzą w skład populacji a nie zastępują chromosomów rodzicielskich, czyli populacja składa się z rodziców (których
jest n) oraz ich potomków (których jest 2k).
7. Ocena chromosomów (wyliczenie wartości vi , i = 1, . . . , n + 2k)2 .
8. Wyliczenie tymczasowych wartości funkcji oceny vitmp , i = 1, . . . , n + 2k.
9. Wyliczenie przedziałów pi , i = 1, . . . , n + 2k.
10. Mutacja przeprowadzona z pewnym prawdopodobieństwem na wszystkich n +
2k osobnikach.
11. Ocena chromosomów (wyliczenie wartości vi , i = 1, . . . , n + 2k)3 .
2
3
Prawdę mówiąc, w tym przypadku wystarczy ocenić chromosomy od n + 1 do n + 2k
W tym przypadku trzeba ocenić chromosomy od 1 do n + 2k
12
12. Wyliczenie tymczasowych wartości funkcji oceny vitmp , i = 1, . . . , n + 2k.
13. Wyliczenie przedziałów pi , i = 1, . . . , n + 2k.
14. Utworzenie populacji pop(t + 1) składającej się z n losowo wybranych osobników populacji pop(t).
15. Jeśli t jest mniejsze od zadanej ilości kroków, to powrót do punktu 3.
13