Benutzer-Werkzeuge

Webseiten-Werkzeuge


ss19:exkurs_genetische_algorithmen

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
ss19:exkurs_genetische_algorithmen [2019/08/09 02:25]
feuerhahn
ss19:exkurs_genetische_algorithmen [2019/08/11 15:58] (aktuell)
feuerhahn [Zweites Modell: Bipedal Walker]
Zeile 6: Zeile 6:
  
 Das Miniprojekt:​ "​Genetische Algorithmen und neuronale Netze" beschäftigt sich mit einfacher algorithmischer Evolution. \\  Das Miniprojekt:​ "​Genetische Algorithmen und neuronale Netze" beschäftigt sich mit einfacher algorithmischer Evolution. \\ 
-Anhand eines evolutionärem ​Programms werden wir zwei verschiedene Strukturen betrachten.\\+Anhand eines evolutionären ​Programms werden wir zwei verschiedene Strukturen betrachten.\\
 Zum einen wird das Modell: Cartpole Ausgewertet,​ und zum anderen werden wir am Modell: Bipedal-Walker herumprobieren.\\ Zum einen wird das Modell: Cartpole Ausgewertet,​ und zum anderen werden wir am Modell: Bipedal-Walker herumprobieren.\\
 Stefan hat hierfür eine Übersicht und Aufgaben zur Verfügung gestellt, welche sich inklusive Code (jupyter-Notebook) am Ende des Exkurs'​ in der .zip-Datei befinden.\\ Stefan hat hierfür eine Übersicht und Aufgaben zur Verfügung gestellt, welche sich inklusive Code (jupyter-Notebook) am Ende des Exkurs'​ in der .zip-Datei befinden.\\
Zeile 33: Zeile 33:
 ==== Erstes Modell: Cartpole ==== ==== Erstes Modell: Cartpole ====
  
-Das Modell Cartpole verwendet das Paket opnenAI-gym im ipython-Notebook. \\ +Das Modell Cartpole verwendet das Paket openAI-gym im ipython-Notebook. \\ 
-Dieses wird verwendet um einen Wagen zu Simulieren, auf dem sich ein senkrecht gestellter Balken ​befinden. \\ +Dieses wird verwendet um einen Wagen zu Simulieren, auf dem sich ein senkrecht gestellter Balken ​befindet. \\ 
-Dieser Balken ist Drehbar, bzw. er kann zu den Seiten kippen --> ​Umfallen. \\+Dieser Balken ist drehbar, bzw. er kann zu den Seiten kippen --> ​umfallen. \\
 Der Zustand des Balkens wird durch vier Zahlen beschrieben. \\ Der Zustand des Balkens wird durch vier Zahlen beschrieben. \\
 Hinter diesen Zahlen verstecken sich die Informationen zu: Ort, Geschwindigkeit,​ Winkel des Balkens und Winkelgeschwindigkeit des Balkens. Hinter diesen Zahlen verstecken sich die Informationen zu: Ort, Geschwindigkeit,​ Winkel des Balkens und Winkelgeschwindigkeit des Balkens.
Zeile 53: Zeile 53:
  
 1. \\ 1. \\
-Im ipython-Notebook ist die Funktionsfamilie durch ein so genanntes ​//​künstliches neuronales Netz// mit einem //hidden layer// mit //h// Knoten gegeben. \\ +Im ipython-Notebook ist die Funktionsfamilie durch ein sogenanntes ​//​künstliches neuronales Netz// mit einem //hidden layer// mit //h// Knoten gegeben. \\ 
-Ein neuronales Netz mit einer genutzen //hidden layer// Funktion kann jede stetige Funktion auf einer kompakten Menge beliebig genau näherungsweise ​Bestimmen, wenn die Zahl der verborgenen Knoten groß genug ist.\\+Ein neuronales Netz mit einer genutzen //hidden layer// Funktion kann jede stetige Funktion auf einer kompakten Menge beliebig genau näherungsweise ​bestimmen, wenn die Zahl der verborgenen Knoten groß genug ist.\\
  
 a) \\ a) \\
