Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

ss19:dokumentation

Dokumentation

Tag_1 23.05.2019

Als ersten Anlauf diente uns das Projekt aus dem WS 17/18 und der YT-Channel „Primer“, der Evolution aus Programmier-Sicht betrachtet und diese schön visualisiert. Daraus entwickelten wir ein Konzept mit der Struktur: 1. Kreaturen, welche sich bewegen können 2. Essen in der Umgebung platzieren, wer essen findet überlebt, wer nicht stirbt 3. Den Kreaturen die Möglichkeit geben, sich zu entwickeln (Evolution)

Mehr zu unseren Quellen und Inspirationen findet ihr unter Quellen und Inspirationen.

Wir fingen an, ein erstes Programm in Turtle zu erstellen. Wobei sich eine Anzahl von Tieren von einem Startpunkt aus zufällig in alle Richtungen bewegen bis sie auf ein Futterstück treffen. Die dabei veränderbaren Größen sind die Spieleranzahl, Futteranzahl und Mapgröße. Dabei zeigten sich die ersten Probleme. Einerseits war die Visualisierung langsam durch Turtle und andererseits ging die Anzahl der Berechnungen der Hitbox in absurde Höhen bei hohen Spieler- und Futteranzahlen. Von daher in installierten wir Pygame als Visualisierungsprogramm und lernten die Anwendung durch erste experimentelle Programme kennen. Zudem fingen wir an, oberflächlich mit Mutationen zu experimentieren. In diesem ersten Programm wurden noch nur 100 mal der Wert 1 in eine Liste gepackt. Jeden dieser Werte ließen wir dann durch das Programm mutieren, indem wir einen kleinen Wert addierten oder abzogen. Code: (mutationen_kreaturen_begrenzteschritte_leander)

Tag_2 28.05.2019

Der Mutationscode wird um eine Eltern-Funktion erweitert, bei der die Nachkommen sich aus den Eigenschaften der beiden Vorgänger zusammensetzten. Zu einer Rate von 10% kommen Mutationen vor. Dieses Programm war auf die Maximierung eines Wertes ausgelegt und eher theoretisch. Es gab keine Visuelle Darstellung abgesehen von einigen Statistiken. Aber diese Fortpflanzung einige Veränderungen in anderen Bereichen, wie Sehen und Interpretationsfunktion der anderen Wesen nach sich gezogen hätte erwies sich die Idee als zu kompliziert. Wir haben uns also, auch aus Zeitgründen, schlussendlich gegen die Einführung einer Eltern-Nachkommen-Beziehung entschieden. Stattdessen behielten wir die simplere Version in der die neue Generation an einem neuen Tag generiert wird. Code: (mutationen_kreaturen_eineeigenschaft_leander) Zudem wurde parallel ein Programm zur Darstellung von Kreaturen und Futterstücken in Pygame erarbeitet. Dieses stellte eine Karte dar, auf der Futterstücke generiert wurden und Kreaturen herumliefen. Sie konnten die Futterstücke aber noch nicht einsammeln. Code: (zufaellig_bewegung_kreaturen_futtergenerierung_turtle_eric_verena) Code: (Pygame_beispielprogramm_mit_hitbox_eric) Die Besprechung der weiteren Vorgehensweise und Aufgabenverteilung gestaltet sich schwierig. Ausgangspunkt ist die Beschäftigung in kleineren Gruppen mit verschiedenen Themen (Mutation, Darstellung, neuronale Netzwerke)

Tag_3 06.06.2019

An Tag drei arbeiteten wir hauptsächlich an den bereits vorhandenen Codes weiter. In unser Programm zur Bewegung der Kreaturen implementierten wir nun, dass die Kreaturen einen Ausdauer-Wert hatten. Dieser fiel konstant mit jedem Schritt, den die Kreatur machte und stieg immer dann, wenn sie ein über ein Futterstück lief und es so einsammelte. Zudem implementierten wir, dass sich die Karte erweiterte, sobald die Kreaturen über ihren Rand liefen. Dies haben wir aber später wieder aus dem Code gelöscht, da wir es nicht hinbekamen diese Kartenerweiterung auch bildlich darstellbar zu machen. Code: (erstes_pygame_simulation_alex und einfache_mapgeneration_fuer_grosse_populationen_eric) Auch mit der Mutation von Kreaturen beschäftigen wir uns weiter, vor allem beschäftigten wir uns mit der Mutation größerer Population und damit, mehrere Mutationen nacheinander ablaufen zu lassen. Code: (mutationen_kreaturen_eineeigenschaft_zweieltern_leander) Zu guter Letzt recherchierten wir noch über neuronale Netze und überlegten, ob wir diese Sinnvoll in unser Projekt eingliedern könnten.

Tag_4 13.06.2019

Einfügen einer ersten Umgebungswahrnehmung in unser Programm zur Bewegung von Kreaturen. Diese funktionierte noch nicht wirklich. Zudem haben wir einige Detailsachen verbessert, wie die Bewegung der Kreaturen. Des Weiteren nahm der Plan für die Einbindung maschinellen Lernens in das Programm weiter Gestalt an. Wir planten, die Informationen über die Umgebung der Kreaturen durch die Map ausgeben und an das in die Kreaturen implementierte Netz weitergeben zu lassen. Hier wollten wir noch die Hidden Layers den Wert erhöhen lassen, wenn die Distanz zum Futter abnimmt. Der Output Layer sollte dann das angepasste Verhalten beinhalten. Zu guter Letzt implementierten wir noch Statistiken in den Mutationscode, welche später Verwendung in unserem Hauptcode fanden.

