Analyse domänenseitiger Optimierungen für Deep Reinforcement Learning in der RoboCup Umgebung

Die Seite wird erstellt Manuel Feldmann
 
WEITER LESEN
Analyse domänenseitiger Optimierungen für Deep Reinforcement Learning in der RoboCup Umgebung
Analyse domänenseitiger Optimierungen für
Deep Reinforcement Learning in der RoboCup
               Umgebung

                         Hannes Braun

                     BACHELORARBEIT
  zur Erlangung des akademischen Grades Bachelor of Science (B.Sc.)

            Studiengang Angewandte Informatik
 Fakultät Elektrotechnik, Medizintechnik und Informatik
Hochschule für Technik, Wirtschaft und Medien Offenburg

                           24.02.2021

                             Betreuer
                     Prof. Dr. Klaus Dorer
                     Prof. Dr. Stefan Wehr
Analyse domänenseitiger Optimierungen für Deep Reinforcement Learning in der RoboCup Umgebung
Braun, Hannes:
Analyse domänenseitiger Optimierungen für Deep Reinforcement Learning in der Robo-
Cup Umgebung / Hannes Braun. –
BACHELORARBEIT, Ohlsbach: Hochschule für Technik, Wirtschaft und Medien Offen-
burg, 2021. 78 Seiten.

Braun, Hannes:
Analysis of domain-side optimizations for deep reinforcement learning in the RoboCup en-
vironment / Hannes Braun. –
BACHELOR THESIS, Ohlsbach: Offenburg University, 2021. 78 pages.
Analyse domänenseitiger Optimierungen für Deep Reinforcement Learning in der RoboCup Umgebung
Eidesstattliche Erklärung
Hiermit versichere ich eidesstattlich, dass die vorliegende Bachelor-Thesis von mir
selbstständig und ohne unerlaubte fremde Hilfe angefertigt worden ist, insbesonde-
re, dass ich alle Stellen, die wörtlich oder annähernd wörtlich oder dem Gedanken
nach aus Veröffentlichungen, unveröffentlichten Unterlagen und Gesprächen ent-
nommen worden sind, als solche an den entsprechenden Stellen innerhalb der Arbeit
durch Zitate kenntlich gemacht habe, wobei in den Zitaten jeweils der Umfang der
entnommenen Originalzitate kenntlich gemacht wurde. Ich bin mir bewusst, dass
eine falsche Versicherung rechtliche Folgen haben wird.

Ich bin damit einverstanden, dass meine Arbeit veröffentlicht wird, d. h. dass die
Arbeit elektronisch gespeichert, in andere Formate konvertiert, auf den Servern der
Hochschule Mannheim öffentlich zugänglich gemacht und über das Internet ver-
breitet werden darf.

Ohlsbach, 24.02.2021

Hannes Braun
Analyse domänenseitiger Optimierungen für Deep Reinforcement Learning in der RoboCup Umgebung
Zusammenfassung

Analyse domänenseitiger Optimierungen für Deep Reinforcement Learning in
der RoboCup Umgebung

Mit dem Team „magmaOffenburg“ nimmt die Hochschule Offenburg seit 2009 am
internationalen Wettbewerb „RoboCup“ in der 3D-Simulationsliga für Fußball teil.
Dabei kommt es vor allem auf den Einsatz guter Lauf- und Kickverhalten an. Seit
2019 ist es dem Team magmaOffenburg möglich auch Deep Reinforcement Lear-
ning für die Weiterentwicklung der Verhalten einzusetzen. Während auf diese Wei-
se schon verwendbare Ergebnisse für das Kicken produziert wurden, so fehlt noch
ein Fortschritt beim Laufen lernen. Diese Arbeit beschäftigt sich mit den nötigen
Optimierungen auf der Domänenseite, um das gelernte Laufen zu verbessern. Das
beinhaltet die Optimierung des Observation- und Actionspaces, sowie auch eine
Optimierung der Rewardfunktion. Dabei wurde versucht, die einzelnen Einflüsse
verschiedener Parameter und Techniken innerhalb dieser drei Bereiche zu evalu-
ieren. So konnte zum Schluss eine Verbesserung in der Laufgeschwindigkeit von
etwas unter einem Meter pro Sekunde auf bis zu 1,8 Metern pro Sekunde erreicht
werden. Ausschlaggebend für dieses Ergebnis waren vor allem der Verbesserungen
in der Rewardfunktion.
Abstract

Analysis of domain-side optimizations for deep reinforcement learning in the
RoboCup environment

With the team ’magmaOffenburg’, the Offenburg University is participating in the
international competition ’RoboCup’ in the 3D simulation league for soccer since
2009. To archieve a great result, the team heavily relies on using well-trained be-
haviors for their agents (e.g. kicking or walking). Since 2019, magmaOffenburg is
also able to use deep reinforcement learning in order to further develop their beha-
viors. Using deep reinforcement learning, the team was already able to score usable
results in kicking. However, there is still a lack of progress for learning to walk. In
this thesis, the required optimizations on the domain side were tested and evaluated
in order to get a better result at walking. This includes optimizing the observation
space as well as the action space. Furthermore, a lot of optimizations for the reward
function will also be tested and evaluated. The goal was to get a clarification of the
influence of the various parameters and the applied techniques on walking in the
RoboCup domain. Finally, it was possible to improve the running speed from little
under a meter per second to up to 1.8 meters per second. The main reason for this
improvement were the optimizations in the reward function.
Inhaltsverzeichnis

1   Einführung                                                                                                                               1
    1.1   Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                           1
    1.2   Ziel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                           2
    1.3   Aufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                             3

2   Grundlagen                                                                                                                               4
    2.1   RoboCup . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 4
    2.2   PPO . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 7
    2.3   Lernarchitektur .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 8
    2.4   Initiale Referenz .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 10

3   Observationspace                                                                                                                        13
    3.1   Evaluierung der bereits vorhandenen Inputs . . . . . . . . . .                                                        .   .   .   13
          3.1.1 Ableitungen . . . . . . . . . . . . . . . . . . . . . . .                                                       .   .   .   14
          3.1.2 Ball-Observation . . . . . . . . . . . . . . . . . . . .                                                        .   .   .   16
          3.1.3 Observations für Kopf- und Armgelenke . . . . . . . .                                                           .   .   .   17
          3.1.4 Zähler für Simulationszyklen . . . . . . . . . . . . . .                                                        .   .   .   18
    3.2   Problemspezifische Inputs . . . . . . . . . . . . . . . . . . .                                                       .   .   .   19
          3.2.1 Center of Mass . . . . . . . . . . . . . . . . . . . . .                                                        .   .   .   19
          3.2.2 Abstand zwischen den Füßen . . . . . . . . . . . . . .                                                          .   .   .   21
          3.2.3 Zähler für linker/rechter Fuß . . . . . . . . . . . . . .                                                       .   .   .   22
          3.2.4 Torsohöhe . . . . . . . . . . . . . . . . . . . . . . . .                                                       .   .   .   24
          3.2.5 Abweichung von der gewünschten Richtung . . . . . .                                                             .   .   .   25
          3.2.6 Kombination verschiedener problemspezifischer Inputs                                                            .   .   .   27
    3.3   Bewertung . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                     .   .   .   28

4   Actionspace                                                                                                                             30
    4.1   Mapping der Ausgabewerte . . . . . . . . . . . . . . . . . . . . . . 30
    4.2   Beine versus Arme und Beine . . . . . . . . . . . . . . . . . . . . 37
    4.3   Bewertung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

5   Rewardfunktion                                                                                                                          40
    5.1   Ist-Zustand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

                                                            v
Inhaltsverzeichnis

    5.2     Dynamische Rewardfunktion . . . . . . . . . . . . . . . . . . . .        .   43
            5.2.1 Dynamisches Aufrechthalten . . . . . . . . . . . . . . . .         .   43
            5.2.2 Voraussetzung: Verbessertes Logging . . . . . . . . . . .          .   46
            5.2.3 Dynamische Gewichtung der Rewardkomponenten . . . .                .   46
    5.3     Steuern des Agenten auf niedrigerer Ebene mithilfe der Reward-
            funktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   .   56
            5.3.1 Generelle Fußbewegung und Schrittdauer . . . . . . . . .           .   56
            5.3.2 Fußabstand . . . . . . . . . . . . . . . . . . . . . . . . .       .   61
            5.3.3 Schrittlänge . . . . . . . . . . . . . . . . . . . . . . . . .     .   63
    5.4     Cycle-Reward versus Episode-Reward . . . . . . . . . . . . . . .         .   65
    5.5     Bewertung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    .   67

