Wie ein Computer 2048 lernt –
ohne dass es ihm jemand erklärt
Dieses Programm kennt nur die Spielregeln. Keine Tipps, keine Strategie, kein Vorbild. Es hat … Partien gegen den Zufall gespielt und dabei nach jeder Partie ein kleines bisschen dazugelernt. Diese Seite zeigt, was es gelernt hat – und erklärt Schritt für Schritt, wie das überhaupt möglich ist.
Tipp: Unterstrichene Begriffe wie Tupel lassen sich anklicken.
Das Spiel – probier es selbst
Die Regeln in 20 Sekunden
Alle Kacheln rutschen in die gewählte Richtung. Zwei gleiche Kacheln, die aufeinandertreffen, verschmelzen zu einer mit doppeltem Wert – und genau dieser Wert gibt Punkte. Nach jedem Zug taucht auf einem zufälligen freien Feld eine neue 2 (90 %) oder 4 (10 %) auf. Geht nichts mehr, ist das Spiel vorbei.
Warum ist das für einen Computer schwer?
Weil der Zufall mitspielt: Man kann nicht einfach alle Möglichkeiten durchrechnen. Ein Spiel dauert tausende Züge, und nach jedem Zug kann eine von bis zu 30 neuen Situationen entstehen.
Menschen entdecken nach einer Weile Faustregeln („große Kachel in die Ecke!“). Unser Programm bekommt keine einzige davon gesagt. Mit Agent fragen siehst du, wie das fertig trainierte (kleine) Netz deine aktuelle Stellung einschätzt.
Wie „sieht“ der Computer ein Spielfeld?
Lauter kleine Experten
Ein Spielfeld hat 16 Zellen, jede kann leer sein oder eine von 15 Kacheln tragen. Das ergibt rund 18 Trillionen mögliche Felder – viel zu viele, um sich für jedes etwas zu merken.
Der Trick: Der Agent schaut nie auf das ganze Feld, sondern nur auf kleine Ausschnitte, sogenannte Tupel. Ein Tupel ist z.B. „die oberste Reihe“ oder „das 2×2-Quadrat oben links“. Für jede mögliche Belegung eines Tupels hat der Agent eine Zahl gespeichert – ein Gewicht. Es bedeutet ungefähr: „Wenn diese vier Zellen so aussehen, ist das gut / schlecht.“
Jedes Tupel wird in 8 Lagen (gedreht und gespiegelt) über das Feld gelegt. Die Gewichte aller Lagen und aller Tupel werden addiert – das ergibt den Wert des Feldes: die Schätzung, wie viele Punkte ab hier noch drin sind.
Fahre links über die Zeilen der Liste: Das Feld zeigt dir, auf welche Zellen dieser „Experte“ gerade schaut und welche Meinung er beisteuert. Hier siehst du das kleine Netz (4 Tupel à 4 Zellen); der starke Agent benutzt dieselbe Idee mit 6 Zellen pro Tupel.
Wie lernt er? Live in deinem Browser
Der letzte Lernschritt – ganz konkret
Aus Fehlern lernen – einen Zug später
Vor jedem Zug probiert der Agent im Kopf alle vier Richtungen aus und bewertet das Feld, das jeweils entstehen würde (das Afterstate). Er nimmt die Richtung mit Punkte jetzt + Wert danach am höchsten. Kein Würfeln, kein Ausprobieren (greedy).
Nach der Partie schaut er zurück. Für jeden Zug vergleicht er seine damalige Schätzung mit dem, was einen Zug später bekannt war: die Punkte des nächsten Zuges plus seine Schätzung für das nächste Feld. Die Differenz ist der TD-Fehler.
Dann verschiebt er alle beteiligten Gewichte um ein kleines Stück (die Lernrate, hier 10 %) in Richtung dieses besseren Wertes. Das ist Temporal-Difference-Learning.
Woher kommt das echte Wissen? Vom Spielende: Danach gibt es garantiert 0 Punkte. Diese eine sichere Tatsache sickert Partie für Partie rückwärts in die Schätzungen früherer Spielsituationen. Deshalb lernt der Agent rückwärts – vom letzten Zug zum ersten –, damit die Erkenntnis in einer einzigen Partie durch die ganze Kette laufen kann.
Das hier ist eine echte Implementierung in JavaScript: dasselbe kleine Netz, dieselbe Regel wie im C-Programm, nur langsamer. Nach ~2000 Partien (etwa eine Minute) erreicht es die ersten 2048er.
Die Lernkurve des starken Agenten
Was man hier sieht
Jeder Punkt fasst die Partien seit dem letzten Messpunkt zusammen. Die x-Achse ist logarithmisch: Jeder Teilstrich bedeutet zehnmal so viele Partien. So passen die ersten Gehversuche und die letzten Millionen Partien in ein Bild.
Warum steigt die Kurve? Am Anfang sind alle Gewichte geraten. Der Agent zieht praktisch zufällig und verliert nach ein paar hundert Zügen. Doch jede Partie korrigiert die Schätzungen ein wenig. Situationen, aus denen es oft gut weiterging, werden aufgewertet – und weil der Agent immer zu den bestbewerteten Feldern zieht, spielt er sie öfter. Gute Gewohnheiten verstärken sich selbst.
Warum flacht sie ab? Die einfachen Lektionen sind schnell gelernt. Danach geht es um seltene Endspiel-Situationen mit sehr großen Kacheln – die kommen nur in wenigen Partien vor, also gibt es dafür auch nur wenig Lernstoff.
Anfänger gegen Profi – dieselbe Partie, verschiedene Erfahrung
Warum dieser Zug?
Was du hier siehst
Während des Trainings hat das Programm an festen Meilensteinen eine Vorführpartie gespielt – jedes Mal mit demselben Zufall: gleiche Startkacheln, und die neuen Kacheln werden aus demselben Zufallsstrom gezogen. Unterschiede kommen also allein von der Erfahrung.
Die Balken zeigen, wie der Agent die vier Richtungen bewertet hat: Punkte dieses Zuges + geschätzter Wert des entstehenden Feldes. Der blaue Balken ist der gewählte Zug.
Achte beim Profi auf die Gewohnheiten, die ihm niemand beigebracht hat: Die größte Kachel klebt in einer Ecke, daneben liegt eine absteigende „Schlange“ (z.B. 4096 – 2048 – 1024 – …), und er vermeidet den Zug, der diese Ordnung zerstören würde – oft nur, wenn er nicht anders kann.
Beim Anfänger (wenige Partien) liegen die Werte nah beieinander – er „weiß“ noch nicht, was gut ist.
Was steht in seinem „Gedächtnis“?
Gelernte Muster lesen
Der starke Agent hat vier Tupel mit je 6 Zellen. Jedes hat eine Tabelle mit 16⁶ = 16,7 Millionen Einträgen. Rechts siehst du für jedes Tupel die Belegungen mit dem höchsten gelernten Wert – berücksichtigt werden nur Einträge, die der Agent oft genug gesehen hat (sonst dominiert Rauschen).
Die grauen Zellen gehören nicht zum Tupel. Die Zahl unter jedem Mini-Feld ist das Gewicht – der Beitrag dieses Musters zum Gesamtwert.
Was auffällt: Die wertvollen Muster sind fast immer geordnet – große Kacheln am Rand, der Größe nach aufgereiht. Genau die Faustregel, die erfahrene Spieler kennen. Der Agent hat sie aus Millionen Partien selbst „herausgerechnet“.
Mit Häufigste siehst du stattdessen die Belegungen, die am öftesten vorkamen – der Alltag des Agenten.
Was bringt welcher Trick?
Vom Grundrezept zum starken Spieler
Das Grundrezept (TD-Learning + Tupel) funktioniert schon gut. Ein paar bekannte Verbesserungen aus der Forschung machen den Agenten deutlich stärker. Jede Linie ist ein eigener Trainingslauf mit identischem Zufall.
- Größere Tupel (6 statt 4 Zellen) sehen mehr Zusammenhang, z.B. ganze Ketten am Rand.
- Optimistischer Start: Der Agent glaubt anfangs, alles sei toll. Unbekanntes bleibt verlockend, bis er es ausprobiert hat. So erkundet er systematischer.
- TC-Learning: Jedes Gewicht bekommt seine eigene Lernrate. Fertig gelernte Gewichte werden eingefroren, statt ständig hin und her zu zappeln.
- Spielphasen: Ab einer bestimmten Kachel übernimmt ein eigener Satz Tabellen, der sich nur um das Endspiel kümmert. Achtung, Überraschung: In unserem Vergleich hat das geschadet. Die neue Phase startet als Kopie eines noch schwachen Netzes und bekommt danach nur wenig Lernstoff, weil Endspiele selten sind. In der Forschung lohnt sich der Trick erst nach vielen Millionen Partien – nicht jede gute Idee hilft bei jedem Budget.
- Vorausschau (nur beim Spielen, nicht beim Lernen): Der Agent denkt ein bis zwei Züge weiter, bevor er sein Bauchgefühl fragt.
Glossar
Wie geht es weiter?
Im Code-Rundgang wird jedes C-Modul Abschnitt für Abschnitt erklärt – vom 64-Bit-Spielfeld über die Lernregel bis zur Kommandozeile.
Quellen
- Szubert, Jaśkowski (2014): Temporal Difference Learning of N-Tuple Networks for the Game 2048. IEEE CIG.
- Yeh, Wu, Kao, Chen (2016): Multi-Stage Temporal Difference Learning for 2048-like Games. IEEE TCIAIG.
- Matsuzaki (2016): Systematic Selection of N-Tuple Networks with Consideration of Interinfluence for Game 2048. TAAI.
- Jaśkowski (2018): Mastering 2048 with Delayed Temporal Coherence Learning, Multi-Stage Weight Promotion, Redundant Encoding and Carousel Shaping. IEEE ToG.
- Guei, Chen, Chen, Wu (2021): Optimistic Temporal Difference Learning for 2048. IEEE ToG.