• Nie Znaleziono Wyników

systemy wspomagania decyzji

2. Nowoczesne metody statystyczne: najbliższego sąsiada, analizę czynników niezależnych (projection pursuit) -polegającą na wyszukiwaniu takiego rzutowania z wielo- na małowymiarową

3.12 Algorytm genetyczny

Algorytm genetyczny [339] jest techniką poszukiwania rozwiązań wykorzystującą stochastyczną zmienność w celu symulacji mechanizmów doboru naturalnego i rozmnażania się istniejących w świecie biologii. Algorytm genetyczny jest zatem uogólnieniem i przeniesieniem zaobserwowanych mechanizmów biologicznych na grunt modeli matematycznych w celu optymalizacji wyrażeń opisujących systemy nawet całkowicie odmienne od organizmów biologicznych. Koncepcję zastosowania teorii ewolucji w modelach systemów sztucznych opracował Holland [118]. Podstawą algorytmów genetycznych jest teoria ewolucji, zakładająca przetrwanie najlepiej przystosowanego osobnika i podobieństwie „jakości” potomstwa do „jakości” genów rodziców. Mimo że nie zawsze można przeprowadzić dowód optymalności rozwiązania znalezionego dzięki zastosowaniu algorytmu genetycznego, to uważa się je często za przydatne [41]. Postępowanie zgodnie z zasadami algorytmu genetycznego polega na przeszukiwaniu kolejnych (następstwo czasowe) populacji poprzez dokonywanie losowego wyboru osobników (reprezentantów) do rozmnażania się. Podobnie jak w przyrodzie, proces ten odbywa się przez

rekombinację genotypów (czyli materiału genetycznego) prowadzącą do powstania nowych

osobników (a właściwie genotypów). Dodatkowo zapewnia się możliwość występowania zmienności

cech u potomstwa poprzez losowe występowanie zjawiska mutacji. Użytkownik lub programista

wykorzystujący lub tworzący oprogramowanie implementujące algorytm genetyczny ustawia

następujące parametry: rozmiar populacji, częstość rekombinacji, częstość mutacji. Ogólne

skonfigurowanie algorytmu obejmuje sposób kodowania osobników (reprezentujących konkurujące ze sobą rozwiązania problemu), rodzaj rekombinacji (rozmnażania się) oraz działanie operatora mutacji. Wśród zalet algorytmu genetycznego Ho i Lee [116] wymieniają jego solidność i wytrwałość, natomiast za wady uznają problemy z prawidłowym zakodowaniem opisu w postaci chromosomu oraz zapewnieniem względnie szybkiego wyliczania wartości funkcji przystosowania (funkcji oceny).

Obserwacje dotyczące świata istot żywych posłużyć mogą do opracowania koncepcji modyfikacji algorytmu genetycznego np. rozproszonych algorytmów genetycznych (distribute genetic algorithms) w których zapewnia się zróżnicowanie osobników na kilka populacji (o różnych warunkach początkowych, parametrach i wzorcach krzyżowania się i mutacji), początkowo odizolowanych od siebie w okresie przed inicjacją głównego algorytmu genetycznego, a w zasadniczej części algorytmu dopuszcza się do kontaktów prowadzących do rekombinacji. Podstawą rozproszonego algorytmu genetycznego jest operator migracji, opisany poprzez prawdopodobieństwo migracji. Migracja działa w następujący sposób: dokładna kopia chromosomu najlepiej przystosowanego osobnika z każdej podpopulacji z pewnym prawdopodobieństwem w każdym pokoleniu zastępuje najgorszego osobnika z innej, także losowo wybranej podpopulacji. Odpowiednio

3-63

niska wartość prawdopodobieństwa migracji pozwala uniknąć przedwczesnego ujednolicenia całej populacji.

Algorytm genetyczny składa się z kilku etapów (kroków). Początkowym etapem jest

wygenerowanie (losowe – np. rozkład równomierny, za pomocą określonego programu/algorytmu lub zaproponowane przez użytkownika) populacji zawierających zbiór reprezentacji rozwiązań problemu. Poszczególne rozwiązania kodowane są za pomocą łańcucha binarnego i odwzorowują wektor

współczynników o wartościach należących do zbioru liczb rzeczywistych [41]. Wszystkim

rozwiązaniom przyporządkowuje się funkcję przystosowania (fitness; minimalizującą lub maksymalizującą), której argumentem są wartości wygenerowane za pomocą modelu matematycznego rozważanego zagadnienia. Niektóre warianty algorytmu genetycznego normalizują aktualną

populację poprzez uwzględnienie w funkcji przystosowania ekstremum pokolenia oraz rozbudowują

ją o składnik odwzorowujący karę za rozwiązanie niedozwolone (np. przekraczające ograniczenia jeśli problem optymalizacyjny je posiada). Następnie uruchamiane są operacje polegające na selekcji (prawdopodobieństwo wyboru jest funkcją wartości przystosowania), krzyżowaniu (crossover) i