6   Weiterführende Entwicklung                                                           68
    6.1     Verdopplung der Netzwerkgröße . . . . . . . . . . . . . . . . . . . 68
    6.2     Morphing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
    6.3     Einbau in ein Spiel . . . . . . . . . . . . . . . . . . . . . . . . . . 72

7   Fazit                                                                                75

8   Ausblick                                                                             77

Abkürzungsverzeichnis

Tabellenverzeichnis                                                                        i

Abbildungsverzeichnis                                                                     ii

Quellcodeverzeichnis                                                                     iv

Literatur                                                                                 v

                                            vi
1.    Einführung

Mit dem Team „magmaOffenburg“ unter der Leitung von Prof. Dr. Klaus Dorer
nimmt die Hochschule Offenburg seit 2009 am internationalen Wettbewerb „Ro-
boCup“ in der 3D-Simulationsliga für Fußball teil. Dabei sind über die Jahre im-
mer mehr mögliche Verhalten für einen Roboter (im weiteren Verlauf der Arbeit
auch Agent genannt) hinzugekommen. Während das anfangs zum Beispiel noch
ein manuell programmiertes Laufen war [1], so wurde dies über die Zeit immer
mehr erweitert. Für viele Jahre wurde dann genetisches Lernen eingesetzt, um die
verschiedenen Verhalten der Agenten weiter zu verbessern. Der Hauptfokus beim
Lernen lag hierbei meistens auf dem Kicken oder dem Laufen [2]. Seit Ende 2019
ist es dem Team magmaOffenburg auch möglich, Deep Reinforcement Learning für
das Lernen verschiedener Verhalten zu nutzen. Diese Arbeit setzt sich mit den do-
mänenseitigen Optimierungen bei der Nutzung von Deep Reinforcement Learning
auseinander.

1.1 Motivation

Durch den Einsatz von Deep Reinforcement Learning gelang es anderen Teams wie
dem FC Portugal oder den IT Androids in der Vergangenheit bereits Laufverhal-
ten mit Geschwindigkeiten von fast 4 Metern pro Sekunde zu erreichen [3] [4]. Im
Vergleich dazu liegt die Geschwindigkeit des schnellsten Laufverhaltens von mag-
maOffenburg bei „nur“ rund einem Meter pro Sekunde. Da Deep Reinforcement
Learning also große Verbesserungen versprach, wurde die Verwendung dessen auch
im magmaOffenburg-Code ermöglicht.
In einer vorigen Arbeit wurden von Martin Spitznagel bereits Optimierungsmög-
lichkeiten auf der Seite des Deep Reinforcement Learning Algorithmus’ PPO2 un-
tersucht. [5] Dagegen soll sich diese Arbeit jedoch mit den Optimierungen auf der

                                       1
1 Einführung

Domänenseite beschäftigen. Das heißt anstatt die Parameter des Algorithmus zu
verändern, werden in dieser Arbeit die Ein- und Ausgabeparameter versucht zu op-
timieren.
Bis zum Beginn dieser Arbeit war es bereits möglich einen Kick zu lernen, mit
welchem der Ball in der Regel um circa acht Meter weit geschossen werden konn-
te. Dieser ist inzwischen auch bereits im Einsatz bei Wettkämpfen. Beim Laufen
hingegen sind die verzeichneten Fortschritte bisher eher noch gering und es be-
steht noch ein großes Verbesserungspotential. Aus diesem Grund wurden speziell
die Möglichkeiten zur Optimierung des Laufverhaltens in dieser Arbeit untersucht.
Dabei handelt es sich um ein modellfreies Laufen (im Gegensatz zu den bisher ver-
wendeten modellbasierten Laufverhalten).

1.2 Ziel

Wie schon angedeutet soll das Ziel dieser Arbeit das Lernen eines verbesserten
Laufverhaltens sein. Im besten Fall kann dieses mit den Laufverhalten der anderen
Teams konkurrieren oder diese sogar übertreffen. Sollte dann auch noch ein stabiler
Einbau in den Agentencode glücken (der Agent fällt beim Laufen nicht hin), so wäre
magmaOffenburg das vermutlich erste Team in der 3D-Simulationsliga, welchem
dies gelingt. Dies scheint bei den anderen Teams aktuell noch eines der größten
Probleme zu sein.
Konkret werden folgende Ziele angestrebt:
    • Der Observationspace soll von kontraproduktiven Inputs befreit werden.
    • Hilfreiche (teilweise problemspezifische) Inputs sollen dem Observations-
      pace hinzugefügt werden, falls dies eine Verbesserung hervorruft.
    • Der Einfluss des Mappings von den generierten Ausgabewerten des Deep Re-
      inforcement Learning Algorithmus’ zu tatsächlichen Motorbefehlen für den
      Agenten soll untersucht (und möglicherweise verbessert) werden.
    • Die Rewardfunktion soll mithilfe von verschiedenen Techniken optimiert wer-
      den. Dazu zählt zum Beispiel der Einsatz einer dynamischen Rewardfunktion.
      Es soll auch untersucht werden, welchen Einfluss der Cycle-Reward im Ver-
      gleich zum Episode-Reward hat.

                                        2
1 Einführung

1.3 Aufbau

Der Aufbau dieser Arbeit gliedert sich im Groben wie folgt:

   • In Kapitel 2 werden zunächst die notwendigen Grundlagen über die RoboCup-
     Umgebung sowie das Lernen mittels Deep Reinforcement Learning vermit-
     telt.
   • Kapitel 3 beschäftigt sich mit den Optimierungen im Observationspace. Da-
     bei wird im Wesentlichen die Effektivität vorhandener und neuer Inputs un-
     tersucht.
   • Kapitel 4 bildet quasi das Gegenstück zu Kapitel 3. Hier werden die Mög-
     lichkeiten zur Optimierung im Actionspace untersucht. Das Hauptaugenmerk
     liegt dabei auf dem Mapping der generierten Werte des Deep Reinforcement
     Learnings zurück zu Befehlen, welche für die Steuerung eines Agenten ge-
     nutzt werden können.
   • Kapitel 5 dreht sich dann um die Optimierung der Rewardfunktion. Mithilfe
     dieser werden kurz gesagt die ausgeführten Aktionen bewertet.
   • In Kapitel 6 werden schließlich noch einige weiterführende Entwicklungen
     beschrieben, welche zwar teilweise nicht mehr ganz zur domänenseitigen Op-
     timierung des Deep Reinforcement Learnings gehören, aber dennoch wichtig
     und interessant für das Entwickeln eines neuen Laufverhaltens sind.
   • Kapitel 7 fasst schließlich die Ergebnisse dieser Arbeit nochmals kurz zusam-
     men und gibt einen Überblick darüber, was aus dieser Arbeit gelernt/mitge-
     nommen wurde.
   • Kapitel 8 zeigt dann noch die Möglichkeiten zur weiteren Entwicklung des
     hier erlernten Laufverhaltens in der Zukunft auf.

                                        3
2.        Grundlagen

Um ein besseres Verständnis der später angewandten Optimierungen zu erhalten,
werden in diesem Kapitel die dazu nötigen Grundlagen beschrieben. Das beinhal-
tet im Wesentlichen eine Beschreibung der RoboCup Umgebung, die eingesetzten
Technologien sowie die daraus resultierende Architektur. Anschließend wird die
Durchführung eines initialen Lernlaufs zum Vergleich erläutert.

2.1 RoboCup

