Engine-Studie · Bot-Leistung

Open Sage im Vergleich mit eXtreme Gammon

Ein quantitativer Vergleich der Analyse-Engine Open Sage — die Backgammon Sage Pro antreibt — mit der Bot-Engine von eXtreme Gammon (XG).

Zusammenfassung

Wir vergleichen die Open-Sage-Engine mit eXtreme Gammon (XG) auf vergleichbaren Auswertungsstufen — direkte Auswertung des neuronalen Netzes, Multi-Ply-Suche und abgeschnittene Rollouts. Da XG keine programmatische Schnittstelle bietet, bewerten wir es über seine Funktion Batch Analysis. Wir verwenden drei einander ergänzende Methoden. Die erste erstellt einen geschichteten Satz von Referenzauswertungen — schnellen Auswertungen wird vertraut, wo die Wahl eindeutig ist, knappe Fälle werden zu vollständigen Rollouts eskaliert — und bewertet jede Engine mit einem Performance Rating (PR) gegen diese Referenz, über 500 unbegrenzte Partien (17.535 Entscheidungen) und 130 Fünf-Punkte-Matches (18.292 Entscheidungen). Die zweite isoliert die unbegrenzten Positionen, bei denen Sage 3T und XG Roller++ tatsächlich uneins sind, und beurteilt jede anhand der vollständigen Rollouts beider Engines. Dieselbe Referenz- und Bewertungsmethode wird auf dreizehn Benchmarks für Backgames, Containment-Partien und den Snake angewandt — die Positionen, die Engines historisch am schlechtesten gespielt haben. In den Stärkestudien liegen die beiden Engines nahe beieinander, wobei Sage auf den Stufen der abgeschnittenen Rollouts vorn liegt, auf die sich die meisten Nutzer stützen. Die dritte Methode dreht die Frage um: Bei 290 echten Turniermatches, die bereits in XG analysiert wurden, analysieren wir jedes erneut in Sage und vergleichen das Performance Rating, das die beiden Engines jedem Spieler zuweisen.

01
Einleitung

Warum an XG messen?

eXtreme Gammon (XG) ist eine Standardreferenz für computergestützte Backgammon-Analyse, und seine Analyse-Engine gilt weithin als eine der stärksten verfügbaren. Jede neue Engine, die ernst genommen werden will, muss eine einfache Frage beantworten: Wie schneidet sie gegen XG ab? Diese Studie beantwortet das quantitativ für Open Sage, die neuronale Netz-Engine hinter Backgammon Sage Pro.

Unser Ziel war es, die Bewertungen von Open Sage mit denen von XG bei vergleichbarem Aufwand zu vergleichen. Das naheliegende Experiment — beide Engines viele Tausend Partien gegeneinander spielen zu lassen und das Ergebnis auszuzählen — ist nicht praktikabel: Die XG-Desktop-App bietet keine programmatische Schnittstelle, sodass das Übergeben von Positionen und Zügen zwischen den Engines ein manueller Klickvorgang ist. Eine Stichprobe zu erreichen, die groß genug ist, um die kleinen Unterschiede zwischen zwei starken Engines aufzulösen, würde viel zu lange dauern.

Stattdessen nutzen wir XGs Stapelanalyse, die Hunderte transkribierter Partien in einem einzigen unbeaufsichtigten Durchgang bewerten kann. Open Sage spielt beide Seiten vieler Partien; jede Partie wird in einem Standard-Textformat exportiert, das XG importieren kann; XG analysiert das Ganze; und wir lesen seine Urteile wieder aus. Auf dieser gemeinsamen Grundlage wenden wir zwei verschiedene Methoden an, beschrieben in Abschnitt 3 und Abschnitt 4. Eine dritte Studie (Abschnitt 5) legt die Simulationen ganz beiseite und arbeitet mit echten Turniermatches, die in XG analysiert wurden.

02
Hintergrund

Analysestufen

Beide Engines können eine Position in verschiedenen Tiefen auswerten und tauschen dabei Genauigkeit gegen Geschwindigkeit. Diese Stufen zu verstehen ist entscheidend, um die Ergebnisse zu lesen, denn der Vergleich findet immer zwischen einander entsprechenden Stufen der beiden Engines statt.

Direkte Auswertung (1-Ply). Die rohe Ausgabe des neuronalen Netzes für eine Position, ohne Vorausschau. Das ist die schnellste Einstellung und die Grundlage, auf der jede tiefere Stufe aufbaut. (Wir folgen der Konvention von XG, in der 1-Ply die rohe Netzauswertung bezeichnet.)

Mehr-Ply-Vorausschau (2, 3, 4 Ply). Die Engine schaut mehrere Züge in die Zukunft, berücksichtigt die Antworten des Gegners und mittelt bei jedem Schritt über die möglichen Würfe, mit einer rohen Netzauswertung am Ende jeder Linie. Jedes zusätzliche Ply ist genauer und deutlich aufwendiger.

Verkürzte Rollouts (1T, 2T, 3T). Statt bis zu einer festen Tiefe zu suchen, spielt die Engine viele kurze simulierte Partien, bricht sie nach einigen Zügen ab und bewertet die entstandene Position mit Mehr-Ply-Vorausschau. Varianzreduktion hebt einen Großteil des Zufalls in den gezogenen Würfeln auf. Das sind XGs „Roller“-Einstellungen; sie sind stärker als eine Suche mit fester Tiefe und bleiben dabei weit günstiger als ein vollständiger Rollout.

Vollständiger Rollout. Viele simulierte Partien, die bis zum Ende gespielt werden. In ausreichendem Umfang und mit Varianzreduktion ausgeführt, ist ein vollständiger Rollout das, was einer Referenzwahrheit am nächsten kommt, die eine Backgammon-Engine erzeugen kann; wir verwenden ihn in dieser Studie durchgehend als Maßstab.

Einander entsprechende Stufen: Sage und XG

