Studio sul motore · Prestazioni del bot

Open Sage alla prova contro eXtreme Gammon

Un confronto quantitativo tra il motore di valutazione Open Sage — il motore di Backgammon Sage Pro — e il motore del bot di eXtreme Gammon (XG).

Sintesi

Confrontiamo il motore del bot Open Sage con eXtreme Gammon (XG) a livelli di valutazione equivalenti — valutazione diretta della rete neurale, ricerca multi-ply e rollout troncati. Poiché XG non espone alcuna interfaccia programmatica, lo valutiamo attraverso la sua funzione Batch Analysis. Usiamo tre metodi complementari. Il primo costruisce un insieme stratificato di valutazioni di riferimento — fidandosi delle valutazioni rapide dove la scelta è chiara e passando ai rollout completi per le decisioni più serrate — e assegna a ciascun motore un Performance Rating (PR) rispetto a quel riferimento, sia su 500 partite illimitate (17,535 decisioni) sia su 130 match a cinque punti (18,292 decisioni). Per le partite illimitate ricostruiamo poi l’intero confronto usando come riferimento l’analisi stratificata di XG stesso — lo specchio esatto — e il rollout troncato di Sage resta in vantaggio anche quando è giudicato con i numeri di XG. Il secondo metodo isola le posizioni illimitate su cui Sage 3T e XG Roller++ sono davvero in disaccordo e giudica ciascuna con i rollout completi di entrambi i motori. Con entrambi i metodi i due motori risultano vicini, con Sage leggermente avanti ai livelli equivalenti di rollout troncato su cui si affida la maggior parte degli utenti. Il terzo metodo capovolge la domanda: su 290 match di torneo reali già analizzati in XG, rianalizziamo ciascuno in Sage e confrontiamo il Performance Rating che i due motori assegnano a ogni giocatore — e troviamo una differenza media statisticamente indistinguibile da zero.

01
Introduzione

Perché misurarsi con XG?

eXtreme Gammon (XG) è un riferimento standard per l’analisi computerizzata del backgammon, e il suo motore di valutazione è generalmente considerato uno dei più forti disponibili. Qualsiasi nuovo motore che voglia essere preso sul serio deve rispondere a una domanda semplice: come si colloca rispetto a XG? Questo studio si propone di rispondere in modo quantitativo per Open Sage, il motore a rete neurale dietro Backgammon Sage Pro.

Il nostro obiettivo era confrontare le valutazioni di Open Sage con quelle di XG a livelli di sforzo comparabili. L’esperimento naturale — far giocare i due motori l’uno contro l’altro per molte migliaia di partite e contare il risultato — non è praticabile: l’app desktop di XG non espone alcuna interfaccia programmatica, quindi passare posizioni e mosse da un motore all’altro è un processo manuale, a colpi di clic. Raggiungere un campione abbastanza grande da risolvere le piccole differenze tra due motori forti richiederebbe troppo tempo.

Usiamo invece la funzione Batch Analysis di XG, che può valutare centinaia di partite trascritte in un’unica passata non presidiata. Open Sage gioca entrambi i lati di molte partite; ogni partita viene esportata in un formato di testo standard che XG può importare; XG analizza il tutto; e noi ne estraiamo i verdetti. Su questa base comune applichiamo due metodi distinti, descritti nella Sezione 3 e nella Sezione 4. Un terzo studio (Sezione 5) mette del tutto da parte le simulazioni e lavora su match di torneo reali analizzati in XG.

02
Contesto

Livelli di valutazione

Entrambi i motori possono valutare una posizione a diverse profondità, scambiando precisione con velocità. Capire questi livelli è essenziale per leggere i risultati, perché il confronto è sempre tra livelli equivalenti dei due motori.

Valutazione diretta (1-ply). L’output grezzo della rete neurale per una posizione, senza ricerca in avanti. È l’impostazione più veloce e la base su cui è costruito ogni livello più profondo. (Seguiamo la convenzione di XG, in cui 1-ply indica la valutazione grezza della rete.)

Ricerca multi-ply (2, 3, 4-ply). Il motore guarda diversi turni avanti, considerando le risposte dell’avversario e facendo la media sui possibili tiri di dadi a ogni passo, con una valutazione grezza della rete alla fine di ogni variante. Ogni ply in più è più preciso e sensibilmente più costoso.

