Sechsundsechzig

Über den Bot

Auf der Stufe „Neuronal“ spielt ein neuronales Netz mit 1,86 Millionen Gewichten. 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
62 Min.
Training auf einer Grafikkarte (RTX 4090)
1–2 ms
Rechenzeit je Zug, im Browser
55,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 Trumpf-König und -Dame und die Trumpf-Neun, offen liegt das Trumpf-Ass. 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 14 : 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 44 Zahlen für Talongröße, Punktestand, Stiche, Zudrehen, Ansagepflicht und Paare auf der Hand.

Die Antwort des Netzes

Wahrscheinlichkeit für jeden erlaubten Zug. Wert der Stellung: +2,9 Spielpunkte.

40 ansagen (Karo)48 %
Trumpf-Neun tauschen45 %
Karo Bube ausspielen6 %
Karo Neun ausspielen< 1 %
Karo Dame ausspielen< 1 %
Karo König ausspielen< 1 %
Kreuz Zehn ausspielen< 1 %
Pik König ausspielen< 1 %
Zudrehen< 1 %
Das Netz schwankt zwischen 40 ansagen und erst die Neun tauschen. Beides ist stark: Wer tauscht, holt sich das Trumpf-Ass auf die Hand und kann im nächsten Ausspiel immer noch ansagen. Die übrigen Züge hält es für fast wertlos, etwa König oder Dame ohne Ansage wegzugeben.

Ein Kniff macht 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.

Aufbau

Das Netz ist bewusst einfach: eine Eingangsschicht, drei Residualblöcke und zwei Köpfe. In jedem Block wird die Stellung auf 768 Merkmale aufgefächert, durch eine GELU-Kurve geschickt und wieder auf 384 verdichtet. Die Abkürzung um jeden Block herum sorgt dafür, dass das Training stabil bleibt.

Der Zug-Kopf bewertet alle 30 möglichen Züge: 24 Karten, 4 Ansagen, Neun tauschen und Zudrehen. Verbotene Züge werden vor der Auswahl gestrichen. Der Wert-Kopf schätzt, wie viele Spielpunkte 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 (2,5 MB). Die gerundeten Gewichte wählen in 99,5 % der Stellungen denselben Zug wie das Original.

Wie viel Genauigkeit kostet das Runden?
Bits je Gewichtgleicher Zug wie das Original
899,5 %
697,6 %
595,0 %
489,8 %

36.000 Stellungen aus dem Selbstspiel.

Was der Bot sieht188 Zahlen, Trumpf immer als erste FarbeEingangsschicht 188 → 384Residualblock× 3591.744 Gewichte × 3LayerNormLinear 384 → 768GELULinear 768 → 384AbkürzungLayerNormZug-Kopf 384 → 30Wahrscheinlichkeit je Zugnur erlaubte ZügeWert-Kopf 384 → 1erwartete Spielpunkte, −3 bis +31.860.511 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.000Trainingsrunde77 % gegen Leicht65 % gegen Mittel57 % gegen Stark40 %50 %60 %70 %80 %gleich stark02.000Trainingsrunde77 % 65 % 57 %
Schon nach 200 Runden schlägt das Netz Leicht und Mittel deutlich. Gegen Stark braucht es rund 1.000 Runden, um klar vorn zu liegen. Die Einzelwerte schwanken um ein bis zwei Punkte. Der Endstand mit 4.000 Spielen: 55,3 % ± 0,8.
Werte als Tabelle
Rundegegen Leichtgegen Mittelgegen Stark
20075,0 %59,4 %50,6 %
40076,5 %60,1 %52,3 %
60077,1 %62,3 %51,5 %
80073,2 %60,7 %53,2 %
1.00076,6 %62,4 %54,4 %
1.20077,3 %65,1 %53,6 %
1.40073,7 %61,9 %53,1 %
1.60078,1 %62,1 %53,9 %
1.80078,7 %63,3 %53,6 %
2.00076,2 %66,0 %52,7 %
2.20078,0 %64,0 %54,5 %
2.40077,0 %60,9 %54,3 %
2.60076,0 %61,5 %55,3 %
2.80077,6 %66,3 %54,7 %
3.00074,8 %62,7 %55,9 %
3.20075,9 %63,0 %56,3 %
3.40076,2 %64,5 %55,6 %
3.60078,0 %64,5 %57,1 %
3.80074,8 %64,0 %56,8 %
4.00077,1 %65,2 %56,6 %

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,45 Zudrehen0,41 Neun tauschen0,000,400,801,2002.000Trainingsrunde0,75 0,45 0,41
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)
Zufall1987555
Leicht813021242422
Mittel927036393836
Stark927864494643
Netz nach 400947561504746
Netz nach 1.600957662535247
Netz final (Neuronal)957764575453
Die drei Netze stammen aus demselben Trainingslauf. Schon das Netz nach 400 Runden spielt auf Augenhöhe mit Stark, das finale Netz gewinnt gegen jeden Gegner in der Tabelle. Gegen Zufall verliert es nur 5 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 10.000 Spiele je Bot:

