Der Beleg soll demonstrieren, wie mit Hilfe eines neuronalen Netzes Informationen eines schrägen Wurfes verarbeitet werden können. In Anlehnung an ein Volleyballspiel soll ein Spieler lernen, an der richtigen Position zu stehen, um den Volleyball zurückzuspielen.

Die vorliegende Volleyballspielsimulation wird auf das Wesentliche, die Verarbeitung bestimmter Daten mit dem zugrundeliegenden neuronalen Netz, beschränkt. Dabei wird der Spieler in einem 2D Spielfeld dargestellt. Der Spieler hat einen Freiheitsgrad entlang der x Achse. In Abhängigkeit vom Winkel, der Geschwindigkeit und den (x,y) Koordinaten des Balls, soll der Spieler den Ball erreichen und zurückspielen.
Umgesetzt wurde die Simulation derart, dass der Spieler in einer gedachten ('schmalen') Sporthalle gegen die linke oder rechte Wand spielt, der Ball abprallt und der Spieler erneut den Ball erreichen muß. Vorstellbar ist ein Training, wobei das untere und obere Zuspiel (Baggern/Pritschen) trainiert werden soll. Auf die Simulation der Armbewegung wird verzichtet.
Im Modus "Trainingsmuster" werden die Trainingsmuster (Learn Pattern) im Moment der Kollision des Balls mit der rechten oder linken Wand, der Decke oder mit dem Spieler selbst erfasst. Die einzelnen Trainingsmuster werden dem Netz in der anschließenden Trainingsphase nacheinander präsentiert und eine Anpassung der Gewichte aller Neuronen vorgenommen, bis der Nutzer das Trainieren des Netzes, abhängig von der Fehlerrate, abbricht.
Danach kann im Turnier Modus die Fähigkeit des Spielers den Ball anzunehmen, getestet werden. Zukünftige Erweiterungen des Spiels könnten sein, das Spielfeld mit einem Netz zu halbieren und einen weiteren vom Nutzer zu steuernden Gegenspieler einzuführen.
Als erstes mußte die Problemstellung erfasst werden und überlegt werden welches Neuronale Netz dafür in Frage kommt. Weiter müssen Informationen gefunden werden, die mit einem Neuronalen Netz verarbeitet werden können.
Der Ball soll sich unabhängig vom Rest des Programms bewegen. Dabei eine Flugbahn nach den Gesetzen der Physik verfolgen. Hierfür kann man sich die Formeln für den Schrägen Wurf hernehmen und die notwendigen Parameter ableiten.
Der nächste Schritt ist die Erfassung von Trainingsdaten. Die Frage ist wie man Trainingsdaten gewinnen kann. Je nach Lernverfahren müssen Eingangswerte, sowie auch Ausgangswerte gefunden werden.
Es muß eine geeignete Konvertierung der Trainingsdaten vorgenommen werden. Fest steht, dass kontinuierliche Daten verarbeitet werden. Die x und y Koordinaten des Spielfeldes sind die Grenzen für die x und y Werte, die der Ball annehmen kann. Die Größe des Spielfeldes beträgt ca. 800*600 Pixel.
Die Umsetzung des Beleges erfolgte mit
Microsoft Visual Studio 2005 in der Programmiersprache C#.
Zum Ausführen dieser Anwendungen ist die Microsoft .NET Framework
2.0 Redistributable Installation notwendig. Unter der Rubrik
Download findet man den Link zur .NET Framework-Laufzeit sowie die
zugehörigen Dateien.

mit der horizontalen
Komponente:
Die Zeitkomponente wird durch einen Taktgeber, der im Programm implementiert wurde, bereitgestellt.
Eine wichtige Größe ist der Winkel, mit welchem der Ball von der Wand abprallt. Abhängig vom Winkel und der Geschwindigkeit mit der der Spieler den Ball gegen die Wand schlägt, prallt der Ball nach den Gesetzen der Physik wieder ab. Vernachlässigt werden die Gesetze der Reibung, Verformung und der damit verbundenen Beeinflussung der Flugbahn des Balls.
Entscheidend beeinflussen kann man die Flugbahn weiterhin mit der Anfangsgeschwindigkeit v0. Je größer die Anfangsgeschwindigkeit, desto gestreckter ist die resultierende Parabel und je größer ist die Wurfweite des Balls in der x Ebene.
Die für den Ablauf der Simulation und die Verarbeitung in einem neuronalen Netz relevanten Größen sind damit x, y und v0 und der Winkel.
Der Spieler hat nur einen Freiheitsgrad in der x Ebene nach links und rechts. Das Netz soll daher lernen, die richtige Position für den Spieler zu finden.
Im Vordergrund dieses Beleges stand die Auswahl des optimalen Netzes, sowie das Testen und Herausfinden von optimalen Werten für die Simulation des Volleyspiels. Daher wurde ein Multi Layer Perceptron mit Backpropagation Lernalgorythmus programmiert. Ein MLP stellt einen universellen Funktionsapproximator dar. D.h. es kann Mengen beliebiger Form klassifizieren.
Des Weiteren wurde das Backpropagation Lernverfahren implementiert, welches man mit den entsprechenden Einstellungen anpassen kann. Es wurden zur Konfiguration des neuronalen Netzes nur Einstellungen vorgesehen, die für die vorliegende Problemstellung sinnvoll sind.
Dazu gehört beispielsweise die Auswahl der Aktivierungsfunktion. Dies kann nur die Sigmoid oder die Tangens Hyperbolicus Funktion sein, da kontinuierliche Daten verarbeitet werden.
| Sigmoid Funktion | Tanh Funktion |
Die Größe des Netzes orientiert sich an der Anzahl der Freiheitsgrade des Spielers. Dies sind ca. 800 Pixel der Spielfläche in der x Ebene.
Für die Verarbeitung der vorliegenden Daten im MLP muß eine Konvertierung vorgenommen werden. Dies wird mit Hilfe des Strahlensatzes realisiert.
Die Erfassung der Trainingsmuster wird mit Hilfe des Spiels ermöglicht. Dazu muß die x Koordinate des Spielers nur mit den aktuellen Koordinaten des Balls verglichen werden und derart geändert werden, das der Spieler dem Ball hinterherläuft. Gepaart mit einer hohen Geschwindigkeit ist der Spieler dann in der Lage den Ball zu erreichen.
Gespeichert werden die Koordinaten des Balls im Moment der Kollision mit der rechten oder linken Wand. Sobald nach einer Wand-Kollision eine Spieler-Kollision stattfindet, kann ein komplettes Trainingsmuster mit Eingangs- und Ausgangswerten gespeichert werden.