mutacji (skutkującej zmianami zbioru reprezentacji, czyli uzyskania nowego chromosomu)

prowadzące do powstania nowego pokolenia.

Celem operacji selekcji jest zapewnienie przekazywania infomacji o „dobrej” jakości rodziców na następne pokolenie. Dlatego chromosom (reprezentujący osobnika) wykazujący wyższą wartość funkcji przystosowania ma większą szansę wyboru na rodzica. Należy zwrócić uwagę na występowanie w literaturze dwu odmiennych znaczeniowo terminów performance i fitness. W algorytmie genetycznym wyliczana jest wartość performance (wartość dopasowania) dla poszczególnych chromosomów która następnie jest wykorzystywana dla porównań chromosomów w danym pokoleniu (jest to jednak wartość bezwzględna i można ją wykorzystać dla porównań międzypokoleniowych np. w kryterium stopu). Natomiast wartość fitness (wartość przystosowania)

jest wynikiem normalizacji wartości performance (np. w zakresie 0-1) w obrębie danego pokolenia.

Na podstawie wartości fitness można bezpośrednio wyznaczyć symulowaną szansę wyboru na rodzica nowego chromosomu.

Operacja krzyżowania polega na pobraniu chromosomów od rodziców, rozcięciu ich w punkcie (lub w wielu punktach) nazywanym cross-over oraz dopasowania rozciętych części w celu

utworzenia nowego chromosomu będącego krzyżówką chromosomów obu rodziców (jeśli

poszczególne geny w chromosomach obu rodziców nie są jednakowe, to chromosom potomka jest różny od chromosomu danego rodzica w tych miejscach – genach – które odziedziczył po drugim rodzicu). Podczas krzyżowania, algorytm pobiera chromosomy od osobników wybranych za rodziców i rozcina je w punkcie cross-over. Dwa nowe chromosomy będą wynikiem dopasowania pierwszej części od pierwszego rodzica i drugiej części od rodzica drugiego.

3-64

nowego, zmodyfikowanego chromosomu czyli potomka. Operacja mutacji polega na wybraniu

jednego z genów a następnie zmianie (zwykle losowej) jego wartości. Porównując operacje

krzyżowania i mutacji widzimy, że nowy chromosom w przypadku krzyżowania zależny jest od

wartości genów rodziców (kwestia dotyczy tylko miejsca wymiany wartości genów) natomiast dzięki mutacji powstaje chromosom posiadający gen różny od genu rodzica. Dzięki mutacji zapewniane jest zróżnicowanie populacji chromosomów.

Nowe pokolenie składa się z rozwiązań (osobników) które pomyślnie przeszły test przeżycia

(prezentowały odpowiednio wysoką wartość funkcji przystosowania). Jeśli nowe pokolenie zawiera także osobniki z poprzedniego pokolenia (rodziców), to można dodatkowo wykonać operację wyboru (cull) najlepiej przystosowanych i usunięcia identycznych osobników aby liczebność populacji (niejednakowych osobników) była stała. Proces ten jest kontynuowany (powtarzany) np. do chwili znalezienia zadowalającego rozwiązania. Genotyp zapisywany jest jako chromosom (reprezentujący zestaw cech kandydujących do rozwiązania zadania), w którym zakodowane są binarnie ciągi (zestawy) wartości parametrów reprezentujące kandydata do rozwiązania problemu.

Chromosom składa się z genów (kodujących poszczególne cechy). Gen może posiadać wiele

wartości, nazywanych allelami. Chromosom reprezentowany jest przez ciąg (b1, b2, …, bm) gdzie b1

itd. nazywane są allelami czyli liczbami zwykle zerojedynkowymi (uwaga: możliwe jest zastosowanie bogatszego „alfabetu” np. od 0 do 9, co jest rozwiązaniem bardziej naturalnym – szybszym i łatwiejszym w realizacji informatycznej - jeśli dotyczy reprezentacji parametrów problemu opisanych liczbami rzeczywistymi), gdyż kodowanie binarne jest najbardziej wydajne, jak pisze Goldberg [98] jeśli chodzi o liczbę ciągów przy tej samej liczbie bitów informacji. Zestawy genów (zakodowane parametry rozwiązania) mogą reprezentować całościowe struktury, które należy optymalizować (np. w optymalizacyjnych problemach kombinatorycznych jest to reprezentacja bezpośrednia, bez dodatkowego przekodowywania). Pewna wada reprezentacji chromosomów przez liczby binarne – brak własności polegającej na tym, że dwa punkty leżące blisko siebie jeśli chodzi o przestrzeń problemową są także blisko siebie w przestrzeni reprezentacji, może być „zmniejszona” poprzez zastosowanie kodowania Gray’a, w którym dwa punkty bezpośrednio ze sobą sąsiadujące w przestrzeni problemowej różnią się tylko wartością jednego bitu. W ten sposób nieznaczna mutacja genu (na jednej pozycji bitowej) nieznaczną zmianę wartości reprezentowanej przez chromosom w dziedzinie problemowej. Procedury przekształcające kod binarny w kod Gray’a znaleźć można w pracy Michalewicza [198].

