Porównanie wyników ewolucji konstrukcji przy użyciu MechaStick i

Transkrypt

Porównanie wyników ewolucji konstrukcji przy użyciu MechaStick i
Obliczenia i Systemy Inspirowane Biologicznie
Prowadzący: dr inż. Maciej Komosiński
Porównanie wyników ewolucji konstrukcji przy użyciu
MechaStick i ODE.
Mateusz Pachocki, inf66295 <[email protected]>
5 lutego 2008
1
Wstęp
Celem projektu było ilościowe i jakościowe porównanie wyników ewolucji konstrukcji przy użyciu
dwóch dostępnych w środowisku Framsticks symulatorów fizyki – MechaStick oraz ODE. Porównana
została specyfika i charakter konstrukcji oraz przebieg samej ewolucji. Eksperyment został przeprowadzony na dwóch reprezentacjach genetycznych – f0 oraz f1. Sam eksperyment został podzielony na
trzy części: ewolucję wysokości, ewolucję prędkości oraz ewolucję konstrukcji. W ostatnim przypadku
funkcją oceny jest jakaś fajna funkcja wymyślona przez Janusza.
2
Kodowanie genotypów w środowisku Framsticks
Środowisko Framsticks udostępnia wiele różnych rodzajów kodowania genotypów. Reprezentacja
genotypu jest szczególnie istotna z punktu widzenia ewolucji konstrukcji, gdyż z każdą z nich wiążą
się pewne ograniczenia, które wpływają na specyfikę i charakter konstrukcji. Szczegółowe omówienie wszystkich sposobów kodowania genotypów znajduje się w [MK06] oraz [MK01]. W niniejszym
projekcie zostały wzięte pod uwagę tylko dwie z dostępnych reprezentacji – f0 oraz f1, które zostały
pokrótce omówione w następnych rozdziałach.
2.1
f0 (Direct low-level)
Kodowanie f0 opisuje agentów dokładnie tak, jak są reprezentowani w symulatorze. Jest to w
zasadzie bardziej dokładna reprezentacja niż kodowanie, jednak może zostać w ten sposób potraktowane. Nie wykorzystuje żadnych wysokopoziomowych cech, aby uczynić genotyp bardziej zwięzłym
czy elastycznym i dlatego można się spodziewać, że to kodowanie nie jest najlepszym do ewolucji.
Jego największą zaletą jest uniwersalność, każdy możliwy agent może zostać opisany używając tego
kodowania. Sam genotyp f0 składa się z listy opsiującej wszystkie obiekty, z których złożony jest
agent: części, złącz, neuronów oraz elementów neuronów (połączeń, sensorów, efektorów). Każdy
opis jednoznacznie specyfikuje wszystkie atrybuty obiektu. Ogólnie kodowanie f0 nie nakłada żadnych ograniczeń co do fenotypów i nawet zezwala na tworzenie cykli, co nie jest możliwe w następnym
rozważanym kodowaniu – f1. Kodowanie f0 posiada zaimplementowane oba operatory genetyczne.
Mutacja punktowa genotypu jest prosta: albo zmienia atrybut jednego obiektu, albo usuwa istniejący
obiekt, wstawiając na jego miejsce nowy. Operacja krzyżowania nie jest już taka prosta. Zostało ono
oparte o geometrię fenotypu: oba osobniki są przecinane na dwie części przy użyciu płaszczyzny losowo ustawionej w przestrzeni, następnie dwie połowy z każdego osobnika są łączone razem. Neurony
pozostają w częściach do których były przytwierdzone, a zerwane połączenia zostają odnowione, aby
odzyskać pełną funkcjonalność.
1
2.2
f1 (Direct recurrent)
Kodowanie f1 jest kodowaniem wyższego poziomu niż f0 i zostało zaprojektowane tak, aby genotypy były zwięzłe i dobrze poddawały się operatorom genetycznym. W genotypie opisanym za pomocą
kodowania f1 komponenty (stick’i) osobnika opisane są łańcuchem znaków wg następujących reguł:
każdy stick reprezentowany jest przez literę ’X’, dwie litery ’X’ następujące bezpośrednio po sobie
reprezentują dwa stick’i połączone razem. Jeżeli jakiś stick jest połączony z kilkoma innymi, to jest
reprezentowane za pomocą następującej struktury: ’X(X, ..., X, ...)’. To wystarcza do reprezentacji
każdej topologii, w której nie występują cykle. Dostępne są również różne modyfikatory tak utworzonej topologii. Możliwa jest rotacja danego stick’a lub np. modyfikacja jego długości. Dokładne
omówienie wszystkich dostępnych operatorów znajduje się w [MK01]. Kodowanie to zostało specjalnie dostosowane do operatorów genetycznych. Mutacja albo dodaje nowy modyfikator, nowy stick
lub neuron, albo kasuje istniejący modyfikator, stick lub neuron, bądź zmienia parametry istniejącego
neuronu. Operacja krzyżowania operuje na łańcuchu znaków, za pomocą którego został zakodowany
genotyp w prosty sposób: zamienia losowo wybrane podciągi znaków pomiędzy dwoma łańcuchami.
Jakkolwiek punkty cięcia są wybierane biorąc pod uwagę pewne ograniczenia jak np. wiele znaków opisujących jeden neuron nigdy nie zostaje rozdzielonych. Najważniejszymi właściwościami tej
reprezentacji są:
• Połączenie pomiędzy częściami ciała jest robione bezpośrednio, a nie za pomocą pośrednich
odwołań do poszczególnych części.
• Połączenie pomiędzy neuronami jest realizowane za pomocą relatywnej, a nie absolutnej numeracji. Relatywne numerowanie jest podatne na zakłócenia tylko wtedy, gdy dodawany (usuwany)
neuron jest pomiędzy dwoma końcami połączenia, w przciwnym przypadku jest zachowywane.
• Zmiana atrybutu propaguje się zdłuż całej struktury ciała.
• Elementy kontrolne (sensory, efektory) są opisywane w pobliżu elementów, które kontrolują.
Dzięki takiej implementacji kodowania jest odporne na zakłócenia. Mała zmiana w genotypie na ogół
powoduje małą zmianę w fenotypie. Jest ono także przyjazne dla operacji krzyżowania. Podciągi znaków zachowują przynajmniej część swego pierwotnego znaczenia po wyizolowaniu i wstawieniu do
nowego kontekstu. Zakłócone odwołania naprawiane są przez automatyczne ograniczenia i niejawne
reguły. Kodowanie to jest kompletne: genotyp całkowicie specyfikuje każdy aspekt fenotypu (chociaż nie wszystkie bezpośrednio). Charakteryzuje się także minimalną redundancją. Nie ma części
genotypu, które nie ma mają na niego wpływu.
Podsumowując, kodowanie f1 wykorzystuje wysokopoziomowe ograniczenia i jest potencjalnie
bardziej efektywne w przeszukiwaniu ewolucyjnym niż kodowanie f0. Szczegółowe porównanie wpływu
rodzaju kodowania na wyniki ewolucji wysokości oraz prędkości poruszania się opisane jest w [MK01].
Do sprawdzenia pozostaje jak będą zachowywać się genotypy opisane przy użyciu tych dwóch różnych
kodowań przy wykorzystaniu różnych symulatorów fizyki.
3
Symulatory fizyki
W środowisku Framsticks dostępne są dwa symulatory fizyki: MechaStick oraz ODE. Oba bazują
na metodzie elementów skończonych. W MechaStick ośrodkami masy są punkty na końcach każdego
stick’a. Dzięki temu podejściu konstrukcje są bardziej elastyczne (połączenie między punktami masy
są sprężyste), lecz przez to mniej stabilne. Z kolei w ODE stick’i reprezentowane są przez cylindry,
a na ich końcach znajdują się złącza (nie połączenia między punktami masy, ale joints z biblioteki
ODE), dzięki czemu konstrukcje są bardziej sztywne i stabilne.
Mateusz Pachocki
2
3.1
MechaStick
MechaStick jest standardowym silnikiem symulacji fizyki dostępnym w środowisku Framsticks.
Symulacja ciała agenta za pomocą MechaStick przebiega w następujący sposób. Ciało agenta dzielone jest na małe części, na końcu każdego stick’a. To podejście jest nazywane „metodą elementów
skończonych”, czyli nie każdy punkt ciała jest symulowany, tylko skończona ich liczba, reprezentująca małą część ciała. Symulator oblicza wszystkie siły działające na dany punkt: siłę grawitacji,
oddziaływań sprężystych przy połączeniu z innymi punktami, oddziaływanie pomiędzy powierzchnią
ziemi i tarcie. Przyjęte zostały także pewne założenia mające na celu uproszczenie obliczeń. Solver
zastosowany w MechaStick jest prosty lecz szybki, więc wyniki symulacji nie są bardzo dokładne dla
dużych sił. Rys. 1 przedstawia przykładowe siły obliczane w symulatorze MechaStick. Ciało agenta
składa się z części (ang. parts, point) oraz złączy (ang. joints, sticks, rods). .
Rysunek 1: Przykład ciała agenta wraz z przykładowymi siłami symulowanymi przez MechaStick.
3.2
Open Dynamics Engine (ODE)
Open Dynamics Engine, czyli w skrócie ODE jest biblioteką autorstwa Russela L. Smitha rozwijaną
przez wiele osób, rozpowszechnianą na licencji GNU Lesser General Public License. ODE cechuje
się stabilnością w symulacji brył sztywnych oraz posiada wbudowany mechanizm detekcji kolizji.
Twórcy ODE zaznaczają, że większy nacisk został położony na szybkość i stabilność działania niż
na dokładność obliczeń. Ważną cechą jest również wbudowany mechanizm detekcji kolizji. Poniżej
zostały omówione najistotniejsze cechy ODE, które mogą mieć wpływ na przebieg i charakter ewolucji.
Pełen opis funkcjonalności ODE znajduje się w [Smi06].
Każda z brył, biorąca udział w symulacji opisana jest następującymi parametrami dynamicznymi:
• Wektor pozycji (x, y, z) wskazujący punkt będący środkiem ciężkości danego obiektu. Jest to
również punkt będący referencją na całą bryłę.
• Wektor prędkości liniowej (vx, vy, vz), przyłożony do środka ciężkości.
• Ustawienie bryły w przestrzeni, reprezentowane przez kwaternion (qs, qx, qy, qz) lub macierz
rotacji o wymiarze 3x3.
• Wektor prędkości kątowej (wx, wy, wz), który opisuje zmiany ustawienia w czasie.
Pozostałe parametry bryły są parametrami statycznymi:
• Masa danej bryły.
• Pozycja środka ciężkości.
Mateusz Pachocki
3
• Macierz bezwładności. Jest to macierz o wymiarze 3x3 która opisuje jak rozłożona jest masa
wokół środka ciężkości bryły. Teoretycznie każda bryła zawiera swój układ współrzędnych, który
porusza i obraca się wraz z nią.
Środkiem układu współrzędnych każdej bryły jest jej środek ciężkości. Istotną cechą jest fakt, że
kształt bryły nie jest parametrem dynamicznym. Kształt bryły brany jest jedynie pod uwagę w czasie
detekcji kolizji.
Kolejnym ważnym elementem ODE są złącza. W rzeczywistym świecie coś takiego jak zawias
używane jest do połączenia dwóch obiektów. W ODE jest bardzo podobnie: jest to związek wprowadzony pomiędzy dwiema bryłami tak, aby mogły być ustawione tylko w pewnych ustawieniach
względem siebie. Istnieją trzy rodzaje połączeń przedstawione na rys. 2. W każdym kroku symulacji
Rysunek 2: Trzy różne typy złącz.
wszystkie złącza stosują siły ograniczające na bryły z którymi są połączone. Te siły obliczane są w
taki sposób, aby bryły poruszały się zachowując ograniczenia narzucane przez złącza.
Kiedy dwie bryły są połączone za pomocą złącza, to muszą być w określonej pozycji względem
siebie tak, aby ograniczenia narzucane przez rodzaj złącza były spełnione. Jednak jest możliwe, że
bryły znajdą się w pozycjach, w których te ograniczenia nie będą spełnione. Taki błąd złączy może
pojawić się z dwóch powodów:
• Jeśli została ustawiona pozycja jednej bryły, ale nie została ustawiona poprawnie pozycji drugiej
bryły.
• W czasie symulacji, błędy mogą pojawiać się wskutek niedokładności obliczeniowych.
ODE wyposażone jest w mechanizm zapobiegający tego typu błędom. Podczas każdego kroku symulacji złącze stosuje specjalną siłę, która sprowadza bryły do właściwego ustawienia. Ta siła została
nazwana parametrem redukcji błędu (od ang. error reduction parameter – ERP) i przyjmuje wartości
z przedziału od 0 do 1. ERP określa w jakim stopniu błąd złącza zostanie skorygowany w następnym
kroku symulacji. Jeśli ERP=0, to nie będzie stosowana żadna siła korygująca i połączenie między bryłami może zostać przerwane w dalszych krokach symulacji. Natomiast jeśli ERP=1, to nastąpi próba
naprawy wszystkich błędów w następnym kroku symulacji. Jednakże ustawianie wartości ERP=1 nie
jest rekomendowane, ponieważ błędy złącz nie zostaną kompletnie naprawione z powodu różnych
wewnętrznych aproksymacji.
4
Doświadczalne porównanie wyników ewolucji konstrukcji
W celu porównania dwóch różnych mechanizmów symulacji fizyki w środowisku Framsticks zostały porównane osiągnięcia w trzech takich samych eksperymentach. Funkcja oceny nie ulegała
zmianie w trakcie eksperymentów. Zmianie ulegało kodowanie genotypów oraz symulator fizyki. Poniżej zaprezentowane są rezultaty dla trzech zadań optymalizacji: wysokości, prędkości poruszania się
oraz konstrukcji.
Mateusz Pachocki
4
4.1
Parametry systemu
Najistotniejsze parametry systemu, w którym przeprowadzono eksperymenty, zaprezentowane są
w tabeli 1. Osobniki były wybierane przy użyciu selekcji turniejowej o rozmiarze 2, natomiast usuwane
były losowo. Dodatkowym parametrem była długość okresu stagnacji, po którym następowało zakońUstawienia
Wielkość populacji
Prawdopodobieństwo krzyżowania
Prawdopodobieństwo mutacji
Początkowa odległość od powierzchni
Wartość
50
10%
80%
0.1
Tabela 1: Parametry systemu.
czenie eksperymentu. Jak wiadomo ewolucja ma charakter niedeterministyczny, stąd trudno określić
po jakim okresie szanse na poprawę wartości funkcji oceny maleją. W celu wyznaczenia wartości okresu stagnacji każdy z eksperymentów został uruchomiony bez ustalonej wartości stagnacji. Poprzez
obserwację zmian wartości funkcji oceny zstały przyjęte następujące wartości okresu stagnacji: 1000
epok dla ewolucji wysokości oraz konstrukcji, a 10000 epok dla ewolucji prędkości. Wartość ta jest
większa dla eksperymentu z ewolucją prędkości, ponieważ okazało się że zmiany fitness’u są stosunkowo rzadkie, stąd na uzyskanie satysfakcjonujących rezultatów potrzebne było więcej czasu. Z kolei dla
ewolucji wysokości i konstrukcji wartość ta jest wystarczająca, gdyż w późniejszych epokach zmiany
wartości funkcji oceny są nieznaczne i w przeprowadzonych eksperymentach nie została zauważona
znacząca poprawa dla dłuższego okresu stagnacji. Dodatkowo dla ewolucji prędkości zostały przyjęte
ustawienia „dwustopniowej ewolucji”. W pierwszej fazie z populacji były usuwane losowe osobniki,
po pierwszym zajściu stagnacji sposób usuwania był zmieniany na usuwanie najgorszych osobników
(boostphase), a po drugim zajściu stagnacji proces został zatrzymywany. Dla ewolucji prędkości zostały wykonane też dwa dodatkowe eksperymenty, w których stick’i w ODE były symulowane za
pomocą prostopadłościanów, a nie cylindrów.
Każdy z eksperymentów został powtórzony 10-krotnie, a następnie wyniki zostały uśrednione
ze wszystkich powtórzeń. Dla dwóch symulatorów fizyki, dwóch rodzajów kodowań genotypów oraz
trzech rodzajów eksperymentów daje nam to: 3 × 2 × 2 × 10 + 20 = 140 uruchomień eksperymentu
z różnymi parametrami (20 dodatkowych uruchomień wynika z eksperymentu ewolucji prędkości z
ODE i stick’ami symulowanymi za pomocą prostopadłościanów).
4.2
Wyniki – analiza ilościowa
W ilościowej analizie wyników eksperymentów porównane zostały wartości minimalnej, średniej
oraz maksymalnej wartości funkcji oceny dla ODE i MechaStick w zależności od wybranego kodowania
genotypów. Wyniki te zostały przedstawione na wykresach w kolejnych rozdziałach. W celu uzyskania
bardziej jednolitych rezultatów wartości te zostały uśrednione z dziesięciu uruchomień tego samego
eksperymentu, z tymi samymi parametrami.
4.2.1
Ewolucja wysokości
Wyniki ewolucji wysokości dla kodowania f0 przedstawiają wykresy na rys. 4. Pierwszą i najbardziej
oczywistą rzeczą, którą widać na tych wykresach jest fakt, że w eksperymencie z wykorzystaniem
ODE została uzyskana ponad dwa razy większa wartość fitness niż w eksperymencie z wykorzystaniem
MechaStick. Wynika to z różnic pomiędzy tymi dwiema metodami symulacji fizyki, które pokrótce
zostały omówione w rozdziale 3. Cechy konstrukcji zostały dokładnie porównane i omówione w
rozdziale dotyczącym porównania jakościowego.
Mateusz Pachocki
5
Na rys. 3 zostały przedstawione średnie wyniki wraz z odchyleniami standardowymi dla ewolucji
wysokości. Wyniki zostały zestawione dla obu sposobów kodowań genotypów, jak również dla obu
symulatorów mechaniki. Potwierdzają one tendencje wynikają z poprzednich wykresów: lepszy fitness
jest osiągany przy wykorzystaniu ODE i kodowania f1.
f1
6
5
5
4
4
Fitness
Fitness
f0
6
3
3
2
2
1
1
0
0
MechaStick
ODE
Simulator
MechaStick
ODE
Simulator
Rysunek 3: Porównanie średnich wartości funkcji oceny dla MechaStick i ODE.
Przy użyciu kodowania f0 przebieg ewolucji jest podobny dla obu symulatorów fizyki, jednak w
eksperymencie z ODE proces ewolucji trwał dłużej, przy tej samej wartości okresu stangacji. Spowodowane jest to większą sztywnością i stabilnością ewoluowanych agentów, co pozwala na zmiany
podnoszące wartość funkcji oceny, ale nie prowadzące do utraty stabilności agenta. Ta cecha ODE
widoczna jest też w całkowitym przebiegu ewolucji. W eksperymencie z wykorzystaniem MechaStick
można zauważyć znaczne skoki fitness’u w początkowym etapie ewolucji, a później następuję pewne
„uspokojenie” procesu (rys. 4). Z kolei w ODE proces ten jest bardziej jednolity, bez dużych skoków
wartości funkcji oceny.
Zmiana kodowania genotypów z f0 na f1 spowodowała odwrócenie tendencji opisanej w poprzednim akapicie (wyniki ewolucji wysokości dla kodowania f1 przedstawione są na rys. 5). Tym razem
proces ewolucji z wykorzystaniem MechaStick ma przebieg bardziej spokojny, bez większych wahań
wartości funkcji oceny. W przypadku eksperymentu z wykorzystaniem ODE widać znaczne odchylenia
maksymalnej i minimalnej wartości fitness od wartości średniej, a także większe wahania wartości
średniej (rys. 5). Kolejną różnicą, w porównaniu z eksperymentem w którym zostało wykorzystane
kodowanie f0, jest praktycznie taki sam czas trwania procesu ewolucji, przy jednakowej długości okresu stagnacji. W przypadku f1 najlepsza wartość fitness z użyciem ODE jest również ponad dwa razy
większa od tej uzyskanej przy użyciu MechaStick.
Analiza ilościowa wyników ewolucji wysokości wypada na korzyść ODE. Dodatkowo można zauważyć, że nieco większe wartości funkcji celu uzyskano w ekperymencie z użyciem kodowania f1 (w
przypadku f0 fitness nie przekroczył wartości 5, natomiast w przypadku f1 znacznie przekroczył tę
wartość). Przebieg procesu ewolucji jest podobny dla wszystkich przypadków. Ciekawy jest fakt, że
dla kodowania f0 bardziej gwałtowny (z większymi wahaniami wartości funkcji oceny) jest przebieg
ewolucji z wykorzystaniem MechaStick, natomiast dla kodowania f1 bardziej gwałtowny przebieg
występuje dla ODE.
Mateusz Pachocki
6
f0 MechaStick
2
Min
Avg
Max
1.8
1.6
1.4
Fitness
1.2
1
0.8
0.6
0.4
0.2
0
0
5000
10000
15000
Epoch
20000
25000
30000
f0 ODE
5
Min
Avg
Max
4.5
4
3.5
Fitness
3
2.5
2
1.5
1
0.5
0
0
5000
10000
15000
20000
25000
30000
35000
40000
45000
50000
Epoch
Rysunek 4: Porównanie wyników ewolucji wysokości dla MechaStick i ODE przy użyciu kodowania
f0.
Mateusz Pachocki
7
f1 MechaStick
2.5
Min
Avg
Max
2
Fitness
1.5
1
0.5
0
0
5000
10000
15000
20000
25000
30000
35000
Epoch
f1 ODE
6
Min
Avg
Max
5
Fitness
4
3
2
1
0
0
5000
10000
15000
20000
25000
30000
Epoch
Rysunek 5: Porównanie wyników ewolucji wysokości dla MechaStick i ODE przy użyciu kodowania
f1.
Mateusz Pachocki
8
4.2.2
Ewolucja prędkości
Wyniki ewolucji prędkości zostały zgromadzone na wykresach: rys. 7, rys. 8 oraz rys. 9. Proces
ewolucji trwał dłużej dla eksperymentu z MechaStick, ponieważ, jak zostało to pokazane w analizie
jakościowej wyników ewolucji prędkości, agenci utworzeni przy pomocy ODE to głównie cylindry,
które uzyskiwały pewną prędkość tocząc się. Dlatego też agenci uzyskani za pomocą MechaStick są
bardziej skopmlikowani pod względem budowy, a także poruszają się w bardziej złożony sposób.
Charakterystyczną cechą przebiegu ewolucji w eksperymenie z ODE były rzadkie poprawy wartości funkcji oceny. Bardzo szybko przeszukiwanie ewolucyjne trafiało na lokalne optimum, z którego
już nie potrafiło się wydostać. Później następowały jedynie niewielkie poprawy fitness’u, gdyż trudno
było zmienić w jakikolwiek sposób prędkość toczącego się cylindra. Zmiana specyfiki ruchu wymagałyby pokonania tego lokalnego optimum, co niestety nie udawało się w zdecydowanej większości
przypadków, co zostało wyjaśnione w analizie jakościowej. Dlatego też dla ODE zostały przeprowadzone dwa dodatkowe eksperymenty dla kodowania f0 i f1, w których stick’i były symulowane
za pomocą prostopadłościanów. Wyniki uzyskane w tych eksperymentach przedstawiają wykresy na
rys. 9. W przeciwieństwie do przebiegu procesu ewolucji przy stick’ach symulowanych za pomocą cylindrów (rys. 7 i rys. 8), przebieg ewolucji z użyciem prostopadłościanów charakteryzował się pewną
monotonicznością. Brak monotoniczności jest szczególnie widoczny dla ODE, stick’ów symulowanych za pomocą cylindrów i kodowania f0. Ogólną tendencją agentów w tym eksperymencie przy
wykorzystaniu ODE było zwiększanie długości, co bardziej ułatwia kodowanie f1, dlatego też wyniki
przy kodowaniu f0 mają taki charakter.
Rys. 6 przedstawia porównania średnich wartości funkcji oceny dla ewolucji prędkości dla MechaStick i ODE przy użyciu obu rodzajów kodowania genotypów. Widać zdecydowaną różnicę w
wynikach, w zależności od użytego sposobu kodowania. Dla kodowania f0 zdecydowanie lepszy jest
MechaStick, natomiast dla f1 – ODE. Spowodowane jest to faktem, że kodowanie f1 ułatwia wydłużanie stick’ów w procesie ewolucji, w ten sposób agent zwiększał swoją masę, a także prędkość
poruszania się.
f1
0.05
0.04
0.04
0.03
0.03
Fitness
Fitness
f0
0.05
0.02
0.02
0.01
0.01
0
0
MechaStick ODE Cylinder ODE Box
Simulator
MechaStick ODE Cylinder ODE Box
Simulator
Rysunek 6: Porównanie średnich wartości funkcji oceny dla MechaStick i ODE.
Mateusz Pachocki
9
f0 MechaStick
0.08
Min
Avg
Max
0.07
0.06
Fitness
0.05
0.04
0.03
0.02
0.01
0
0
20000
40000
60000
80000
Epoch
100000
120000
140000
160000
f0 ODE cylinder
0.045
Min
Avg
Max
0.04
0.035
Fitness
0.03
0.025
0.02
0.015
0.01
0.005
0
0
5000
10000
15000
20000
25000
30000
35000
40000
45000
50000
Epoch
Rysunek 7: Porównanie wyników ewolucji prędkości dla MechaStick i ODE przy użyciu kodowania
f0.
Mateusz Pachocki
10
f1 MechaStick
0.02
Min
Avg
Max
0.018
0.016
0.014
Fitness
0.012
0.01
0.008
0.006
0.004
0.002
0
0
10000
20000
30000
Epoch
40000
50000
60000
f1 ODE cylinder
0.07
Min
Avg
Max
0.06
Fitness
0.05
0.04
0.03
0.02
0.01
0
0
10000
20000
30000
40000
50000
60000
70000
80000
90000
Epoch
Rysunek 8: Porównanie wyników ewolucji prędkości dla MechaStick i ODE przy użyciu kodowania
f1.
Mateusz Pachocki
11
f0 ODE box
0.035
Min
Avg
Max
0.03
Fitness
0.025
0.02
0.015
0.01
0.005
0
0
20000
40000
60000
Epoch
80000
100000
120000
f1 ODE box
0.04
Min
Avg
Max
0.035
0.03
Fitness
0.025
0.02
0.015
0.01
0.005
0
0
20000
40000
60000
80000
100000
120000
140000
Epoch
Rysunek 9: Porównanie wyników ewolucji prędkości dla ODE przy użyciu kodowania f0 i f1 i stick’ach
symulowanych za pomocą prostopadłościanów.
Mateusz Pachocki
12
4.2.3
Ewolucja konstrukcji
W eksperymencie z ewolucją konstrukcji została użyta funkcja oceny przedstawiona na listingu 1.
Funkcja ta miała na celu umożliwienie uzyskania agentów, którzy pełniliby funkcję podpory (np. nogi
od stołu, czy podpory mostu). Agenci tacy powinni być wysocy, stabilni i posiadać jak najmniej
punktów styku z podłożem.
Podobnie jak w przypadku ewolucji wysokości, znacznie lepsze wyniki zostały uzyskane przy wykorzystaniu ODE. Stick’i były symulowane za pomocą cylindrów, gdyż w przypadku tego eksperymentu
ich kształt nie miał większego wpływu na przebieg symulacji. W przypadku kodowania f0 fitness uzyskany za pomocą ODE jest około 10 razy większy od tego uzyskanego za pomocą MechaStick. W
przypadku kodowania f1 różnica jest jeszcze większa na korzyść ODE. Średnie wartości funkcji oceny
wraz z odchyleniami standardowymi przedstawione są na wykresach na rys. 10. Na wykresie dla kodowania f1 skala na osi y jest logarytmiczna, ponieważ różnica w wartości fitness’u była tak znaczna,
że w normalnej skali wykres wartości dla MechaStick był niezauważalny. Przebieg procesu ewolucji
przedstawiają wykresy na rys. 11 oraz rys. 12. Interesującą cechą tego procesu są różnice w zależności
od wykorzystanego kodowania genotypów. Dla kodowania f0 cały proces trwa dłużej i znajdowane
są rozwiązania nieznacznie poprawiające wartość funkcji oceny. Z kolei dla kodowania f1 cały proces
trwa krócej, a zmiany są bardziej gwałtowne i znacznie zwiększają wartość fitness’u.
Listing 1: Funkcja oceny wykorzystana w ewolucji konstrukcji.
v a r m = Model . newFromGeno ( t h i s . geno ) ;
f i t = f i t ∗ m. s i z e x ∗ m. s i z e y ∗ m. s i z e z ;
var i = 0;
var i l e = 1;
f o r ( i =0; i <m. n u m p a r t s ; i ++)
{
i f (m. g e t P a r t ( i ) . y < 0 . 5 )
i l e ++;
}
return f i t / i l e ;
f0
f1
400
1e+07
350
1e+06
300
100000
Fitness
Fitness
250
200
150
10000
1000
100
100
10
50
0
1
MechaStick
ODE Cylinder
Simulator
MechaStick
Simulator
ODE
Rysunek 10: Porównanie średnich wartości funkcji oceny dla MechaStick i ODE.
Mateusz Pachocki
13
f0 MechaStick
120
Min
Avg
Max
100
Fitness
80
60
40
20
0
0
2000
4000
6000
8000
10000
Epoch
12000
14000
16000
18000
f0 ODE
700
Min
Avg
Max
600
Fitness
500
400
300
200
100
0
0
2000
4000
6000
8000
10000
12000
14000
16000
Epoch
Rysunek 11: Porównanie wyników ewolucji konstrukcji dla MechaStick i ODE przy użyciu kodowania
f0.
Mateusz Pachocki
14
f1 MechaStick
16000
Min
Avg
Max
14000
12000
Fitness
10000
8000
6000
4000
2000
0
0
500
1000
1500
2000
2500
Epoch
3000
3500
4000
4500
5000
f1 ODE
2e+07
Min
Avg
Max
1.8e+07
1.6e+07
1.4e+07
Fitness
1.2e+07
1e+07
8e+06
6e+06
4e+06
2e+06
0
0
500
1000
1500
2000
2500
3000
3500
4000
4500
Epoch
Rysunek 12: Porównanie wyników ewolucji konstrukcji dla MechaStick i ODE przy użyciu kodowania
f1.
Mateusz Pachocki
15
4.3
4.3.1
Wyniki – analiza jakościowa
Ewolucja wysokości
W tym eksperymencie typowe były dwa rodzaje konstrukcji: agenci z trójkątną podstawą i ramionami skierowanymi pionowo w górę oraz agenci z niepełną trójkątną podstawą lub dwoma ramionami
jako podstawą i pojedynczym ramieniem skierowanym w górę. Pierwszy rodzaj jest tyopwy dla kodowania f0, gdyż tylko ono pozwala na utworzenie cyklu – trójkątnej podstawy. Wyjątkiem od tej reguły
jest część agentów (ok. 40%) uzyskanych przy wykorzystaniu ODE. Dzięki większej stabilności takiego agenta możliwe było zredukowanie podstawy do dwóch ramion trójkąta (rys. 14 – dwa pierwsze
przypadki). Z kolei agenci uzyskani z użyciem MechaStick i kodowania f0 posiadają więcej skierowanych pionowo części, co najprawdopodobniej spowodowane jest mniejszą stabilnością konstrukcji
uzyskanych i koniecznością zbalansowania elastycznej struktury (rys. 13).
Użycie kodowania f1 spowodowało ogólną poprawę fitness’u zarówno dla agentów uzyskanych z
wykorzystaniem MechaStick, jak i tych uzyskanych z wykorzystaniem ODE. W porównaniu z agentami uzyskanymi przy użyciu kodowania f0 widoczna jest dalsza redukcja podstawy. W przypadku
eksperymentu z Mechastick są to przeważnie dwa ramiona (ok. 80% przypadków), rzadziej trzy,
oraz jedno ramię skierowane pionowo w górę (rys. 15). W eksperymencie z ODE także nastąpiła
redukcja podstawy agenta, jedynie niewielka część agentów wykształciła trzy ramiona, na których
została wsparta reszta konstrukcji, która jest zawsze jednym, pionowym ramieniem. Tak samo jak
w poprzednim przypadku, dzięki większej sztywności konstrukcji, agent jest bardziej stabilny, stąd
zredukowana podstawa i wysoka wartość funkcji oceny.
Jak zostało wspomniane w analizie ilościowej wyników ewolucji wysokości, lepszy fitness został
osiągnięty z wykorzystaniem ODE i kodowania f1. Specyfika konstrukcji uzyskanych z użyciem ODE
spowodowana jest innym sposobem symulacji brył sztywnych, z których złożony jest agent. W ODE
stick’i symulowane są za pomocą cylindrów o zerowej sprężystości, na końcach których znajdują się
joint’y. Z kolei w MechaStick elementami sztywnymi są zakończenia stick’ów a połączenia między nimi (czyli to co w ODE symulowane jest za pomocą cylindrów) są elastyczne i podatne na rozciąganie.
Dlatego agenci stworzeni z wykorzystanem MechaStick charakteryzują się mniejszą stabilnością.
Rysunek 13: Agenci uzyskani przy użyciu MechaStick i kodowania f0.
4.3.2
Ewolucja prędkości
W eksperymencie z ewolucją wysokości dominowali agenci złożeni z dwóch ramion połączonych
mięśniem zginającym. Niestety w tym przypadku nie udało się uzyskać rozsądnych wyników z wykorzystaniem ODE zarówno z kodowaniem f0, jak i f1. Agenci otrzymani przy użyciu ODE (rys. 18 oraz
Mateusz Pachocki
16
Rysunek 14: Agenci uzyskani przy użyciu ODE i kodowania f0.
Rysunek 15: Agenci uzyskani przy użyciu MechaStick i kodowania f1.
rys. 20) to przeważnie cylindry, które uzyskały wysoką wartość funkcji oceny tocząc się. Wielkość
(wzrost) agenta także był pzeszkodą w uzyskaniu wysokiego fitness’u. Wszyscy agenci byli raczej
spłaszczeni, a ramiona, za pomocą których się poruszali, również nie były długie. Typowy ruch dla
wszystkich agentów, z wyjątkiem cylindrów uzyskanych przy pomocy ODE, to ruch skokowy polegający na odepchnięciu się od podłoża za pomocą ramion i mięśnia zginającego.
Przeszukiwanie ewolucyjne w eksperymencie z ODE miało wyraźne tendencje do błądzenia w
okolicach optimum lokalnego. Optimum to było bardzo szybko znajdowane, gdyż toczący się cylinder
jest prostą konstrukcją. Jednak wyjście z takiego optimum lokalnego wymagałoby zmiany całej specyfiki ruchu, co nie udawało się w zdecydowanej większości przypadków. Pojedynczy agenci uzyskani
za pomocą ODE przy wykorzystaniu kodowania f1 posiadają mięśnie zginające i potrafią się poruszać
w inny sposób niż tocząc się (rys. 20). Dlatego zostały przeprowadzone dodatkowe eksperymenty
dla ODE, gdzie stick’i były symulowane za pomocą prostopadłościanów. W tym przypadku udało się
uzyskać właściwie poruszających się agentów przedstawionych na rys. 21 oraz rys. 22.
Ciekawą cechą agentów uzyskanych w eksperymencie z ODE i stick’ami symulowanymi za pomocą
Mateusz Pachocki
17
Rysunek 16: Agenci uzyskani przy użyciu ODE i kodowania f1.
cylindrów była ewolucja nastawiona na uzyskanie jak największej długości, chociaż funkcją celu była
prędkość poruszania się. O ile w zdecydowanej większości przypadków w pozostałych eksperymentach
duży rozmiar agenta był raczej przeszkodą w szybkim poruszaniu się, to w tym przypadku było
zupełnie inaczej. Prawdopodobnie miało to na celu zwiększenie masy takiego agenta, dzięki czemu
mógł się szybciej toczyć. Rekordzista posiadał wartość size.y przekraczającą 55.
Rysunek 17: Agenci uzyskani przy użyciu MechaStick i kodowania f0.
Rysunek 18: Agenci uzyskani przy użyciu ODE, kodowania f0 i stick’ów symulowanych za pomocą
cylindrów.
Mateusz Pachocki
18
Rysunek 19: Agenci uzyskani przy użyciu MechaStick i kodowania f1.
Rysunek 20: Agenci uzyskani przy użyciu ODE, kodowania f1 i stick’ów symulowanych za pomocą
cylindrów.
4.3.3
Ewolucja konstrukcji
Agenci uzyskani za pomocą MechaStick i kodowania f0 przedstawieni są na rys. 23. Widać
pewne podobieństwo do agentów uzyskanych w eksperymencie z ewolucją wysokości, mianowicie
charakterystyczne trójkątne podstawy. Środkowy agent widoczny na rys. 23 jest typowym przykładem konstrukcji, którą starano się uzyskać. Jego konstrukcja jest stabilna, a liczba punktów styku
z podłożem jest minimalna. Swym wyglądem przypomina powszechnie stosowaną podporową konstrukcję – tripod. W odróżnieniu od agentów uzyskanych za pomocą ODE i tego samego kodowania
(rys. 24), większść tych agentów cechuje oszczędność w rozmiarze konstrukcji ponad podstawą. Jest
to spowodowane większą elastycznością stick’ów w MechaStick i mniejszą stabilnością bardziej rozbudowanych konstrukcji. Dla odróżnienia, konstrukcje uzyskane przy pomocy ODE i kodowania f0
charakteryzują się podstawami, które nie tworzą zamkniętych trójkątów. Dlatego w górnej części
agenta rozwijane były często dodatkowo krótkie ramiona, które balansowały całość konstrukcji na
Mateusz Pachocki
19
Rysunek 21: Agenci uzyskani przy użyciu ODE, kodowania f0 i stick’ów symulowanych za pomocą
prostopadłościanów.
Rysunek 22: Agenci uzyskani przy użyciu ODE, kodowania f1 i stick’ów symulowanych za pomocą
prostpadłościanów.
mniej stabilnej podstawie. Dzięki większej sztywności stick’ów całość zachowywała równowagę.
Ogólnie agenci uzyskani z wykorzystaniem kodowania f1 mieli lepszą wartość funkcji oceny niż ci
uzyskani przy pomocy kodowania f0. Przykładowych agentów uzyskanych z wykorzystaniem MechaStick i kodowania f1 przedstawia rys. 25. Typowe były dwie konstrukcje: agenci nieskomplikowani, o
wyglądzie zbliżonym do tych uzyskanych w ewolucji wysokości albo agenci o bardziej skomplikowanej
budowie. Bardziej skomplikowani agenci powstawali dzięki temu, że funkcja celu premiowała konstrukcje, które są duże, więc jeśli w trakcie ewolucji agent wykształcił stabilną podstawę, to później
mógł rozrastać się tak, aby nie utracić stabilności. Dlatego też ciekawą cechą uzyskanych w tym
eksperymencie agentów jest do pewnego stopnia symetryczna budowa, która ułatwia zachowanie
równowagi. Agenci uzyskani za pomocą ODE i kodowania f1 (rys. 26) również dzielili się na tych nieskomplikowanych pod względem złożoności budowy oraz tych bardziej skomplikowanych. Jednak w
przypadku ODE agenci nieskomplikowani nie przypominali tych uzyskanych w eksperymencie z ewolucją wysokości. Uzyskane konstrukcje nie posiadały wyraźnej podstawy, a ramiona nie były proste.
Agenci o bardziej skomplikowanej budowie byli bardziej złożeni od tych uzyskanych z wykorzystaniem MechaStick. Podobnie jak w przypadku tych uzyskanych za pomocą kodowania f0 liczne, małe
Mateusz Pachocki
20
ramiona kompensowały mniej stabilną podstawę. U tych agentów symetria jest mniej widoczna niż
u agentów uzyskanych z wykorzystaniem MechaStick.
Rysunek 23: Agenci uzyskani przy użyciu MechaStick i kodowania f0.
Rysunek 24: Agenci uzyskani przy użyciu ODE i kodowania f0.
Rysunek 25: Agenci uzyskani przy użyciu MechaStick i kodowania f1.
Mateusz Pachocki
21
Rysunek 26: Agenci uzyskani przy użyciu ODE i kodowania f1.
5
Wnioski
Symulatory fizyki zachowują się odmiennie w zależności od celu ewolucji. Dla ewolucji wysokości
zdecydowanie lepiej sprawdza sie ODE, natomiasta dla ewolucji prędkości MechaStick. Głównym
powodem takiego zachowania jest specyfika symulacji obiektów, z których składa się ciało agenta.
Cylindry, za pomocą których symulowane są stick’i w ODE, nadają agentowi sztywność i stabilność.
Jednak w ewolucji prędkości taka konstrukcja agenta sprawia, że przeszukiwanie ewolucyjne szybko
trafia na optimum lokalne, z którego nie potrafi się już wydostać.
Przebieg ewolucji wysokości był nieznacznie odmienny dla ODE i MechaStick. Główną przyczyną
była większa stabilność konstrukcji uzyskanych za pomocą ODE, dzięki czemu możliwe były ciągłe,
niewielkie poprawy wartości funkcji celu. Stąd proces ewolucji wysokości trwał dłużej z wykorzystaniem ODE.
Odwrotną tendencję można zauważyć w ekperymencie ewolucji prędkości. Ponieważ przeszukiwanie ewolucyjne z wykorzystaniem ODE miało tendencje do bardzo szybkiego wpadania w lokalne
optimum, proces ewolucji z użyciem ODE trwał krócej, niż z użyciem MechaStick. Wyjście z tego
optimum lokalnego wymagałoby zmiany całej specyfiki ruchu, co niestety okazało się niemożliwe.
Mateusz Pachocki
22
Zdarzały się też przypadki, że ruch agenta nie był ruchem ciągłym, a jedynie drobnym drganiem,
oscylacją, która jednak podnosiła wartośći funkcji oceny na tyle, że zmiana ta była odnotowywana.
W analizie jakościowej wyników ewolucji wysokości ciekawą obserwacją jest zachłannny charakter
ewolucji, szczególnie widoczny w konstrukcjach uzyskanych za pomocą ODE. Agenci uzyskani w ten
sposób mają niewielkie podstawy i jedno ramię skierowane pionowo w górę. Jest to swego rodzaju ślepy
zaułek, ponieważ redukcja podstawy nie umożliwia dalszego rozwoju w górę bez utraty stabilności,
jednak w początkowej fazie ewolucji to właśnie rozwój w górę, a nie rozwój podstawy, podnosi wartość
funkcji oceny, dlatego ewolucja przebiega właśnie w tym kierunku.
Analiza jakościowa wyników ewolucji prędkości pokazuje, że najczęstszymi przypadkami byli agenci
o dwóch kończynach połączonych mięśniem zginającym. Za pomocą tych kończyn agent odpychał
się od powierzchni i nabierał prędkości. Zdarzały się też konstrukcje z jedną ruchomą kończyną, za
pomocą której agent odpychał się od powierzchni, a pozostałe służyły do stabilizacji ruchu. Cechą
wspólną wszystkich rozwiązań znalezionych w eksperymencie z ewolucją prędkości były małe ciała
agentów, stąd wniosek, że duży rozmiar ciała jest przeszkodą w poruszaniu się.
Ewolucja konstrukcji miała na celu uzyskanie agentów, którzy pełniliby funkcję podpory. Jednak
tylko w jednym przypadku, z wykorzystaniem MechaStick i kodowania f0, udało się uzyskać agenta, który rzeczywiście przypominał stosowane w tej dziedzinie rozwiązania. Konstrukcje uzyskane za
pomocą ODE miały tendencje do przesadnego rozrastania się poza podstawą, co dawało w efekcie
ciekawy, lecz raczej mało użyteczny kształt. Tą samą cechę widać było również w niektórych konstrukcjach uzyskanych przy pomocy MechaStick. Ciekawą cechą takich agentów było wykształcenie
pewnej symetrii, która pomagałia im zachować równowagę.
Dobór symulatora mechaniki jest silnie zależny od celu ewolucji, jak i pewnych jej parametrów.
Jak widać jeden symulator spisuje się lepiej w określonym typie zadań, z kolei może zupełnie nie radzić
sobie z innym. Najlepszym symulatorem byłoby znalezienie kompromisu pomiędzy ODE i MechaStick.
Byłby on bardziej uniwersalny i niezależny od celu ewolucji.
Mateusz Pachocki
23
Literatura
[MK01] Adam Rotaru-Varga Maciej Komosiński. Comparison of different genotype encodings for simulated
3d agents. [on-line]
http://www.frams.alife.pl/common/Komosinski_Encodings_ALifeJ2001.pdf, 2001.
[MK06] Szymon Ulatowski Maciej Komosiński. Framsticks manual. [on-line]
http://www.frams.alife.pl/common/Framsticks_Manual.pdf, 2006.
[Smi06] Russel Smith. Open dynamics engine. [on-line]
http://opende.sourceforge.net/wiki/index.php/Main_Page, 2006.
Mateusz Pachocki
24

Podobne dokumenty