Familie Sage XG-Entsprechung Was sie tut
Direkt 1-Ply 1-Ply (rohe Auswertung) Eine einzelne Auswertung der Position durch das neuronale Netz — keine Vorausschau.
Mehr-Ply 2P · 3P · 4P 2-Ply · 3-Ply · 4-Ply Durchsucht die Antworten des Gegners mehrere Züge tief und mittelt über die Würfel.
Verkürzter Rollout 1T · 2T · 3T Roller · Roller+ · Roller++ Viele kurze simulierte Partien, nach 5–7 Zügen abgebrochen und mit Mehr-Ply ausgewertet, mit Varianzreduktion. 3T/Roller++ nutzen 3-Ply-Entscheidungen; 2T/Roller+ 2-Ply; 1T/Roller 1-Ply.
Vollständiger Rollout Rollout Rollout Bis zum Ende gespielte simulierte Partien — die Referenz-„Wahrheit“ in dieser Studie.
Performance Rating (PR). Durchgehend wird die Genauigkeit einer Engine als PR zusammengefasst — der durchschnittliche Equity-Fehler pro Entscheidung, multipliziert mit 500, gemessen an der ausgerollten Referenz. Ein PR von 0 bedeutet vollkommene Übereinstimmung mit der Wahrheit; je niedriger, desto besser.
03
Methode eins

Rollout-PR

Die erste Methode bewertet jede Engine an einer festen Menge von Entscheidungen, deren „wahren“ besten Zug wir so genau wie möglich bestimmt haben. Sie folgt demselben Ansatz wie die bekannte XG-Studie von 2012, die XG mit einer Reihe anderer Bots verglich.

Wir haben zunächst 500 unbegrenzte Partien simuliert, in denen Sage 3P gegen sich selbst spielt. Eine mittelstarke Stufe wie 3P erzeugt eine realistische Verteilung von Positionen über alle Spielpläne hinweg — Rennen, Angriff, Prime, Anker —, also genau die Vielfalt, gegen die wir testen wollen. Anschließend haben wir die gesamte Studie ein zweites Mal für 130 Fünf-Punkte-Matches ausgeführt, in denen der Punktestand auf dem Brett den Wert jeder Entscheidung verändert; die Ergebnisse für beide erscheinen unten.

Die Referenzwahrheit aufbauen

Den wahren besten Zug für jede Entscheidung per vollständigem Rollout zu bestimmen wäre enorm aufwendig — und unnötig, denn die meisten Entscheidungen sind nicht knapp. Wir bauen die Referenz daher in drei aufsteigenden Durchgängen auf und investieren Rollout-Aufwand nur dort, wo die Wahl wirklich zweifelhaft ist. Dasselbe Rezept wird auf beide Datensätze angewendet; jeder Durchgang klärt die Entscheidungen, die er sicher entscheiden kann, und reicht die übrigen weiter:

Durchgang 1 · Sage 3P

3-Ply vertrauen, wenn die Wahl klar ist

Jede Entscheidung wird auf 3-Ply ausgewertet. Wo der beste Zug den zweitbesten um mehr als 0.05 Equity schlägt, wird das 3P-Urteil als Wahrheit akzeptiert und die Entscheidung ist geklärt.

0.05
Equity-Abstand zur Klärung
Knappere Fälle (innerhalb von 0.05) gehen weiter zu Durchgang 2
Durchgang 2 · Sage 3T

Knappe Fälle mit einem verkürzten Rollout erneut prüfen

Die verbleibenden Entscheidungen werden auf 3T neu ausgewertet. Wo der Abstand nun größer als 0.02 Equity ist, wird das 3T-Urteil als Wahrheit akzeptiert.

0.02
Equity-Abstand zur Klärung
Alles, was noch innerhalb von 0.02 liegt, geht weiter zu Durchgang 3
Durchgang 3 · Vollständiger Rollout

Die schwierigsten Entscheidungen ausrollen

Alles, was noch innerhalb von 0.02 liegt, wird durch einen vollständigen Sage-Rollout geklärt: 3P-Entscheidungen für Zugspiel wie Cube-Aktionen, ausgeführt in Stapeln von 1.296 Pfaden, bis das 95-%-Konfidenzband der Equity unter 0.005 fällt — oder eine Obergrenze von 20.736 Pfaden (16 × 1.296) erreicht ist. Die langsamsten Backgame-Positionen brauchten jeweils weit über eine Stunde.

0.005
Ziel: 95-%-Band

Das Ergebnis ist eine geschichtete Referenz, in der jede Entscheidung genau in der Tiefe geklärt ist, die ihre Schwierigkeit verlangt. Wir haben dieses Drei-Durchgang-Rezept über beide Datensätze laufen lassen — die 500 unbegrenzten Partien und die 130 Fünf-Punkte-Matches — und die daraus entstandene Zusammensetzung der Stufen wird unten neben den Ergebnissen des jeweiligen Satzes gezeigt.

Eine Engine bewerten

Mit einer geschichteten Menge vertrauenswürdiger Bewertungen in der Hand ist es einfach, eine Engine zu bewerten: Wir legen ihr jede Benchmark-Entscheidung vor, halten den Equity-Fehler des von ihr gewählten Zuges oder der gewählten Cube-Aktion gegenüber der Wahrheit fest und geben den mittleren Fehler × 500 als PR an. Dieselbe Summe wird in Zug- und Cube-PR aufgeschlüsselt und weiter nach Spielplan.

XG zu bewerten erforderte den in der Einleitung beschriebenen zusätzlichen Schritt. Da XG keine API hat, haben wir seine Stapelanalyse über die 500 Transkripte der unbegrenzten Partien und die 130 Match-Transkripte laufen lassen — mit einer eigenen Stufe: 3-Ply-Entscheidungen, hochgestuft auf die geprüfte Stufe überall dort, wo Uneinigkeit bestand — und XGs bevorzugte Entscheidung für jede Position aus den .xg Dateien ausgelesen, die es erzeugt, um sie an denselben Referenz-Equities zu messen.

Unbegrenzte Partien — Zusammensetzung der Referenzwahrheit

Über die 500 unbegrenzten Partien hinweg klärten die drei Durchgänge 16.889 Positionen (17.535 Entscheidungen) wie folgt:

Auf 3P geklärt  7,652 Auf 3T geklärt  3,260 Ausgerollt  5,977 Unbegrenzte Partien  16,889 Positionen · 17,535 Entscheidungen