Zeile 89: Zeile 89:
 b)\\ b)\\
  
-Lassen Sie beide Modelle mit unterschiedlich starker Mutation lernen. Probieren Sie verschiedene Werte von sigma aus und Dokumentieren ​Sie wie schnell das Modell jeweils lernt.\\ +Lassen Sie beide Modelle mit unterschiedlich starker Mutation lernen. Probieren Sie verschiedene Werte von sigma aus und dokumentieren ​Sie wie schnell das Modell jeweils lernt.\\ 
-Probieren Sie ebenfalls auswas passiert, wenn der Mutationsparameter von Generation zu Generation kleiner wird.+Probieren Sie ebenfalls aus was passiert, wenn der Mutationsparameter von Generation zu Generation kleiner wird.
  
 **Lösung:​** \\ **Lösung:​** \\
  
-**Wir Vergleichen beide Modelle mit simga = 0.5:** \\+**Wir Vergleichen beide Modelle mit sigma = 0.5:** \\
  
 ^ Merkmale ​        ^ make_model ​          ^ make_model_2 ​      ^ ^ Merkmale ​        ^ make_model ​          ^ make_model_2 ​      ^
Zeile 104: Zeile 104:
 ^ Minimum ​        ​| ​  ​{{:​ss19:​model_05_6.png?​200|}} |  {{:​ss19:​model2_05_6.png?​200|}} ​ | ^ Minimum ​        ​| ​  ​{{:​ss19:​model_05_6.png?​200|}} |  {{:​ss19:​model2_05_6.png?​200|}} ​ |
  
-Erstaunlicher Weise scheint das sehr hohe simga für die Einfache Funktion des make_model_2 besser zu funktionieren.+Erstaunlicher Weise scheint das sehr hohe sigma für die Einfache Funktion des make_model_2 besser zu funktionieren.
 Ein weiteres Beispiel mit sigma = 0.01 findet sich in den jweiligen DokuStats der ipython-Notebooks. \\ Ein weiteres Beispiel mit sigma = 0.01 findet sich in den jweiligen DokuStats der ipython-Notebooks. \\
  
-**Wir Vergleichen beide Modelle mit simga = 1/(i+10):** \\+**Wir Vergleichen beide Modelle mit sigma = 1/(i+10):** \\
  
 ^ Merkmale ​        ^ make_model ​          ^ make_model_2 ​      ^ ^ Merkmale ​        ^ make_model ​          ^ make_model_2 ​      ^
Zeile 123: Zeile 123:
 c)\\ c)\\
  
-Ändern Sie ebenfalls den Parameter k. Er bestimmt wieviele Wesen einer Generation auf die nächste ​Übergehen ​und Mutiert ​werden.\\+Ändern Sie ebenfalls den Parameter k. Er bestimmt wieviele Wesen einer Generation auf die nächste ​übergehen ​und mutiert ​werden.\\
  
 **Lösung:​** \\ **Lösung:​** \\
Zeile 137: Zeile 137:
 ^ Minimum ​              ​|{{:​ss19:​model_k50_6.png?​200|}}| {{:​ss19:​model2_k50_6.png?​200|}}| ​ ^ Minimum ​              ​|{{:​ss19:​model_k50_6.png?​200|}}| {{:​ss19:​model2_k50_6.png?​200|}}| ​
  
-Hier scheint die Funktion der make_model besser mit den 50 Wesen umgehen zu können, welche pro Generation weiter ​Mutiert ​werden. Make_model_2 hingegen funktioniert deutlich ​Schlechter.\\ +Hier scheint die Funktion der make_model besser mit den 50 Wesen umgehen zu können, welche pro Generation weiter ​mutiert ​werden. Make_model_2 hingegen funktioniert deutlich ​schlechter.\\ 
-Ein weiteres Beispiel mit k = 5 findet sich in den jweiligen ​DokuStats der ipython-Notebooks. \\+Ein weiteres Beispiel mit k = 5 findet sich in den jeweiligen ​DokuStats der ipython-Notebooks. \\
  
 d)\\ d)\\