Rollout troncati (1T, 2T, 3T). Invece di cercare fino a una profondità fissa, il motore gioca molte brevi partite simulate, le tronca dopo pochi turni e valuta la posizione risultante con una ricerca multi-ply. La riduzione della varianza elimina gran parte della fortuna nei dadi campionati. Sono le impostazioni “Roller” di XG: sono più forti della ricerca a profondità fissa e restano molto più economiche di un rollout completo.

Rollout completo. Molte partite simulate giocate fino alla fine. Eseguito con un volume sufficiente e con riduzione della varianza, un rollout completo è quanto di più vicino alla verità un motore di backgammon possa produrre, e in tutto questo studio lo usiamo come standard di riferimento.

Livelli equivalenti: Sage e XG

Famiglia Sage Equivalente XG Cosa fa
Diretta 1-ply 1-ply (valutazione grezza) Una singola valutazione della posizione da parte della rete neurale — nessuna ricerca in avanti.
Multi-ply 2P · 3P · 4P 2-ply · 3-ply · 4-ply Esplora le risposte dell’avversario per diversi turni di profondità, facendo la media sui dadi.
Rollout troncato 1T · 2T · 3T Roller · Roller+ · Roller++ Molte brevi partite simulate, troncate dopo 5–7 turni e valutate in multi-ply, con riduzione della varianza. 3T/Roller++ usano decisioni a 3-ply; 2T/Roller+ a 2-ply; 1T/Roller a 1-ply.
Rollout completo Rollout Rollout Partite simulate giocate fino alla fine — la “verità” di riferimento in questo studio.
Performance Rating (PR). In tutto lo studio la precisione di un motore è riassunta come PR — l’errore medio di equity per decisione, moltiplicato per 500, misurato rispetto al riferimento ottenuto tramite rollout. Un PR di 0 significa accordo perfetto con la verità; più basso è meglio.
03
Metodo uno

PR da rollout

Il primo metodo valuta ogni motore su un insieme fisso di decisioni di cui abbiamo stabilito la “vera” giocata migliore nel modo più accurato possibile. Segue lo stesso approccio del noto studio XG del 2012 che confrontava XG con diversi altri bot.

Abbiamo iniziato simulando 500 partite illimitate di Sage 3P contro se stesso. Un livello moderatamente forte come il 3P produce una distribuzione realistica di posizioni in ogni piano di gioco — corsa, attacco, prime, ancoraggio — che è esattamente la varietà su cui vogliamo fare il test. Abbiamo poi ripetuto l’intero studio una seconda volta su 130 match a cinque punti, dove il punteggio cambia il valore di ogni decisione; i risultati di entrambi sono riportati sotto.

Costruire la verità di riferimento

Stabilire la vera giocata migliore per ogni decisione con un rollout completo sarebbe enormemente costoso — e inutile, perché la maggior parte delle decisioni non è serrata. Costruiamo quindi il riferimento in tre passate successive, spendendo lo sforzo del rollout solo dove la scelta è davvero in dubbio. La stessa ricetta si applica a entrambi gli insiemi di dati; ogni passata risolve le decisioni che può decidere con sicurezza e passa le altre a quella successiva:

Passata 1 · Sage 3P

Fidarsi del 3-ply quando la scelta è chiara

Ogni decisione viene valutata a 3-ply. Dove la mossa migliore supera la seconda di più di 0.05 di equity, il verdetto del 3P è accettato come verità e la decisione è risolta.

0.05
scarto di equity per risolvere
Le decisioni più serrate (entro 0.05) passano alla passata 2
Passata 2 · Sage 3T

Ricontrollare le decisioni serrate con un rollout troncato

Le decisioni rimaste vengono rivalutate a 3T. Dove il margine è ora più ampio di 0.02 di equity, il verdetto del 3T è accettato come verità.

0.02
scarto di equity per risolvere
Tutto ciò che resta entro 0.02 passa alla passata 3
Passata 3 · Rollout completo

Rollout delle decisioni più difficili

Tutto ciò che resta entro 0.02 viene risolto con un rollout completo di Sage: decisioni a 3P sia per il gioco delle pedine sia per le azioni del cubo, eseguito in lotti da 1,296 partite simulate finché l’intervallo di confidenza al 95% sull’equity scende sotto 0.005 — o fino a un tetto di 20,736 partite simulate (16 × 1,296). Le posizioni di back game più lente hanno richiesto ben oltre un’ora ciascuna.

0.005
banda al 95% obiettivo

Il risultato è un riferimento stratificato in cui ogni decisione è risolta esattamente alla profondità che la sua difficoltà richiede. Abbiamo eseguito questa stessa ricetta in tre passate su entrambi gli insiemi di dati — le 500 partite illimitate e i 130 match a cinque punti — e la composizione dei livelli risultante è mostrata accanto ai risultati di ciascun insieme qui sotto.

