In diesem Beitrag skizzieren wir die Entwicklung des QFelds mit Scratch. Wir beginnen mit dem Zeichnen des Spielfelds und der Implementierung der zufälligen Bewegung von Scratch. Im nächsten Schritt führen wir die Q-Tabelle ein, die als Grundlage für das verstärkende Lernen dient. Abschließend visualisieren wir die Entscheidungen von Scratch durch gezeichnete Pfeile, die seinen Weg auf dem Spielfeld darstellen.
Zeichnen des Spielfeldes
Um das Spielfeld für das QFeld zu zeichnen, kannst du entweder eine vorgefertigte Karte verwenden oder das Spielfeld selbst erstellen. Dazu benötigst du drei Objekte: die Katze Scratch, das Objekt „cake“ für das Zielfeld und ein weiteres Objekt, idealerweise den „Pencil“, der für das Zeichnen verwendet wird und versteckt bleibt.
Zunächst implementierst du die x- und y-Listen, die für die Feldnummerierung zuständig sind. Diese Listen erleichtern die Abfrage, ob der „cake“ erreicht wurde, und unterstützen die Bewegung von Scratch.
Die Variable „step“ wird für die Breite der Quadrate verwendet und später auch für die Bewegung von Scratch.
Beim nächsten Schritt werden wir die zufällige Bewegung von Scratch implementieren und die Q-Tabelle einführen.
Scratch läuft zufällig
Jetzt geht es an die Programmierung von Scratch. Hierbei verwenden wir eigene Blöcke für die Bewegungen „up“, „down“, „left“ und „right“. Da wir die Felder durchnummeriert haben, wird beim Laufen nach rechts die Feldnummer in der Regel um eins erhöht, nach links um eins verringert, nach unten um 5 und nach oben um 5 verringert.
Besondere Vorsicht ist an den Rändern geboten, da hier Ausnahmen programmiert werden müssen. Am übersichtlichsten funktioniert das mit Modulorechnungen, aber du kannst auch alle Feldpositionen am Rand mit „oder“ verknüpfen, um die Bedingungen zu überprüfen.
Die Modulo-Rechnung ist hilfreich, um zu überprüfen, ob Scratch sich an den Rändern des Spielfelds befindet. Mit der Modulo-Operation kannst du feststellen, ob eine Feldnummer beispielsweise durch 5 teilbar ist, was darauf hinweist, dass Scratch sich in der letzten Reihe eines 5×5-Feldes befindet. Diese Technik ermöglicht es, die Bewegungen von Scratch effizient zu steuern und sicherzustellen, dass er nicht über die Grenzen des Spielfelds hinausläuft.
Zusätzlich muss noch zufällig eine Bewegungsrichtung gewählt werden, bis der „cake“ erreicht ist. Diese zufällige Auswahl sorgt dafür, dass Scratch durch das Spielfeld navigiert und dabei lernt, wie er sein Ziel erreicht.
Scratch lernt einen Weg
In diesem Abschnitt geht es darum, wie Scratch durch verstärkendes Lernen den Weg zu seinem Ziel erlernt. Um ein besseres Verständnis für dieses Konzept zu entwickeln, empfehlen wir, den Beitrag Q-Learning Unplugged zu lesen. Dort werden die Grundlagen des verstärkenden Lernens anschaulich erklärt und bieten eine wertvolle Grundlage für das Verständnis, wie Scratch seine Entscheidungen anpassen kann, um effizienter zu seinem Ziel zu gelangen.
Da das Lesen der Pfeile für den Computer zu komplex ist, führen wir die Q-Tabelle ein. Da die Scratch-Programmierumgebung jedoch nur eindimensionale Listen zulässt, wird für jede Richtung eine separate Liste angelegt. In der Initialisierung des Objekts „Pencil“ müssen alle Felder mit 0 vorgelegt werden. Anschließend wird in der Position des „Cakes“ eine 1 eingetragen, um das Ziel zu kennzeichnen.
Die Q-Tabelle ist ein zentrales Element im verstärkenden Lernen, da sie die Werte für die verschiedenen Aktionen speichert, die Scratch in jedem Zustand ausführen kann. Jede Zelle in der Tabelle repräsentiert den Wert einer bestimmten Bewegung (hoch, runter, links, rechts) für ein bestimmtes Feld. Ein Wert von 1 zeigt an, dass Scratch den Weg kennt, während ein Wert von 0 bedeutet, dass er diesen Weg noch nicht erkundet hat. Durch das kontinuierliche Aktualisieren der Q-Tabelle lernt Scratch, welche Bewegungen ihn effizienter zu seinem Ziel führen
Das Scratch-Objekt erhält die umfangreichsten Änderungen. Bei jedem Schritt müssen die Tabellen ausgelesen werden. Wenn Scratch auf ein Feld gelangt, für das in einer der Richtungslisten eine 1 steht, bedeutet das, dass er entweder am Ziel ist oder den Weg kennt.
In diesem Fall muss in der entsprechenden Richtungsliste, der Richtung die gerade gegangen wurde, eine 1 in die Nummer des vorherigen Feldes geschrieben werden. Deshalb ist es wichtig, eine entsprechende Variable mitlaufen zu lassen, die die vorherige Position verfolgt. Für die Listenarbeit wird ein eigener Block erstellt, den wir „QBot“ nennen.
Zeige den Weg
Um den Weg, den Scratch gelernt hat, visuell darzustellen, zeichnen wir Pfeile auf die Karte. Diese Pfeile repräsentieren die Bewegungsrichtungen (hoch, runter, links, rechts), die Scratch in jedem Feld ausführen kann. Für jedes Feld, für das in einer Richtungsliste eine 1 eingetragen ist, wird ein entsprechender Pfeil auf der Karte gezeichnet, der die Laufrichtung anzeigt. Diese Visualisierung hilft nicht nur, den gelernten Weg nachzuvollziehen, sondern macht auch deutlich, wie Scratch seine Entscheidungen trifft, um effizient zu seinem Ziel zu gelangen.
Weiterführende Möglichkeiten
Es gibt zahlreiche weiterführende Möglichkeiten, das QFeld zu erweitern und zu verbessern. Eine interessante Option ist die Implementierung von negativem Feedback (negative reinforcement), wenn Scratch gegen eine Wand läuft. In diesem Fall könnte der Wert in der Q-Tabelle für diese Bewegung verringert werden, sodass Scratch lernt, diese Richtung zu meiden.
Darüber hinaus können verschiedene Kartenformen und Hindernisse eingeführt werden, um die Komplexität des Spiels zu erhöhen und das Lernen herausfordernder zu gestalten. Grafische Verbesserungen könnten ebenfalls integriert werden, um das visuelle Erlebnis zu bereichern.
Ein spannendes Beispiel für die Anwendung von verstärkendem Lernen ist das Szenario eines Marsrovers, der den Abwurfort von Versorgungspaketen sucht. Hierbei könnte der Rover durch Hindernisse navigieren und lernen, welche Wege am besten geeignet sind, um seine Ziele zu erreichen.


Schreibe einen Kommentar zu