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