Valutare un motore

Con in mano un insieme stratificato di valutazioni affidabili, valutare un motore qualsiasi è semplice: gli presentiamo ogni decisione del benchmark, registriamo l’errore di equity della mossa o dell’azione del cubo che sceglie rispetto alla verità, e riportiamo l’errore medio × 500 come PR. Lo stesso totale è suddiviso in PR del gioco delle pedine e PR del cubo, e ulteriormente per piano di gioco.

Valutare XG ha richiesto il passaggio in più descritto nell’introduzione. Poiché XG non ha API, abbiamo eseguito la sua Batch Analysis sulle trascrizioni delle 500 partite illimitate e dei 130 match con un livello personalizzato — decisioni a 3-ply, con passaggio al livello in esame ovunque ci fosse disaccordo — e abbiamo estratto la decisione preferita da XG per ogni posizione dai file .xg che produce, valutandole rispetto alle stesse equity di riferimento.

Partite illimitate — composizione della verità di riferimento

Sulle 500 partite illimitate, le tre passate hanno risolto 16,889 posizioni (17,535 decisioni) come segue:

Risolte a 3P  7,652 Risolte a 3T  3,260 Con rollout  5,977 Partite illimitate  16,889 posizioni · 17,535 decisioni

Partite illimitate — confronto diretto

I cinque livelli equivalenti, valutati su quelle 17,535 decisioni. Un PR più basso è meglio; il motore più forte di ogni coppia è evidenziato.

Sage 3T
Rollout troncato · decisioni a 3-ply · troncamento a 7 turni
0.21
vs
0.32
XG Roller++
Rollout troncato · decisioni a 3-ply · troncamento a 7 turni
Sage 3T avanti di 0.11 PR
Sage 2T
Rollout troncato · decisioni a 2-ply
0.26
vs
0.41
XG Roller+
Rollout troncato · decisioni a 2-ply
Sage 2T avanti di 0.15 PR
Sage 1T
Rollout troncato · decisioni a 1-ply · troncamento a 5 turni · 72 partite simulate
0.50
vs
0.53
XG Roller
Rollout troncato · decisioni a 1-ply · troncamento a 5 turni · 42 partite simulate
Sage 1T avanti di 0.03 PR
Sage 4P
Ricerca a 4-ply
0.41
vs
0.46
XG 4-ply
Ricerca a 4-ply
Sage 4P avanti di 0.05 PR
Sage 3P
Ricerca a 3-ply
0.58
vs
0.57
XG 3-ply
Ricerca a 3-ply
Sostanzialmente pari — XG 3-ply avanti di 0.01 PR

Partite illimitate — dettaglio completo

PR di ogni motore e livello testato, suddiviso per tipo di decisione e piano di gioco. Più basso è meglio.

Motore PR Pedine Cubo Corsa pura Corsa Attacco Prime Ancoraggio
Sage 3T 0.210.180.360.020.240.170.310.28
XG Roller++ 0.320.310.380.040.400.240.410.44
Sage 2T 0.260.230.440.020.320.210.390.30
XG Roller+ 0.410.410.390.050.590.310.470.54
Sage 1T 0.500.520.400.040.570.430.590.73
XG Roller 0.530.540.480.050.630.440.710.66
Sage 4P 0.410.390.500.070.510.370.450.53
XG 4-ply 0.460.450.520.060.580.400.570.58
Sage 3P 0.580.580.570.140.720.520.630.74
XG 3-ply 0.570.570.580.050.710.480.730.71
Sage 2P 1.641.392.880.401.771.831.861.71
Sage 1P 2.592.483.200.782.602.793.102.89
Open Sage eXtreme Gammon Sage 2P e 1P non hanno un equivalente XG in questa prova e sono riportati a titolo di riferimento.
Le valutazioni di Sage sono più forti della valutazione XG equivalente a ogni livello corrispondente tranne il 3-ply, dove XG è avanti di 0.01 PR — una differenza ben dentro il rumore. I due motori sono molto vicini, e ai livelli di rollout troncato su cui si affida la maggior parte degli utenti Sage mantiene un vantaggio costante.

Partite illimitate — valutate rispetto al riferimento di XG

