Wie die Stage-11-Engine hinter Backgammon Sage Pro gebaut wurde, um die Stellungen zu beherrschen, die jeder Bot am schlechtesten spielt — Backgames, Containment-Spiele und die Snake — und was die Benchmarks dazu sagen.
Backgammon-Engines waren schon immer am schwächsten in den langsamen, strukturellen Spielen: in Backgames, in denen ein Spieler zwei oder mehr Anker tief im gegnerischen Heimfeld hält und auf einen Schuss wartet; in Containment-Spielen, in denen ein Spieler mit verlorenem Rennen ein oder zwei geschlagene Steine gefangen zu halten versucht; und in der Snake, einem Prime auf der gegnerischen Bretthälfte, der einen einzelnen Nachzügler festhält, während der Rest der gegnerischen Armee zerbröselt. Diese Stellungen sind im gewöhnlichen Spiel selten und ungewöhnlich lang, wenn sie einmal entstehen, sodass sie in den Selbstspiel-Daten, aus denen eine Engine lernt, kaum vorkommen — und eine Engine, die sie kaum gesehen hat, bewertet sie, indem sie von Stellungen extrapoliert, die nur ähnlich aussehen. Die Open-Sage-Engine Stage 9 wurde auf Backgame-Stellungen trainiert und schneidet auf vergleichbaren Bewertungsstufen besser ab als eXtreme Gammon, doch ihre Fehlerrate in diesen Spielen ist immer noch ein Vielfaches ihrer Fehlerrate anderswo. Stage 11 packt das Problem direkt an. Wir haben zuerst Benchmarks gebaut, die aus Backgames, Containment-Spielen und Snakes bestehen, jeder als Performance Rating gegen Referenzen in Rollout-Qualität bewertet; dann sechs neuronale Netze in die Engine aufgenommen, ausgewählt durch eine kleine Menge struktureller Regeln; dann Rollout-Zielwerte für jedes von ihnen erzeugt; und schließlich das Ergebnis gegen jeden Benchmark bewertet, den wir haben. Auf dem Containment-Benchmark senkt Stage 11 die 3-Ply-PR von 6,89 auf 3,58 und die Zahl der Patzer von 156 auf 53; über die zehn klassischen Backgame-Benchmarks fällt seine 1-Ply-PR von 4,75 auf 2,98; und sein Spiel im unbegrenzten Spiel und im Paskogammon — einer Variante, die aus einer eigens gewählten Startstellung gespielt wird, die in weit mehr Backgames führt — ist unverändert oder besser.
Backgammon-Engines mit neuronalen Netzen lernen aus Millionen gegen sich selbst gespielter Partien, und sie lernen, was diese Partien enthalten. Backgames, Containment-Spiele und Primes, die einen einzelnen Nachzügler festhalten, sind im gewöhnlichen Spiel selten und ungewöhnlich lang, wenn sie vorkommen; eine allgemeine Engine sieht daher wenige davon und bewertet sie, indem sie von Stellungen extrapoliert, die ähnlich aussehen, es aber nicht sind. Das Ergebnis ist eine bekannte Schwäche: Eine Engine, die in einer normalen Partie alle zwanzig Entscheidungen einen Fehler macht, kann in einem tiefen Backgame alle drei einen machen, und sie beurteilt tendenziell dieselben Dinge falsch wie ein menschlicher Fortgeschrittener — wann man einen Anker hält und wann man läuft, wie viel Timing eine Stellung hat und wann ein Prime aufgelöst werden sollte.
Die Open-Sage-Engine Stage 9, die Backgammon Sage Pro antreibt, enthält bereits zwei speziell auf Backgame-Stellungen trainierte Netze, und unsere Studie zur Bot-Leistung zeigt, dass sie auf jeder vergleichbaren Stufe mindestens so gut bewertet wie eXtreme Gammon. Doch Stärke relativ zu anderen Bots ist nicht dasselbe wie absolute Stärke. Gemessen an Rollouts ist die Fehlerrate von Stage 9 in Backgames zwei- bis dreimal so hoch wie in gewöhnlichen Partien, und in Containment-Spielen und Snakes ist sie noch schlechter: Auf dem Snake-Benchmark unten liegt ihr 1-Ply-Performance-Rating über 60, gegenüber 2,6 im unbegrenzten Spiel.
Stage 11 soll diese Schwächen beseitigen, ohne sonst etwas anzutasten. Die Arbeit verlief in vier Schritten. Zuerst bauten wir eine Familie von Benchmarks, die Backgame- und Containment-Spiel in verschiedenen Stellungstypen bewerten — zehn klassische Backgame-Typen, eine Containment-Familie, eine Familie massiver Backgames und eine Snake-Familie — jeder eine Menge echter Entscheidungen, bewertet gegen Referenzen in Rollout-Qualität, sodass Stage 9, Stage 11 und XG alle auf derselben Grundlage gemessen werden können. Zweitens entwarfen wir das Stage-11-Modell: die siebzehn Netze von Stage 9 unverändert übernommen, dazu sechs neue Netze für die Backgame-Familien und ein Zuordnungsalgorithmus, der aus der Struktur einer Stellung entscheidet, welches Netz sie bewertet. Drittens erzeugten wir Trainingsdaten für jedes neue Netz — eine Mischung aus Stellungen aus dem Selbstspiel, synthetischen Stellungen und bestehenden Rollout-Korpora, alle per Rollout mit Zielwerten versehen. Viertens trainierten wir die Netze und bewerteten die fertige Engine gegen jeden Backgame-Benchmark sowie gegen unsere Rollout-PR-Benchmarks für das unbegrenzte Spiel, 5-Punkte-Matches und Paskogammon (eine Variante, die aus einer eigens gewählten Startstellung gespielt wird, die viele Backgames erzeugt), um sicherzustellen, dass die Gewinne in Backgames anderswo nichts kosteten.
Die Kurzfassung der Ergebnisse: Stage 11 ist überall dort deutlich stärker, wo die neuen Netze greifen, und identisch mit Stage 9 überall dort, wo sie es nicht tun. Seine 3-Ply-PR auf dem Containment-Benchmark ist knapp die Hälfte der von Stage 9, seine Patzer dort sinken um zwei Drittel, seine gepoolte 1-Ply-PR über die zehn klassischen Backgames fällt um 37 %, und es ist die erste Open-Sage-Engine, die bei der Snake echte Fortschritte macht. Das Spiel im unbegrenzten Spiel ist unverändert, das Paskogammon-Spiel verbessert sich. Der Rest dieser Seite liefert die Details.
Jeder Benchmark hier folgt demselben Rezept wie unser Rollout-PR-Benchmark für das unbegrenzte Spiel: eine Menge echter Entscheidungen, jede mit einer Referenzbewertung in Rollout-Qualität, gegen die eine Engine als Performance Rating bewertet wird — ihr mittlerer Equity-Fehler pro Entscheidung, multipliziert mit 500, die Konvention, die XG verwendet. Eine PR von 2 bedeutet, dass die Engine im Schnitt 0,004 Punkte pro Entscheidung verschenkt; eine PR von 60 bedeutet 0,12 pro Entscheidung, also Anfängerniveau.
Was sich unterscheidet, ist die Herkunft der Entscheidungen. Jeder Backgame-Benchmark geht von einer kleinen Menge von Ausgangsstellungen aus, die seine Familie definieren — die in den Karussells unten gezeigten Referenzstellungen. Die Engine spielt aus diesen Ausgangsstellungen unbegrenzte Partien gegen sich selbst, mit Cube, Jacoby und Beaver, auf 3 Ply, und jede Entscheidung, die entsteht, solange die Stellung noch zur Familie gehört, wird aufgezeichnet: Ein Zugspiel zählt, wenn es mindestens zwei legale Züge und einen nennenswerten Equity-Abstand zwischen ihnen gibt, und eine Cube-Stellung zählt, wenn die Entscheidung des Doppelnden nicht trivial offensichtlich ist oder tatsächlich ein Doppel angeboten wird. Die Ausgangsstellungen werden in einem gemischten Zyklus verwendet, wer zuerst zieht, entscheidet ein Münzwurf, und alles ist eine reine Funktion eines einzigen Zufallssamens, sodass sich jeder Benchmark identisch regenerieren lässt.
Jede aufgezeichnete Entscheidung wird dann per Rollout mit ihrer Referenz versehen: 5.184 Pfade pro Stellung, bis zum Ende gespielt, mit 3-Ply-Zug- und Cube-Entscheidungen in den ersten drei Halbzügen und 2 Ply danach, Varianzreduktion an, verteilt über eine Flotte von Cloud-Workern. Die Referenz einer Zugentscheidung trägt die ausgerollte Equity jedes Kandidaten, den der Filter des Referenzspielers behalten hat; die einer Cube-Entscheidung trägt die Equities für Nicht-Doppeln, Doppeln/Annehmen und Doppeln/Aufgeben. Eine Feinheit ist beim Vergleich von Engines wichtig: Ein Kandidat außerhalb der Filtermenge des Referenzspielers wird nur mit Filtergenauigkeit bewertet, was eine Engine, deren Züge von denen des Referenzspielers abweichen, zu stark belastet. Wir haben deshalb Läufe zur Kandidatenvervollständigung durchgeführt — jeden Zug, den Stage 9 oder Stage 11 auf 1, 2 oder 3 Ply tatsächlich gewählt hat, unter derselben Konvention ausgerollt —, sodass jede Bewertung unten gegen einen Kandidaten in Rollout-Qualität erfolgt.
Ein Backgame wird nach den beiden Punkten benannt, die sein Besitzer im gegnerischen Heimfeld hält: Das 2‑1-Backgame hält den gegnerischen 2- und 1-Punkt, das 5‑4 hält den 5- und 4-Punkt, und so weiter. Zehn Typen decken die brauchbaren Kombinationen ab. Die Ausgangsstellungen jedes Ordners sind von Hand ausgewählte Stellungen aus XG-Referenzdateien, und sein Benchmark enthält rund 1.000 Entscheidungen — nur aufgezeichnet, solange die beiden genannten Anker noch gehalten werden und ihr Besitzer im Rennen zurückliegt — insgesamt 10.021 Entscheidungen. Die Ausgangsstellungen jedes Ordners sind ebenfalls Benchmark-Stellungen, als Cube-Entscheidungen. Wählen Sie einen Typ, um seine Ausgangsstellungen durchzublättern; jede Karte zeigt neben dem Brett die ausgerollte Cube-Analyse der Stellung.
Ein Containment-Spiel wird durch den Flüchtenden definiert, nicht durch den Einschließenden: Eine Seite hat eine Reihe von Steinen 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 — Anker, Blots, einen gebrochenen Prime —, so anordnet, dass sie weiter schlagen kann, um das Gammon zu retten oder gelegentlich zu gewinnen. An die Struktur des Einschließenden wird nichts verlangt. Die 201 Ausgangsstellungen des Benchmarks stammen aus Stellungen, denen die Engine bereits begegnet war (Entscheidungen der Benchmarks für das unbegrenzte Spiel und Paskogammon mitsamt Cube sowie Zeilen der Backgame-Trainingsdaten), durch diese Regel gefiltert, und seine 3.197 Stellungen — darunter die Cube-Entscheidungen der Ausgangsstellungen selbst — werden aufgezeichnet, solange der Flüchtende noch gefangene Steine hat. Eine zweite Referenz für eine Stichprobe von 300 Stellungen wurde mit Stage 11 statt Stage 9 als Spieler der Probepartien ausgerollt, um zu prüfen, dass die Wahl des Probespielers den Vergleich nicht entscheidet.
Ein massives Backgame hält drei oder mehr Anker im gegnerischen Heimfeld oder zwei Anker mit sieben oder mehr Steinen hinten: die tiefen, vom Timing bestimmten Stellungen, in denen der Backgame-Spieler den Großteil seiner Armee gebunden hat. Die 200 Ausgangsstellungen stammen aus denselben Quellen wie die Containment-Ausgangsstellungen, durch diese Regel gefiltert und disjunkt zur Containment- und zur Snake-Familie gehalten; der Benchmark enthält 2.199 Stellungen.
Die Snake ist ein Prime auf der gegnerischen Bretthälfte, der einen einzelnen Nachzügler festhält: eine Folge von vier oder mehr aufeinanderfolgenden Punkten, jeder mit zwei oder mehr Steinen belegt, vollständig auf der gegnerischen Bretthälfte, die einen Stein auf der Bar oder im Heimfeld des Prime-Besitzers gefangen hält, während die übrigen zehn oder mehr gegnerischen Steine bereits zu Hause zusammengeschoben sind. Es ist eher ein Prime-Spiel als ein Backgame und eine der schwierigsten Formen im Backgammon überhaupt: Der Besitzer muss den Prime nach Hause rollen, ohne den Nachzügler freizugeben, und der Zeitpunkt der Freigabe entscheidet die Partie. Weil die Stellung im Spiel selten ist, enthalten die 74 Ausgangsstellungen synthetische Varianten der klassischen Form (Länge und Lage des Primes, Position des Nachzüglers, Aufteilung der zusammengeschobenen Steine) neben den wenigen aus vorhandenen Daten; der Benchmark enthält 1.073 Stellungen.
Drei Benchmarks messen ganze Partien statt einer Stellungsfamilie und dienen dem Nachweis, dass nichts verloren ging: die Rollout-PR im unbegrenzten Spiel (500 Partien, 17.535 Entscheidungen), die Rollout-PR im 5-Punkte-Match (130 Matches, 18.292 Entscheidungen, wobei der Matchstand in jede Cube-Entscheidung eingeht) und die Rollout-PR im Paskogammon (2.556 Entscheidungen, gespielt aus der verstreuten Ausgangsstellung des Paskogammon, die weit mehr Backgames und Containment-Spiele hervorbringt als Standard-Backgammon). Alle drei bauen ihre Referenzen adaptiv auf — 3 Ply für klare Entscheidungen, verkürzte Rollouts für engere, volle Rollouts mit 1.296 Pfaden für die engsten —, wie in der Studie zur Bot-Leistung beschrieben.
Auch XG wurde auf diesen Benchmarks bewertet. Es bietet keine programmatische Schnittstelle, daher wird jede Benchmark-Entscheidung als Partie mit einer einzigen Entscheidung geschrieben und über seine Funktion Batch Analysis nachgespielt, ein Durchlauf je Auswertungsstufe, genau wie bei den Benchmarks für unbegrenzte Partien und Matches. Diese Ergebnisse stehen auf der Seite Bot-Leistung, die die Engine mit XG vergleicht; die Tabellen hier vergleichen Stage 11 mit dem Stage 9, das es ablöst.
Stage 9 ist ein Komitee aus neunzehn neuronalen Netzen: eines für reine Rennen, sechzehn ausgewählt nach dem Paar von Spielplänen, das die beiden Seiten verfolgen (Rennen, Angriff, Prime, Anker), und zwei Backgame-Netze — eines für den Spieler, der ein Backgame hält, und eines für den Gegner —, die verwendet werden, wenn das Planpaar Anker gegen Rennen lautet, die ankernde Seite im Rennen zurückliegt und zwei oder mehr Anker im gegnerischen Heimfeld hält. Jedes Netz ist eine einzelne verborgene Schicht aus 400 Einheiten über 244 Eingaben (100 Einheiten über 196 Eingaben beim Rennnetz) mit fünf Ausgaben: den Wahrscheinlichkeiten für Gewinn, Gammon-Gewinn, Backgammon-Gewinn, Gammon-Verlust und Backgammon-Verlust.
Stage 11 behält die siebzehn Standardnetze Byte für Byte bei und ersetzt die beiden Backgame-Netze durch sechs, was ein Komitee aus dreiundzwanzig ergibt:
| # | Netz | Bewertete Region |
|---|---|---|
| 0–16 | Die Renn- und Planpaar-Netze von Stage 9 | Alles Übrige, genau wie in Stage 9 |
| 17 | Tiefes Backgame | Die 2‑1-, 3‑1- und 3‑2-Backgames: beide Anker auf dem gegnerischen 1-, 2- oder 3-Punkt |
| 18 | Mittleres Backgame | Die 4‑1-, 4‑2-, 5‑1- und 5‑2-Backgames: ein Anker auf dem 1- oder 2-Punkt, einer höher |
| 19 | Doppelanker | Die 4‑3-, 5‑3- und 5‑4-Backgames: zwei Anker, keiner tiefer als der 3-Punkt |
| 20 | Frühes Containment | Ein Backgame-Besitzer, der einen Schuss getroffen hat, während der Läufer noch höchstens zwei Steine ausgewürfelt hat, in Stellungen, die das Planpaar-Gatter sonst einem Standardnetz übergeben würde |
| 21 | Containment | Jedes Containment-Spiel, was immer der Einschließende hält |
| 22 | Snake | Ein Prime auf der gegnerischen Bretthälfte, der einen Nachzügler gegen ein zusammengeschobenes Brett festhält |
Zwei Entwurfsentscheidungen zählen mehr als die Anzahl. Die Backgame-Netze werden nach der Kategorie des Backgames gewählt — dasselbe Netz, welche Seite es auch hält — und nicht danach, welche Seite es hält, sodass jedes eine Struktur aus beiden Perspektiven lernt. Und das Netz für ein Zugspiel wird aus der Stellung vor dem Zug gewählt, sodass ein einziges Netz jeden Kandidaten bewertet, auch die, die seine Region verlassen (den Zug, der einen Anker aufgibt oder den Prime auflöst); das macht Halten-oder-Laufen-Entscheidungen konsistent, und es ist auch der Grund, warum die Trainingsdaten jedes Netzes die Stellungen enthalten müssen, zu denen diese Auflösungszüge führen.
Der Zuordnungsalgorithmus ist eine kurze geordnete Liste struktureller Tests auf der Stellung; der erste, der zutrifft, gewinnt:
Weil die Tests strukturell sind, lässt sich ihr Fußabdruck auf jeder Stellungsmenge messen, und dieser Fußabdruck begrenzt das Risiko: Auf dem Benchmark für das unbegrenzte Spiel greift die Containment-Regel bei 1,3 % der Stellungen, die Regel für frühes Containment bei 0,6 % und die Backgame-Regeln bei 2,4 %, während die Snake-Regel bei keiner einzigen greift; auf dem Paskogammon-Benchmark lauten die Zahlen 2,6 %, 20 % und 25 %. Die 95 % gewöhnlicher Stellungen, die Stage 11 identisch zu Stage 9 bewertet, sind konstruktionsbedingt unverändert.
Jedes neue Netz wurde so trainiert wie die Backgame-Netze von Stage 9: überwachtes Lernen auf der GPU gegen ausgerollte Zielwerte — die fünf Wahrscheinlichkeiten, die ein vollständiger Rollout einer Stellung zuweist —, warm gestartet von einem bestehenden Netz, wobei der Checkpoint behalten wird, der auf einem zurückgehaltenen Zehntel der Daten am besten abschneidet. Was sich je Netz unterscheidet, ist die Herkunft seiner Stellungen, und jede Antwort hat uns etwas gelehrt.
Stage 9 und Stage 10 hatten bereits ausgerollte Backgame-Stellungen angesammelt — Standardpartien und Paskogammon-Partien, insgesamt rund 640.000 Zeilen. Nach Kategorie aufgeteilt ergab das 245.000 tiefe, 167.000 mittlere und 94.000 Doppelanker-Trainingszeilen, mit zurückgehaltenen Benchmark-Zeilen, die gegen sie dedupliziert wurden. Allein darauf trainiert war das Trio innerhalb seiner Region besser als Stage 9 und an ihrem Rand schlechter: Ein Netz, das nur Stellungen mit beiden gehaltenen Ankern gesehen hat, hat keine Vorstellung davon, was die Stellung wert ist, sobald ein Anker aufgegeben wird, und da es jeden Kandidaten einer Backgame-Entscheidung bewertet, riet es — rund 0,3 Punkte zu optimistisch, was mehr als die Hälfte seines Fehlers auf den tiefen Benchmarks ausmachte. Die Abhilfe war das Ernten von Ausstiegsnachfolgern: für jede Trainingsstellung die legalen Züge, die die Kategorie verlassen, ausgerollt in der Orientierung, in der die Zuordnung sie bewertet. Vierzigtausend je Kategorie, dem Trainingssatz hinzugefügt, beseitigten diesen Fehlermodus. Der Warmstart vom Backgame-Netz von Stage 9 selbst schlug sowohl einen Zufallsstart als auch einen Temporal-Difference-Bootstrap.
Die Analyse, wo der verbleibende Fehler des Trios lag, zeigte, dass er von der Phase der Partie getrieben war und nicht davon, welche Anker gehalten wurden: Er stieg, während der Läufer einwürfelte, und war unmittelbar nach einem Treffer des Besitzers am schlimmsten. Phasenspezialisten, die auf den passenden Ausschnitten derselben Daten trainiert wurden, schlugen das Trio innerhalb seiner Region nicht — aber auf den Containment-Stellungen, die das Planpaar-Gatter ablehnt (der verbliebene Block des Läufers wird als Prime gelesen, sodass Stage 9 die Stellung einem Standardnetz übergibt), senkte ein Spezialist für frühes Containment die 1-Ply-PR von 4,90 auf 3,69 und halbierte die Patzer. Er ist vom tiefen Netz ausgehend auf den Zeilen für frühes Containment aus den Daten des Trios trainiert und wird nur dort verwendet.
Die Containment-Regel ist neu, sodass ihre Region fast keine ausgerollten Daten hatte: rund 1 % der vorhandenen Datenstapel. Wir spielten 3.000 Partien aus den Containment-Ausgangsstellungen mit Stage 11 selbst, schlossen jede Benchmark-Stellung und jeden Kandidaten in beiden Orientierungen aus und behielten die Stellungen, die die Regel erfüllten — 35.266 neue Bretter plus 9.734 bereits ausgerollte Zeilen —, und rollten sie mit 1.296 Pfaden und 3-Ply-Spiel aus. Ein auf diesen 45.000 Zeilen trainiertes Netz war auf dem Containment-Benchmark ausgezeichnet und schlechter als Stage 9 auf den 237 Stellungen des unbegrenzten Spiels, die die Regel ihm zuweist: Das sind Containment-Stellungen gewöhnlicher Partien (ein später Treffer beim Auswürfeln, ein Closeout), die in den Familiendaten nie vorkamen. Das Hinzufügen der 291.000 Zeilen des allgemeinen Trainingskorpus, die dieselbe Regel erfüllen, mit vierfach gewichteten Familienzeilen, brachte den Ausschnitt des unbegrenzten Spiels auf das Niveau von Stage 9 zurück und machte das Netz auch auf dem Familien-Benchmark besser. Das ist die allgemeine Lehre dieser Arbeit: Ein Spezialistennetz muss auf seiner gesamten Region trainiert werden, nie auf der Ecke davon, die der Benchmark besetzt.
Die Snake hatte nirgends Daten — hundert Zeilen in einem Korpus von 1,8 Millionen — und ließ sich nicht aus dem Selbstspiel ernten: Das Modell spielte diese Stellungen so schlecht, dass es den Prime innerhalb von ein oder zwei Zügen brach oder loslief, und 900 Partien lieferten kaum zwei Snake-Entscheidungen pro Partie. Also wurde die Region direkt abgetastet. Fünftausend synthetische Snakes (Länge und Lage des Primes, Reservesteine von der gegnerischen Hälfte bis nach Hause verteilt, ein zusammengeschobener Gegner mit bis zu fünf ausgewürfelten Steinen und ein bis drei Nachzüglern) dienten als Ausgangsstellungen kurzer 2-Ply-Partien, in denen der Besitzer strukturerhaltende Züge bevorzugte, und jede Entscheidung steuerte ihre Stellung, ihre fünf besten Kandidaten und bis zu drei Freigabe-Kandidaten bei — die Züge, die das Netz richtig bewerten muss, um zu wissen, wann es loslassen soll. Das ergab 98.000 verschiedene Bretter, von denen 22.000 mit 648 Pfaden und 3-Ply-Spiel ausgerollt wurden; Snake-Partien sind so lang, dass ein Rollout das Sechsfache eines Containment-Rollouts kostet. Das Netz trainiert auf diesem Satz in Minuten, und es ist das erste Open-Sage-Netz mit irgendeiner Kompetenz in der Region: Sein 1-Ply-Fehler gegenüber den Trainingszielen fiel von 0,30 auf 0,054 Punkte.
| Netz | Trainingszeilen | Quelle | Warmstart |
|---|---|---|---|
| Tiefes Backgame | 245.000 + 40.000 Ausstiege | Ausgerollte Stapel von Stage 9/10, nach Kategorie aufgeteilt; Ausstiegsnachfolger in einem Zug | Backgame-Netz von Stage 9 |
| Mittleres Backgame | 167.000 + 40.000 Ausstiege | wie oben | Backgame-Netz von Stage 9 |
| Doppelanker | 94.000 + 40.000 Ausstiege | wie oben | Backgame-Netz von Stage 9 |
| Frühes Containment | Phasenausschnitt des Obigen | Zeilen für frühes Containment aus den Daten des Trios | Netz für tiefes Backgame |
| Containment | 45.000 Familie + 291.000 allgemein | Selbstspiel aus den Containment-Ausgangsstellungen, ausgerollt; die Zeilen der Regel im allgemeinen Korpus | Prime-gegen-Rennen-Netz von Stage 9 |
| Snake | 22,000 | Synthetische Ausgangsstellungen + strukturerhaltendes Selbstspiel, ausgerollt | Prime-gegen-Rennen-Netz von Stage 9 |
Jede Zahl ist ein Performance Rating — niedriger ist besser — bei der 1-ply-, 2-ply- und 3-ply-Auswertung der jeweiligen Engine sowie auf ihren drei Stufen abgeschnittener Rollouts, 1T, 2T und 3T (die Gegenstücke zu XGs Roller, Roller+ und Roller++). Beide Engines werden gegen dieselben Referenzen bewertet, wobei jede Wahl beider Engines per Rollout beurteilt wird. XG wird auf der Seite Bot-Leistung mit der Engine verglichen; für Paskogammon, wo beide Engines auf jeder Stufe gelaufen sind, steht der Vergleich unten.
| Benchmark | Entscheidungen | 1-ply | 2-ply | 3-ply | 1T · Roller | 2T · Roller+ | 3T · Roller++ | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| S9 | S11 | XG | S9 | S11 | XG | S9 | S11 | XG | S9 | S11 | XG | S9 | S11 | XG | S9 | S11 | XG | ||
| Unbegrenztes Spiel | 17,535 | 2.59 | 2.55 | — | 1.66 | 1.68 | — | 0.60 | 0.60 | 0.57 | 0.50 | 0.49 | 0.53 | 0.26 | 0.27 | 0.41 | 0.23 | 0.23 | 0.34 |
| 5-Punkte-Match | 18,292 | 2.26 | 2.22 | — | 1.30 | 1.27 | — | 0.57 | 0.56 | 0.54 | 0.49 | 0.47 | 0.51 | 0.26 | 0.26 | 0.44 | 0.22 | 0.23 | 0.36 |
| Paskogammon | 2,556 | 7.74 | 6.14 | — | 5.42 | 4.57 | 4.38 | 3.46 | 2.28 | 2.97 | 2.67 | 1.65 | 2.63 | 2.21 | 1.46 | 2.44 | 1.47 | 0.88 | 1.92 |
| Backgame | Entscheidungen | 1-ply | 2-ply | 3-ply | 1T · Roller | 2T · Roller+ | 3T · Roller++ | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| S9 | S11 | XG | S9 | S11 | XG | S9 | S11 | XG | S9 | S11 | XG | S9 | S11 | XG | S9 | S11 | XG | ||
| 2‑1 | 1,000 | 6.59 | 3.57 | — | 4.51 | 2.26 | 2.84 | 2.70 | 1.01 | 1.64 | 2.03 | 0.61 | 1.67 | 1.72 | 0.41 | 0.98 | 1.08 | 0.38 | 0.93 |
| 3‑1 | 1,001 | 4.44 | 3.28 | — | 2.77 | 2.22 | 2.22 | 0.93 | 0.88 | 0.95 | 0.92 | 0.66 | 0.91 | 0.66 | 0.34 | 0.59 | 0.53 | 0.32 | 0.48 |
| 3‑2 | 1,008 | 4.22 | 3.31 | — | 2.47 | 2.07 | 2.39 | 1.09 | 0.91 | 1.31 | 1.40 | 0.65 | 0.95 | 0.75 | 0.44 | 0.61 | 0.74 | 0.25 | 0.51 |
| 4‑1 | 1,001 | 3.70 | 2.74 | — | 1.76 | 1.77 | 1.83 | 0.85 | 0.78 | 0.82 | 1.18 | 0.55 | 0.69 | 0.52 | 0.24 | 0.47 | 0.56 | 0.19 | 0.45 |
| 4‑2 | 1,000 | 4.16 | 3.25 | — | 2.20 | 2.16 | 1.96 | 1.04 | 0.73 | 1.05 | 1.27 | 0.63 | 0.79 | 0.55 | 0.36 | 0.61 | 0.51 | 0.27 | 0.43 |
| 5‑1 | 1,003 | 3.36 | 2.56 | — | 1.69 | 1.32 | 1.77 | 0.95 | 0.66 | 0.76 | 1.20 | 0.49 | 0.60 | 0.62 | 0.26 | 0.41 | 0.57 | 0.23 | 0.32 |
| 5‑2 | 1,002 | 3.88 | 2.61 | — | 1.74 | 1.53 | 1.60 | 0.57 | 0.49 | 0.82 | 1.37 | 0.53 | 0.63 | 0.52 | 0.33 | 0.41 | 0.52 | 0.24 | 0.30 |
| 4‑3 | 1,002 | 4.56 | 3.24 | — | 2.04 | 1.69 | 2.13 | 0.81 | 0.74 | 0.80 | 1.23 | 0.52 | 0.76 | 0.72 | 0.24 | 0.55 | 0.54 | 0.19 | 0.44 |
| 5‑3 | 1,003 | 3.79 | 2.80 | — | 1.79 | 1.86 | 2.13 | 0.96 | 1.02 | 0.89 | 1.27 | 0.68 | 0.81 | 0.69 | 0.35 | 0.46 | 0.50 | 0.21 | 0.44 |
| 5‑4 | 1,001 | 5.97 | 3.10 | — | 2.84 | 2.45 | 2.74 | 1.42 | 0.93 | 1.15 | 1.53 | 0.76 | 0.97 | 0.70 | 0.47 | 0.55 | 0.63 | 0.30 | 0.49 |
| Gepoolt | 10,021 | 4.47 | 3.05 | — | 2.38 | 1.93 | 2.16 | 1.13 | 0.82 | 1.02 | 1.34 | 0.61 | 0.88 | 0.75 | 0.34 | 0.56 | 0.62 | 0.26 | 0.48 |
| Benchmark | Entscheidungen | 1-ply | 2-ply | 3-ply | 1T · Roller | 2T · Roller+ | 3T · Roller++ | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| S9 | S11 | XG | S9 | S11 | XG | S9 | S11 | XG | S9 | S11 | XG | S9 | S11 | XG | S9 | S11 | XG | ||
| Containment | 3,270 | 9.65 | 6.82 | — | 9.63 | 4.73 | 14.62 | 5.09 | 2.54 | 11.25 | 3.78 | 2.29 | 7.76 | 3.20 | 1.30 | 7.85 | 2.53 | 1.05 | 6.16 |
| Massives Backgame | 2,103 | 9.78 | 5.71 | — | 7.88 | 4.33 | 5.76 | 4.89 | 2.56 | 4.44 | 3.85 | 1.91 | 3.14 | 3.21 | 1.39 | 2.75 | 2.80 | 1.09 | 2.64 |
| Snake | 978 | 64.87 | 21.08 | — | 39.17 | 21.00 | 39.92 | 26.51 | 21.42 | 36.64 | 28.25 | 11.19 | 32.99 | 20.96 | 8.42 | 32.38 | 14.79 | 5.85 | 32.24 |
Im Paskogammon zeigt sich die Backgame-Arbeit in ganzen Partien: Aus seiner verstreuten Ausgangsstellung gespielt, bringt es weit mehr Backgames und Containment-Spiele hervor als Standard-Backgammon, und so ist es der eine Benchmark über ganze Partien, auf dem diese Netze oft genug greifen, um die Gesamt-PR zu bewegen. Es ist zugleich der eine, auf dem XG auf jeder Stufe gelaufen ist, die es bietet, von 2 Ply bis Roller++ — die Partien werden als native
.xg Archive, die die nicht standardmäßige Startposition ausdrücklich enthalten, und je Stufe einmal stapelweise analysiert. Die Tabelle bewertet Stage 9, Stage 11 und XG gegen dieselbe Rollout-Referenz über die 2.556 Entscheidungen des Benchmarks, gruppiert nach vergleichbarer Stufe; der beste jeder Gruppe ist hervorgehoben.
| Engine | PR | Zug | Cube | Reines Rennen | Rennen | Angriff | Prime | Anker |
|---|---|---|---|---|---|---|---|---|
| Stage 9 3T | 1.47 | 1.36 | 2.21 | 0.08 | 1.46 | 1.11 | 0.80 | 2.45 |
| Stage 11 3T | 0.88 | 0.85 | 1.07 | 0.08 | 0.59 | 0.96 | 0.44 | 1.71 |
| XG Roller++ | 1.92 | 1.99 | 1.37 | 0.01 | 1.36 | 2.35 | 1.10 | 3.39 |
| Stage 9 2T | 2.21 | 2.27 | 1.80 | 0.03 | 2.21 | 2.25 | 0.90 | 3.54 |
| Stage 11 2T | 1.46 | 1.51 | 1.08 | 0.03 | 1.36 | 1.79 | 0.51 | 2.35 |
| XG Roller+ | 2.44 | 2.59 | 1.45 | 0.02 | 1.97 | 2.48 | 1.54 | 4.19 |
| Stage 9 1T | 2.67 | 2.60 | 3.16 | 0.08 | 2.55 | 1.74 | 2.17 | 4.24 |
| Stage 11 1T | 1.65 | 1.64 | 1.76 | 0.08 | 1.14 | 1.37 | 1.02 | 3.31 |
| XG Roller | 2.63 | 2.69 | 2.23 | 0.05 | 2.36 | 2.86 | 1.54 | 4.15 |
| Stage 9 4P | 2.68 | 2.75 | 2.20 | 0.14 | 2.51 | 2.46 | 1.52 | 4.37 |
| Stage 11 4P | 1.90 | 1.92 | 1.72 | 0.14 | 1.64 | 2.43 | 1.04 | 2.88 |
| XG 4-Ply | 2.62 | 2.66 | 2.32 | 0.05 | 2.22 | 2.76 | 1.58 | 4.32 |
| Stage 9 3P | 3.46 | 3.53 | 2.98 | 0.03 | 3.50 | 3.62 | 2.20 | 4.84 |
| Stage 11 3P | 2.28 | 2.35 | 1.78 | 0.03 | 1.64 | 3.69 | 1.21 | 3.53 |
| XG 3-Ply | 2.97 | 2.96 | 3.04 | 0.05 | 2.55 | 3.21 | 1.77 | 4.81 |
| Stage 9 2P | 5.42 | 5.39 | 5.57 | 0.16 | 5.02 | 5.19 | 4.11 | 8.02 |
| Stage 11 2P | 4.57 | 4.37 | 5.93 | 0.16 | 3.97 | 5.16 | 3.95 | 6.30 |
| XG 2-Ply | 4.38 | 4.50 | 3.58 | 0.23 | 3.52 | 5.83 | 2.98 | 6.50 |
| Stage 9 1P | 7.74 | 7.67 | 8.21 | 0.26 | 6.94 | 8.51 | 6.56 | 10.61 |
| Stage 11 1P | 6.14 | 5.93 | 7.58 | 0.26 | 5.18 | 8.55 | 4.70 | 8.18 |
Die Engine, die Benchmarks, die Ausgangsstellungen, die Referenzen und jedes Trainingsskript liegen im quelloffenen Repository bgsage (MPL-2.0). Die Backgame-Benchmarks liegen unter
backgame_ref_positions/benchmark/ — eine Datei starting.txt mit Ausgangsstellungen, eine Datei
benchmark.txt mit Entscheidungen und eine Referenz rollout.jsonl je Ordner — und werden erzeugt von scripts/backgame_benchmark.py, die Ausgangsstellungen der drei Familien stammen von scripts/build_family_seeds.py, 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. Die Zuordnungsregeln stehen in cpp/src/neural_net.cpp
mit Python-Referenzimplementierungen in scripts/containment_rule.py und
scripts/snake_rule.py, und das Modell selbst ist der Eintrag stage11s der Gewichtsregistry. Die Skripte für die Trainingsdaten sind in der Tabelle oben nach ihrer Quelle benannt; die Rollouts, die sie benötigen, werden von Orchestratoren verteilt, die nicht Teil des öffentlichen Repositorys sind, aber jede Stellungsdatei und jeder ausgerollte Zielwert ist es.
| Cubeless | Gewinn | Gammon | Backgammon |
|---|---|---|---|
| Spieler | |||
| Gegner |
| Cube-Aktion | Equity |
|---|---|
| Kein Doppel | |
| Doppel / Annehmen | |
| Doppel / Aufgeben |