kramann.info
© Guido Kramann

Login: Passwort:










kramann.info
© Guido Kramann

Login: Passwort:




Verwendung eines Perceptron-Netzes als TicTacToe-Spieler

(EN google-translate)

(PL google-translate)

In einer Vorstudie wird hier zunächst ein Perceptron-Netz entwickelt, dem ein Spielfeld übergeben wird. Es soll an einem Ausgang mit 9 Neuronen bei jedem freien Feld vom Eingang einen Wert >0.5 ausgeben und bei jedem besetzten Feld einen Wert <0.5. Mit anderen Worten soll das Netz lernen, wo es einen eigenen Zug machen kann.

Der Eingang besteht aus 9 Eingangsneuronen. Für ein freies Feld wird 0.25 gesetzt, für ein X wird 0.5 und für O wird 0.75 gesetzt.

Eine Trainer-Klasse erzeugt zufällige Spielsituationen, die dem Netz präsentiert werden. Zu jeder Spielsituation wird die Sollausgabe des Netzes erzeugt und mit der Ist-Ausgabe verglichen. Um das Natz zu belernen wird diese Differenz mittels der klassischen Backpropagation-Methode zur Verbesserung der Verbindungsgewichte herangezogen. Siehe dazu:

67_Echtzeitsysteme/08_NeuronaleNetze/02_Backpropagation

Die gesamte Programmstruktur wurde objektorientiert aufgebaut. Um die Klassenstruktur und die UML-Klassendiagramme visuell zu erhalten, wurde TicTacToe32_Neuro_strukturiert auch in BlueJ importiert. Jedoch liegt im folgenden das Processing-Projekt zum Download bereit.

Struktur-Prinzip beim nachfolgenden Projekt

  • Das Netz ist in Layern (1D-Schichten mit Perceptron-Neuronen) und Gewichten (Verbindungen der einzelnen Neuronen einer Vorgängerschicht mit einer Nachfolgeschicht, klassisch w genannt) aufgeteilt.
  • Es gibt immer ein Layer-Objekt mehr, als es Gewichtsobjekte gibt.
  • Indem man einen Input-Layer und einen Output-Layer bei einem Gewichts-Objekt registriert und dann erzeugeGewichte() aufruft, wird ein Array mit Gewichten in passender Größe angelegt, über das jedes Neuron der Eingangsschicht mit jedem der Ausgangsschicht verbunden wird.
  • Das Erzeugen der Netzstruktur erfolgt in iNetz, bzw. NetzTicTacToeSpielerNEU durch die Methode erzeugeNetz(int[] anzahlNeuronenProSchicht).
  • Danach sind die Layer-Objekte und Gewichte-Objekte in layer, bzw. w gespeichert und miteinander verknüpft.
  • In iNetz, bzw. NetzTicTacToeSpielerNEU führt propagiereEingangzumAusgang(double[] eingang) eine Berechnung des Netzausgangs aus einem Eingang durch.
  • Ebendort führt macheBackpropagation(double[] soll_ausgang, double lernfaktor) einen Lernschritt nach dem Backpropagation-Algorithmus durch.
Klassenübersicht 1

Bild 0-1: Klassenübersicht 1

Klassenübersicht 2

Bild 0-2: Klassenübersicht 2

Interface iLayer

Bild 0-3: Interface iLayer

Interface iNetz

Bild 0-4: Interface iNetz

UML-KLassendiagramm von

Bild 0-5: UML-KLassendiagramm von "Gewichte"

TicTacToe32_Neuro_strukturiert.zip -- Dieses Netz lernt, was es lernen soll.
Übung
  1. Analysieren Sie das Projekt TicTacToe32_Neuro_strukturiert.
  2. Leiten Sie von diesem Projekt ein eigenes Projekt ab, in dem ein Neuronales Netz TicTacToe spielen lernt.
  3. Überführen Sie das fertige Projekt in die Programmstruktur von TicTacToe08_Turnier aus dem vorangehenden Kapitel und lassen so Ihr Netz als "X" gegen den optimalen Spieler spielen, welcher "O" ist.