Tutti i numeri qui sopra valutano i motori rispetto al riferimento stratificato di Sage. L’obiezione ovvia è il vantaggio di giocare in casa — Sage viene misurato contro i propri rollout. Abbiamo quindi costruito lo specchio esatto: le stesse 500 partite e le stesse decisioni, ma con l’analisi di XG stesso come verità a ogni livello. XG 3-ply risolve le decisioni del livello 3P, XG Roller++ quelle del livello 3T e il rollout completo di XG quelle sottoposte a rollout — l’analogo livello per livello, in XG, del riferimento Sage. Ogni motore viene poi rivalutato rispetto a quello.

Motore PR Pedine Cubo Corsa pura Corsa Attacco Prime Ancoraggio
Sage 3T 0.260.250.330.020.370.200.300.36
XG Roller++ 0.330.350.230.040.500.200.390.47
Sage 2T 0.310.300.350.020.410.270.360.37
XG Roller+ 0.380.400.230.040.580.260.390.54
Sage 1T 0.460.480.370.030.580.400.500.64
XG Roller 0.470.490.350.120.610.350.540.62
Sage 4P 0.370.360.420.060.530.340.400.39
XG 4-ply 0.450.460.400.130.600.360.480.59
Sage 3P 0.490.480.520.080.660.460.540.55
XG 3-ply 0.470.490.400.120.630.370.540.61
Sage 2P 1.351.142.400.311.501.481.521.41
Sage 1P 2.242.142.760.742.212.442.692.39
Open Sage eXtreme Gammon Riferimento: XG 3-ply (livello 3P) · XG Roller++ (livello 3T) · rollout completo di XG (livello rollout).
Il verdetto sopravvive al cambio di verità. Misurato rispetto all’analisi di XG stesso, Sage resta il motore più vicino ai livelli di rollout troncato — 3T 0.26 vs Roller++ 0.33, e 2T 0.31 vs Roller+ 0.38 — e a 4-ply. Anzi, il 4-ply è il test più pulito di tutti: è l’unico livello da cui non è costruito il riferimento di nessuno dei due motori, quindi nessuna riga viene valutata contro se stessa, e Sage è avanti 0.37 a 0.45. Altrove il confronto favorisce XG più che Sage — XG Roller++ è il riferimento del livello 3T e XG 3-ply quello del livello 3P, quindi quelle righe ottengono un punteggio quasi nullo proprio dove definiscono la verità. Il vantaggio di Sage qui è, semmai, sottostimato. L’unica colonna in cui il riferimento di XG favorisce XG è il cubo.
Due riferimenti, una conclusione. Qualunque sia il motore la cui analisi viene presa come verità, Sage 3T finisce avanti a XG Roller++ — 0.21 vs 0.32 con il riferimento di Sage, 0.26 vs 0.33 con quello di XG — e i livelli di rollout troncato mantengono il loro vantaggio. L’unico vero dubbio sulla prima tabella — che il metro fossero i rollout di Sage stesso — è esattamente ciò che questo specchio elimina.

Gioco a match — composizione della verità di riferimento

L’insieme dei match esegue le stesse tre passate, con un’aggiunta: il punteggio away di ciascun giocatore e il flag Crawford vengono propagati in ogni valutazione, così la verità è calcolata nello spazio delle match equity (MWC) rispetto al punteggio corretto. Sui 130 match a cinque punti, le passate hanno risolto 17,892 posizioni (18,292 decisioni) come segue:

Risolte a 3P  7,522 Risolte a 3T  3,460 Con rollout  6,910 Gioco a match  17,892 posizioni · 18,292 decisioni

Gioco a match — confronto diretto

I cinque livelli equivalenti, valutati su quelle 18,292 decisioni. Un PR più basso è meglio; il motore più forte di ogni coppia è evidenziato.

Sage 3T
Rollout troncato · decisioni a 3-ply · troncamento a 7 turni
0.19
vs
0.35
XG Roller++
Rollout troncato · decisioni a 3-ply · troncamento a 7 turni
Sage 3T avanti di 0.16 PR
Sage 2T
Rollout troncato · decisioni a 2-ply
0.26
vs
0.44
XG Roller+
Rollout troncato · decisioni a 2-ply
Sage 2T avanti di 0.18 PR
Sage 1T
Rollout troncato · decisioni a 1-ply · troncamento a 5 turni · 72 partite simulate
0.49
vs
0.51
XG Roller
Rollout troncato · decisioni a 1-ply · troncamento a 5 turni · 42 partite simulate
Sage 1T avanti di 0.02 PR
Sage 4P
Ricerca a 4-ply
0.42
vs
0.46
XG 4-ply
Ricerca a 4-ply
Sage 4P avanti di 0.04 PR
Sage 3P
Ricerca a 3-ply
0.57
vs
0.54
XG 3-ply
Ricerca a 3-ply
Sostanzialmente pari — XG 3-ply avanti di 0.03 PR