Zeile 156: Zeile 156:
 ^ Maximum ​              ​|{{:​ss19:​model_k3_5.png?​300|}}| ​ ^ Maximum ​              ​|{{:​ss19:​model_k3_5.png?​300|}}| ​
 ^ Minimum ​              ​|{{:​ss19:​model_k3_6.png?​300|}}| ​ ^ Minimum ​              ​|{{:​ss19:​model_k3_6.png?​300|}}| ​
-^ Mittelwert ​u. Stdabw. ​|{{:​ss19:​model_k3_7.png?​300|}}| ​+^ Mittelwert ​& Standardabweichung ​|{{:​ss19:​model_k3_7.png?​300|}}|
  
-Viele Durchläufe zu Mitteln ​schafft ein klareres Bild darüber, wie gut der Algorithmus tatsächlich ist.\\+ 
 +Viele Durchläufe zu mitteln ​schafft ein klareres Bild darüber, wie gut der Algorithmus tatsächlich ist.\\
 Wichtig ist hier besonders die generelle Standardabweichung vom Mittelwert.\\ Wichtig ist hier besonders die generelle Standardabweichung vom Mittelwert.\\
-Desto geringer die Abweichung, desto zuverlässiger ist auch, dass er Algorithmus in allen Durchläufen ca. Ähnlich ​funktioniert.\\+Je geringer die Abweichung, desto zuverlässiger ist auch, dass er Algorithmus in allen Durchläufen ca. ähnlich ​funktioniert.\\ 
 + 
 +{{:​ss19:​c_users_veve_anaconda3_lib_site-packages_ipykernel_launcher.py_2019-08-11_13-13-33.mp4|}}
  
 ==== Zweites Modell: Bipedal Walker ==== ==== Zweites Modell: Bipedal Walker ====
  
 Bei diesem Modell arbeiten wir mit der openAI-gym "​BipedalWalker-v2/​."​.\\ Bei diesem Modell arbeiten wir mit der openAI-gym "​BipedalWalker-v2/​."​.\\
-Hierfür müssen wir das Paket box2d installieren. --> Bei mir hat das auf einem win64 System ​nicht Funktioniert ​per pip install box2d --> daher werde ich das win64 Paket auch in die .zip packen. ​Genaures ​in der readMe.\\+Hierfür müssen wir das Paket box2d installieren. --> Bei mir hat das auf einem Windows 64-Bit ​System per "pip install box2d" nicht funktioniert ​--> daher werde ich das win64 Paket auch in die .zip packen. ​Genaueres ist in der readMe.txt zu finden.\\
  
 Das Modell des Bipedal Walker besitzt einen 24-dimensionalen Zustandsraum.\\ Das Modell des Bipedal Walker besitzt einen 24-dimensionalen Zustandsraum.\\
Zeile 193: Zeile 196:
 Als erstes habe ich mir den Simulierten Ablauf des Walkers angesehen und Referenzwerte erfasst.\\ Als erstes habe ich mir den Simulierten Ablauf des Walkers angesehen und Referenzwerte erfasst.\\
 Die Bewertung des Walkers geschieht hier durch einen reward. Je besser der Walker die Schritte tätigt und dabei vorwärts kommt, desto höher wird der reward.\\ Die Bewertung des Walkers geschieht hier durch einen reward. Je besser der Walker die Schritte tätigt und dabei vorwärts kommt, desto höher wird der reward.\\
-Wenn der Walker fällt ist er gescheitert und sein durchlauf ​beendet.\\+Wenn der Walker fällt ist er gescheitert und sein Durchlauf ​beendet.\\
  
 {{:​ss19:​bipesimu.png?​300|}} {{:​ss19:​bipesimu.png?​300|}}
  