Der RoboCup ist ein weltweiter Wettbewerb, bei dem Roboter in unterschiedlichen
Disziplinen gegeneinander antreten. Dazu zählt unter anderem das Fußballspielen.
Dieses wird erneut in verschiedene Ligen unterteilt, wie zum Beispiel die humanoi-
de Liga oder die Simulationsliga (2D oder 3D). Diese Arbeit beschäftigt sich mit
der 3D-Simulationsliga. Das Ziel des RoboCups ist es, bis 2050 mit Robotern gegen
Menschen im Fußball mit den offiziellen FIFA-Regeln gewinnen zu können. In der
Vergangenheit waren außerhalb des RoboCups ähnliche Erfolge bereits in anderen
Disziplinen wie zum Beispiel Schach und Go zu verzeichnen.
In der 3D-Simulationsliga werden Spiele mit elf Robotern je Team gespielt. Die
simulierten Roboter entsprechen dem Roboter Nao der Firma „SoftBank Robotics“.
Es gibt verschiedene Variationen dieses Roboters wie beispielsweise den NaoToe.
Diesem wurde an jedem Fuß ein zusätzliches Zehengelenk hinzugefügt. Zu sehen ist
er in Abbildung 2.1. Während die Darstellung aus der Simulationssoftware RoboViz
die am meisten Bekannte ist, so zeigen die anderen beiden Darstellungen, wie der
Roboter auf Gelenkebene zusammengesetzt ist.
Zur Simulation wird der quelloffene Server rcssserver3d1 [7] verwendet. Ursprüng-
lich entwickelt von Oliver Obst und Markus Rollmann an der Universität Koblenz,
 1
     RoboCup Soccer Simulation Server 3D

                                           4
2 Grundlagen

Abbildung 2.1: Schematische Darstellung der Gelenke des NaoToe (links), Drahtgittermodell (mitte) und
               Darstellung in RoboViz (rechts) [6]

wird er nun in der Regel gemeinschaftlich von den verschiedenen teilnehmenden
Teams weiterentwickelt. Streng genommen teilt sich der Server in zwei Teile auf.
Das ist zum einen Spark, ein generischer Simulator für physikalische Simulatio-
nen mit mehreren Agenten [8]. Dieses Basisframework wurde dann verwendet, um
darauf aufbauend die Fußballdomäne im rcssserver3d zu implementieren. Für die
Simulation der physikalischen Eigenschaften wird die Physikengine ODE2 genutzt.
Diese soll für eine möglichst realitätsgetreue Simulation des Spiels sorgen.
Für die Benutzung des Servers verbindet sich ein sogenannter Agent mit dem Ser-
ver über das Agentenprotokoll. Welche Version des Nao-Roboters verwendet wird,
muss nach einem Verbindungsaufbau mit dem Simulationsserver bei der Initialisie-
rung angegeben werden. Der Agent kann dann Befehle für den ihm zugeordneten
Roboter senden (beispielsweise an die Jointmotoren des Roboters) und die entspre-
chenden Sensordaten empfangen. Für eine realistischere Simulation wird den Sens-
ordaten Rauschen hinzugefügt (sofern sinnvoll). Neben Steuerbefehlen für die Ge-
lenkmotoren des Roboters sind zum Beispiel auch sogenannte „Say“-Nachrichten
möglich. Dabei handelt es sich um 20 Zeichen lange Nachrichten, welche an alle
Agenten in einem Radius von 50 Metern gesendet werden.

 2
     Open Dynamics Engine

                                                 5
2 Grundlagen

Zusätzlich gibt es das Monitorprotokoll. Über dieses können einerseits Informa-
tionen über die Simulation ohne Rauschen erhalten werden (zum Beispiel für die
Visualisierung, zu sehen in Abbildung 2.2). Andererseits kann über das Monitor-
protokoll auch in die Simulation eingegriffen werden, um Roboter (oder den Ball)
an beliebige Stellen zu beamen/teleportieren oder den Spielmodus zu verändern (um
beispielsweise das Spiel zu starten). Vom Agenten darf das Protokoll während ei-
nes Spiels nicht genutzt werden. Während des Lernens besteht diese Beschränkung
jedoch nicht.

            Abbildung 2.2: RoboViz-Screenshot eines Spiels der 3D-Simulationsliga

Mithilfe der Software RoboViz [9] lässt sich die Simulation durch Verwendung des
Monitorprotokolls visualisieren. Dieses Tool wurde initial von Justin Stoecker ent-
wickelt und wird nun hauptsächlich vom Team magmaOffenburg weiterentwickelt.
RoboViz beinhaltet zusätzlich eine weitere Schnittstelle, um einige weitere Infor-
mationen in die Visualisierung vom Agenten aus einzuzeichnen. [10] Auf diese
Weise können agenteninterne Werte einfach in der Visualisierung dargestellt bezie-
hungsweise repräsentiert werden.
Die gesamte Simulation läuft in Zyklen mit je einer Länge von 20 Millisekunden
ab. Ein Agent kann demnach eine Steuernachricht alle 20 Millisekunden an den
Server senden. Ebenfalls empfängt er prinzipiell alle 20 Millisekunden die Sensor-
daten sowie weitere Daten zur Wahrnehmung. Praktisch werden aber nur in jedem

                                             6
2 Grundlagen

dritten Zyklus die Informationen zur visuellen Wahrnehmung des Agenten über das
Agentenprotokoll übermittelt.

2.2 PPO

Seit 2019 ist das Team magmaOffenburg in der Lage, Deep Reinforcement Lear-
ning einzusetzen. Die gewählte Algorithmenfamilie hierfür war seit Anfang an be-
reits PPO3 , welche 2017 von Schulman et.al. zum ersten Mal vorgestellt wurde.
[11] Genauer gesagt wurde für die Implementierung PPO2 aus „Stable Baselines“
[12] (Version 2.9.0), eine Sammlung verschiedener Deep Reinforcement Learning
Algorithmen, verwendet. PPO2 ist eine optimierte Version von PPO, welche zum
einen für die Verwendung mit Grafikkarten optimiert wurde. Zum anderen ist es mit
PPO2 möglich parallele Umgebungen zu verwenden. Konkret heißt das in diesem
Fall, dass in verschiedenen Threads dann mehrere Agenten gestartet werden, wel-
che dann in der Lage sind gleichzeitig zu lernen. Das soll die Lerngeschwindigkeit
enorm verbessern.
Vereinfacht gesagt funktioniert PPO2 folgendermaßen: eine sogenannte Observa-
tion wird als Eingabe für den Algorithmus verwendet. Dabei handelt es sich um
nichts weiter als eine geordnete Menge von Werten im Bereich -1 bis 1. Diese die-
nen als Wahrnehmung beziehungsweise Beschreibung der Umgebung. PPO2 ent-
scheidet basierend auf der Observation dann, welche Aktion(en) ausgeführt werden
soll(en). Diese werden ebenfalls wieder als geordnete Menge von Werten von -1 bis
1 beschrieben.
Das Mapping für die Observations und die Actions könnte für einen Agenten in
der 3D-Simulationsliga im einfachsten Fall ungefähr so aussehen: die Positionen
beziehungsweise die Winkel der Gelenkmotoren können jeweils als Observation
verwendet werden. -1 repräsentiert dabei den minimal möglichen Winkel und 1 den
maximal möglichen Winkel des Gelenks. Der Actionspace wiederum könnte einen
Wert pro Gelenkmotor beinhalten. Jeder Wert repräsentiert dabei die Geschwindig-
keit eines Gelenks. -1 und 1 repräsentieren die beiden maximalen Geschwindigkei-
ten für jede Richtung.
Wurde eine Aktion ausgeführt, so muss diese mittels eines sogenannten Rewards
bewertet werden. Dies ist ein numerischer Wert. Ein Wertebereich ist nicht definiert
 3
     Proximal Policy Optimization

                                         7
2 Grundlagen

(ausgenommen von den Grenzen des für den Reward verwendeten Datentyps). Ein
höherer Rewardwert steht für eine bessere Bewertung. Im Laufe des Lernens wird
dann ein möglichst hoher Rewardwert angestrebt. Das soll die ausgeführten Aktio-
nen möglichst verbessern.
Die Kombination aus dem Senden einer Observation, dem Ausführen einer Acti-
on sowie dem Bewerten der ausgeführten Action mittels Reward ist ein Schritt.
Ein Schritt enthält somit auch immer genau einen Simulationszyklus. Das Lernen
von verschiedenen Verhaltensweisen lässt sich dann wieder in sogenannte Episo-
den zeitlich aufteilen. Eine Episode beinhaltet mehrere Schritte/Simulationszyklen.
Sie erstreckt sich in der Regel über die Dauer eines einmaligen Ausführens des zu
lernenden Verhaltens.
In dieser Arbeit liegt der Fokus auf der domänenseitigen Optimierung, bei der PPO
im Wesentlichen als Blackbox verwendet wurde. Eine genauere Beschreibung von
PPO findet sich in [5].