Operator selekcji dokonuje wyboru chromosomów, których geny i wartości alleli mają stanowić podstawę dla operatora mutacji i które mogą zostać powielone w następnym pokoleniu. Można zaproponować wiele różnych postaci operatora selekcji – np. mechanizm ruletki czy preferowanie chromosomów charakteryzujących się wyższą funkcją przystosowania (mechanizm rankingu). Mechanizm pierwszego rodzaju wykorzystuję analogię ruletki, której obwód reprezentuje

3-65

całość populacji, natomiast liczba gniazd przydzielona danemu chromosomowi jest proporcjonalna do wartości funkcji przystosowania (wyższa wartość funkcji przystosowania skutkuje większą liczbą przypisanych gniazd a stąd większym prawdopodobieństwem wylosowania).

Operator krzyżowania (cross-over) zwany także operatorem rekombinacji oznacza

połączenie części dwu chromosomów (lub ich kopii) w celu powstania nowego chromosomu (reprezentacji osobnika). Zakładamy zatem, że części uznanych za korzystne (na etapie selekcji) chromosomów, po wymieszaniu się utworzą nowy, co najmniej tak samo korzystny chromosom (nowego osobnika, dziedziczącego korzystne cechy (geny-allele) rodziców). Operator rekombinacji (seksualnej) może działać w następujący sposób: tworzone są dwie struktury chromosomowe (bez alleli), następnie kopiowane są geny z identycznymi allelami z chromosomów rodziców, na końcu odbywa się wypełnienie pozostałych genów wybranym allelami jednego z rodziców (rodzica losuje się każdorazowo). Inna postać operatora rekombinacji polega na zwiększaniu liczebności populacji, np. przez generowanie jednocześnie kilku potomków, z których część jest kopią rodzica a reszta wynikiem rekombinacji.

Bez uwzględniania operatora mutacji (aseksualnej) materiał genetyczny reprezentowany w

populacji nie tylko nie wzbogacałby się, ale groziłaby mu stopniowa utrata zróżnicowania, prowadząca do wyradzania się. Operator mutacji dokonuje co pewien (losowo wygenerowany) czas

zmiany wartości niektórych (także losowo wygenerowanych) genów. W ten sposób populacja może

być uzupełniona o chromosomy zawierające wartości genów które były nieobecne w poprzedniej populacji (nigdy nie występowały lub zostały zagubione podczas procesu reprodukcji). Mutacja jest reprezentowana przez następującą procedurę: po pierwsze sprawdza się czy wylosowano (zgodnie z założonym prawdopodobieństwem) wartość odpowiadającą za uruchomienie mutacji; jeśli nie to chromosom nie ulega zmianie, jeśli tak, to wartość genu (allel) przyjmuje losową wartość (inną niż oryginalna). Można założyć, że częstość mutacji zmniejsza się wraz z pozycją w rankingu osobników [294].

Generyczne programowanie genetyczne (GGP) stanowi połączenie programowania

genetycznego [154] i indukcyjnego programowania logicznego [245]. GGP zajmuje się wykorzystaniem oceny (ewaluacji) programów komputerowych rozwiązujących problemy. GGP używane jest w celu zwiększenia szybkości maszynowego uczenia się lub stopniowej poprawy jakości programów opracowanych w różnych językach programowania. Podstawą działania GGP jest

zdolność interpretacji źródłowego kodu programu w języku gramatyk logicznych (logic grammars).

Jest to język posiadający własne symbole (podobne nieco do stosowanych w Prologu), termy (zmienne logiczne, funkcje, wartości stałe), zmienne (oznaczone znakiem „?”), argumenty (reprezentujące zależność od kontekstu – w trakcie wykonywania programu, a także semantykę

procedur poprzez struktury drzewiaste). Jako przykład reprezentacji wiedzy dziedzinowej za pomocą

3-66

użyteczny program składa się z dwu użytecznych komponentów:

program-jest-użyteczny -> pierwszy-komponent(?X), {jest-użyteczny(?X, ?Y)}, drugi-komponent(?Y).

Początkowa populacja dla GGP może być opracowana w sposób stosunkowo łatwy, gdyż

GGP pozwala na wykorzystanie programów napisanych w różnych językach. W następnych krokach algorytmu wykonywane są takie operacje jak reprodukcja, mutacja i krzyżowanie. Wynikiem działania programu GGP jest struktura drzewiasta przedstawiająca kolejne etapy prowadzące do wyłonienia z formalnej gramatyki logicznej użytecznego wynikowego programu. GGP może być łączone z indukcyjnymi algorytmami pozyskiwania wiedzy, takimi jak AQ15 [199]. GGP przeprowadza ewaluację poszczególnych zestawów reguł proponowanych przez algorytm

3-67

Powiązane dokumenty