Montag, 27. August 2007

Die Arbeit neigt sich dem Ende zu

Da nun der Abgabetermin nur noch ca. 2.5 Monate vor mir liegt, muss ich langsam daran denken, den praktischen Teil abzuschliessen und mich voll und ganz dem schriftlichen zu widmen. Auf Anregung von Lukas Neukom möchte ich aber noch eine Sache in dieser Arbeit ausprobieren: Wie verhalten sich all meine Roboter-Kreaturen auf zufälligem Untergrund (d.h. nicht einfach eine Ebene, sondern hügeliges Terrain) und ist es möglich, die Roboter dort anzupassen? Des Weiteren möchte ich untersuchen, ob meine Roboter auch in der Lage sein werden, kleine, vorerst äussert schwierig zu überwindende Hindernisse (wie z.b. ein im Terrain festgemachter Quader, der hervorragt) immer schneller zu passieren?

Fragen über Fragen, die ich innerhalb meiner Arbeit noch beantworten möchte.

Samstag, 25. August 2007

Videos nun auf YouTube

Da es bei verschiedenen Personen Probleme gab, die Videos anzugucken, habe ich mich entschieden, die Videos auf YouTube hochzuladen. Im Moment sind nur die hochgeladen, die nicht direkt verlinkt werden konnten (Videos auf gratis File-Sharing-Seite). Das wären diese beiden:

Video grosse Spinne

Video kleine Spinne

Auch wenn die Qualität ein bisschen zu wünschen übrig lässt, kann man trotzdem gut erkennen, wie sich die Spinne fortbewegt. Bei YouTube kann ich auch sicher gehen, dass sie noch in einem Jahr noch nicht gelöscht wurden (wahrscheinlich), bei allen anderen gratis Webspace hingegen können unter Umständen die Videos sofort verschwinden.

Donnerstag, 2. August 2007

Die Spinne bekommt mehr Beine

Bisher hatte meine Spinne nur vier Beine - eigentlich viel zu wenig, um überhaupt als Spinne bezeichnet werden zu können. Nun habe ich sie aber leicht abgeändert, dass sie einen grösseren Körper und mehr Beine hat (insgesamt jetzt 8). Sie zu erstellen, bereitete mir eigentlich relativ wenig Mühe, denn die schwierigen Dinge waren ja schon gelöst bei der alten Spinne.

Nachdem ich sie eine Nacht lang entwickeln liess, kam ein erstaunlicher Gang zu Stande: Er ist sehr gleich wie der einer richtigen Spinne, mit dem Unterschied, dass sich die vordersten und hintersten Beine parallel bewegen, die mittleren hingegen genau immer umgekehrt. Ein Videovergleich soll dies illustrieren:

Video simuliert
Video real

Das Diagramm links zeigt den Entwicklungsprozess über 700 Generationen (obwohl ich den PC insgesamt 7 Stunden laufen liess, konnten in der Zeit nicht mehr soviele Generationen wie das letzte Mal (1700) Generationen simuliert werden. Die höhere Komplexität der Spinnen hatte einen erheblichen Einfluss in die Performance der Physik-Engine. Das Diagramm zeigt, dass wahrscheinlich mehr oder weniger das Maximum erreicht worden ist.









Viel interessanter ist dabei aber der Vergleich zwischen der 4- und 8-beinigen Spinne. Die beiden Diagramme wurden übereinander gelegt. Es ist sehr gut sichtbar, dass anfänglich die einfachere Spinne sich viel schneller entwickeln konnte. Nach etwa hundert Generationen hingegen überholte die Komplexere sie. Dies ist wohl darauf zurückzuführen, dass der genetische Algorithmus mit vielen Beinen mehr herausholen konnte als mit wenigen. Anzumerken ist dabei, dass das Verhältnis zwischen Kraft und Masse gleich ist (die grössere Spinne hat einen doppelt so grossen Körper, hat aber dafür doppelt so viele Beine bei gleicher Dichte). Die bessere Fitness muss also auf die zusätzlichen Koordinationsmöglichkeiten zurückzuführen sein, anders kann ich mir den doch recht grossen Unterschied nicht erklären.

Mittwoch, 1. August 2007

Neue Kreatur: Spinne

Über die Nacht habe ich eine spinnenartige Kreatur züchten lassen. Sie hat, im Gegensatz zu richtigen Spinnen, nur vier "Arme", jeder ist aber in 2 Teile unterteilt. Das obere Gelenk (Körper zu Oberarm) ist ein Universal-Joint. D.h. das Gelenk kann in 2 Freiheitsgrade gedreht werden. Beim unteren handelt es sich um einen Revolute-Joint, welcher nur in eine Richtung drehbar ist.

Die Hauptprobleme bei der Implementation waren, die aktuellen Gelenk-Informationen dem neuronalen Netz bereitzustellen. Leider bietet die Physik-Engine (AGEIA PhysX) keine direkten Funktionen an, um bei einem Gelenk die Winkel auszulesen. Deshalb musste ich komplizierte Vektorgeometrie anwenden, um die richtigen Winkel zu berechnen.

Nach einigen Stunden war dann die Kreatur bereit, trainiert zu werden. Es ist sehr wichtig, dass man alle Eingaben und Ausgaben bei einem neuronalen Netz von Hand überprüft, denn allfällige Fehler sind nicht direkt sichtbar, man merkt es erst, wenn sich die Kreatur nicht wirklich verbessert.

Das Ziel war es, sich möglichst schnell fortzubewegen. Anzumerken ist hierbei, dass es sich für diese Kreatur um eine relativ einfache Aufgabe handelte, wie im Diagramm zu sehen ist. Innerhalb weniger Generationen war die Spinne in der Lage, sich relativ schnell fortzubewegen (Fitness 1500). Bis zur Fitness 2250 brauchte es auch nur wenige hundert Generationen. Ab dort aber entwickelte sich der Roboter nur noch sehr, sehr langsam. Was das chaotische Verhalten beim Durchschnitt soll (Generation 600-700), kann ich auch nicht beantworten, vielleicht "experimentierte" der genetische Algorithmus ein bisschen fester als sonst.

Im Video sieht man, wie die Spinne praktisch am Optimum des Möglichen ist. Die Bewegung ist sehr rund und extrem synchron (alle Gelenke werden jedoch einzeln angesteuert!). Da es sich bei der Spinne um eine relativ einfache Aufgabe handelt, eignet sie sich auch, um nochmal das Thema Steuerkommandos für Roboter wieder zu beleben.

Video nach ca. 1700 Generationen