Gioco a match — dettaglio completo

PR di ogni motore e livello testato sull’insieme dei match a 5 punti, suddiviso per tipo di decisione e piano di gioco. Più basso è meglio.

Motore PR Pedine Cubo Corsa pura Corsa Attacco Prime Ancoraggio
Sage 3T 0.190.160.400.010.170.180.250.26
XG Roller++ 0.350.350.410.080.440.320.330.45
Sage 2T 0.260.240.440.020.360.180.340.33
XG Roller+ 0.440.440.410.090.550.440.400.52
Sage 1T 0.490.490.520.050.570.440.570.63
XG Roller 0.510.510.540.090.640.500.510.62
Sage 4P 0.420.420.480.050.520.380.450.55
XG 4-ply 0.460.450.560.090.600.440.420.56
Sage 3P 0.570.560.670.050.740.560.580.68
XG 3-ply 0.540.530.610.090.690.530.520.65
Sage 2P 1.301.261.600.391.591.231.501.41
Sage 1P 2.302.292.310.692.482.432.472.56
Open Sage eXtreme Gammon Sage 2P e 1P non hanno un equivalente XG in questa prova e sono riportati a titolo di riferimento.
I risultati sui match rispecchiano lo studio sulle partite illimitate: Sage è più forte della valutazione XG equivalente a ogni livello corrispondente tranne il 3-ply, dove XG è avanti di 0.03 PR — ben dentro il rumore. Il vantaggio più netto di Sage è di nuovo ai livelli di rollout troncato (3T e 2T) su cui si affida la maggior parte degli utenti.
04
Metodo due

Posizioni contese

Il metodo del PR da rollout valuta entrambi i motori rispetto a un riferimento comune. Una domanda più netta e più diretta è questa: nel gioco reale, dove i due motori sono davvero in disaccordo sulla mossa migliore — e quando lo sono, chi ha ragione?

Rispondiamo sulle decisioni illimitate più difficili del Metodo uno — le posizioni sottoposte a rollout, ognuna delle quali ora porta con sé entrambi i rollout completi, quello di Sage e quello di XG. Tra queste individuiamo ogni decisione in cui Sage 3T e XG Roller++ hanno scelto diversamente, e chiediamo quale scelta preferisse ciascun rollout. Avere entrambi i rollout è il punto essenziale: ogni disaccordo è giudicato con il rollout di Sage e con quello di XG, così la risposta non dipende mai dal fidarsi della verità di un solo motore.

  • Partire dal benchmark illimitato sottoposto a rollout — le decisioni più difficili, ognuna risolta con un rollout completo di Sage.
  • Far produrre a XG il proprio rollout completo delle stesse posizioni (il suo Batch Rollout) — una seconda verità di riferimento indipendente.
  • Tenere le decisioni in cui Sage 3T e XG Roller++ sono in disaccordo, e valutare la scelta di ciascun motore rispetto alla mossa o all’azione del cubo migliore secondo ciascun rollout.
  • Riportare i risultati sull’insieme comune — i disaccordi in cui le scelte di entrambi i motori sono state sottoposte a entrambi i rollout — così che i due confronti coprano esattamente le stesse posizioni.

Risultati

Sulle posizioni illimitate sottoposte a rollout — le decisioni più difficili dello studio — i due motori sono in disaccordo su 1,488 mosse e 69 decisioni sul cubo. Ogni pannello mostra quanto spesso ciascun motore ha indovinato la decisione migliore secondo il rollout — valutata rispetto al rollout di XG e a quello di Sage, a turno.

Gioco delle pedine

Dove Sage 3T e XG Roller++ hanno scelto mosse diverse
5,687
decisioni di pedine con rollout
1,488
disaccordi
1,357
valutati (insieme comune)
Mossa migliore indovinata — secondo il rollout di XG
Errore medio di equity — Sage 3T 0.0027 · XG Roller++ 0.0048  (PR 1.34 vs 2.39)
Mossa migliore indovinata — secondo il rollout di Sage
Errore medio di equity — Sage 3T 0.0019 · XG Roller++ 0.0059  (PR 0.97 vs 2.95)
Sage 3T XG Roller++ Nessuno dei due

Decisioni sul cubo