2.3 Lernarchitektur

Zum Lernen mittels PPO bzw. Deep Reinforcement Learning wird im „norma-
len“ magmaOffenburg-Code (geschrieben in Java) eine TCP-Verbindung zu einem
Python-Prozess hergestellt. Dieser ist im Wesentlichen dafür zuständig, mit dem
Java-Prozess zu kommunizieren und den PPO2-Algorithmus von Stable Baselines
auszuführen.
Nach jedem Simulationszyklus werden vom Java-Prozess die Observations an den
Python-Prozess gesendet. Dieser gibt diese als Inputs an PPO2 weiter. Die resul-
tierenden Aktionen werden dann an den Java-Prozess zurückgesendet und in der
Simulation ausgeführt. Anschließend wird der aus der Aktion resultierende Reward
berechnet und zusammen mit der neuen Observation an den Python-Prozess zu-
rückgesendet. Die dabei zu übertragenden Daten werden als JSON4 -Dokument mit
führendem Header für die Länge des JSON-Dokuments codiert.
Sobald die Verbindung zum Python-Prozess besteht, verbindet sich der Agent ganz
normal mit dem Simulationsserver und bringt sich in die Startposition. Ab hier wird
die Steuerung der Motoren dem Deep Reinforcement Learning Algorithmus über-

 4
     JavaScript Object Notation

                                        8
2 Grundlagen

lassen und die Episode beginnt. Sobald der Agent hinfällt wird die Episode beendet.
Passiert dies nicht, so wird die Episode nach 10 Sekunden Laufzeit alternativ been-
det.
Zum Monitoring kann die Software Tensorboard eingesetzt werden, welche auch
offiziell von Stable Baselines unterstützt wird. Mithilfe dieser lässt sich der Re-
wardgraph des bisherigen Lernvorgangs (sowie die Graphen einiger weiterer Werte)
ansehen. Das macht es einfacher zu entscheiden, wann ein Lernlauf beendet wer-
den kann. Oft steigt ein Reward nach einer Zeit nicht mehr (signifikant) weiter an.
In diesem Fall kann man davon ausgehen, dass das gelernte Ergebnis sich ebenfalls
nicht mehr verbessert und ein Abbruch ist entsprechend sinnvoll.
Vom Python-Prozess beziehungsweise Stable Baselines wird in regelmäßigen Ab-
ständen das generierte Modell in einer ZIP-Datei abgespeichert/aktualisiert. Möchte
man das Lernen abbrechen, so kann der Prozess ohne Weiteres beendet werden. Es
ist ebenfalls möglich, dieses Modell später wieder zu laden, um von diesem Stand
aus das Lernen fortzuführen. Vor allem im Falle eines Absturzes kann das sehr hilf-
reich sein, da man den Fortschritt der letzten Tage nicht verliert und nicht wieder
von vorne beginnen muss. Eine Übersicht über diese Architektur ist in Abbildung
2.3 dargestellt.

  Abbildung 2.3: Grundlegende Architektur während des Lernens mit Deep Reinforcement Learning

Im Falle dieser Arbeit wird jedoch bei jedem Lernlauf von Null gestartet, das heißt
es wird nicht von einem bestehenden Modell aus gelernt. Das hat zum einen den
Grund, dass sich immer wieder der Observation- sowie Actionspace ändert. Nach
solch einer Änderung ist die Verwendung eines bestehenden Modells nicht mehr
möglich. Außerdem kann man so bessere Vergleiche zwischen verschiedenen Lern-
läufen durchführen.

                                              9
2 Grundlagen

Neben dem aktuellen Modell wird auch immer das beste Modell beibehalten, falls
sich das Ergebnis mit der Zeit wieder verschlechtert haben sollte. Dazu wird bei
jedem Speichervorgang der Mittelwert des Rewards von den aktuell letzten 100
Episoden gebildet. Sollte dieser Wert besser sein als der Wert des bisherigen besten
Modells, so wird dieses Modell als bestes Modell zusätzlich abgespeichert.
Zur Laufzeit wird später kein Python-Prozess mehr benötigt. Stattdessen wird das
generierte Modell in ein anderes Format konvertiert. Dieses kann dann einfach wie-
der vom Magma- beziehungsweise Agentencode gelesen/verwendet werden.

2.4 Initiale Referenz

Um die Ergebnisse der ersten Lernläufe überhaupt bewerten zu können, muss zu-
nächst eine initiale Referenz (Baseline) existieren. Dazu wurde ohne jegliche Än-
derungen vorzunehmen, ein (synchroner) Lernlauf gestartet. Dieser lief über eine
Dauer von circa sieben Tagen. Solch eine lange Lerndauer ist allerdings eher un-
praktikabel.
Statt synchronem Lernen wurde ab hier stattdessen auf asynchrones Lernen ge-
wechselt. Dabei muss nur ein festgelegter Prozentsatz der Threads fertig mit der
Ausführung des Laufens sein, um eine Episode abzuschließen/zu beenden. Dieser
wird im weiteren Verlauf als Threshold bezeichnet. Auf diese Weise konnte eine
deutliche Beschleunigung des Lernvorgangs erreicht werden. So hat das asynchro-
ne Lernen pro Versuch „nur“ noch circa drei bis vier Tage in Anspruch genommen.
Dabei wurden auch circa doppelt so viele Episoden durchgeführt als beim synchro-
nen Lernen in sieben Tagen.
Zur Ermittlung des Thresholds beim asynchronen Lernen wurden in einer Vorun-
tersuchung drei verschiedene Prozentsätze ausprobiert (wie in Abbildung 2.4 zu
sehen). Es ist zu erkennen, dass der Unterschied im Reward zwischen den einzel-
nen Ergebnissen relativ gering ist. Für den weiteren Verlauf der Arbeit wurde ein
Threshold von 80% gewählt, da dieser den Lernvorgang im Vergleich zu einem
Threshold von 90% nochmals leicht beschleunigt. Ein Threshold von 70% bringt
im Vergleich zu einem Threshold von 80% kaum mehr einen Geschwindigkeitsvor-
teil. Eher überwiegt hier dann die Sorge, dass zu viele Daten verloren gehen, da die
Ergebnisse von nicht fertigen Threads mit Nullwerten aufgefüllt werden.

                                        10
2 Grundlagen

                       Abbildung 2.4: Rewards der Referenzlernläufe

Anschließend wurden zwei weitere Lernläufe mit einem Threshold von 80% aus-
geführt, um zu ermitteln wie stark das Ergebnis beziehungsweise der Reward über
mehrere identische Lernläufe hinweg variiert. In Abbildung 2.4 ist zu erkennen,
dass diese Varianz leider relativ groß ist. Aus diesem Grund sollte ein Ergebnis spä-
ter einen entsprechend deutlichen Unterschied zum vorherigen Stand aufweisen um
diesem Ergebnis dann auch Bedeutung zusprechen zu können.
Ebenfalls wichtig zu erwähnen ist an dieser Stelle, dass die in Abbildung 2.4 dar-
gestellten Lernläufe mit einer Ausnahme alle mit 24 Threads durchgeführt wurden.
Der Lernlauf mit 12 Threads hat einige Besonderheiten, welche für den weiteren
Verlauf der Arbeit durchaus relevant sind zu erwähnen. Es wurden hier 12 Threads
gewählt, da der Lernlauf auf einer schwächeren Hardware als die anderen Lernläu-
fe ausgeführt wurde. Im Verlauf der Arbeit stellte sich jedoch heraus, dass auch auf
dieser Instanz das Verwenden von 24 Threads kein Problem darstellt. Ebenfalls lie-
ferten 12 Threads ein bedeutend schlechteres Ergebnis als 24 Threads. Das heißt,
dass einige Lernergebnisse im Verlauf dieser Arbeit schlechter waren als das theo-
retisch erzielbare Ergebnis mit 24 Threads.

                                           11
2 Grundlagen

