Sechsundsechzig

Über den Bot

Auf der Stufe „Neuronal“ spielt ein neuronales Netz mit 0,84 Millionen Gewichten, ein Karten-Transformer. Niemand hat ihm gezeigt, wie man gut spielt. Es kannte nur die Regeln und hat 33 Millionen Spiele gegen sich selbst gespielt.

33 Mio.
Spiele gegen sich selbst im Training
3,6 Std.
Training auf einer Grafikkarte (RTX 4090)
≈ 20 ms
Rechenzeit je Zug, im Browser
56,3 %
der Spiele gewonnen gegen „Stark“

Drei Bots mit Regeln, einer ohne

Die Stufen Leicht und Mittel spielen nach Faustregeln: billig ausspielen, Paare zusammenhalten, hohe Karten nur für lohnende Stiche opfern. Stark ergänzt das um eine Suche. Für jeden Zug würfelt sie hunderte mögliche Verteilungen der unbekannten Karten aus, spielt jede zu Ende und nimmt den Zug mit dem besten Durchschnitt. Sobald nicht mehr gezogen wird, rechnet sie exakt.

Neuronal sucht nicht. Das Netz sieht die Stellung einmal an und gibt für jeden erlaubten Zug eine Wahrscheinlichkeit aus. Das Gespür dafür stammt aus dem Training, nicht aus Regeln, die ein Mensch aufgeschrieben hat.

Was das Netz sieht

Ein echtes Beispiel aus dem Selbstspiel. Trumpf ist Karo, die Hand hält Ass, Zehn, König und Dame im Trumpf, dazu Kreuz-Zehn und Pik-König. Offen liegt die Trumpf-Neun, zwei Stiche sind schon gewonnen. Das Netz bekommt keine Bilder, sondern Zahlen: für jede der 24 Karten, ob sie in der eigenen Hand ist, schon gespielt wurde, offen liegt oder noch unbekannt ist.

Deine Hand

Offene Trumpfkarte

Talon: 8 Karten

Augen 10 : 0, Stiche 2 : 0

Die Karten-Eingaben: sechs Zeilen zu je 24 Feldern

Jedes Feld ist eine Karte. Gefüllt heißt 1, leer heißt 0. Trumpf steht immer links.

♦︎♣︎♠︎♥︎
A10KDB9A10KDB9A10KDB9A10KDB9
Eigene Hand
Schon gespielt
Gegner hat gezeigt
Offene Trumpfkarte
Ausgespielte Karte
Noch unbekannt

Dazu kommen vier weitere Kartenzeilen (was der Gegner noch haben kann, was er gespielt hat, der letzte Stich), 47 Zahlen für Talongröße, Punktestand, Stiche, Zudrehen, Ansagepflicht und Paare auf der Hand, und die ganze Stichfolge: welche Karte in welchem Stich fiel, wer ausspielte und wer gewann.

Die Antwort des Netzes

Wahrscheinlichkeit für jeden erlaubten Zug. Wert der Stellung: +3,0 Spielpunkte.

Karo Zehn ausspielen39 %
40 ansagen (Karo)34 %
Karo Ass ausspielen26 %
Karo Dame ausspielen< 1 %
Karo König ausspielen< 1 %
Kreuz Zehn ausspielen< 1 %
Pik König ausspielen< 1 %
Zudrehen< 1 %
Das Netz verteilt seine Wahl auf drei Züge: Trumpf-Zehn ausspielen, 40 ansagen und Trumpf-Ass ausspielen. Für wichtig hält es keinen Unterschied, denn es rechnet so oder so mit dem höchsten Sieg: +3 Spielpunkte, der Gegner bekommt keinen Stich. Mit den vier höchsten Trümpfen zieht es dem Gegner erst die Trümpfe und sagt die 40 später an, oder es sagt gleich an. Die Nicht-Trumpf-Karten wegzugeben oder zuzudrehen hält es für wertlos.

Zwei Kniffe machen das Lernen leichter. Die Karten werden so gedreht, dass Trumpf immer die erste Farbe ist: Ob Herz oder Pik Trumpf ist, ändert am Spiel nichts, also muss das Netz jede Lage nur einmal lernen statt viermal. Und das Netz erfährt nicht, welche der drei anderen Farben welche ist, nur Rang und ob Trumpf. Jede Lage ist damit für alle drei Farben dieselbe.

Aufbau