Unbegrenzte Partien — direkter Vergleich

Die fünf einander entsprechenden Stufen, bewertet über diese 17.535 Entscheidungen. Ein niedrigerer PR ist besser; die stärkere Engine jedes Paares ist hervorgehoben.

Sage 3T
Verkürzter Rollout · 3-Ply-Entscheidungen · Abbruch nach 7 Zügen
0.23
gegen
0.34
XG Roller++
Verkürzter Rollout · 3-Ply-Entscheidungen · Abbruch nach 7 Zügen
Sage 3T führt mit 0.11 PR
Sage 2T
Verkürzter Rollout · 2-Ply-Entscheidungen
0.27
gegen
0.41
XG Roller+
Verkürzter Rollout · 2-Ply-Entscheidungen
Sage 2T führt mit 0.14 PR
Sage 1T
Verkürzter Rollout · 1-Ply-Entscheidungen · Abbruch nach 5 Zügen · 72 Pfade
0.49
gegen
0.53
XG Roller
Verkürzter Rollout · 1-Ply-Entscheidungen · Abbruch nach 5 Zügen · 42 Pfade
Sage 1T führt mit 0.04 PR
Sage 4P
4-Ply-Vorausschausuche
0.43
gegen
0.47
XG 4-Ply
4-Ply-Vorausschausuche
Sage 4P führt mit 0.04 PR
Sage 3P
3-Ply-Vorausschausuche
0.60
gegen
0.57
XG 3-Ply
3-Ply-Vorausschausuche
Praktisch gleichauf — XG 3-Ply vorn mit 0.03 PR

Unbegrenzte Partien — vollständige Aufschlüsselung

Der PR für jede getestete Engine und Stufe, aufgeschlüsselt nach Entscheidungsart und Spielplan. Niedriger ist besser.

Engine PR Zug Cube Reines Rennen Rennen Angriff Prime Anker
Sage 3T 0.230.200.410.020.250.200.320.32
XG Roller++ 0.340.330.380.040.440.250.410.48
Sage 2T 0.270.240.430.020.320.200.400.36
XG Roller+ 0.410.410.390.050.600.310.470.54
Sage 1T 0.490.500.430.040.580.430.620.64
XG Roller 0.530.540.480.050.640.450.710.67
Sage 4P 0.430.420.520.080.540.390.450.60
XG 4-Ply 0.470.460.520.060.590.400.570.59
Sage 3P 0.600.600.610.130.780.530.670.75
XG 3-Ply 0.570.570.580.050.720.480.730.72
Sage 2P 1.681.442.910.401.841.861.871.77
Sage 1P 2.552.423.240.422.712.793.132.74
Open Sage eXtreme Gammon Sage 2P und 1P haben in diesem Durchgang keine XG-Entsprechung und werden zur Orientierung gezeigt.
Sages Bewertungen sind auf jeder einander entsprechenden Stufe stärker als die entsprechende XG-Bewertung, außer bei 3-Ply, wo XG mit 0.03 PR knapp vorn liegt — ein Unterschied innerhalb des Rauschens. Die beiden Engines liegen nahe beieinander, und auf den Stufen der verkürzten Rollouts, auf die sich die meisten Nutzer stützen, hat Sage einen klaren Vorsprung: 0.23 gegenüber 0.34 bei Roller++ und 0.27 gegenüber 0.41 bei Roller+.

Match-Spiel — Zusammensetzung der Referenzwahrheit

Der Match-Datensatz durchläuft dieselben drei Durchgänge, mit einer Ergänzung: Der Away-Stand jedes Spielers und die Crawford-Kennzeichnung werden durch jede Auswertung geführt, sodass die Wahrheit im Match-Equity-Raum (MWC) gegen den richtigen Punktestand berechnet wird. Über die 130 Fünf-Punkte-Matches hinweg klärten die Durchgänge 17.892 Positionen (18.292 Entscheidungen) wie folgt:

Auf 3P geklärt  7,522 Auf 3T geklärt  3,460 Ausgerollt  6,910 Match-Spiel  17,892 Positionen · 18,292 Entscheidungen

Match-Spiel — direkter Vergleich

Die fünf einander entsprechenden Stufen, bewertet über diese 18.292 Entscheidungen. Ein niedrigerer PR ist besser; die stärkere Engine jedes Paares ist hervorgehoben.

Sage 3T
Verkürzter Rollout · 3-Ply-Entscheidungen · Abbruch nach 7 Zügen
0.23
gegen
0.36
XG Roller++
Verkürzter Rollout · 3-Ply-Entscheidungen · Abbruch nach 7 Zügen
Sage 3T führt mit 0.13 PR
Sage 2T
Verkürzter Rollout · 2-Ply-Entscheidungen
0.26
gegen
0.44
XG Roller+
Verkürzter Rollout · 2-Ply-Entscheidungen
Sage 2T führt mit 0.18 PR
Sage 1T
Verkürzter Rollout · 1-Ply-Entscheidungen · Abbruch nach 5 Zügen · 72 Pfade
0.47
gegen
0.51
XG Roller
Verkürzter Rollout · 1-Ply-Entscheidungen · Abbruch nach 5 Zügen · 42 Pfade
Sage 1T führt mit 0.04 PR
Sage 4P
4-Ply-Vorausschausuche
0.41
gegen
0.46
XG 4-Ply
4-Ply-Vorausschausuche
Sage 4P führt mit 0.05 PR
Sage 3P
3-Ply-Vorausschausuche
0.56
gegen
0.54
XG 3-Ply
3-Ply-Vorausschausuche
Praktisch gleichauf — XG 3-Ply vorn mit 0.02 PR

Match-Spiel — vollständige Aufschlüsselung

Der PR für jede getestete Engine und Stufe im Datensatz der 5-Punkte-Matches, aufgeschlüsselt nach Entscheidungsart und Spielplan. Niedriger ist besser.