Zudem befand sich der gerade erwähnte Server zunächst ungewollt beziehungswei-
se unbewusst im sogenannten Realtimemodus. Dieser sorgt dafür, dass eine Simula-
tion maximal so schnell ablaufen kann, wie sie in der echten Welt ablaufen würde.
Das Deaktivieren dieses Modus führt in der Regel zu einer deutlichen Beschleu-
nigung der Simulation und somit auch zu einer Beschleunigung des Lernens, da
der Simulationsserver dann die meiste Rechenzeit beansprucht. Das bedeutet im
Umkehrschluss, dass durch den aktivierten Realtimemodus einige Lernläufe stark
verlangsamt wurden. Ein Beispiel dafür ist, wie bereits erwähnt, in Abbildung 2.4
sowie auch in späteren Plots (zum Beispiel Abbildung 3.1) zu sehen. Diese Lernläu-
fe wurden meist nach circa 7 Tagen abgebrochen und erreichten deutlich weniger
Episoden in der gleichen Zeit wie vergleichbare Lernläufe.

                                       12
3.    Observationspace

Zunächst sollte der Observationspace für PPO2 untersucht beziehungsweise opti-
miert werden. Dafür wurde versucht, manche dieser Observations zu entfernen und
einige Neue hinzuzufügen, um deren Wirksamkeit zu testen. Das Vergleichen von
Lernläufen lässt sich hierbei relativ gut mit dem Vergleich der Rewards realisieren.

3.1 Evaluierung der bereits vorhandenen Inputs

Zum Start dieser Untersuchungen waren logischerweise bereits Observationinputs
vorhanden. Im folgenden Abschnitt wird die Effektivität dieser untersucht. Auf die-
se Weise sollen die möglicherweise unnötigen oder kontraproduktiven Inputs ent-
fernt werden, um im Umkehrschluss ein besseres Ergebnis/Laufen zu erhalten.
Doch zunächst ist eine Übersicht über die Parameter notwendig, welche überhaupt
initial als Observation vorhanden waren. Diese sind in Tabelle 3.1 aufgelistet.

     Parameter                                                             Anzahl
     Winkel der Jointmotoren                                               24
     Geschwindigkeit der Jointmotoren (Ableitung der Winkel)               24
     Zähler für Simulationszyklen                                          1
     Ballposition                                                          3
     Foot-Force-Informationen                                              48
     Beschleunigungssensordaten                                            3
     Gyroskopdaten                                                         3
     Torsoinformationen                                                    3
     Parameter zum Lenken                                                  2
     Summe                                                                 111
                     Tabelle 3.1: Initialer Inhalt des Observationspaces

                                            13
3 Observationspace

Als Basis werden die aktuellen Positionen/Winkel der Jointmotoren des Agenten
genutzt. Daraus lässt sich durch Speichern des Werts im vorherigen Simulationszy-
klus eine Ableitung bilden, diese repräsentiert die aktuellen Geschwindigkeiten der
Motorgelenke.
Zur Codierung eines dreidimensionalen Vektors werden die x-, y- sowie z-Werte als
einzelne Werte für die Observation verwendet. Diese Codierung wurde zum Bei-
spiel bei der Übermittlung der Ballposition oder der Beschleunigungssensordaten
verwendet.
Die sogenannten Foot-Force-Informationen geben an wie viel Kraft auf eine der
Fußflächen wirkt. Hierfür gibt es vier Sensoren: links und rechts existiert jeweils
ein Sensor für die Kraft, welche auf den Fuß wirkt sowie ein Sensor, welcher die
Kraft misst, welche auf den Zeh des NaoToe wirkt. Es kann pro Sensor jeweils ein
Vektor für die Kraft sowie dem Punkt auf der Fußfläche ausgelesen werden. Davon
werden jeweils noch die Ableitungen gebildet.
Die restlichen Parameter sollten entweder selbsterklärend sein oder werden in den
folgenden Abschnitten näher erläutert.

3.1.1 Ableitungen

Um zum Beispiel Informationen über die Geschwindigkeit zu erhalten, wurden, wie
zuvor erwähnt, in der Vergangenheit verschiedene Inputs des Observationspaces
abgeleitet und ebenfalls als eigene Observation Inputs verwendet.
Zunächst wurde versucht, diese Ableitungen gänzlich aus den Observations zu ent-
fernen. Dies hat sich jedoch im ersten Moment augenscheinlich als eher unpraktisch
erwiesen. Ebenfalls wurde schon im Voraus ein schlechteres Ergebnis erwartet, da
nun viele Informationen über Geschwindigkeiten fehlen, welche aber als relativ
wichtig für das Lernergebnis eingeschätzt wurden. Im Code war es dank einer guten
Strukturierung glücklicherweise lediglich nötig, eine einzige Zeile auszukommen-
tieren, um einen Lernlauf ohne Ableitungen durchzuführen.
Dieser Lernlauf war allerdings von dem in Abschnitt 2.4 beschriebenen Problem
(falsche Threadanzahl sowie aktivierter Realtimemodus) betroffen und erzielte so-
mit ein vermutlich schlechteres Ergebnis als eigentlich möglich gewesen wäre. Zu
sehen ist das Ergebnis in Abbildung 3.1. Aus Zeitgründen konnte dieser Versuch
leider nicht wiederholt werden.

                                        14
3 Observationspace

   Abbildung 3.1: Rewards der Lernläufe mit Veränderungen der Ableitungen im Observationspace

Ebenfalls wurden zwei weitere Versuche durchgeführt, um herauszufinden, was pas-
siert, wenn nur manche Ableitungen verwendet werden. Bei einem dieser Lernläufe
wurden nur Ableitungen für den Beschleunigungssensor und das Gyroskop verwen-
det. Bei einem weiteren Lernlauf wurde nur die Ableitung der Foot-Force-Sensoren
verwendet. In beiden Fällen waren die Ergebnisse etwa ähnlich, welche auch in
Abbildung 3.1 zu sehen sind.
Trotz eines eher nicht interpretierbaren Versuches war aber absehbar, dass die Ab-
leitungen in gewisser Weise hilfreich sind oder sie zumindest den Lernprozess nicht
behindern. Auch wenn die beiden Rewardkurven mit nur einem Teil der Ableitun-
gen besser abgeschnitten haben, so ist trotzdem zu bedenken, dass diese Ergebnisse
durch ein Rauschen zustande gekommen sein könnten. Deshalb wurde die Annah-
me gemacht, dass die Ableitungen grundlegend hilfreich sind und soweit beibehal-
ten werden sollten.

                                              15
3 Observationspace

3.1.2 Ball-Observation

Bei jedem der zuvor genannten Versuche, bei welchen Ableitungen entfernt wurden,
wurde auch in jedem Fall die Ableitung für die Ballposition mit entfernt. Da der Ball
für das Laufen lernen an eine Position außerhalb des Spielfeldes gebeamt wird, ist
dessen Position (sowie auch dessen Ableitung) statisch und somit eigentlich nicht
weiter relevant. Aus diesem Grund wurde ebenfalls versucht, die Observation für
die Ballposition sowie dessen Ableitung zu entfernen.
Leider war auch dieser Lernlauf von dem zuvor erwähnten Problem mit der falschen
Threadanzahl und dem aktivieren Realtimemodus betroffen und erzielte somit ein
relativ schlechtes Ergebnis (siehe Abbildung 3.2). Trotzdem scheint es nur logisch,
dass die Observation des Balls in diesem Fall keinerlei Vorteile mit sich bringen
dürfte. Der Lernlauf wurde deshalb nochmals mit der Verwendung von 24 Threads
und deaktiviertem Realtimemodus wiederholt. In Abbildung 3.2 sieht man nun die
doch relativ deutliche Verbesserung dieser Änderung. Deshalb wurde das Entfer-
nen dieses Inputs als eine Verbesserung gewertet. Die Ball-Observation wurde für
spätere Versuche dann auch nicht mehr weiterverwendet.

                 Abbildung 3.2: Reward des Lernlaufs ohne Ball-Observation

                                           16
3 Observationspace

3.1.3 Observations für Kopf- und Armgelenke