-In der Grafik erkennt man, dass der zu erreichende Wert gegen 300 reward ​punkte ​streben sollte.\\+In der Grafik erkennt man, dass der zu erreichende Wert gegen 300 reward-Punkte ​streben sollte.\\
  
 Jetzt können wir das iphython-Notebook beliebig bearbeiten. Es wird sich auch in der .zip befinden.\\ Jetzt können wir das iphython-Notebook beliebig bearbeiten. Es wird sich auch in der .zip befinden.\\
Zeile 206: Zeile 209:
  
 Der erste Versuch war wie zu erwarten nicht der beste.\\ Der erste Versuch war wie zu erwarten nicht der beste.\\
-Der Mittelwert ging nicht über -30 hinaus und der Maximal ​erreichte Wert ging zum Ende der 100 Generationen gerade ​mal auf 30 zu.+Der Mittelwert ging nicht über -30 hinaus und der maximal ​erreichte Wert ging zum Ende der 100 Generationen gerade ​einmal ​auf 30 zu.
  
 {{:​ss19:​bipe01_1.png?​300|}} {{:​ss19:​bipe01_1.png?​300|}}
 {{:​ss19:​bipe01_2.png?​300|}} {{:​ss19:​bipe01_2.png?​300|}}
  
- **__ Mein zweiter Versuch:​__** sigma = 0.07, keep_best = 18, population = 200, Durchläufe = je3, Generationen = 100, hidden = 16\\+ **__ Mein zweiter Versuch:​__** sigma = 0.07, keep_best = 18, population = 200, Durchläufe = je 3, Generationen = 100, hidden = 16\\
  
 Diesmal lag der Mittelwert zwar wieder nur im negativen Bereich, jedoch ist das Maximum deutlich angestiegen. Die Maximalen Werte erreichten zumindest zum Ende höhen Richtung 100 reward.\\ Diesmal lag der Mittelwert zwar wieder nur im negativen Bereich, jedoch ist das Maximum deutlich angestiegen. Die Maximalen Werte erreichten zumindest zum Ende höhen Richtung 100 reward.\\
-Da der Algorithmus vielversprechend aussah, habe ich zusätzlich noch einen Zweiten ​Durchlauf gestartet.\\+Da der Algorithmus vielversprechend aussah, habe ich zusätzlich noch einen zweiten ​Durchlauf gestartet.\\
  
 {{:​ss19:​bipe02_1.png?​300|}} ​ {{:​ss19:​bipe02_1.png?​300|}} ​
Zeile 239: Zeile 242:
  **__ Mein fünfter Versuch:​__** sigma = 1/(i+10), keep_best = 20, population = 200, Durchläufe = 3, Generationen = 100, hidden = 16\\  **__ Mein fünfter Versuch:​__** sigma = 1/(i+10), keep_best = 20, population = 200, Durchläufe = 3, Generationen = 100, hidden = 16\\
  
-Diesen Versuch habe ich auf Stefans Ratschlag hin ausprobiert. Interessant ist, dass der Algorithmus bei mir hier nicht Vielversprechend ​aussieht, da das Maximum gerade mal auf 8 reward steigt.\\+Diesen Versuch habe ich auf Stefans Ratschlag hin ausprobiert. Interessant ist, dass der Algorithmus bei mir hier nicht vielversprechend ​aussieht, da das Maximum gerade mal auf 8 reward steigt.\\
 Stefan meinte ,dass es bei ihm funktionierte,​ daher werde ich noch mehr Versuche machen.\\ Stefan meinte ,dass es bei ihm funktionierte,​ daher werde ich noch mehr Versuche machen.\\
  
Zeile 248: Zeile 251:
  **__ Mein sechster Versuch:​__** sigma = 1/(i+10), keep_best = 20, population = 200, Durchläufe = 1, Generationen = 1000, hidden = 16\\  **__ Mein sechster Versuch:​__** sigma = 1/(i+10), keep_best = 20, population = 200, Durchläufe = 1, Generationen = 1000, hidden = 16\\
  