Engine PR Zug Cube Reines Rennen Rennen Angriff Prime Anker
Sage 3T 0.230.200.460.070.220.200.280.31
XG Roller++ 0.360.350.440.080.440.320.330.49
Sage 2T 0.260.240.400.020.350.180.310.35
XG Roller+ 0.440.440.440.090.540.440.390.55
Sage 1T 0.470.470.470.060.550.450.550.56
XG Roller 0.510.510.560.090.630.490.500.65
Sage 4P 0.410.410.470.050.500.370.440.53
XG 4-Ply 0.460.450.580.090.590.440.420.60
Sage 3P 0.560.540.710.050.730.550.590.63
XG 3-Ply 0.540.530.620.090.680.530.520.68
Sage 2P 1.271.231.580.391.461.241.491.39
Sage 1P 2.222.212.350.382.432.412.442.47
Open Sage eXtreme Gammon Sage 2P und 1P haben in diesem Durchgang keine XG-Entsprechung und werden zur Orientierung gezeigt.
Die Match-Ergebnisse spiegeln die Studie zu den unbegrenzten Partien: Sage ist auf jeder einander entsprechenden Stufe stärker als die entsprechende XG-Bewertung, außer bei 3-Ply, wo XG mit 0.02 PR knapp vorn liegt — weit innerhalb des Rauschens. Sages deutlichster Vorsprung liegt erneut auf den Stufen der verkürzten Rollouts (3T und 2T), auf die sich die meisten Nutzer stützen: 0.23 gegenüber 0.36 bei Roller++ und 0.26 gegenüber 0.44 bei Roller+.

Backgames, Containment-Spiele und die Snake

Gewöhnliche Selbstspiel-Partien bringen selten ein tiefes Backgame, ein Containment-Spiel oder einen Prime auf der gegnerischen Bretthälfte hervor, der einen einzelnen Nachzügler festhält; die Datensätze der unbegrenzten Partien und der Matches sagen daher wenig darüber, wie eine Engine sie spielt — und es sind die Positionen, in denen Engines seit jeher am schwächsten waren. Dreizehn Benchmarks über Positionsfamilien messen sie direkt, jeder gebaut wie der Benchmark der unbegrenzten Partien — echte Entscheidungen, jede mit einer Referenz in Rollout-Qualität —, aber mit Entscheidungen, die aus dem Inneren der Familie stammen:

  • Die zehn klassischen Backgames, benannt nach den beiden Punkten, die der Backgame-Spieler im gegnerischen Heimfeld hält — das 2‑1-Backgame hält den gegnerischen 2- und 1-Punkt, das 5‑4 den 5- und 4-Punkt, und so weiter. Jedes umfasst rund 1.000 Entscheidungen, aufgezeichnet nur, solange beide Anker noch gehalten werden und ihr Besitzer im Rennen zurückliegt.
  • Containment-Spiele, definiert durch den Flüchtenden: Eine Seite hat einige Steine ausgewürfelt und hat ein bis drei Steine, die geschlagen wurden und das ganze Brett nach Hause laufen müssen, während die andere Seite mit verlorenem Rennen alles, was ihr geblieben ist, so anordnet, dass sie diese weiter schlagen kann.
  • Massive Backgames — drei oder mehr Anker im gegnerischen Heimfeld oder zwei Anker mit sieben oder mehr Steinen hinten.
  • Die Snake — eine Folge von vier oder mehr aufeinanderfolgenden gemachten Punkten auf der gegnerischen Bretthälfte, die einen einzelnen Nachzügler festhält, während die übrigen gegnerischen Steine zu Hause zusammengeschoben sind. Eher ein Prime-Spiel als ein Backgame und eine der am schwierigsten zu spielenden Formen im Backgammon.

Jede Familie geht von einer kleinen Menge von Ausgangspositionen aus. Sage spielt aus diesen Ausgangspositionen unbegrenzte Partien gegen sich selbst auf 3-Ply, jede Entscheidung, die entsteht, solange die Position noch zur Familie gehört, wird aufgezeichnet, und jede aufgezeichnete Entscheidung wird ausgerollt, um ihre Referenz zu erzeugen — 5.184 bis zum Ende gespielte Pfade, mit 3-Ply-Zug- und Cube-Entscheidungen in den ersten drei Halbzügen und 2-Ply danach, Varianzreduktion eingeschaltet. Durchgänge zur Kandidatenvervollständigung haben jeden Zug ausgerollt, den eine getestete Engine tatsächlich gewählt hat, sodass jede Bewertung unten gegen einen Kandidaten in Rollout-Qualität erfolgt. Eine Cube-Position, in der der Gegner den Cube besitzt, ist für den Spieler am Zug keine Entscheidung und wird nicht bewertet.

Benchmark Entscheidungen 2-ply 3-ply 4-ply 1T / Roller 2T / Roller+ 3T / Roller++
SageXG SageXG SageXG SageXG SageXG SageXG
2-1-Backgame1,0002.262.841.011.641.031.220.611.670.410.980.380.93
3-1-Backgame1,0012.222.220.880.950.670.720.660.910.340.590.320.48
3-2-Backgame1,0082.072.390.911.310.780.990.650.950.440.610.250.51
4-1-Backgame1,0011.771.830.780.820.600.530.550.690.240.470.190.45
4-2-Backgame1,0002.161.960.731.050.690.550.630.790.360.610.270.43
5-1-Backgame1,0031.321.770.660.760.460.640.490.600.260.410.230.32
5-2-Backgame1,0021.531.600.490.820.480.630.530.630.330.410.240.30
4-3-Backgame1,0021.692.130.740.800.550.580.520.760.240.550.190.44
5-3-Backgame1,0031.862.131.020.890.580.630.680.810.350.460.210.44
5-4-Backgame1,0012.452.740.931.150.730.780.760.970.470.550.300.49
Containment3,2704.7314.622.5411.252.0510.372.297.761.307.851.056.16
Snake97821.0039.9221.4236.6423.5336.1711.1932.998.4232.385.8532.24
Massives Backgame2,1034.335.762.564.442.173.681.913.141.392.751.092.64
Open Sage eXtreme Gammon PR gegen die Rollout-Referenz jeder Familie; niedriger ist besser; die bessere Engine jedes Paares ist hervorgehoben.
Über die zehn klassischen Backgames zusammengefasst (10.021 Entscheidungen) liegt Sages PR bei 1.93 bei 2-ply, 0.82 bei 3-ply und 0.26 bei 3T, wobei die groben Fehler von 28 auf gar keinen fallen. Containment-Partien und massive Backgames sind auf jeder Stufe drei- bis viermal schwerer — 1.05 und 1.09 bei 3T — und der Snake steht für sich allein: 21.00 bei 2-ply und immer noch 5.85 bei 3T. Er ist zudem die einzige Familie, in der zusätzliche Ply nicht verlässlich hilft, die abgeschnittenen Rollout-Stufen aber schon — genau so sieht eine Familie von Halten-oder-Loslassen-Entscheidungen aus: Die Wahl hängt davon ab, wie ein langes Containment ausgeht, und nur Simulation kommt daran heran. Lies die Snake-Zeile als Maß dafür, wie weit diese Positionsfamilie von einer Lösung entfernt ist, nicht als Rangfolge der Sage-Stufen.
XG auf diesen Benchmarks. Sage führt in allen dreizehn Familien und auf jeder Stufe zusammengefasst: auf den zehn Backgames 1.93 gegen 2.16 bei 2-ply und 0.26 gegen 0.48 bei 3T. Der Abstand wächst mit der Schwierigkeit der Familie — bei 3T Containment 1.05 gegen 6.16, massive Backgames 1.09 gegen 2.64 und der Snake 5.85 gegen 32.24. Nur vier der 78 einzelnen Zellen gehen in die andere Richtung, allesamt einzelne Backgames von 2-ply bis 4-ply, wo beide Engines bereits unter 1.1 liegen. XG hat keine programmatische Schnittstelle, seine Entscheidungen werden daher über Batch Analyze aus nativen Exporten nachgespielt .xg Exporte (siehe Anhang).
04
Methode zwei