Bisher waren zusammen mit den anderen Werten der Gelenke des Agenten ebenfalls
die Werte der Kopf- und Armgelenke in der Observation enthalten. Vor allem der
Kopf wird eher als irrelevant für das Laufen angesehen, da sich dieser während des
Laufens unabhängig vom Laufen bewegen kann. Das passiert in der Regel durch
das Fokussieren des Kopfs (beziehungsweise der Kamera im Kopf) auf den Ball.
Aufgrund der hohen Lerndauer wurden aber lediglich zwei Lernläufe durchgeführt,
in welchen jedes Mal sowohl Kopf- als auch Arm-Observations entfernt wurden. Es
wurde dabei zwei Mal ein gleicher Lauf durchgeführt, um die „zufälligen“ Ergeb-
nisse des Lernens ein wenig zu kompensieren.
Das Experiment bringt leider erneut keine sehr deutlichen Ergebnisse. Ein Lernlauf
deckt sich ziemlich genau mit der Referenzversion, welche die Observations noch
enthält. Der andere Lauf lieferte ein leicht schlechteres Ergebnis. Es wird gerade
hier auch nochmals deutlich wie viel Rauschen diese Lernläufe beinhalten können.
Eine Interpretation der Ergebnisse muss stets damit im Hinterkopf durchgeführt
werden.

         Abbildung 3.3: Reward der Lernläufe mit und ohne Kopf- und Arm-Observation

                                            17
3 Observationspace

Somit konnte nun also noch kein wirklich signifikanter Unterschied festgestellt wer-
den. Darum wurde auch für diese Observations die Annahme gemacht, dass sie oh-
ne weitere Probleme entfernt werden können. Damit wurde die Hoffnung verfolgt,
dass sich dadurch auch die Lerndauer etwas verbessern könnte, da der Suchraum
dadurch verkleinert wird. Gleichzeitig scheint es aber auch mehr oder weniger lo-
gisch, dass der Kopf eigentlich nicht als Input benötigt werden sollte. Gleiches gilt
auch für die Arme, vorausgesetzt man möchte deren Bewegung nicht auch noch mit
lernen (siehe Abschnitt 4.2).

3.1.4 Zähler für Simulationszyklen

Um eine zeitliche Wahrnehmung bereitzustellen, war bisher ein Zähler für Simula-
tionszyklen als Observationinput vorhanden. Dieser zählt die vergangenen Zyklen
des Simulationsservers seit Beginn der Ausführung des Laufens. Wird eine Episode
beendet, so wird auch dieser Zähler wieder zurückgesetzt. Die vergangenen Zyklen
während der Initialisierung des Agenten vor einer Episode werden von diesem Zäh-
ler nicht berücksichtigt, da diese für das Lernen nicht relevant sind.
Es liegt nahe, dass dieser Zähler relativ wichtig zum Lernen ist, da ein zeitlicher Be-
zug ansonsten fehlen würde. Dieser könnte beispielsweise benötigt werden, um zu
Beginn erst langsam anzulaufen, sodass der Agent durch die Beschleunigung nicht
direkt umfällt. Später könnte er sich dann erst schneller fortbewegen. Zur Verifizie-
rung der Annahme, dass der Input wirklich benötigt wird, wurde zum Vergleich ein
Lernlauf ohne diesen Input durchgeführt.
Das Ergebnis ist in Abbildung 3.4 zu sehen. Während der Reward des Lernlaufs
ohne Zähler für die Simulationszyklen in der ersten Million Episoden gleich auf ist
(beziehungsweise sogar minimal besser), so lässt sich aber auch relativ deutlich er-
kennen, dass das Laufen ohne den Zähler ab circa 1,5 Millionen Episoden merkbar
schlechter wird als das Laufen mit Zähler für die vergangenen Simulationszyklen.
Auch beim Ansehen des daraus gelernten Laufens fiel auf, dass das Laufen bei feh-
lendem Zähler unkoordinierter aussieht als bei dem Vergleichslauf. Es ist deshalb
ziemlich klar, dass dieser Zähler als Observationinput beibehalten werden sollte.

                                          18
3 Observationspace

   Abbildung 3.4: Reward der Lernläufe mit und ohne Zähler für Simulationszyklen als Observation

3.2 Problemspezifische Inputs

Die bisher evaluierten Observationinputs sind generelle Inputs und können für jedes
beliebige Problem beim Lernen verwendet werden (zum Beispiel laufen, dribbeln
oder kicken). Je nach Problem kann es jedoch nötig sein, einige spezielle Inputs zu
verwenden, deren Einsatz nur für ein bestimmtes Problem sinnvoll ist. Die Wirk-
samkeit einiger möglicher problemspezifischer Inputs für das Laufen wird im Fol-
genden untersucht.

3.2.1 Center of Mass

Aus einer Publikation von Luckeciano C. Melo und Marcos R. O. A. Máximo des
Teams „IT Androids“ war bereits bekannt, dass der „Center of Mass“ (dt. Massen-
schwerpunkt) eine hilfreiche Observation sei. So soll diese dabei geholfen haben,
einerseits den Lernvorgang zu beschleunigen. Andererseits seien durch diese Ob-
servation aber auch schnellere Bewegungen des Roboters zustande gekommen.[4]

                                               19
3 Observationspace

Bei dem Center of Mass handelt es sich um einen Wert, welcher berechnet wird
durch das Gewichten der Koordinaten der einzelnen Körperteile des Roboters (Mul-
tiplikation der Koordinaten mit der zugehörigen Masse). Diese gewichteten Koor-
dinaten werden anschließend summiert und durch die Gesamtmasse des Roboters
dividiert. Damit erhält man zum Schluss eine 3D-Koordinate, welche wiederum als
Observation verwendet werden kann.
Das Verwenden dieses Inputs könnte dazu beitragen, dass der Agent ein Umfal-
len besser ermitteln und verhindern kann. Das würde auch der Beschreibung von
Melo und Máximo entsprechen. Trotz der vielversprechenden Aussage des Team
IT Androids war jedoch keine wirklich messbare Verbesserung festzustellen. Auch
optisch lässt sich kaum eine Verbesserung zu den vorherigen Versuchen feststellen.
Ein Video des hierbei gelernten „Laufens“ ist online verfügbar1 .

              Abbildung 3.5: Reward des Lernlaufs mit dem Center of Mass als Observation

Der Rewardgraph in Abbildung 3.5 zeigt, dass das Ergebnis genau zwischen den
beiden Vergleichslernläufen ohne dem Center of Mass als Input liegt. Man kann
also davon ausgehen, dass sich aktuell durch die Verwendung dieses Inputs nichts
 1
     https://www.youtube.com/watch?v=hlFPVoR7bbw

                                                   20
3 Observationspace

wirklich ändert. Das war der Grund, weshalb es auch nicht als Problem angese-
hen wurde, diesen Input für die Zukunft beizubehalten. Die Idee dabei war, dass
der Input sich aktuell noch nicht auf das Ergebnis auswirkt. Bei besseren Ergebnis-
sen in der Zukunft könnte jedoch ein (hoffentlich positiver) Unterschied hierdurch
hervorgerufen werden.

3.2.2 Abstand zwischen den Füßen

Ebenfalls wichtig für ein gutes und stabiles Laufen könnte der Abstand zwischen
den Füßen (orthogonal zur Laufrichtung) des Roboters sein. Diese Vermutung wur-
de zumindest zu Beginn der Untersuchungen aufgestellt. Besonders dann, wenn
der Fußabstand zu klein wird, könnte das Laufen instabiler werden, da es für den
Agenten viel einfacher ist, zur Seite zu kippen. Aber auch ein zu großer Abstand
zwischen den Füßen ist nicht unbedingt hilfreich und könnte das Laufen negativ
beeinflussen.
Des Weiteren ist bezüglich des Abstandes zwischen den Füßen problematisch, dass
seit 2019 auch Selbstkollisionen in der Simulation existieren. Dabei handelt es sich
um eine Situation in der zwei (oder mehr) der Körperteile des Agenten miteinan-
der kollidieren. Das ist bis zu einem gewissen Grad in der Simulation grundsätzlich
möglich. Seit 2019 wurde jedoch eine Überprüfung für Selbstkollisionen einge-
führt. Dabei gibt es noch eine Toleranzgrenze von 4 cm. [13]
Das bedeutet, dass Körperteile sich bis zu 4 cm ineinander überschneiden dürfen.
Wird dieser Wert überschritten, so zählt dies als Foul und der Agent wird bestraft
indem seine Gelenke für dieses Körperteil in die nächste Sekunde eingefroren wer-
den. Der verringerte Abstand zwischen den Füßen kann eben zu genau solch einer
Selbstkollision und einem darauf folgenden Foul führen. Ein Einfrieren der Gelenke
hat beim Laufen (abhängig von der aktuellen Körperpose des Agenten) wiederum
die mögliche Folge, dass der Agent umfällt.
Um diese beiden Probleme möglicherweise etwas zu umgehen, wurde versucht den
Abstand zwischen den Füßen als Observationinput zu verwenden. Das Ziel bezie-
hungsweise die Hoffnung bei diesem Versuch war, dass der Agent eigenständig er-
kennt, dass bei einem zu geringem Fußabstand die Stabilität des Laufens abnimmt
und die Fallrate zunimmt.

                                        21