Dove Sage 3T e XG Roller++ hanno scelto azioni del cubo diverse
282
decisioni sul cubo con rollout
69
disaccordi
Azione migliore indovinata — secondo il rollout di XG
Errore medio di equity — Sage 3T 0.0079 · XG Roller++ 0.0086  (PR 3.96 vs 4.30)
Azione migliore indovinata — secondo il rollout di Sage
Errore medio di equity — Sage 3T 0.0041 · XG Roller++ 0.0118  (PR 2.06 vs 5.88)
Sage 3T XG Roller++
Solo 69 disaccordi sul cubo in tutto — un campione piccolo, quindi questo pannello va letto come indicativo più che come decisivo.
Sul gioco delle pedine — la grande maggioranza dei disaccordi — Sage 3T è il motore più vicino a entrambi i rollout, compreso quello di XG: ha indovinato la mossa migliore secondo il rollout più spesso (44.4% contro 39.3% con il rollout di XG, 56.2% contro 27.7% con quello di Sage) e ha commesso circa la metà dell’errore medio. I disaccordi sul cubo sono molto più rari e più equilibrati — Sage 3T è nettamente più vicino al rollout di Sage, e leggermente più vicino anche rispetto al rollout di XG.
Perché contano due rollout. Un risultato con un solo riferimento invita sempre alla domanda “la verità di chi?”. Qui i due rollout provengono da motori indipendenti, e sui disaccordi sulle mosse puntano nella stessa direzione — Sage 3T è più vicino perfino al rollout di XG. Nessuno dei due rollout è una verità di riferimento perfetta, ma il loro accordo è esattamente ciò che un riferimento da solo non può mostrare.
05
Metodo tre

Accordo sui match reali

I primi due metodi chiedono quale motore sia più forte. Una terza domanda è altrettanto importante per chiunque usi un motore per studiare il proprio gioco: se analizzi un match reale in XG, annoti il tuo Performance Rating, e poi analizzi lo stesso identico match in Sage — quanto sono vicini i due rating? Un giocatore che ha passato anni a costruirsi un’intuizione di cosa significhi un certo PR in XG dovrebbe ottenere sostanzialmente lo stesso numero da Sage.

Per verificarlo direttamente, abbiamo preso un’ampia raccolta di match di torneo reali già analizzati in XG, li abbiamo rianalizzati tutti da zero in Sage e abbiamo confrontato il Performance Rating che ciascun motore ha assegnato a ciascun giocatore.

I match

I file dei match provengono da tre tornei del 2026, tutti match a 7 punti, gentilmente forniti da Máté Fehér — già analizzati in eXtreme Gammon, esattamente come un giocatore agonista studierebbe le proprie partite.

UBC Texas 2026
100
match analizzati
UBC Istanbul 2026
146
match analizzati
UBC Japan 2026
44
match analizzati

290 match e 580 rating individuali in tutto. Un ulteriore match è stato scartato perché la trascrizione era corrotta.

Impostazioni di valutazione equivalenti

Ogni match è stato rianalizzato in Sage con una base a 3-ply e una passata esperta a 3T — un rollout troncato da 360 partite simulate — applicata alle decisioni in cui la mossa effettiva del giocatore differiva dalla migliore a 3-ply. Questo rispecchia un’analisi XG forte (un ply di base per le decisioni chiare, con passaggio a un rollout troncato per quelle serrate), a forza equivalente: Sage 3P ≈ XG 3-ply e Sage 3T ≈ XG Roller++ (vedi Sezione 2). Ciascun motore calcola poi un PR per giocatore dalle proprie valutazioni — il numero che un utente vede in ciascuna app.

Risultati

Mettendo insieme tutti i 580 rating, i due motori concordano quasi esattamente. La differenza media è statisticamente indistinguibile da zero, e la dispersione di quella differenza è piccola rispetto alla dispersione del PR stesso.

+0.002
Differenza media (PR)
Statisticamente indistinguibile da zero — intervallo di confidenza al 95% ±0.03, p = 0.90.
0.37
Dev. std. della differenza
Piccola rispetto alla dispersione di 2.08 del PR stesso — il disaccordo su un singolo rating è minimo in confronto a quanto varia il PR.
0.98
Correlazione tra i rating (r)
Sage e XG valutano gli stessi giocatori in modo quasi identico.
Performance Rating per giocatore XG Sage DifferenzaSage − XG
Media 4.36 4.36 +0.002
Deviazione standard 2.08 2.10 0.37
Intervallo al 95% 1.52 – 9.36 1.44 – 9.67 −0.76 – +0.74
In termini pratici, un giocatore che analizza un match in Sage vedrà — nella grande maggioranza dei casi — sostanzialmente lo stesso Performance Rating che gli darebbe XG. Come misura di quanto bene è stato giocato un match, i due motori sono intercambiabili.
06
Conclusione