Das Netz ist ein kleiner Transformer, gebaut um die Karten herum. Jede der 24 Karten bekommt ein eigenes Feld mit 31 Merkmalen: wo sie liegt, ob der Gegner sie noch haben kann, und ihre Geschichte, also in welchem Stich sie fiel, wer sie spielte und wer den Stich bekam. Ein 25. Feld hält den Spielstand: Talon, Augen, Stiche, Zudrehen.

In 4 Blöcken schauen die Felder aufeinander (Aufmerksamkeit). Dabei weiß jede Karte, welche Karten dieselbe Farbe haben und mit welcher Karte sie im selben Stich lag, und lernt selbst, wie viel das zählt. Am Ende bewertet jede Karte ihren eigenen Zug, König und Dame zusammen die Ansage, und das Spielstand-Feld entscheidet über Tauschen und Zudrehen und schätzt die Spielpunkte, die am Ende herauskommen. Diese Zahl zeigt die Bewertungsgrafik im Spiel.

Im Browser läuft das Netz in reinem JavaScript, ohne Bibliothek und ohne Server. Die Gewichte stecken als 8-Bit-Zahlen in der Spieldatei (1,2 MB). Die gerundeten Gewichte wählen in 99,0 % der Stellungen denselben Zug wie das Original.

Wie viel Genauigkeit kostet das Runden?
Bits je Gewichtgleicher Zug wie das Original
899,0 %
697,1 %
593,5 %
487,5 %

24.361 Stellungen aus dem Selbstspiel.

Was der Bot sieht24 Karten und ein Spielstand-Feld, Trumpf zuerstje Karte 31 Merkmale + Rang + Trumpf? · Spielstand: 43 ZahlenEinbettung → 128 Zahlen je FeldTransformer-Block× 4198.272 Gewichte × 4Aufmerksamkeit, 4 Köpfe+ gleiche Farbe, + gleicher StichLinear 128 → 512 → 128LayerNorm · GELUAbkürzungenZugwertje KarteAnsageaus König + DameSpielstandTausch, Zudrehen, Wert837.649 Gewichte insgesamt, im Browser als int8 gespeichert

Training durch Selbstspiel

Trainiert wurde mit PPO (Proximal Policy Optimization), einem Standardverfahren des bestärkenden Lernens. In jeder der 4.000 Runden spielt die Grafikkarte 8.192 Spiele gleichzeitig. Die Hälfte davon gegen die aktuelle Fassung des Netzes, die andere Hälfte gegen bis zu 12 ältere Fassungen, damit es keine Schwäche entwickelt, die nur es selbst nicht ausnutzt.

Die einzige Rückmeldung ist das Ergebnis: gewonnene oder verlorene Spielpunkte, 1 bis 3 pro Spiel. Welche Züge dazu geführt haben, muss das Netz selbst herausfinden. Die Lernrate sinkt dabei von 0,0003 auf 0,00001, damit das Netz am Ende fein abstimmt, statt zu springen.

Siegquote gegen die drei Regel-Bots während des Trainings

Gemessen alle 200 Runden: 250 Spiele gegen Leicht und Mittel, 1.000 gegen Stark.

40 %50 %60 %70 %80 %gleich stark01.0002.0003.000Trainingsrunde76 % gegen Leicht64 % gegen Mittel56 % gegen Stark40 %50 %60 %70 %80 %gleich stark02.000Trainingsrunde76 % 64 % 56 %
Schon nach 200 Runden schlägt das Netz Leicht und Mittel deutlich. Gegen Stark liegt es nach 400 Runden vorn und erreicht nach rund 600 Runden 55 %. Die Einzelwerte schwanken um ein bis zwei Punkte. Der Endstand mit 4.000 Spielen: 56,3 % ± 0,8.
Werte als Tabelle
Rundegegen Leichtgegen Mittelgegen Stark
20077,6 %59,0 %50,0 %
40078,1 %62,9 %53,4 %
60075,8 %65,1 %55,0 %
80074,9 %64,1 %54,6 %
1.00074,4 %64,4 %55,5 %
1.20078,0 %64,3 %55,6 %
1.40075,5 %63,3 %53,7 %
1.60076,8 %64,1 %53,1 %
1.80075,6 %64,3 %55,1 %
2.00076,4 %66,5 %55,9 %
2.20077,8 %62,6 %54,6 %
2.40076,0 %63,5 %54,8 %
2.60075,7 %63,9 %55,1 %
2.80078,4 %65,3 %56,2 %
3.00076,6 %65,8 %55,3 %
3.20076,6 %63,3 %55,7 %
3.40075,8 %61,3 %55,3 %
3.60080,5 %63,4 %56,0 %
3.80076,2 %64,8 %56,0 %
4.00075,8 %64,2 %56,2 %

