Professional Documents
Culture Documents
1. Czym są?
Istnieje wiele problemów, dla których nie ma optymalnego, szybkiego rozwiązania. Szukamy
zatem metod i sposobów, aby znaleźć algorytm, który w rozsądnym czasie potrafi znaleźć
rozwiązanie przybliżone (niedalekie od optymalnego). Jedną z możliwości jest zastosowanie
algorytmów probabilistycznych. Jednak i te nie dają stu procentowej pewności, że znajdziemy
rozwiązanie optymalne. Możemy zminimalizować prawdopodobieństwo wystąpienia błędu poprzez
wybranie odpowiednio dużej liczby losowo wybranych „przedstawicieli”. Często jest tak, że
narzucającą się metodą jest znalezienie wszystkich rozwiązań i sprawdzenie, które z nich jest
optymalne. Metoda sprawdza się jednak tylko w przypadku małej liczby możliwości. W innych w
sytuacjach musimy szukać bardziej wyrafinowanych sposobów na znalezienie rozwiązania, które
jeżeli nie będzie optymalne, to chociaż do niego zbliżone. Takie problemy pozwala rozwiązywać
zastosowanie elementów sztucznej inteligencji, między innymi algorytmów genetycznych. Opierają
się one na obserwacji natury i pojęciach takich jak: dziedziczenie genetyczne czy darwinowska
walka o przeżycie.
Opis algorytmów genetycznych opiera się na terminologii zaczerpniętej z genetyki naturalnej:
• rozwiązanie zadania – genotyp, osobnik, chromosom, który zawiera odpowiednie geny
• zbiór pewnych rozwiązań problemu – populacja osobników
• rozwiązanie zbliżone do optymalnego – osobnik, który wykazuje najlepsze cechy w jednym
z kolejnych pokoleń
Algorytmy genetyczne znalazły zastosowanie między innymi w optymalizacji zapytań w
bazach danych, w problemie komiwojażera, w optymalizacji funkcji matematycznych, w
rozgrywaniu gier i innych.
1. Schematy
Ogólne informacje o schematach:
• Schemat to łańcuch, w którym geny mogą być reprezentowane przez „*”. Oznacza ona, że
nieistotne jest to, co w tym miejscu się znajduje. Aby łańcuch pasował do schematu, musi
się z nim zgadzać na wszystkich miejscach poza tymi, które są zaznaczone symbolem
gwiazdki. Przykłady:
◦ (10101011) – do tego schematu pasuje tylko jeden łańcuch (odpowiadający schematowi)
◦ (*0101001) – do tego schematu pasują łańcuchy (10101001) oraz (00101001)
• Liczbę łańcuchów pasujących do danego schematu o „m” pozycjach z gwiazdkami
obliczamy poprzez wzór: 2 m
• Dla danego łańcucha o długości „m” możemy stworzyć 2 m różnych schematów
• Wszystkich schematów dla łańcucha długości „m” jest 3m
• W populacji o liczebności „n” może być reprezentowanych od 2 m do n×2 m różnych
schematów
2. Właściwości schematów:
• rząd schematu (liczba 0 lub 1 w łańcuchu; inaczej długość bez liczby pozycji nieistotnych
(gwiazdek)), używany do obliczenia prawdopodobieństwa przeżycia schematu po mutacji
◦ (01011) – rząd (oznaczenie O) = 5
◦ (**1011*) - rząd (oznaczenie O) = 4
• długość definiująca (odległość między pierwszą a ostatnią ustaloną pozycją w schemacie;
ustalona pozycja to ta, która nie zawiera gwiazdki), używana do obliczenia
prawdopodobieństwa przeżycia schematu po krzyżowaniu
◦ (***0101*01) – długość definiująca (oznaczenie ∂) = 10 – 4 = 6
◦ (*1010*11**) - ∂ = 7 – 2 = 5
• średnie dopasowanie schematu w chwili „t” eval(t) – jest to średnia arytmetyczna
wszystkich łańcuchów z populacji pasujących do schematu w danej chwili „t”
Jak już wcześniej wspominaliśmy podstawowa struktura algorytmu genetycznego ma
następującą postać:
• t++
• wybierz P(t) z P(t – 1)
• zastosuj operatory mieszania do P(t)
• oceń P(t)
Zastanówmy się teraz, jaki wpływ mają poszczególne etapy na żywotność schematów. Przez
ζ(t) oznaczymy liczbę łańcuchów pasujących do schematu w iteracji „t”. Niech popSize będzie
liczbą osobników w populacji. Chcemy obliczyć prawdopodobieństwo, że dany schemat pojawi się
wśród nowych potomków po wykonaniu wyszczególnionych kroków. Zajmijmy się kolejnymi
instrukcjami w punktach:
• t++ - tylko zwiększa licznik i nie ma wpływu na żywotność schematu
• selekcja:
eval (v i )
◦ prawdopodobieństwo wybrania łańcucha „i” jest równe p i= , gdzie
F (t)
popSize
F (t)= ∑ eval (v i) jest średnim dopasowaniem populacji w iteracji „t”, zaś
1
eval ( vi ) jest dopasowaniem wektora vi
ζ (t )×eval (t)× popSize
◦ spodziewamy się zatem, że ζ(t + 1) = , co po podstawieniu
F (t)
ζ (t )×eval (t )
̄ (t)= F (t) daje nam wzór: ζ(t + 1) =
F
popSize ̄ (t)
F
◦ innymi słowy liczba łańcuchów pasujących do danego schematu jest proporcjonalna do
stosunku średniego dopasowania schematu do średniego dopasowania populacji.
Oznacza to, że schemat, który będzie oceniany powyżej średniej (to jest stosunek
eval (t )
̄ (t) będzie większy od jedynki) uzyska więcej łańcuchów, które do niego pasują
F
w następnej populacji. Analogiczne rozumowanie doprowadza nas do wniosków
dotyczących przypadku, gdy schemat jest oceniany poniżej średniej. Wtedy liczba
pasujących do niego łańcuchów zmaleje w kolejnym pokoleniu
◦ załóżmy teraz, że schemat ma dopasowanie większe od średniego dopasowania
̄
populacji o ε%, to jest: eval(t) = F ̄ (t)+ ε× F (t) wtedy z powyższego równania
100
możemy wyciągnąć długoterminowe wnioski, które doprowadzają nas do nowej postaci
równania: ζ(t) = ζ (0)×(1+ ε)t
◦ otrzymane równanie nazwiemy równaniem wzrostu schematu. Możemy teraz
powiedzieć, że w każdym kolejnym pokoleniu przybędzie łańcuchów, które pasują do
schematu ocenianego powyżej średniej
• krzyżowanie:
◦ długość definiująca ma duży wpływ na prawdopodobieństwo przetrwania lub
zniszczenia schematu podczas krzyżowania. Ponieważ w łańcuchu „m” elementowym
możemy wybrać punkt cięcia na „m – 1” możliwych sposobów, to naturalne wydaje się
ustalenie prawdopodobieństwa zniszczenia schematu w następujący sposób:
∂
pd= , gdzie ∂ jest wspomnianą wcześniej długością definiującą danego
m−1
schematu. Idąc dalej możemy z łatwością obliczyć prawdopodobieństwo przetrwania
∂
schematu: p s =1−
m−1
◦ warto jednak zwrócić uwagę na fakt, że nie wszystkie chromosomy ulegną
krzyżowaniu. Prawdopodobieństwo wyboru osobnika do krzyżowania wynosi pc,
∂× p c
zatem nowe ps wynosi: p s =1−
m−1
◦ należy jednak zwrócić uwagę także na fakt, że schemat może przetrwać nawet wtedy,
gdy punkt cięcia został wybrany w nieodpowiednim miejscu. Rozważmy następujący
przykład i poprawmy wzór na prawdopodobieństwo przetrwania schematu w danej
populacji:
▪ Niech dany będzie schemat S = (11******10) oraz dwa pasujące do niego łańcuchy
S1 = (1111111110) oraz S2 = (1100000010). Wybieramy punkt cięcia „c” = 4. Przy
takim wyborze i takich specyficznych łańcuchach cięcie nie prowadzi do destrukcji
schematu, ponieważ oba chromosomy mają takie same końcówki
∂× p c
◦ poprawiony wzór wygląda następująco: p s ⩾ 1−
m−1
◦ otrzymaliśmy zatem zmodyfikowany wzór na liczbę pasujących do schematu łańcuchów
w kolejnej populacji z uwzględnieniem selekcji oraz krzyżowania ζ(t + 1) =
ζ (t )×eval (t) ∂× pc
ζ (t+ 1)⩾ ×(1− )
̄ ( t)
F m−1
◦ z równania wynika, że schemat, który będzie oceniany powyżej średniej oraz będzie
miał mała długość definiującą, będzie miał coraz więcej przedstawicieli w kolejnych
populacjach.
• Mutacja:
◦ jak wiemy z poprzednich rozważań mutacja to zmiana losowo wybranego bitu w
łańcuchu. Może się zdarzyć, że łańcuch ulegnie mutacji więcej niż raz. Istnieje wtedy
możliwość zmiany więcej niż jednego bitu, co zwiększa szansę na zniszczenie schematu
(zmiana choć jednego ustalonego, „ważnego” bitu schematu zniszczy go).
◦ oczywiście liczba „ważnych” bitów w danym schemacie jest określona za pomocą
rzędu schematu
◦ prawdopodobieństwo zmiany pojedynczego bitu jest równe pm, zatem 1 – pm jest równe
prawdopodobieństwu przeżycia danego bitu. Aby schemat przeżył mutację, to O
(oznaczenie rzędu) bitów musi zostać niezmienionych. Zatem prawdopodobieństwo
przeżycia schematu wynosi: p s =(1− p m)O ≈O× p m
◦ ostatnia już modyfikacja wzoru na liczbę łańcuchów pasujących do danego schematu w
kolejnej populacji daje nam w rezultacie postać:
ζ (t )×eval (t) ∂× pc
ζ (t+ 1)⩾ ×(1− −O× p m)
̄ ( t)
F m−1
Z powyższego wzoru i naszych rozważań wynika następujące twierdzenie:
Krótkie, niskiego rzędu i oceniane wyżej niż przeciętnie schematy uzyskują wykładniczo
rosnącą liczbę łańcuchów w kolejnych pokoleniach.
1. Odmiany selekcji:
• model elitarny – w tym modelu kładzie się duży nacisk na utrzymanie najlepszych
chromosomów
• model wartości oczekiwanej – za każdym razem, gdy chromosom jest wybierany do
reprodukcji zmniejszane jest prawdopodobieństwo wybrania go po raz kolejny w tej samej
iteracji w celu rozmnożenia. Kiedy prawdopodobieństwo spadnie poniżej zera, to
chromosom jest pomijany przy selekcji
• elitarny model wartości oczekiwanej – połączenie modelu elitarnego i modelu wartości
oczekiwanej
• model ze współczynnikiem zatłoczenia – nowo wygenerowany chromosom wymienia
starego, a ten z kolei jest wybierany z tych, które są podobne do nowego
• model oparty na wprowadzeniu sztucznych wag – opiera się na założeniu, że super
osobniki nie pozwalają rozmnażać się słabszym, co prowadzi czasami do rozwiązania
lokalnie optymalnego i utraty wartościowego materiału genetycznego
• model z selekcją turniejową – ustala się „k” ( zwykle „k” = 2) elementowe zbiory
osobników z danej populacji. Następnie z danego zbioru wyłania się najlepszego osobnika i
dołącza do nowego pokolenia. Procedurę tą wykonuje się popSize razy. Wybór większego
„k” wpływa na zwiększenie naporu selekcyjnego
1. Opis działania:
• t=0
• wybierz populację P(t)
• oceń P(t)
• while(not WARUNEK_ZAKOŃCZENIA)
◦ t++
◦ wybierz „r” rodziców z P(t). Każdy z wybranych chromosomów jest przeznaczony do
jednej z operacji genetycznych (krzyżowanie, mutacja lub inwersja (losowy wybór
odcinka w chromosomie i odwrócenie kolejności bitów w wybranym fragmencie))
◦ wybierz popSize - „r”osobników z P(t) i przekopiuj je do P(t + 1)
◦ niech „r” chromosomów „rodziców” stworzy „r” potomków i dodaj je do populacji P(t
+ 1)
◦ oceń P(t)
Ponieważ interesuje nas tylko znak drugiej pochodnej (f''(x) < 0 oznacza maksimum)
pozwolimy sobie na przybliżenia:
f ' ' (x 1 )= f ' ' (0,209)=−100sin(2,09)≈−100×0.909⩾0 maksimum
f ' ' (x 2)= f ' ' (0,837)=−100sin (8,37)≈−100×0.989⩾0 maksimum
f ' ' ( x 3 )= f ' ' (1,465)=−100sin(14,65)≈−100×0.990⩾0 maksimum
f ' ' (x 4)= f ' ' (0,419)=−100sin (4,19)≈−100×−0.757⩾ 0 minimum
f ' ' ( x 5 )= f ' ' (1,047)=−100sin(10,47)≈−100×−0.544⩾ 0 minimum
f ' ' ( x 6 )= f ' ' (1,675)=−100sin(16,75)≈−100×−0.288⩾0 minimum
Musimy także wyliczyć wartości funkcji na krańcach przedziału oraz w punktach maksimów
(które kandydują do stanowiska globalnego maksimum):
f ( x 1 )=sin(2,09)+ 5×0,209≈0,909+ 1,045=1,954
f ( x 2 )=sin (8,37)+ 5×0,837≈0,989+ 4,185=5,184
f ( x 3 )=sin(14,65)+ 5×1,465≈0,990+ 7,325=8,315
f ( x l )=sin (0)+ 5×0≈0+ 0=0 Wartość w lewym punkcie brzegowym
f ( x p)=sin (2)+ 5×2≈0,909+ 10=10,909 Wartość w prawym punkcie brzegowym
Z powyższych obliczeń wynika, że maksimum globalne funkcja osiąga w punkcie
brzegowym „x” = 2, które wynosi około 10,909.
Bardzo łatwo można by było znaleźć maksimum patrząc na wykres funkcji. Skoro
znaleźliśmy drogą analityczną maksimum lokalne, czas aby algorytm genetyczny pokazał na co go
stać. Poniżej przedstawiam wyniki, które otrzymałem w wyniku uruchomienia algorytmu ze
zmienną liczebnością populacji i algorytmu zmodyfikowanego.