Due motori forti, molto vicini

Nei due studi sulla forza, Open Sage 3T e XG Roller++ risultano grosso modo comparabili — due delle valutazioni di backgammon più forti disponibili, e vicine tra loro. Lo studio del PR da rollout — eseguito sia per il gioco illimitato sia per i match a 5 punti — trova Sage più forte a ogni livello equivalente tranne il 3-ply, dove i due motori sono dentro il rumore l’uno dell’altro; e sulle partite illimitate il risultato regge anche quando il riferimento passa all’analisi stratificata di XG stesso. Lo studio sulle posizioni contese, che guarda alle posizioni in cui i due motori sono in disaccordo al livello di valutazione più forte (Sage 3T e XG Roller++) e le valuta con i rollout di entrambi i motori, trova Sage 3T il motore più vicino sui disaccordi di pedine rispetto a entrambi i rollout, mentre i disaccordi sul cubo sono troppo rari e troppo divisi per trarne un verdetto.

C’è dunque qualche evidenza che Sage 3T sia leggermente più forte di XG Roller++. L’obiezione più naturale — che il vantaggio sia un artefatto del valutare Sage contro i propri rollout — trova risposta là dove possiamo verificarla: valutati rispetto al riferimento di XG stesso, i livelli troncati di Sage restano avanti. Le differenze sono comunque piccole, e la sintesi onesta è che i due motori giocano a un livello molto simile e molto alto — che è esattamente l’asticella che ci eravamo posti.

E il terzo studio risponde alla domanda che un utente di Sage si pone davvero: su 290 match di torneo reali già valutati da XG, Sage produce sostanzialmente lo stesso Performance Rating — la differenza media tra il rating Sage e il rating XG di un giocatore è statisticamente indistinguibile da zero, e la dispersione di quella differenza è piccola rispetto alla dispersione del PR stesso. Che il test sia la forza rispetto a una verità ottenuta tramite rollout o il semplice accordo su come è stata giocata una partita reale, Open Sage e XG arrivano allo stesso punto.

Prova Backgammon Sage Pro Torna alla home
A
Appendice

Riprodurre questi risultati

Open Sage è rilasciato come open source, e l’intera pipeline dietro entrambi i metodi è inclusa nel repository del motore. Tutto ciò che segue gira con il solo pacchetto bgsage e una build locale del suo motore — non servono servizi esterni, dataset o infrastruttura. L’unica dipendenza manuale è eXtreme Gammon stesso, usato per rigenerare le colonne XG, dato che XG non ha un’interfaccia programmatica.

github.com/markbgsage/bgsage Motore Open Sage · MPL-2.0 · esegui tutti gli script dalla radice del repository
Prerequisiti. Compila il motore bgsage (l’estensione bgbot_cpp ) seguendo le istruzioni del repository per la tua piattaforma. Per riprodurre una qualsiasi colonna XG serve inoltre eXtreme Gammon (Windows) per il passaggio di Batch Analysis. Ogni script risolve i propri percorsi all’interno del repository, quindi eseguili dalla cartella bgsage/ , la radice del repository.

Riprodurlo con Claude Code

Non sei obbligato a guidare la pipeline a mano. Claude Code — lo strumento agentico di programmazione da riga di comando di Anthropic — può compilare il motore ed eseguire i benchmark per te. Puntalo su un checkout del repository e descrivi cosa vuoi; esegue gli stessi passaggi descritti qui sotto:

“Compila questo motore, poi valuta Sage 3T e Sage 3P rispetto al benchmark incluso e mostrami PR, PR delle pedine e PR del cubo di ciascuno.”
“Riproduci la tabella del PR da rollout: valuta ogni livello Sage — da 1-ply a 4-ply, più 1T, 2T e 3T — rispetto a data/money_benchmark/benchmark.json.gz e stampala come una tabella che io possa confrontare con lo studio.”
“Ricostruisci da zero il benchmark di riferimento con le tre passate di build, poi valuta Sage 3T rispetto a quello.”
“Ho un mio bot in ./mybot — per ogni decisione del benchmark incluso, valutala con il mio bot e calcola il suo PR rispetto alle equity di riferimento.”

Metodo uno — PR da rollout

Il benchmark — l’insieme stratificato di valutazioni affidabili — viene costruito e valutato da un unico script, scripts/benchmark_money.py. Ci sono due modi per iniziare.

A