Tag_5 20.06.2019

Stefan hat unser Programm umgestaltet. Es besteht nun aus drei seperaten Code-Teilen. Erstens die Map, welche das Futter für die Kreaturen generiert, Informationen an die Kreaturen übermittelt und diese zeichnet. Zweitens die Kreaturen, auch Player, welche auf die Informationen der Map reagieren und ihrerseits ihre Informationen an die Map übermitteln. Und drittens die Konstanten, ein Programmteil, in der die für die Kreaturen und Map wichtigen Informationen gespeichert werden. Wir erweitern diesen Code um weitere Kreaturen, welche wir später aber wieder entfernen. Wir fangen mit dem erstellen von Reaktionsprogrammen für die Kreaturen an. Dabei planen wir, eines auf Basis Neuronaler Netze und eines auf Basis von Polynomen zu erstellen. Einen anfänglichen Plan, den Kreaturen Teile der Bewegungsabläufe ihrer Eltern zu geben verwerfen wir wieder.

Tag_6 27.06.2019

Wir versuchten, eine Sichtfeldfunktion zu entwickeln, welche die Abdeckung des Sichtfeldes der Kreatur mit Futter misst und an die Kreatur gibt. Zudem bauten wir Statistiken in unser Programm ein. Hierfür wurde als Vorbild die Statistiken aus den Versuchen mit den Mutationen verwendet, allerdings wurden diese an den Code angepasst. Die ersten Statistiken zeigten noch relativ gestreute Ergebnisse, in der Tendenz gingen allerdings hier schon häufiger Geschwindigkeit, Größe und Sichtweite runter. Dies lag an der unpassenden Energieverbrauchsfunktion. (Siehe ausgewählte Statistiken Abbildung 1 und 2)

Tag_7 11.07.2019

Das Programm zur Futterabdeckung wurde nun in unseren Hauptcode implementiert. Leider scheinen die Kreaturen bis in die Endversion hinein quasi nicht darauf zurückzugreifen, zumindest konnten wir keine Sichtbare Veränderung der Bewegung der Kreaturen durch Futter im Sichtfeld feststellen. Zudem experimentierten wir noch mit dem Einbau von Grafiken anstatt der Einfarbigen Punkte in das Programm. Wir haben uns schlussendlich aber dagegen entschieden, da wir es nicht schafften, deren Größe an die variable Größe der Kreaturen anzupassen. Unser Neuronales Netz machte darüber hinaus noch Probleme aufgrund verschiedener kleinerer Fehler, die Stefan schlussendlich für uns fand. Wir programmierten für dieses eine Testumgebung, in der es nur ein Futterstück mit über alle Generationen feste Koordinaten gab und die Kreaturen belohnt wurden, je näher sie diesem kamen. Die Kreaturen schafften es aber nicht, dem Futterstück in irgendeiner Weise näher zu kommen.

Blocktermin 29.07. - 31.07.2019

Dank Stefan funktionierte unser neuronales Netz nun, und wir konnten es in unser Programm einbauen. Zudem wollten wir die Chunks mit einem wechselnden zufälligen Muster darstellen anstatt der einen Farbe. Da das generieren dieser Chunks aber zu zeitaufwendig war, entschieden wir uns dagegen. Desweitern fügten wir einen Räuber-Beute Ansatzes in den Code, indem nicht mehr in jeder Generation gleich viele Kreaturen und Futterstücke gespawnt werden. Stattdessen werden nach bestimmten Regeln aus allen Kreaturen, die eine Mindestschrittzahl und eine Mindestfutterzahl erreicht haben, Kreaturen erstellt. Die Anzahl der erstellten Kreaturen pro Elternkreatur ist dabei abhängig von der Menge des eingesammelten Futters und von der Anzahl der überlebten Schritte. Aus den nicht gefressenen Futterstücken wird eine Anzahl an neuen Futterstücken generiert. Zu guter Letzt formten wir noch die Statistiken in eine Klasse um, wodurch es einfacher wurde, neue Statistiken einzubauen.

(vorläufig) Finale Version

Wir haben nun vier verschiedene Versionen des Codes, je zwei mit unbegrenzter Map, bei welcher Kreaturen, die die Mapgrenzen überqueren, auf der anderen Seite der Map auftauchen, zwei mit limitierter Map, bei welcher die Kreaturen sterben, wenn sie die Mapgrenzen überqueren sowie zwei mit Neuronalem Netz und zwei mit Polynomen. Außerdem noch einbau einiger kleinerer Sachen. So sterben die Kreaturen nun nach spätestens 5000 Schritten automatisch. Zudem sollte die Temperatur nun funktionieren. Die Statistiken umfassen nun Geschwindigkeit, Größe, Sichtweite, Fettanteil, Überlebte Schritte, Kreaturen Anzahl, Futteranzahl, sowie bei den Polynomen die Länge der Polynome. Alle einstellbaren Konstanten für die Map sollten unter constants zu finden sein.

Code
Ergebnisse
Älter Version der Dokumentation

ss19/dokumentation.txt · Zuletzt geändert: 2019/09/06 00:26 von leanderh