Sticht, wenn es gehtals Nachspieler, wenn eine Karte den Stich nähme
85 %
76 %
Spielt Ass oder Zehn ausAnteil der Ausspiele
30 %
36 %
Spielt Trumpf ausAnteil der Ausspiele
24 %
23 %
Trumpft eine Nicht-Trumpf-Karteals Nachspieler
24 %
22 %
Dreht zuAnteil der Spiele
37 %
35 %
Gewinnt nach dem ZudrehenAnteil der eigenen Zudrehen
92 %
91 %
Der auffälligste Unterschied: Das Netz lässt öfter einen Stich liegen, den es nehmen könnte (76 % 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.

Was nicht geholfen hat

Nach dem ersten guten Netz folgten viele Versuche, es noch stärker zu machen: länger trainieren, mehr Eingaben, eine Suche obendrauf, den Partiestand mitgeben. Keiner kam messbar über die rund 55 % gegen Stark hinaus. Die Monte-Carlo-Suche machte es sogar schwächer, weil sie so tut, als kenne sie die gegnerischen Karten.

Zwei Messungen erklären, warum. Ein Netz, das 16 Millionen Spiele lang nur darauf trainiert wurde, v3 zu schlagen, kommt auf 49,8 %: Es findet keine Schwäche. Ein Netz, das die gegnerische Hand und den Talon sehen darf, gewinnt dagegen 77,8 %. Der Abstand ist der Preis der verdeckten Karten, nicht schwaches Spiel. Ohne Blick in fremde Karten ist dort wenig zu holen.

Siegquote je Versuch, mit Standardfehler

Gestrichelt: 50 %, gleich stark. Der Balken um jeden Punkt zeigt die Messunsicherheit.

Gegen den Suchbot „Stark“

Netz v3, im SpielPPO mit sinkender Lernrate
55,3 %
Netz v1erster Lauf, feste Lernrate
54,8 %
Netz v4, sechsmal so langebester Zwischenstand, frisch nachgemessen
54,4 %
Netz v5, mehr EingabenFarbschlüsse, gespielte Karten, letzter Stich
56,2 %
Netz v6, kennt den Partiestandspielt auf Partiesieg statt Spielpunkte
55,6 %
Netz + exakte EndspielrechnungRechnung, sobald nicht mehr gezogen wird
55,8 %
Netz + Monte-Carlo-Suche64 ausgewürfelte Verteilungen je Zug
51,6 %

Gegen das Netz v3 selbst

Gezielter Gegenspieler16 Mio. Spiele nur gegen v3 trainiert
49,8 %
Netz, das alle Karten siehtkennt Gegnerhand und Talon
77,8 %

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.

In den Einstellungen unter Trainingshilfen lässt sich die Bewertungsgrafik einschalten. 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, je nachdem, wie wahrscheinlich das Netz ihn selbst gespielt hätte. Am Ende des Spiels siehst du, wo es anders gespielt hätte.

Gegen das Netz spielen