Strittige Positionen

Die Rollout-PR-Methode bewertet beide Engines an einer gemeinsamen Referenz. Eine schärfere, direktere Frage ist diese: Wo sind sich die beiden Engines im realistischen Spiel tatsächlich uneins über den besten Zug — und wer hat dann recht?

Wir beantworten sie anhand der schwierigsten unbegrenzten Entscheidungen aus Methode eins — der ausgerollten Positionen, von denen jede nun sowohl einen vollständigen Sage-Rollout als auch einen vollständigen XG-Rollout trägt. Darunter suchen wir jede Entscheidung, in der Sage 3T und XG Roller++ unterschiedlich gewählt haben, und fragen, welche Wahl der jeweilige Rollout bevorzugte. Beide Rollouts zu haben ist der ganze Punkt: Jede Uneinigkeit wird an Sages Rollout und an XGs eigenem gemessen, sodass die Antwort nie darauf beruht, der Wahrheit einer einzelnen Engine zu vertrauen.

  • Ausgehen vom ausgerollten Benchmark der unbegrenzten Partien — den schwierigsten Entscheidungen, jede durch einen vollständigen Sage-Rollout geklärt.
  • XG seinen eigenen vollständigen Rollout derselben Positionen erzeugen lassen (seinen Batch Rollout) — eine unabhängige zweite Referenzwahrheit.
  • Die Entscheidungen behalten, in denen Sage 3T und XG Roller++ uneins sind, und die Wahl jeder Engine am besten Zug bzw. an der besten Cube-Aktion jedes Rollouts messen.
  • Über die gemeinsame Menge berichten — Uneinigkeiten, bei denen die Wahl beider Engines von beiden Rollouts ausgerollt wurde — damit die beiden Vergleiche identische Positionen abdecken.

Ergebnisse

Über die ausgerollten Positionen der unbegrenzten Partien hinweg — die schwierigsten Entscheidungen der Studie — sind sich die beiden Engines bei 1.286 Zügen und 80 Cube-Entscheidungen uneins. Jedes Feld zeigt, wie oft jede Engine mit der besten Entscheidung des Rollouts übereinstimmte — bewertet an XGs eigenem Rollout und der Reihe nach an Sages Rollout.

Zugspiel

Wo Sage 3T und XG Roller++ unterschiedliche Züge gewählt haben
5,687
ausgerollte Zugentscheidungen
1,286
Uneinigkeiten
1,139
bewertet (gemeinsame Menge)
Stimmte mit dem besten Zug überein — nach XGs eigenem Rollout
Durchschnittlicher Equity-Fehler — Sage 3T 0.0030 · XG Roller++ 0.0030  (PR 1.51 gegen 1.49)
Stimmte mit dem besten Zug überein — nach Sages Rollout
Durchschnittlicher Equity-Fehler — Sage 3T 0.0023 · XG Roller++ 0.0040  (PR 1.14 gegen 1.98)
Sage 3T XG Roller++ Keine von beiden

Cube-Entscheidungen

Wo Sage 3T und XG Roller++ unterschiedliche Cube-Aktionen gewählt haben
282
ausgerollte Cube-Entscheidungen
80
Uneinigkeiten
Stimmte mit der besten Aktion überein — nach XGs eigenem Rollout
Durchschnittlicher Equity-Fehler — Sage 3T 0.0110 · XG Roller++ 0.0074  (PR 5.50 gegen 3.69)
Stimmte mit der besten Aktion überein — nach Sages Rollout
Durchschnittlicher Equity-Fehler — Sage 3T 0.0058 · XG Roller++ 0.0102  (PR 2.88 gegen 5.08)
Sage 3T XG Roller++
Insgesamt nur 80 Cube-Uneinigkeiten — eine kleine Stichprobe, dieses Feld ist also eher als Hinweis denn als Entscheidung zu lesen.
Im Zugspiel — der großen Mehrheit der Uneinigkeiten — stellt sich jeder Rollout bei der Frage, welcher Zug der beste ist, auf die Seite seiner eigenen Engine: Nach XGs Rollout trifft XG Roller++ den besten Zug häufiger (52,2 % gegenüber 37,7 %), nach Sages Rollout Sage 3T (50,0 % gegenüber 38,1 %). Gemessen daran, wie viel Equity eine strittige Wahl verschenkt, liegen die beiden nach XGs Rollout gleichauf (je 0.0030), und nach Sages ist Sage 3T näher (0.0023 gegenüber 0.0040). Cube-Uneinigkeiten sind weit seltener und gemischt: Sage 3T trifft die ausgerollte Cube-Aktion unter beiden Rollouts häufiger, doch nach XGs Rollout sind seine Fehlgriffe die teureren.
Warum zwei Rollouts zählen. Ein Ergebnis mit nur einer Referenz lädt stets zur Frage ein: „wessen Wahrheit?“ Hier stammen die beiden Rollouts von unabhängigen Engines, und auf den Positionen, bei denen zwei starke Engines auseinandergehen, gehen auch sie auseinander — jede neigt zu der Engine, die sie erzeugt hat. Die strittigen Positionen trennen Sage 3T und XG Roller++ nicht.
05
Methode drei