-Bei diesem Versuch habe ich den vorherigen einfach nur um seine Generationen erweitert. Interessant zu beobachten ist, dass der Mittelwert sich der 0 nähert, aber die Maxima immernoch bei 9 stagnieren. Das Bedeutet ​im Umkehrschluss,​ dass nicht die Maxima höher werden, sondern die Minima ansteigen.\\+Bei diesem Versuch habe ich den vorherigen einfach nur um seine Generationen erweitert. Interessant zu beobachten ist, dass der Mittelwert sich der 0 nähert, aber die Maxima immernoch bei 9 stagnieren. Das bedeutet ​im Umkehrschluss,​ dass nicht die Maxima höher werden, sondern die Minima ansteigen.\\
  
 {{:​ss19:​bipe06_1.png?​300|}} {{:​ss19:​bipe06_1.png?​300|}}
Zeile 257: Zeile 260:
  **__ Mein siebter Versuch:​__** sigma = 0.07, keep_best = 18, population = 200, Durchläufe = 3, Generationen = 1000, hidden = 16\\  **__ Mein siebter Versuch:​__** sigma = 0.07, keep_best = 18, population = 200, Durchläufe = 3, Generationen = 1000, hidden = 16\\
  
-Hier greife ich nochmal auf meinen zweiten Versuch zurück und erweitere wieder die Genrationsanzahl.\\ +Hier greife ich nochmal auf meinen zweiten Versuch zurück und erweitere wieder die Generationsanzahl.\\ 
-Wieder sehr vielversprechende Ergebnisse. Zwar komme ich nicht annähernd an die 300 reward, jedoch haben meine Walker die Hälfte davon erreichen können.\\+Wieder ​gab es sehr vielversprechende Ergebnisse. Zwar komme ich nicht annähernd an die 300 reward, jedoch haben meine Walker die Hälfte davon erreichen können.\\
 Leider stagniert sich dieser Wert jedoch auch über die Generationen und mag nicht so recht weiter ansteigen.\\ Leider stagniert sich dieser Wert jedoch auch über die Generationen und mag nicht so recht weiter ansteigen.\\
  
Zeile 266: Zeile 269:
  
  **__ Mein achter Versuch:​__** sigma = 1/(i+10), keep_best = 20, population = 200, Durchläufe = 1, Generationen = 10000, hidden = 16\\  **__ Mein achter Versuch:​__** sigma = 1/(i+10), keep_best = 20, population = 200, Durchläufe = 1, Generationen = 10000, hidden = 16\\
 +
 +Da mein Computer nach einem Tag Laufzeit den Algorithmus leider nichtmehr weitergeführt hat, sondern einfach abgebrochen hat, habe ich leider keine Aufzeichnungen davon.\\
 +Zu sagen ist jedenfalls, dass der Algorithmus einen reward bis 100 erreicht hat und danach auf dem Wert stagnierte.
  
  **__ Mein neunter Versuch:​__** ​ sigma = 0.07, keep_best = 18, population = 200, Durchläufe = 1, Generationen = 10000, hidden = 16\\  **__ Mein neunter Versuch:​__** ​ sigma = 0.07, keep_best = 18, population = 200, Durchläufe = 1, Generationen = 10000, hidden = 16\\
  
 +Auch hier hat mein Computer nach einem Tag Laufzeit den Algorithmus leider nichtmehr weitergeführt,​ sondern ihn einfach abgebrochen,​ daher habe ich leider keine Aufzeichnungen davon.
 +Dieses Modell ist in der Laufzeit zu einem reward von ca 190-200 gekommen und sicherlich noch ausbaufähig.\\
 +Vermutlich könnte man hier an den Voreinstellungen herumschrauben und somit ein besseres Ergebnis erzielen.\\
 +
 +{{:​ss19:​bipedal_walker.gif?​200|}}
 +(--> draufklicken zum Abspielen)
  
-==== .zip Mit allen Informationen ====+==== .zip mit allen Informationen ====
  
 +{{:​ss19:​evoalgorithmus_miniprojekt.zip|}}
  
ss19/exkurs_genetische_algorithmen.1565310330.txt.gz · Zuletzt geändert: 2019/08/09 02:25 von feuerhahn