3 Observationspace

Auch dabei stellte sich allerdings wieder heraus, dass das Ergebnis zwischen den
beiden Lernläufen ohne den neu hinzugefügten Input liegt (siehe Abbildung 3.6).

    Abbildung 3.6: Reward des Lernlaufs mit dem Abstand zwischen den Füßen als Observation

Wie zuvor wurde auch dieser Input wieder beibehalten, da man sich später eine
möglicherweise positive Auswirkung davon versprach und er aktuell nicht zu ei-
ner spürbaren Verschlechterung beiträgt. Tatsächlich stellte sich auch in Abschnitt
3.6) heraus, dass der Fußabstand korrigiert/vergrößert werden muss. Zur Erreichung
dieses Ziels ist dieser Input mit Sicherheit keine schlechte Idee.

3.2.3 Zähler für linker/rechter Fuß

Eine weitere Erkenntnis aus der Veröffentlichung von Melo und Máximo war, dass
ein Zähler für den linken beziehungsweise rechten Fuß als Input nützlich sein kön-
ne, um die Symmetrie zwischen beiden Beinen/Füßen aufrecht zu erhalten. [4]
Dieser beschriebene Zähler zählt im Prinzip ähnlich wie auch der normale Zäh-
ler für die vergangenen Simulationszyklen. Allerdings wird er zusätzlich zurückge-
setzt, sobald der Roboter das Standbein wechselt. Konkret heißt das, dass wenn der

                                             22
3 Observationspace

Roboter im letzten Zyklus auf dem linken Fuß stand und im aktuellen Zyklus auf
dem rechten Fuß steht, so wird der Zähler auf 0 zurückgesetzt.
Auf welchem Bein beziehungsweise Fuß der Roboter aktuell steht kann relativ ein-
fach über die beiden Foot Force Sensoren ermittelt werden. Geben diese einen Wert
von mehr als 0 Newton zurück, so wird der zugehörige Fuß aktuell belastet. Der
mögliche Wertebereich für das Mapping in den Observation wurde dabei auf 0 bis
50 gesetzt. Es wird davon ausgegangen, dass eine Schrittdauer von mehr als 50 Si-
mulationszyklen (was einer Sekunde entspricht) nicht vorkommen sollte. Passiert
dies dennoch, so ist lediglich dieser Input nicht mehr ganz korrekt. Dies sollte in
diesem Fall aber auch kein Problem mehr sein, da die Vermutung nahe liegt, dass
der Agent dann sowieso unvorhergesehene Probleme beim Laufen haben sollte, die
hier nicht weiter beachtet werden sollten.

          Abbildung 3.7: Reward des Lernlaufs mit dem Zähler die Füße als Observation

Der Rewardgraph in Abbildung 3.7 zeigt wieder eine nahezu deckungsgleiche Kur-
ve (bezogen auf den Vergleichslernlauf). Auffällig ist lediglich, dass anfänglich der
Reward für eine Zeit lang etwas schlechter ausfällt. Zum Ende hin ist die Tendenz
zum weiteren Anstieg der Kurve etwas geringer bei der Version mit dem Zähler für

                                             23
3 Observationspace

die Füße als Input. Dennoch handelt es sich dabei nur um marginale Abweichungen,
welche mit sehr hoher Wahrscheinlichkeit dem Rauschen zu verdanken sind. Wie
auch bei den anderen Ergebnissen wird dieses in der Hoffnung auf einen späteren
Profit daraus zunächst beibehalten.

3.2.4 Torsohöhe

Die Torsoorientierung war bereits in der Observation vorhanden. Allerdings wurde
für die Versuche von Melo und Máximo auch die Torsohöhe als Input verwendet.
[4]
Die Torsohöhe lässt sich relativ einfach bestimmen. Da die Position eines Roboters
streng genommen der Position seines Torsos entspricht, konnte aus der globalen
Position des Roboters die z-Koordinate für diesen Input verwendet werden. Von der
Verwendung einer globalen Position sollte normalerweise im Bezug auf Observa-
tioninputs abgesehen werden. Diese bergen die Gefahr, dass das gelernte Modell
später im Spiel nicht mehr einsetzbar ist, da nun abweichende globale Positionen
als Input verwendet werden. Im Fall der z-Koordinate ist das jedoch nicht weiter
ein Problem, da das Fußballfeld eine ebene Fläche ist.
Die Verwendung dieses Inputs könnte hilfreich sein, um die Bestimmung der Kör-
perlage des Agenten weiter zu vereinfachen. Besonders zur Verhinderung des Um-
fallens könnte dieser Input beitragen, da ein niedriger Wert logischerweise oft auch
zu einem Umfallen führt. Eine Ausnahme wäre dabei, wenn der Agent zum Beispiel
lernt sich hinzusetzen.
Wie auch in den vorigen Versuchen ist weder ein signifikanter Fortschritt noch ein
signifikanter Rückschritt zu erkennen. Das Gleiche spiegelte sich auch beim Ver-
gleich der beiden Laufverhalten mittels RoboViz wider. Auch wenn bei der Ver-
wendung der Torsohöhe als Input ein etwas besserer Reward erzielt werden konnte,
so ist dies vermutlich erneut dem Rauschen der Umgebung zuzuschreiben. Es war
jedoch abzusehen, dass auch hiermit kein Rückschritt unternommen wurde. Des-
halb wurde der Input für weitere Versuche ebenfalls beibehalten.

                                        24
3 Observationspace

                 Abbildung 3.8: Reward des Lernlaufs mit Torsohöhe als Observation

    3.2.5 Abweichung von der gewünschten Richtung

    Im Verlauf der Arbeit, nach einigen Versuchen mit der Rewardfunktion, zeigte sich
    ein immer schwerwiegenderes Problem: während des Laufens wich der Agent von
    seiner eigentlichen Bahn ab. Eigentlich ist das Ziel, möglichst geradeaus in der
    Mitte des Feldes zu laufen. Durch das erlernte Laufen zeigte sich jedoch nun ein
    Abdriften des Agenten um oft bis zu acht Meter zur Seite. Das ist vor allem auch
    beim Einsatz im Spiel sehr ungünstig, da der Agent nun schlussendlich nicht mehr
    an der eigentlichen Position landet, zu welcher er sich hinbewegen wollte.
    Um dieser Entwicklung entgegenzuwirken, wurde genau diese Abweichung ver-
    sucht mittels eines Observationinputs darzustellen. Da das Abdriften zur Seite in
    der Rewardfunktion negativ bewertet wird, kann beim Lernen so möglicherweise
    diesem Abdriften einfacher entgegengesteuert werden.