Übereinstimmung bei echten Matches

Die ersten beiden Methoden fragen, welche Engine stärker ist. Eine dritte Frage ist für alle, die eine Engine zum Studium des eigenen Spiels nutzen, genauso wichtig: Wenn du ein echtes Match in XG analysierst, dir dein Performance Rating notierst und dann genau dasselbe Match in Sage analysierst — wie nah liegen die beiden Bewertungen beieinander? Wer jahrelang ein Gefühl dafür entwickelt hat, was ein bestimmter PR in XG bedeutet, sollte von Sage im Wesentlichen dieselbe Zahl bekommen.

Um das direkt zu prüfen, haben wir eine große Sammlung echter Turniermatches genommen, die bereits in XG analysiert waren, jedes davon von Grund auf in Sage neu analysiert und das Performance Rating verglichen, das jede Engine jedem Spieler zuwies.

Die Matches

Die Match-Dateien stammen aus drei Turnieren des Jahres 2026, allesamt 7-Punkte-Matches, freundlicherweise bereitgestellt von Máté Fehér — bereits in eXtreme Gammon analysiert, genau so, wie ein Wettkampfspieler seine eigenen Partien studieren würde.

UBC Texas 2026
100
analysierte Matches
UBC Istanbul 2026
146
analysierte Matches
UBC Japan 2026
44
analysierte Matches

Insgesamt 290 Matches und 580 einzelne Spielerbewertungen. Ein weiteres Match wurde als fehlerhafte Transkription aussortiert.

Einander entsprechende Analyseeinstellungen

Jedes Match wurde in Sage mit einer 3-Ply-Basis neu analysiert, mit einem Experten-3T-Durchgang — einem verkürzten Rollout über 360 Pfade — für die Entscheidungen, in denen der tatsächliche Zug des Spielers vom besten 3-Ply-Zug abwich. Das spiegelt eine starke XG-Analyse (ein Basis-Ply für die klaren Entscheidungen, hochgestuft zu einem verkürzten Rollout für die knappen) bei gleicher Stärke: Sage 3P ≈ XG 3-Ply und Sage 3T ≈ XG Roller++ (siehe Abschnitt 2). Jede Engine berechnet dann aus ihren eigenen Bewertungen einen PR je Spieler — die Zahl, die ein Nutzer in der jeweiligen App sieht.

Ergebnisse

Über alle 580 Spielerbewertungen hinweg stimmen die beiden Engines fast genau überein. Der mittlere Unterschied ist statistisch nicht von null unterscheidbar, und die Streuung dieses Unterschieds ist klein gegenüber der Streuung des PR selbst.

+0.002
Mittlerer Unterschied (PR)
Statistisch nicht von null unterscheidbar — 95-%-Konfidenzintervall ±0.03, p = 0.90.
0.37
Standardabweichung des Unterschieds
Klein gegenüber der Streuung von 2.08 im PR selbst — die Abweichung bei einer einzelnen Bewertung ist gering im Verhältnis dazu, wie stark der PR schwankt.
0.98
Korrelation der Bewertungen (r)
Sage und XG bewerten dieselben Spieler nahezu identisch.
Performance Rating je Spieler XG Sage UnterschiedSage − XG
Durchschnitt 4.36 4.36 +0.002
Standardabweichung 2.08 2.10 0.37
95-%-Bereich 1.52 – 9.36 1.44 – 9.67 −0.76 – +0.74
Praktisch gesehen sieht ein Spieler, der ein Match in Sage analysiert, in der großen Mehrheit der Fälle im Wesentlichen dasselbe Performance Rating, das auch XG vergeben würde. Als Maß dafür, wie gut ein Match gespielt wurde, sind die beiden Engines austauschbar.
06
Fazit

Zwei starke Engines, sehr nah beieinander

In den Stärkestudien gehören Open Sage 3T und XG Roller++ zu den stärksten verfügbaren Backgammon-Auswertungen und liegen nahe beieinander. Die Rollout-PR-Studie — durchgeführt für unbegrenztes Spiel wie für 5-Punkte-Matches — findet Sage auf jeder vergleichbaren Stufe stärker, außer bei 3-ply, wo die beiden Engines im Rauschen liegen, mit dem deutlichsten Vorsprung auf den Stufen der abgeschnittenen Rollouts. Die Studie der strittigen Positionen, die jene Positionen betrachtet, bei denen die beiden Engines auf der stärksten Auswertungsstufe uneins sind, und sie gegen die Rollouts beider bewertet, endet beim Steinespiel unentschieden — jeder Rollout begünstigt die Engine, die ihn erzeugt hat —, während die Doppler-Meinungsverschiedenheiten zu selten und zu geteilt für ein Urteil sind.

Die ehrliche Zusammenfassung lautet also, dass die beiden Engines auf sehr ähnlichem, sehr hohem Niveau spielen. Sages Vorteil stammt aus den Entscheidungen, die seine abgeschnittenen Rollouts richtig treffen und XGs Roller-Stufen nicht; auf den Positionen, bei denen die beiden Engines offen uneins sind, setzt keiner der beiden Rollouts den anderen klar zurück. Bei den Familien-Benchmarks — Backgames, Containment-Partien und dem Snake — trennen sich die beiden: mit demselben Maßstab und auf jeder vergleichbaren Stufe führt Sage in allen dreizehn, und um einen Faktor von drei oder mehr bei Containment-Partien und dem Snake.