Valutare rispetto al dataset incluso

Nessuna ricostruzione · verifica la tabella o valuta un nuovo motore

Il repository include il benchmark assemblato come data/money_benchmark/benchmark.json.gz (il JSON non compresso supera il limite di dimensione dei file di GitHub; gli script leggono il gzip in modo trasparente). Valutare un qualsiasi livello Sage riproduce la sua riga nella tabella della Sezione 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

Per valutare un motore completamente diverso, applica la stessa regola che lo script usa internamente: per ogni decisione del dataset, prendi la scelta del tuo motore e confronta la sua equity con l’equity di riferimento (“rollout”) memorizzata — l’errore medio × 500 è il suo PR.

B

Ricostruire da zero la verità di riferimento

Rideriva ogni decisione · con seme fisso, quindi riproducibile

Tre passate adattive ricreano il dataset. Le partite hanno un seme fisso (500 partite dal seme 1), quindi le decisioni e le equity di riferimento risultano identiche:

# 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

La passata 3 scrive data/money_benchmark/benchmark.json (e il relativo .gz); valutalo esattamente come nell’opzione A. Omettendo --stages vengono eseguite tutte e tre le passate in ordine.

Riprodurre le colonne XG

XG non ha API, quindi i suoi risultati provengono dalla Batch Analysis di XG. La passata 1 scrive le trascrizioni importabili in XG in data/money_benchmark/xg/ — non sono incluse nel repository, quindi rigenerale con la passata 1 se sei partito dal solo dataset.

  1. In XG, esegui la Batch Analysis sulla cartella xg/ con un livello personalizzato — decisioni a 3-ply, con passaggio al livello in esame in caso di disaccordo — e con Save Games after analyze attivato. XG scrive un file .xg per partita.
  2. Esegui python scripts/benchmark_pr_xg.py, che legge la decisione preferita da XG per ogni posizione dai file .xg e la valuta rispetto alle stesse equity di riferimento, stampando la stessa suddivisione del PR.

La tabella illimitata con riferimento XG della Sezione 3 — e lo studio sulle posizioni contese — richiedono invece i rollout di XG delle posizioni più difficili. Esegui il Batch Rollout di XG su quelle posizioni (con Save Games attivato); poi python scripts/xg_benchmark_report.py li analizza e stampa sia la tabella dei livelli con riferimento XG sia il report sulle posizioni contese. Vedi Metodo due più sotto.

Gioco a match

Lo studio sui match a 5 punti si riproduce allo stesso modo con scripts/benchmark_match.py, il gemello per il gioco a match di benchmark_money.py — la lunghezza del match e il numero di match sono argomenti, e il punteggio del match viene propagato in ogni valutazione. La sua verità di riferimento è inclusa come 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/, then
python scripts/benchmark_pr_xg_match.py --match-length 5

Metodo due — Posizioni contese

Lo studio sui disaccordi attinge allo stesso benchmark illimitato costruito per il Metodo uno, incrociato con il rollout completo di XG delle posizioni più difficili. L’unica dipendenza manuale è il Batch Rollout di XG; un singolo script fa il resto.

Partite illimitate

  1. Costruisci il benchmark illimitato (Metodo uno, opzione B). La passata 1 scrive anche le trascrizioni importabili in XG in data/money_benchmark/xg/.
  2. In XG, esegui il Batch Rollout su quelle posizioni con Save Games after analyze attivato, così ogni decisione sottoposta a rollout porta con sé le equity del rollout di XG nei file .xg corrispondenti.
  3. Raccogli e genera il report:
python scripts/xg_benchmark_report.py

Converte i rollout di XG in data/money_benchmark/xg_results/rollout.jsonl, poi stampa sia il PR per livello di valutazione rispetto al rollout di XG (il secondo riferimento della Sezione 3) sia il report sulle posizioni contese — ogni disaccordo valutato rispetto al rollout di Sage e a quello di XG, a turno.

Il gioco a match non è ancora coperto da questo metodo: richiede un rollout completo di XG delle posizioni dei match, che non abbiamo eseguito. La forza nel gioco a match è coperta invece dallo studio del PR da rollout (Sezione 3) e dallo studio sull’accordo nei match reali (Sezione 5).

Open Sage è rilasciato con licenza MPL-2.0. Il benchmark incluso è esattamente il riferimento dietro le tabelle della Sezione 3; sia il confronto con riferimento XG sia i risultati sulle posizioni contese si rigenerano da esso una volta che il Batch Rollout di XG ha prodotto i file .xg corrispondenti.