Was das Netz sich angewöhnt: Aktionen je Spiel im Selbstspiel

Durchschnitt über beide Seiten, alle 10 Runden gemessen.

0,000,400,801,2001.0002.0003.000Trainingsrunde0,75 Ansagen0,47 Zudrehen0,42 Neun tauschen0,000,400,801,2002.000Trainingsrunde0,75 0,47 0,42
Am Anfang spielt das Netz zufällig: Es dreht in 61 % der Spiele zu und verliert damit 43 % aller Spiele. Nach wenigen Runden hört es fast ganz damit auf und lernt zuerst das Ansagen. Das Zudrehen kommt erst danach zurück, jetzt gezielt: Am Ende wird in fast jedem zweiten Spiel zugedreht, und nur noch 3 % der Spiele gehen dabei verloren.

Wie stark ist er?

Jeder gegen jeden, je 1.000 Spiele. Jede Kartenverteilung wird zweimal gespielt, mit getauschten Plätzen, damit Glück beim Geben sich ausgleicht. Lies eine Zeile: So oft gewinnt dieser Bot gegen den Gegner in der Spalte.

Zeile gegen Spalte, Siege in %ZufallLeichtMittelStarkNetz nach 400Netz nach 1.600Netz final (Neuronal)
Zufall1987756
Leicht813021222423
Mittel927036353538
Stark927864464544
Netz nach 400937865534747
Netz nach 1.600957664545351
Netz final (Neuronal)947762555249
Die Netze nach 400 und 1.600 Runden sind Zwischenstände aus demselben Training. Schon nach 400 Runden schlägt es Stark. Mit 1.000 Spielen je Paar sind Unterschiede unter drei Punkten Zufall. Gegen Zufall verliert es nur 6 von 100 Spielen, weil auch ein Zufallsspieler mal die besseren Karten bekommt.

Spielt er anders als der Suchbot?

Beide gewinnen etwa gleich oft gegen die schwachen Stufen, aber nicht auf dieselbe Weise. Gemessen über 13.000 Spiele je Bot:

Sticht, wenn es gehtals Nachspieler, wenn eine Karte den Stich nähme
85 %
77 %
Spielt Ass oder Zehn ausAnteil der Ausspiele
30 %
36 %
Spielt Trumpf ausAnteil der Ausspiele
23 %
23 %
Trumpft eine Nicht-Trumpf-Karteals Nachspieler
24 %
23 %
Dreht zuAnteil der Spiele
36 %
34 %
Gewinnt nach dem ZudrehenAnteil der eigenen Zudrehen
92 %
89 %
Der auffälligste Unterschied: Das Netz lässt öfter einen Stich liegen, den es nehmen könnte (77 % gegenüber 85 %). Dafür spielt es häufiger Ass und Zehn aus. Es spart Trümpfe für später und holt die Augen lieber selbst aktiv ab. Beide drehen etwa gleich oft zu und gewinnen danach etwa gleich oft.

Der Bot als Trainer

Das Netz hilft auch dir. Der Knopf Tipp zeigt seinen besten Zug, wie sicher es sich ist und was die zweitbeste Wahl wäre. Stimmt eine Faustregel mit dem Netz überein, steht ihre Begründung dabei.

Die Bewertungsgrafik ist von Anfang an eingeschaltet (abschalten lässt sie sich in den Einstellungen unter Trainingshilfen). Sie zeigt wie beim Schach nach jedem deiner Züge, wie das Netz die Stellung einschätzt, und ordnet deinen Zug ein: bester Zug, gut, ungenau oder Fehler. Dafür spielt das Netz jeden erlaubten Zug in mehreren möglichen Kartenverteilungen durch und misst, wie viele Spielpunkte deine Wahl gegenüber dem besten Zug kostet. Fährst du über die Grafik, siehst du, was du gespielt hast und was besser gewesen wäre. Am Ende des Spiels zeigt ein Spielbericht jeden Stich mit Karten, Augen, der Veränderung der Stellung und dem Verlust deines Zugs.

Gegen das Netz spielen