Und die dritte Studie beantwortet die Frage, vor der ein Sage-Nutzer tatsächlich steht: Über 290 echte Turniermatches hinweg, die XG bereits bewertet hatte, erzeugt Sage im Wesentlichen dasselbe Performance Rating — der mittlere Unterschied zwischen der Sage- und der XG-Bewertung eines Spielers ist statistisch nicht von null unterscheidbar, und die Streuung dieses Unterschieds ist klein gegenüber der Streuung des PR selbst. Ob die Prüfung nun die Stärke gegen eine ausgerollte Wahrheit ist oder die schlichte Übereinstimmung darüber, wie eine echte Partie gespielt wurde: Open Sage und XG landen am selben Ort.

Backgammon Sage Pro ausprobieren Zurück zur Startseite
A
Anhang

Diese Ergebnisse nachvollziehen

Open Sage ist als Open Source veröffentlicht, und die vollständige Pipeline hinter beiden Methoden liegt im Repository der Engine bei. Alles Folgende läuft allein gegen das bgsage Paket und einen lokalen Build seiner Engine — externe Dienste, Datensätze oder Infrastruktur sind nicht erforderlich. Die einzige manuelle Abhängigkeit ist eXtreme Gammon selbst, mit dem die XG-Spalten neu erzeugt werden, da XG keine programmatische Schnittstelle hat.

github.com/markbgsage/bgsage Open-Sage-Engine · MPL-2.0 · alle Skripte aus dem Repository-Wurzelverzeichnis ausführen
Voraussetzungen. Baue die bgsage-Engine (die bgbot_cpp Erweiterung) nach den Anweisungen des Repositorys für deine Plattform. Um eine XG-Spalte nachzuvollziehen, wird zusätzlich eXtreme Gammon (Windows) für dessen Stapelanalyse-Schritt benötigt. Jedes Skript löst seine Pfade innerhalb des Repositorys auf, führe sie also aus dem bgsage/ Wurzelverzeichnis aus.

Mit Claude Code nachvollziehen

Du musst die Pipeline nicht von Hand steuern. Claude Code — Anthropics agentisches Kommandozeilen-Werkzeug zum Programmieren — kann die Engine bauen und die Benchmarks für dich ausführen. Richte es auf einen Checkout des Repositorys und beschreibe, was du willst; es arbeitet dieselben Schritte ab, die unten im Detail stehen:

„Baue diese Engine, bewerte dann Sage 3T und Sage 3P am mitgelieferten Benchmark und zeige mir für jede den PR, den Zug-PR und den Cube-PR.“
„Reproduziere die Rollout-PR-Tabelle: Bewerte jede Sage-Stufe — 1-Ply bis 4-Ply sowie 1T, 2T und 3T — gegen data/money_benchmark/benchmark.json.gz und gib sie als Tabelle aus, die ich mit der Studie vergleichen kann.“
„Baue den Referenz-Benchmark von Grund auf mit den drei Aufbaudurchgängen neu und bewerte dann Sage 3T daran.“
„Ich habe meinen eigenen Bot in ./mybot — werte für jede Entscheidung im mitgelieferten Benchmark diese mit meinem Bot aus und berechne seinen PR gegenüber den Referenz-Equities.“

Methode eins — Rollout-PR

Der Benchmark — die geschichtete Menge vertrauenswürdiger Bewertungen — wird von einem einzigen Skript erzeugt und ausgewertet, scripts/benchmark_money.py. Es gibt zwei Wege hinein.

A

Am mitgelieferten Datensatz bewerten

Kein Neuaufbau · die Tabelle prüfen oder eine neue Engine bewerten

Das Repository liefert den fertigen Benchmark als data/money_benchmark/benchmark.json.gz (das unkomprimierte JSON überschreitet GitHubs Dateigrößenlimit; die Skripte lesen das gzip transparent). Eine beliebige Sage-Stufe zu bewerten reproduziert ihre Zeile in der Tabelle aus Abschnitt 3:

# lower PR is better
python scripts/benchmark_money.py score --level 3ply        # Sage 3P
python scripts/benchmark_money.py score --level truncated3  # Sage 3T
# --level: 1ply 2ply 3ply 4ply | truncated1/2/3 | rollout

Um eine ganz andere Engine zu bewerten, wende dieselbe Regel an, die das Skript intern nutzt: Nimm für jede Entscheidung im Datensatz die Wahl deiner Engine und vergleiche deren Equity mit der hinterlegten Referenz-Equity („Rollout“) — der mittlere Fehler × 500 ist ihr PR.

B

Die Referenzwahrheit von Grund auf neu aufbauen

Jede Entscheidung neu herleiten · mit Startwert versehen, also reproduzierbar

Drei adaptive Durchgänge erzeugen den Datensatz neu. Die Partien sind mit einem Startwert versehen (500 Partien aus Startwert 1), sodass Entscheidungen und Referenz-Equities gleich ausfallen:

# 1. simulate 500 Sage-3P self-play games (+ XG transcripts)
python scripts/benchmark_money.py build --stages pass1 --n-games 500 --workers 6
# 2. re-evaluate every decision within 0.05 at 3T
python scripts/benchmark_money.py build --stages pass2 --n-threads 16
# 3. roll out every decision still within 0.02
python scripts/benchmark_money.py build --stages pass3 --n-threads 16

Durchgang 3 schreibt data/money_benchmark/benchmark.json (und dessen .gz); bewerte es genau wie in Möglichkeit A. Lässt man --stages weg, laufen alle drei Durchgänge der Reihe nach.

Die XG-Spalten nachvollziehen

XG hat keine API, seine Ergebnisse stammen daher aus XGs Stapelanalyse. Durchgang 1 schreibt XG-Importtranskripte nach data/money_benchmark/xg/ — diese werden nicht mitgeliefert, erzeuge sie also mit Durchgang 1 neu, wenn du allein vom Datensatz ausgegangen bist.

  1. Analysiere in XG den Ordner xg/ per Stapelanalyse mit einer eigenen Stufe — 3-Ply-Entscheidungen, bei Uneinigkeit hochgestuft auf die geprüfte Stufe — und aktiviertem Save Games after analyze. XG schreibt eine .xg je Partie.
  2. Führe python scripts/benchmark_pr_xg_levels_all.py --benchmark moneyaus; es liest XGs oberste Entscheidung je Position auf jeder analysierten Stufe aus den .xg Dateien und misst sie an denselben Referenz-Equities, wobei es dieselbe PR-Aufschlüsselung ausgibt und XGs Wahl daneben festhält.