Anhand der Verlaufsanzeige im Statusfeld des Multi Layer Perceptrons, kann der Nutzer die Anzahl der gesammelten Trainingsmuster mitverfolgen. Wenn die vorgegebene Anzahl erreicht ist, kann mit dem Training des Netzes begonnen werden.

Zusammenfassend läßt sich feststellen, daß eine Lösung der Problemstellung mit einem neuronalen Netz relativ gut möglich ist. Mit den richtigen Einstellungen und Anzahl an Trainingsdurchläufen kann man ein Punkte:Fehler Verhältnis von 2:1 erreichen.
Für eine fehlerfreie Ballannahme des Spielers müsste man jedoch noch weitere Optimierungen am Netz und am Lernverfahren vornehmen. So kann es an fehlenden guten Trainingsmustern liegen. Die gesammelten Muster müssen einerseits alle möglichen Werte abdecken und somit muß die Anzahl der Muster entsprechend gewählt werden. Mit Hilfe der Ergebnisanzeige im Turnier Modus kann man die Verbesserung objektiv mitverfolgen.
Weitere Optimierungen/Alternativen
Sinnvolle (mögliche) Werte, damit das Netz für das vorliegende Problem angelernt werden kann:
| Punkt: | Der Spieler kann den Ball zurückspielen und der Ball hat vorher Wand, Decke oder den Spieler selbst berührt. |
| Fehler: | Berührt der Ball den Boden nachdem er Wand oder Decke berührt hat, zählt das als Fehler. |
| Fehler: | Schlägt der Spieler den Ball zurück und der Ball berührt danach den Boden. |
Hinweis: Um das Spiel im Turniermodus am Laufen zu halten, prallt der Ball immer wieder vom Boden ab ohne das er an Geschwindigkeit verliert. Somit braucht Nutzer nicht nach jedem Fehler den ->Einwurf Button anzuklicken. Der Fehler wird in diesem Fall nur einmal gezählt.
Es öffnet sich ein Konfigurationsfenster, in dem Einstellungen für das neue Netz vorgenommen werden können.
2. Schritt: Trainingsmuster erfassen (Trainingsmodus!; -> Starten)Sobald die vorgegebene Anzahl der Trainingsmuster erreicht ist, kann Schritt 3 erfolgen.
3. Schritt: Training des Netzes (-> Training)Während des Trainings kann anhand einer FehlerChart der resultierende Fehler verfolgt werden. Daran kann man das Gradientenverfahren von Backpropagation sehr gut nachvollziehen. Ist der Fehler niedrig genug, kann das Training gestoppt werden (-> STOP). Weiter mit Schritt 4.
4. Schritt: Testen des Lernerfolgs (Turniermodus!; -> Starten)Weiterhin kann das Netz, die Trainingsmuster, sowie die Gewichte gespeichert werden. Die Muster und die Gewichtsinformationen werden in normalen Textdateien abgelegt mit der Endung *.dat. Das Netz wird in ein Binärformat gespeichert.
Die Informationen über die Werte der
Gewichte dient lediglich der Information für den interessierten
Nutzer, der damit die Veränderung nachvollziehen kann. Ein
gespeichertes Netz und gespeicherte Trainingsmuster können auch
wiederverwendet werden über die Menüpunkte
Menü -> Netz -> Speichern unter / Öffnen
Menü -> Trainingsmuster -> Speichern unter / Öffnen
Download Programm & DLLs als zip
Download
angelerntes Netz (netz500.nnf)
(Lernrate 0.1, Momentum 0.3, Fehlerlimit 0.1, Anzahl Learn Pattern
500, Trainingsdurchläufe ca. 5000)
Download Trainingsmuster (muster500.dat)
