Super Mario's 2D-Plattformervariante, erstmals 1985 von Nintendo eingeführt, ist eine bahnbrechende Videospielreihe die Generationen geprägt hat. Dieser Artikel beleuchtet den Agenten der 2010 die Mario AI Competition gewinnen konnte.
Für die Mario AI Competition wurde eine abgewandelte Variante von dem Original Super Mario Bros genutzt. Infinite Mario Bros enthält die gleichen Spiel Mechaniken, erlaubt aber die zufällige Generierung von Leveln. Diese Möglichkeit macht es einfach, KI's zu benchmarken und zu trainieren.
Die Level Generierung basiert auf einem Seed System. Beim Betreten des Levels wird der Instanz ein Seed (eine ganze Zahl) zugewiesen. Mit diesen Seed kann die Anordnung von Hindernissen, Gegnern und Spielblöcken für ein Level abgeleitet werden. Dadurch besteht die Möglichkeit ein Level wiederholt zu spielen.
Desweiteren kann die Level Generierung parametrisiert werden, z.B. kann man die Schwierigkeit der generierten Level einstellen.
Zusammen ermöglicht das ein einfaches Erstellen von hochwertigen Test- und Trainingsdaten. [1]
Für die Implementation der Mario Agenten wurde Infinite Mario Bros noch einmal stark refactored. Dazu wurde eine API zur Verfügung gestellt, die die Implementation der Agenten deutlich vereinfachte. Die wichtigsten Änderungen dabei sind:
Das Ziel von Mario Bros ist es das Ende des Levels zu erreichen. Dabei muss er Hindernissen und Gegnern ausweichen. Ein Level zählt als erfolgreich beendet, wenn Mario die Zielflagge erreicht. Fällt Mario in ein Loch oder berührt als kleiner Mario einen Gegner, ist das Level verloren.
Es gibt 5 Input Möglichkeiten zum Steuern von Mario:
Mit der rechten und linken Pfeiltaste kann Mario über den Bildschirm bewegt werden. Mit der Pfeiltaste nach unten kann Mario sich ducken, wenn er groß ist.
Die A-Taste ermöglicht Mario das Springen.
Mit der B-Taste kann Mario sprinten und in dem Zustand Feuer, Feuerbälle schießen.
In der Original Variante von Super Mario Bros gibt es 5 verschiedenen Gegner Typen.
Von allen Gegnern gibt es noch eine Variante mit Flügeln. Diese Varianten können fliegen, nehmen unter den gleichen Bedingungen Schaden und verwandeln sich in ihre Bodenform wenn sie Schaden genommen haben. [3]
Mario kann in den Leveln auf vier verschiedene Items stoßen. Diese kann er einsammeln, um Vorteile im Spiel zu bekommen.[2:5]
Pilze verändern die Form von Mario von klein zu groß.[2:6]
Die Feuerblume verändert den großen Mario in den Feuer Zustand. In diesem Zustand kann Mario Feuerbälle schießen.[2:7]
Münzen werden zufällig im Level oder nach dem Zerstören von Spielblöcken generiert. Sie erhöhen den Spiele-Score von Mario.[2:8]
Wenn Mario auf ein Koopa springt, hinterlässt dieser einen Koopa Panzer. Mario kann auf diesen Panzer springen und in so Bewegung versetzen oder ihn aufsammeln und auf Gegner werfen.[2:9]
Mario hat drei verschiedene Zustände. Klein, Groß und Feuer. Durch das Einsammeln von Pilzen und Feuerblumen kann Mario entsprechend seine Form ändern. Nimmt Mario Schaden, verwandelt er sich in seinen nächst schlechteren Zustand.
Realm v2 wurde für die Mario Competition 2010 von Slawomir Bojarski und Clare Bates Congdon entwickelt.
Realm nutzt Regeln zum Auswerten von Spielsituationen und leitet anhand der Erfüllbarkeit dieser Regeln Aktionen ab. Die Auswertung der Erfüllbarkeit wurde mit Hilfe eines evolutionären Prozesses gefunden.
In jeder Spielsituation werden sieben verschiedene Regeln ausgewertet. Alle Regeln, bis auf Mario Size, werden binäre Werte zugewiesen.
Aktionen geben die nächste Zielposition für Mario an.Realm v2 nutzt vier abstrakte Aktionen dafür:
Zum Ausführen der Aktionen suchen wir einen Weg von der Startposition zum Ziel. Zuerst erstellt man zwei Gitter, eins für die Hindernisse und eins für die Gegner im aktuellen Frame. Jedem Feld wird ein Wert zugewiesen, je nachdem ob sich dort ein Gegner oder Hinderniss befindet.
Dann wird ein gerichteter Graph erstellt. Der Graph beginnt an Marios Start Position und endet an der Zielposition. Die Knoten sind aufeinanderfolgende Inputs. Finden wir einen Weg vom Start- zum Zielknoten, können wir die Inputs von diesen ableiten. Zum Finden des Weges wird der A* Algorithmus genutzt. Die Werte der einzelnen Postionen ergeben sich aus den Gegner- und Hindernissgitter.
Während der Weg von Mario berechnet wird, simulieren wir die Bewegungen der Gegner nicht. Deshalb werden Wege berechnet, die maximal so lang wie Mario's Sprungreichweite sind. Das Simulieren der Gegnerbewegungen benötigt deutlich mehr Rechenaufwand, als in kleinen Intervallen neue Aktionen auszuwählen und auszuführen.
Der Realm v2 Agent nutzt 20 verschiedene Regeln, um jede Spielsituation zu bewerten und eine Aktion abzuleiten. Analysieren wir eine Spielsituation versuchen wir die Regel zu finden die am ehesten erfüllt wird. Werden mehrere Regeln gleich stark erfüllt, wird die höher priorisierte gewählt. Man kann die 20 Regeln durch eine Tabelle visualisieren (siehe Abb. 13). Die Tabelle wurde mit Hilfe eines Genetischen Algorithmus erstellt. Dabei hatte jede Generation eine Evaluations - und Mutationsphase. Dies wurde für 1000 Generationen wiederholt. Jede Generation hat 12 verschiedene Level gespielt.
Nach jeden abgeschlossenen Level wird ein Fitness Score berechnet:
distance gibt an wie weit Mario im Level gekommen ist; win ist 1 wenn Mario das Ziel erreicht, sonst 0 ; marioMode ist 0,1 oder 2, äquivalent zu Mario_Size; timeLeft ist die übrige Spielzeit nach einem Level; died ist 1 wenn Mario verloren hat, sonst 0.[2:21]
Die Fitnessfunktion ist hier auch spezifisch für den Wettbewerb angepasst. Sollten im Wettbewerb zwei Agenten alle Level erfolgreich beenden, gibt es drei Kategorien nach denen der Sieg entschieden wird:
Der Genetische-Algorithmus nutzte + als Evolutionsstrategie. hatte den Wert 5 und den Wert 45.
Während der Mutationsphase wurden drei Operationen durchgeführt.
Diese Regeln werden pro Mutation mit einer Wahrscheinlichkeit von 10%, 10% und 20% ausgeführt.
Realm v2 verbesserte sich in seinen ersten Generationen drastisch. Danach war nur noch eine minimale Verbesserung pro Generation zu sehen. Weitere Optimierungsversuche im evolutionären Prozess haben keine merkbaren Verbesserungen gezeigt, sodass am Ende das Optimieren der hard-gecodeten Aktionen einen Großteil der Spielleistung von Realm v2 ausmacht.
Das besondere am Wettbewerb in 2010, war die Einführung von "Backtracking Elementen" (Sackgassen) in den Leveln. In den eigenen Tests der Realm Entwickler, hatte der A*-Agent noch deutlich besser gespielt, da gab es diese Level aber noch nicht. Die deutliche Vergrößerung des Suchbaums sorgte dafür, dass der A*-Agent nicht schnell genug den optimalen Weg finden konnte. Realm v2 war zwar etwas fehleranfälliger und passte nicht jeden Sprung pixelperfekt ab, konnte aber durch seine Mischung aus Effizienz und Spielstärke den Wettbewerb für sich entscheiden.[1:6]
J. Togelius, S. Karakovskiy und R. Baumgarten The 2009 Mario AI Competition IEEE Congress on Evolutionary Computation Barcelona, Spain, 2010. IEEE ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
S. Bojarski und C. B. Congdon "REALM: A rule-based evolutionary computation agent that learns to play Mario," Proceedings of the 2010 IEEE Conference on Computational Intelligence and Games Copenhagen, Denmark, 2010,. IEEE ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
J. -J. Tsay, C. -C. Chen and J. -J. Hsu, "Evolving Intelligent Mario Controller by Reinforcement Learning," 2011 International Conference on Technologies and Applications of Artificial Intelligence, Chung Li, Taiwan, 2011. IEEE ↩︎