Die Studie der strittigen Positionen benötigt stattdessen XGs Rollouts der schwierigsten Positionen. Führe XGs Batch Rollout auf diesen Positionen aus (Save Games aktiviert); python scripts/xg_benchmark_report.py wertet sie aus. Siehe Methode Zwei unten.

Match-Spiel

Die Studie zu den 5-Punkte-Matches wird auf demselben Weg nachvollzogen, mit scripts/benchmark_match.py, dem Match-Spiel-Zwilling von benchmark_money.py — Matchlänge und Anzahl der Matches sind Argumente, und der Match-Stand wird durch jede Auswertung geführt. Seine Referenzwahrheit wird mitgeliefert als data/match_benchmark/5pt/benchmark.json.gz.

# score against the shipped match dataset (no rebuild)
python scripts/benchmark_match.py score --match-length 5 --level truncated3
# or rebuild: 130 seeded 5-pt matches, three adaptive passes
python scripts/benchmark_match.py build --match-length 5 --n-matches 130 --stages pass1 --workers 6
python scripts/benchmark_match.py build --match-length 5 --n-matches 130 --stages pass2 --n-threads 16
python scripts/benchmark_match.py build --match-length 5 --n-matches 130 --stages pass3 --n-threads 16
# XG columns: batch-analyze data/match_benchmark/5pt/xg/ per level, then
python scripts/benchmark_pr_xg_levels_all.py --benchmark match --match-length 5

Methode zwei — Strittige Positionen

Die Uneinigkeitsstudie schöpft aus demselben Benchmark unbegrenzter Partien, der für Methode eins gebaut wurde, abgeglichen mit XGs eigenem vollständigem Rollout der schwierigsten Positionen. Die einzige manuelle Abhängigkeit ist XGs Batch Rollout; ein einziges Skript erledigt den Rest.

Unbegrenzte Partien

  1. Baue den Benchmark der unbegrenzten Partien (Methode eins, Möglichkeit B). Durchgang 1 schreibt außerdem die XG-Importtranskripte nach data/money_benchmark/xg/.
  2. Führe in XG auf diesen Positionen einen Batch Rollout mit aktiviertem Save Games after analyze aus, sodass jede ausgerollte Entscheidung XGs eigene Rollout-Equities in den entstehenden .xg Dateien trägt.
  3. Einlesen und berichten:
python scripts/xg_benchmark_report.py
python scripts/xg_dispute_analysis.py --sage-picks data/money_benchmark/scores/sage_truncated3.picks.jsonl

Das erste liest XGs Rollouts nach data/money_benchmark/xg_results/rollout.jsonlein; das zweite erzeugt aus Sage 3Ts aufgezeichneter Wahl den Bericht zu den strittigen Positionen — jede Uneinigkeit der Reihe nach am Sage- und am XG-Rollout gemessen.

Das Match-Spiel ist von dieser Methode noch nicht abgedeckt: Es bräuchte einen vollständigen XG-Rollout der Match-Positionen, den wir nicht ausgeführt haben. Die Match-Stärke deckt stattdessen die Rollout-PR-Studie ab (Abschnitt 3) sowie die Studie zur Übereinstimmung bei echten Matches (Abschnitt 5).

Direkte Partien

Sage und XG können auch direkt gegeneinander spielen, wobei XGs Züge aus seiner eigenen Analyse stammen. Sage spielt beide Seiten einer unbegrenzten Partie; das Protokoll wird in XG stapelweise analysiert; die erste gegnerische Entscheidung, die von XGs bester Wahl abweicht, wird durch XGs Zug ersetzt und die Partie von dort mit neuen Würfeln weitergespielt, bis jeder gegnerische Zug derjenige ist, den XG gemacht hätte. Der Runner spielt eine Serie solcher Partien (die Seeds laufen weiter ab logs/sage_vs_xg.txt) und gibt die durchschnittlichen Punkte pro Partie mit ihrem Standardfehler aus:

python scripts/run_sage_vs_xg_games.py 100 --level 3P   # Sage 3P vs XG; levels 1P-4P, 1T-3T
python scripts/play_sage_vs_xg.py 3P --seed 7             # one game, iterations under logs/play_sage_vs_xg/

XG muss auf dem Windows-Desktop laufen: Jede Iteration steuert seinen Batch-Analyze-Dialog über scripts/xg_batch_analyze.py, ein Anthropic-Computer-Use-Agent (setze ANTHROPIC_API_KEY), der Maus und Tastatur für etwa eine Minute pro Iteration übernimmt. Eine Partie konvergiert in wenigen Iterationen; XGs Urteil „too good to double“ zählt als kein Doppeln.

Backgames, Containment-Spiele und die Snake

Die dreizehn Familien-Benchmarks liegen unter backgame_ref_positions/benchmark/ — eine Datei <family> starting.txt mit Ausgangspositionen und eine Referenz <family> rollout.jsonl je Benchmark — und bewertet werden sie von scripts/score_backgame_pr.py, das die PR zusammen mit dem Anteil der Züge in Rollout-Qualität ausgibt.

python scripts/score_backgame_pr.py --category "21 backgame" --level truncated3
python scripts/score_backgame_pr.py --category containment --level 3ply
# XG: export every decision as a one-decision native .xg game, then per level (XG running): analyse, wait, score
python scripts/export_folder_benchmark_xg.py generate
python scripts/xg_folder_batch.py stamp
python scripts/xg_folder_batch.py analyze --level xg3ply   # drives XG's Batch Analyze dialog (pywinauto)
python scripts/xg_folder_batch.py wait --level xg3ply
python scripts/xg_folder_batch.py score --level xg3ply
Open Sage steht unter der Lizenz MPL-2.0. Die mitgelieferten Benchmarks sind genau die Referenzen hinter den Tabellen in Abschnitt 3; die Ergebnisse zu den strittigen Positionen lassen sich daraus neu erzeugen, sobald XGs Batch Rollout die passenden .xg Dateien trägt.