1   double deviationDirection = 0.0;
2   if (previousPose != null) {
3       Vector2D actualDiff = getWorldModel().getThisPlayer().getPose2D().getPosition().
            subtract(previousPose.getPosition());
4       if (!actualDiff.equals(Vector2D.ZERO)) {

                                               25
3 Observationspace

5              deviationDirection = Angle.to(actualDiff).subtract(previousPose.getAngle()).
                   degrees();
6       }
7   }
8   observation.add(deviationDirection, -180, 180);
9   previousPose = getWorldModel().getThisPlayer().getPose2D();

                          Listing 3.1: Rewardberechnung für eine relative Abweichung

    Der erste Ansatz war die Verwendung einer relativen Abweichung (bezogen auf
    den vorherigen Simulationszyklus). Dafür wurde der in Listing 3.1 gezeigte Code
    verwendet. Dabei wird der Winkel der Bewegung zwischen dem letzten und aktu-
    ellen Zyklus errechnet. Die Abweichung ist dann die Differenz der so errechneten
    Richtung und der Richtung, zu welcher der Agent im vorigen Zyklus zugewandt
    war. Nach einem ersten lokal ausgeführten Versuch schien die Verwendung einer
    Begrenzung auf 10 Grad sinnvoll, da sich der Agent innerhalb von einem Simulati-
    onszyklus normalerweise nicht mehr bewegt.
    Das Ergebnis in Abbildung 3.9 zeigt nun die zurückgelegte Distanz. Der Grund
    für diese Änderung wird später im Abschnitt 5.2 erläutert. Wieder ist kaum eine
    Auswirkung im Graphen zu erkennen, es handelt sich lediglich um eine minimale
    Verschlechterung. Sieht man sich das Laufen jedoch mit RoboViz an, so fällt auf,
    dass der Agent zwar manchmal die Richtung (meistens beim Start) ändert. Aller-
    dings schwankt er nun nicht mehr so stark beim Laufen und behält die Richtung
    bei. Die Aufzeichnung ist online verfügbar2 .
    Das Problem dabei ist, dass eine einmal eingeschlagene Richtung nicht mehr so
    einfach korrigiert werden kann und der Agent läuft (halbwegs) geradeaus in die
    falsche Richtung weiter. Dieses Problem lässt sich lösen, wenn man statt einer re-
    lativen Abweichung zum letzten Simulationszyklus eine absolute Abweichung ver-
    wendet. Diese gibt die Entfernung an zwischen dem Agenten und der „Ideallinie“,
    auf welcher der Agent sich fortbewegen soll. Der Verlauf dieses Lernlaufs ist eben-
    falls in Abbildung 3.9 zu sehen. Auch dabei zeigt sich in der zurückgelegten Distanz
    kein signifikanter Unterschied. Beim Ansehen der Visualisierung stellte man jedoch
    fest, dass das ursprüngliche Schwanken der Richtung zur Seite nun etwas reduziert
    wurde. So kann es zwar immer noch vorkommen, dass der Agent um ein paar Meter
    zur Seite abweicht. Die Abweichungen sollten jedoch nicht mehr so extrem sein wie
    zu Beginn des Versuchs. Der Ansatz der Verwendung einer absoluten Abweichung
    wurde dann auch für die Zukunft beibehalten, auch wenn sich die zurückgelegte Di-
     2
         https://www.youtube.com/watch?v=zecRb19%5Fye0

                                                     26
3 Observationspace

         Abbildung 3.9: Zurückgelegte Distanz mit Richtungsabweichung als Observation

stanz nicht verbessert hat. Stattdessen hat man eine erhöhte Präzision erreicht, was
beim Laufen ebenso wichtig ist.

3.2.6 Kombination verschiedener problemspezifischer Inputs

Um das Zusammenspiel der neuen problemspezifischen Rewards zu testen, wurde
ein Vergleich durchgeführt, welcher den Unterschied zeigen soll zwischen der Ver-
wendung aller dieser Inputs und keiner dieser Inputs. Davon ausgenommen ist der
in Abschnitt 3.2.5 diskutierte Observationinput (Abweichung von der gewünschten
Richtung), da dieser zu einem späteren Zeitpunkt erst hinzugefügt wurde.
Dieser Lernlauf wurde länger als die bisherigen Lernläufe ausgeführt (knapp 11 Ta-
ge). Aus dem Rewardgraphen in Abbildung 3.10 lässt sich dies erkennen. Vor allem
aber sieht man zum Ende hin eine immense Verbesserung. Es scheint also, als hät-
ten diese Inputs kombiniert doch einen Einfluss auf das gelernte Laufen. Interessant
ist, dass der Anstieg des Rewards anfangs eher abflacht. Zum Ende hin steigt er je-
doch nochmals extrem. Eine Aufzeichnung des zum Ende gelernten Laufverhaltens

                                             27
3 Observationspace

           Abbildung 3.10: Reward des Lernlaufs mit verschiedenen problemspezifischen Inputs

ist online abrufbar3 . Natürlich wäre es spannend gewesen zu sehen, was bei noch
längerer Auführungsdauer passieren würde. Allerdings wurde auch die Serverkapa-
zität wieder für andere Versuche benötigt, weshalb trotzdem unterbrochen werden
musste.

3.3 Bewertung

Abgesehen von einigen problematischen beziehungsweise fehlerhaften Lernläufen,
welche durch eine falsche Threadanzahl und den aktivierten Realtimemodus hervor-
gerufen wurden, ließ sich zunächst keine enorme Verbesserung zum Ausgangspunkt
durch einzelne Inputs feststellen. Lediglich die Verwendung der Kombination ver-
schiedener problemspezifischer Inputs hat zu einem deutlicheren Ergebnis geführt.
Grund für diese geringen Veränderungen könnte sein, dass allgemein noch kein
gutes Laufen hierbei zustande gekommen ist. Wäre als Basis bereits ein funktionie-

 3
     https://www.youtube.com/watch?v=OdMdWqir7jc

                                                   28
3 Observationspace

rendes Laufen vorhanden gewesen, so hätten die hier durchgeführten Änderungen
möglicherweise auch mehr Auswirkungen gehabt und die Ergebnisse wären deut-
licher zu interpretieren gewesen. Aus diesem Grund sollten die hier errungenen
Kenntnisse nicht überinterpretiert werden.
Es erschien dennoch auch bei dem später durchgeführten Versuch aus Abschnitt
3.2.5 als hätten die Observations keinen so starken Einfluss auf das Ergebnis. Vor
allem im Vergleich zu dem Einfluss der später untersuchten Rewardfunktion waren
die Änderungen am Observationspace kaum spürbar.
Allerdings konnte zumindest durch das Entfernen der Ballposition (inklusive deren
Ableitung) sowie der Kopf- und Armgelenke ein wenig überflüssige/unnötige In-
formation aus dem Observationspace entfernt werden. Das könnte bei den späteren
Versuchen zu einem Geschwindigkeitsvorteil geführt haben, auch wenn er vermut-
lich eher klein war.

                                       29
4.    Actionspace

Der Actionspace beschreibt, welche Parameter vom neuronalen Netz zurückgege-
ben werden. Im Fall des zuvor gelernten Laufens waren das die mehr oder weniger
direkten Werte zur Steuerung der Jointmotoren des Nao-Roboters. Im Folgenden
wird die Optimierung dieser Parameter beschrieben.

4.1 Mapping der Ausgabewerte

Im Wesentlichen gibt es drei Möglichkeiten einen Motor beziehungsweise ein Ge-
lenk zu steuern. Einerseits ist es möglich den gewünschten Zielwinkel eines Gelenks
anzugeben. Es wird dann versucht, diesen Winkel schnellstmöglich zu erreichen. Ei-
ne weitere Möglichkeit ist, stattdessen eine Geschwindigkeit für den Gelenkmotor
anzugeben, mit der dieser sich bewegen soll. Die dritte Möglichkeit ist die Verwen-
dung einer Kombination aus beiden der gerade genannten Möglichkeiten. Das heißt
man gibt einen gewünschten Zielwinkel an sowie die maximale Geschwindigkeit,
mit der sich der Motor zu diesem Zielwinkel hinbewegen darf.
Letztere Methode wurde bei den bisher durchgeführten Versuchen stets verwendet.
Der Grund dafür war lediglich, dass alte genetisch gelernte Verhalten (wie zum Bei-
spiel Kicken oder Laufen) mit diesem Ansatz trainiert wurden. Für den Einsatz des
sogenannten „Pre-trainings“ war es dann notwendig, diese Methodik weiterzuver-
wenden. Beim Pre-training handelt es sich kurz gesagt um eine Möglichkeit, ein
bereits vorhandenes Verhalten als Vorgabe/Basis zu liefern, von welchem aus dann
weiter gelernt werden kann. Das ist hilfreich, wenn noch kein mit Deep Reinforce-
ment Learning erzeugtes Modell vorhanden ist. Allerdings soll darauf nicht weiter
eingegangen werden, da das Pre-training für diese Arbeit nicht wirklich relevant ist.
Um dem Simulationsserver die gelernten Bewegungen zu übermitteln, müssen diese
allerdings als Motorgeschwindigkeiten in der Einheit Grad pro Simulationszyklus

                                         30
Sie können auch lesen