Backgammon Sage Pro'ya güç veren Open Sage değerlendirme motorunun, eXtreme Gammon'ın bot motoru (XG) ile nicel bir karşılaştırması.
Open Sage bot motorunu eXtreme Gammon (XG) ile eşleştirilmiş değerlendirme seviyelerinde — doğrudan sinir ağı değerlendirmesi, çok-ply ileri bakış ve kısaltılmış rollout'lar — karşılaştırıyoruz. XG programatik bir arayüz sunmadığından onu Toplu Analiz (Batch Analysis) özelliği üzerinden puanlıyoruz. Birbirini tamamlayan üç yöntem kullanıyoruz. İlki, katmanlı bir referans değerlendirme kümesi kurar — seçimin açık olduğu yerlerde hızlı değerlendirmelere güvenir, yakın kararları tam rollout'a yükseltir — ve her motoru bu referansa göre bir performans derecesi (PR) olarak puanlar; bunu hem 500 sınırsız oyun (17.535 karar) hem de 130 beş puanlık maç (18.292 karar) üzerinde yapar. Sınırsız oyunlar için aynı karşılaştırmanın tamamını bu kez XG'nin kendi kademeli analizini referans alarak yeniden kuruyoruz — tam bir ayna görüntüsü — ve Sage'in kısaltılmış rollout'u, XG'nin kendi sayılarıyla yargılandığında bile önde kalıyor. İkinci yöntem, Sage 3T ile XG Roller++'ın gerçekten farklı düşündüğü sınırsız oyun pozisyonlarını ayırır ve her birini iki motorun da tam rollout'larına göre karara bağlar. Her iki yöntemde de iki motor birbirine yakındır; çoğu kullanıcının güvendiği eşleştirilmiş kısaltılmış rollout seviyelerinde Sage biraz öndedir. Üçüncü yöntem soruyu tersine çevirir: XG'de zaten analiz edilmiş 290 gerçek turnuva maçının her birini Sage'de yeniden analiz ediyor ve iki motorun her oyuncuya verdiği performans derecesini karşılaştırıyoruz — ortalama fark istatistiksel olarak sıfırdan ayırt edilemez çıkıyor.
eXtreme Gammon (XG), bilgisayarla tavla analizinde standart bir referanstır ve değerlendirme motoru mevcut en güçlü motorlardan biri olarak kabul edilir. Ciddiye alınmak isteyen her yeni motorun basit bir soruyu yanıtlaması gerekir: XG ile karşılaştırıldığında nerede duruyor? Bu çalışma, Backgammon Sage Pro'nun arkasındaki sinir ağı motoru Open Sage için bu soruyu nicel olarak yanıtlamayı amaçlıyor.
Amacımız, Open Sage'in değerlendirmelerini XG'ninkilerle benzer çaba seviyelerinde karşılaştırmaktı. En doğal deney — iki motoru binlerce oyunda karşı karşıya getirip sonucu saymak — pratik değil: XG masaüstü uygulaması programatik bir arayüz sunmuyor, bu yüzden pozisyonları ve hamleleri iki motor arasında taşımak elle, tıklaya tıklaya yürütülen bir süreç. İki güçlü motor arasındaki küçük farkları ayırt edecek büyüklükte bir örnekleme ulaşmak çok uzun sürerdi.
Bunun yerine, yüzlerce kayda geçirilmiş oyunu tek bir gözetimsiz geçişte puanlayabilen XG'nin Toplu Analiz (Batch Analysis) özelliğini kullanıyoruz. Open Sage çok sayıda oyunda iki tarafı da oynuyor; her oyun XG'nin içe aktarabildiği standart bir metin biçiminde dışa aktarılıyor; XG hepsini analiz ediyor; biz de kararlarını geri ayrıştırıyoruz. Bu ortak temelin üzerine, Bölüm 3 ve Bölüm 4'te anlatılan iki ayrı yöntem uyguluyoruz. Üçüncü bir çalışma (Bölüm 5) simülasyonları tamamen bir kenara bırakıp XG'de analiz edilmiş gerçek turnuva maçlarından yola çıkıyor.
Her iki motor da bir pozisyonu, doğruluktan hız adına ödün vererek çeşitli derinliklerde değerlendirebilir. Sonuçları okumak için bu seviyeleri anlamak şarttır, çünkü karşılaştırma her zaman iki motorun eşleştirilmiş seviyeleri arasında yapılır.
Doğrudan değerlendirme (1-ply). Sinir ağının bir pozisyon için ürettiği ham çıktı; ileri bakış yok. En hızlı ayar budur ve daha derin her seviye bunun üzerine kurulur. (1-ply'ın ham ağ değerlendirmesini ifade ettiği XG geleneğini izliyoruz.)
Çok-ply ileri bakış (2-, 3-, 4-ply). Motor birkaç tur ilerisine bakar; rakibin yanıtlarını hesaba katar, her adımda olası zar atışları üzerinden ortalama alır ve her varyantın sonunda ham bir ağ değerlendirmesi yapar. Her ek ply daha doğru ve belirgin biçimde daha maliyetlidir.
Kısaltılmış rollout'lar (1T, 2T, 3T). Motor sabit bir derinliğe kadar aramak yerine çok sayıda kısa simüle oyun oynar, bunları birkaç tur sonra keser ve ortaya çıkan pozisyonu çok-ply ileri bakışla değerlendirir. Varyans azaltma, örneklenen zarlardaki şansın büyük kısmını dengeler. Bunlar XG'nin “Roller” ayarlarıdır; sabit derinlikli aramadan daha güçlüdür ve tam rollout'tan çok daha ucuz kalır.
Tam rollout. Çok sayıda simüle oyunun sonuna kadar oynanması. Yeterli hacimde ve varyans azaltmayla çalıştırıldığında tam rollout, bir tavla motorunun üretebileceği gerçeğe en yakın şeydir; bu çalışma boyunca referans ölçüt olarak onu kullanıyoruz.
| Tür | Sage | XG karşılığı | Ne yapar |
|---|---|---|---|
| Doğrudan | 1-ply | 1-ply (ham değerlendirme) | Pozisyonun tek bir sinir ağı değerlendirmesi — ileri bakış yok. |
| Çok-ply | 2P · 3P · 4P | 2-ply · 3-ply · 4-ply | Rakibin yanıtlarını birkaç tur derinliğinde arar, zarlar üzerinden ortalama alır. |
| Kısaltılmış rollout | 1T · 2T · 3T | Roller · Roller+ · Roller++ | Çok sayıda kısa simüle oyun; 5–7 tur sonra kesilip çok-ply ile değerlendirilir, varyans azaltma uygulanır. 3T/Roller++ 3-ply kararlar kullanır; 2T/Roller+ 2-ply; 1T/Roller 1-ply. |
| Tam rollout | Rollout | Rollout | Sonuna kadar oynanan simüle oyunlar — bu çalışmadaki referans “gerçek”. |
İlk yöntem, her motoru “gerçek” en iyi oyununu olabildiğince doğru biçimde belirlediğimiz sabit bir karar kümesine göre puanlar. XG'yi bir dizi başka botla karşılaştıran, iyi bilinen 2012 XG çalışmasında kullanılan yaklaşımın aynısını izler.
Sage 3P'nin kendi kendine oynadığı 500 sınırsız oyun simüle ederek başladık. 3P gibi orta-güçlü bir seviye her oyun planında — yarış, saldırı, blok, çıpa — gerçekçi bir pozisyon dağılımı üretir; test etmek istediğimiz çeşitlilik tam da budur. Ardından tüm çalışmayı, tahtadaki skorun her kararın değerini değiştirdiği 130 beş puanlık maç için ikinci kez yürüttük; her iki kümenin sonuçları aşağıdadır.
Her karar için gerçek en iyi oyunu tam rollout ile belirlemek çok pahalı olurdu — ve gereksiz, çünkü kararların çoğu yakın değildir. Bu yüzden referansı, rollout çabasını yalnızca seçimin gerçekten şüpheli olduğu yerlere harcayarak kademeli üç geçişte kuruyoruz. Aynı reçete iki veri kümesine de uygulanır; her geçiş güvenle çözebildiği kararları karara bağlar, kalanını bir sonrakine devreder:
Her karar 3-ply'da değerlendirilir. En iyi hamlenin bir sonrakini 0,05 equity'den fazla geçtiği yerlerde 3P kararı gerçek kabul edilir ve karar kapanır.
Kalan kararlar 3T'de yeniden değerlendirilir. Farkın artık 0,02 equity'den geniş olduğu yerlerde 3T kararı gerçek kabul edilir.
Hâlâ 0,02 içinde kalan her şey tam bir Sage rollout'uyla karara bağlanır: hem pul oyunu hem küp aksiyonları için 3P kararlar; equity üzerindeki %95 güven aralığı 0,005'in altına düşene — ya da 20.736 yol (16 × 1.296) tavanına ulaşılana — kadar 1.296'lık yol partileri hâlinde çalıştırılır. En yavaş geri oyun pozisyonları tek tek bir saatten çok daha uzun sürdü.
Sonuç, her kararın tam olarak zorluğunun gerektirdiği derinlikte çözüldüğü katmanlı bir referanstır. Aynı üç geçişli reçeteyi iki veri kümesi üzerinde de yürüttük — 500 sınırsız oyun ve 130 beş puanlık maç — ve ortaya çıkan kademe bileşimleri aşağıda her kümenin sonuçlarının yanında gösteriliyor.
Elde katmanlı bir güvenilir değerlendirme kümesi olunca herhangi bir motoru puanlamak basittir: her kıyaslama kararını motora sunar, seçtiği hamlenin ya da küp aksiyonunun gerçeğe göre equity hatasını kaydeder ve ortalama hata × 500 değerini PR olarak raporlarız. Aynı toplam, pul oyunu ve küp PR'larına, ayrıca oyun planına göre ayrıştırılır.
XG'yi puanlamak, girişte anlatılan ek adımı gerektirdi. XG'nin API'si olmadığından, Toplu Analizini 500 sınırsız oyun ve 130 maç transkripti üzerinde özel bir seviyeyle — 3-ply kararlar, anlaşmazlık olan her yerde test edilen seviyeye yükseltme — çalıştırdık ve XG'nin her pozisyon için tercih ettiği kararı, ürettiği
.xg
dosyalarından ayrıştırıp aynı referans equity'lere göre puanladık.
500 sınırsız oyun boyunca üç geçiş 16.889 pozisyonu (17.535 karar) şöyle çözdü:
Beş eşleştirilmiş seviye, bu 17.535 karar üzerinden puanlandı. Düşük PR daha iyidir; her çiftte daha güçlü motor vurgulanmıştır.
Test edilen her motor ve seviye için PR; karar türüne ve oyun planına göre ayrıştırılmış. Düşük olan daha iyidir.
| Motor | PR | Pul | Küp | Saf yarış | Yarış | Saldırı | Blok | Çıpa |
|---|---|---|---|---|---|---|---|---|
| Sage 3T | 0.21 | 0.18 | 0.36 | 0.02 | 0.24 | 0.17 | 0.31 | 0.28 |
| XG Roller++ | 0.32 | 0.31 | 0.38 | 0.04 | 0.40 | 0.24 | 0.41 | 0.44 |
| Sage 2T | 0.26 | 0.23 | 0.44 | 0.02 | 0.32 | 0.21 | 0.39 | 0.30 |
| XG Roller+ | 0.41 | 0.41 | 0.39 | 0.05 | 0.59 | 0.31 | 0.47 | 0.54 |
| Sage 1T | 0.50 | 0.52 | 0.40 | 0.04 | 0.57 | 0.43 | 0.59 | 0.73 |
| XG Roller | 0.53 | 0.54 | 0.48 | 0.05 | 0.63 | 0.44 | 0.71 | 0.66 |
| Sage 4P | 0.41 | 0.39 | 0.50 | 0.07 | 0.51 | 0.37 | 0.45 | 0.53 |
| XG 4-ply | 0.46 | 0.45 | 0.52 | 0.06 | 0.58 | 0.40 | 0.57 | 0.58 |
| Sage 3P | 0.58 | 0.58 | 0.57 | 0.14 | 0.72 | 0.52 | 0.63 | 0.74 |
| XG 3-ply | 0.57 | 0.57 | 0.58 | 0.05 | 0.71 | 0.48 | 0.73 | 0.71 |
| Sage 2P | 1.64 | 1.39 | 2.88 | 0.40 | 1.77 | 1.83 | 1.86 | 1.71 |
| Sage 1P | 2.59 | 2.48 | 3.20 | 0.78 | 2.60 | 2.79 | 3.10 | 2.89 |
Yukarıdaki her sayı motorları Sage'in kademeli referansına göre notlar. Akla gelen ilk itiraz ev sahibi avantajıdır — Sage kendi rollout'larına göre ölçülüyor. Bu yüzden tam ayna görüntüsünü kurduk: aynı 500 oyun ve aynı kararlar, ama her kademede gerçek olarak XG'nin kendi analizi. 3P kademesindeki kararları XG 3-ply, 3T kademesindekileri XG Roller++, rollout yapılan kararları ise XG'nin kendi tam rollout'u karara bağlar — Sage referansının kademe kademe XG karşılığı. Ardından her motor buna göre yeniden puanlanır.
| Motor | PR | Pul | Küp | Saf yarış | Yarış | Saldırı | Blok | Çıpa |
|---|---|---|---|---|---|---|---|---|
| Sage 3T | 0.26 | 0.25 | 0.33 | 0.02 | 0.37 | 0.20 | 0.30 | 0.36 |
| XG Roller++ | 0.33 | 0.35 | 0.23 | 0.04 | 0.50 | 0.20 | 0.39 | 0.47 |
| Sage 2T | 0.31 | 0.30 | 0.35 | 0.02 | 0.41 | 0.27 | 0.36 | 0.37 |
| XG Roller+ | 0.38 | 0.40 | 0.23 | 0.04 | 0.58 | 0.26 | 0.39 | 0.54 |
| Sage 1T | 0.46 | 0.48 | 0.37 | 0.03 | 0.58 | 0.40 | 0.50 | 0.64 |
| XG Roller | 0.47 | 0.49 | 0.35 | 0.12 | 0.61 | 0.35 | 0.54 | 0.62 |
| Sage 4P | 0.37 | 0.36 | 0.42 | 0.06 | 0.53 | 0.34 | 0.40 | 0.39 |
| XG 4-ply | 0.45 | 0.46 | 0.40 | 0.13 | 0.60 | 0.36 | 0.48 | 0.59 |
| Sage 3P | 0.49 | 0.48 | 0.52 | 0.08 | 0.66 | 0.46 | 0.54 | 0.55 |
| XG 3-ply | 0.47 | 0.49 | 0.40 | 0.12 | 0.63 | 0.37 | 0.54 | 0.61 |
| Sage 2P | 1.35 | 1.14 | 2.40 | 0.31 | 1.50 | 1.48 | 1.52 | 1.41 |
| Sage 1P | 2.24 | 2.14 | 2.76 | 0.74 | 2.21 | 2.44 | 2.69 | 2.39 |
Maç kümesi aynı üç geçişi tek bir eklemeyle yürütür: her oyuncunun kala skoru ve Crawford bayrağı her değerlendirmeye işlenir, böylece gerçek, doğru skora göre maç equity'si (MWC) uzayında hesaplanır. 130 beş puanlık maç boyunca geçişler 17.892 pozisyonu (18.292 karar) şöyle çözdü:
Beş eşleştirilmiş seviye, bu 18.292 karar üzerinden puanlandı. Düşük PR daha iyidir; her çiftte daha güçlü motor vurgulanmıştır.
5 puanlık maç kümesinde test edilen her motor ve seviye için PR; karar türüne ve oyun planına göre ayrıştırılmış. Düşük olan daha iyidir.
| Motor | PR | Pul | Küp | Saf yarış | Yarış | Saldırı | Blok | Çıpa |
|---|---|---|---|---|---|---|---|---|
| Sage 3T | 0.19 | 0.16 | 0.40 | 0.01 | 0.17 | 0.18 | 0.25 | 0.26 |
| XG Roller++ | 0.35 | 0.35 | 0.41 | 0.08 | 0.44 | 0.32 | 0.33 | 0.45 |
| Sage 2T | 0.26 | 0.24 | 0.44 | 0.02 | 0.36 | 0.18 | 0.34 | 0.33 |
| XG Roller+ | 0.44 | 0.44 | 0.41 | 0.09 | 0.55 | 0.44 | 0.40 | 0.52 |
| Sage 1T | 0.49 | 0.49 | 0.52 | 0.05 | 0.57 | 0.44 | 0.57 | 0.63 |
| XG Roller | 0.51 | 0.51 | 0.54 | 0.09 | 0.64 | 0.50 | 0.51 | 0.62 |
| Sage 4P | 0.42 | 0.42 | 0.48 | 0.05 | 0.52 | 0.38 | 0.45 | 0.55 |
| XG 4-ply | 0.46 | 0.45 | 0.56 | 0.09 | 0.60 | 0.44 | 0.42 | 0.56 |
| Sage 3P | 0.57 | 0.56 | 0.67 | 0.05 | 0.74 | 0.56 | 0.58 | 0.68 |
| XG 3-ply | 0.54 | 0.53 | 0.61 | 0.09 | 0.69 | 0.53 | 0.52 | 0.65 |
| Sage 2P | 1.30 | 1.26 | 1.60 | 0.39 | 1.59 | 1.23 | 1.50 | 1.41 |
| Sage 1P | 2.30 | 2.29 | 2.31 | 0.69 | 2.48 | 2.43 | 2.47 | 2.56 |
Rollout PR yöntemi iki motoru ortak bir referansa göre puanlar. Daha keskin, daha doğrudan soru şu: gerçekçi oyunda iki motor en iyi hamle konusunda nerede gerçekten ayrışıyor — ve ayrıştıklarında hangisi haklı?
Bunu Birinci Yöntem'deki en zor sınırsız oyun kararları üzerinde yanıtlıyoruz — rollout yapılan pozisyonlar; bunların her biri artık hem tam bir Sage rollout'u hem de tam bir XG rollout'u taşıyor. Aralarında Sage 3T ile XG Roller++'ın farklı seçim yaptığı her kararı bulup her rollout'un hangi seçimi tercih ettiğini soruyoruz. İki rollout'a birden sahip olmak işin özü: her anlaşmazlık Sage'in rollout'una ve XG'nin kendi rollout'una göre yargılanır, böylece yanıt hiçbir zaman tek bir motorun gerçeğine güvenmeye dayanmaz.
Rollout yapılan sınırsız oyun pozisyonlarında — çalışmanın en zor kararları — iki motor 1.488 pul oyununda ve 69 küp kararında ayrışıyor. Her panel, her motorun rollout'un en iyi kararıyla ne sıklıkla örtüştüğünü gösteriyor — sırasıyla XG'nin kendi rollout'una ve Sage'in rollout'una göre puanlanmış.
İlk iki yöntem hangi motorun daha güçlü olduğunu sorar. Kendi oyununu incelemek için motor kullanan herkes için üçüncü bir soru da bir o kadar önemlidir: gerçek bir maçı XG'de analiz edip performans derecenizi not ettikten sonra aynı maçı Sage'de analiz ederseniz — iki derece birbirine ne kadar yakın çıkar? XG'de belirli bir PR'ın ne anlama geldiğine dair yıllarca sezgi geliştirmiş bir oyuncu, Sage'den de esasen aynı sayıyı almalıdır.
Bunu doğrudan sınamak için XG'de zaten analiz edilmiş geniş bir gerçek turnuva maçı koleksiyonu aldık, her birini Sage'de sıfırdan yeniden analiz ettik ve iki motorun her oyuncuya verdiği performans derecesini karşılaştırdık.
Maç dosyaları 2026'daki üç turnuvadan geliyor; hepsi 7 puanlık maçlar ve Máté Fehér tarafından cömertçe sağlandı — rekabetçi bir oyuncunun kendi oyunlarını inceleyeceği gibi, eXtreme Gammon'da zaten analiz edilmiş hâlde.
Toplamda 290 maç ve 580 bireysel oyuncu derecesi. Bir maç daha bozuk transkripsiyon nedeniyle dışarıda bırakıldı.
580 oyuncu derecesinin tamamı bir araya getirildiğinde iki motor neredeyse birebir uyuşuyor. Ortalama fark istatistiksel olarak sıfırdan ayırt edilemez ve bu farkın yayılımı, PR'ın kendi yayılımının yanında küçük kalıyor.
| Oyuncu başına performans derecesi | XG | Sage | FarkSage − XG |
|---|---|---|---|
| Ortalama | 4.36 | 4.36 | +0.002 |
| Standart sapma | 2.08 | 2.10 | 0.37 |
| %95 aralık | 1.52 – 9.36 | 1.44 – 9.67 | −0.76 – +0.74 |
İki güç çalışması boyunca Open Sage 3T ile XG Roller++ kabaca denk — mevcut en güçlü tavla değerlendirmelerinden ikisi ve birbirine yakın. Hem sınırsız oyun hem 5 puanlık maçlar için yürütülen Rollout PR çalışması, iki motorun gürültü sınırları içinde kaldığı 3-ply dışında her eşleştirilmiş seviyede Sage'i daha güçlü buluyor; sınırsız oyunlarda bu sonuç, referans XG'nin kendi kademeli analizine çevrildiğinde bile ayakta kalıyor. İki motorun en güçlü değerlendirme seviyesinde (Sage 3T ve XG Roller++) ayrıştığı pozisyonlara bakıp bunları iki motorun da rollout'larına göre puanlayan tartışmalı pozisyon çalışması ise pul anlaşmazlıklarında her iki rollout'a karşı da Sage 3T'yi daha yakın motor buluyor; küp anlaşmazlıkları ise hüküm vermek için fazla seyrek ve fazla bölünmüş.
Öyleyse Sage 3T'nin XG Roller++'tan biraz daha güçlü olduğuna dair bir miktar kanıt var. En doğal itiraz — üstünlüğün, Sage'i kendi rollout'larına göre notlamanın bir yapaylığı olduğu — sınayabildiğimiz yerde yanıtlanıyor: XG'nin kendi referansına göre puanlandığında Sage'in kısaltılmış seviyeleri önde kalıyor. Yine de farklar küçük ve dürüst özet şu: iki motor çok benzer, çok yüksek bir seviyede oynuyor — ki ulaşmayı hedeflediğimiz çıta tam olarak buydu.
Üçüncü çalışma ise bir Sage kullanıcısının gerçekten karşılaştığı soruyu yanıtlıyor: XG'nin zaten derecelendirdiği 290 gerçek turnuva maçında Sage esasen aynı performans derecesini üretiyor — bir oyuncunun Sage ve XG dereceleri arasındaki ortalama fark istatistiksel olarak sıfırdan ayırt edilemez ve bu farkın yayılımı PR'ın kendi yayılımının yanında küçük. İster rollout ile oluşturulmuş bir gerçeğe karşı güç, ister gerçek bir oyunun nasıl oynandığı konusunda basit bir uyum sınansın, Open Sage ile XG aynı yere varıyor.
Open Sage açık kaynak olarak yayımlanır ve iki yöntemin arkasındaki eksiksiz işlem hattı motorun deposuyla birlikte gelir. Aşağıdaki her şey yalnızca
bgsage paketine ve motorunun yerel bir derlemesine dayanır — harici hizmet, veri kümesi ya da altyapı gerekmez. Elle yürütülen tek bağımlılık, XG sütunlarını yeniden üretmek için kullanılan eXtreme Gammon'ın kendisidir, çünkü XG'nin programatik arayüzü yoktur.
bgbot_cpp uzantısını) platformunuza uygun depo yönergelerini izleyerek derleyin. Herhangi bir XG sütununu yeniden üretmek, Toplu Analiz adımı için ayrıca eXtreme Gammon (Windows) gerektirir. Her betik yollarını deponun içinde çözer; bu yüzden betikleri bgsage/ kökünden çalıştırın.
İşlem hattını elle sürmek zorunda değilsiniz. Anthropic'in komut satırında çalışan ajan tabanlı kodlama aracı Claude Code, motoru derleyip kıyaslamaları sizin için çalıştırabilir. Onu deponun bir kopyasına yöneltin ve ne istediğinizi anlatın; aşağıda ayrıntıları verilen adımların aynısını yürütür:
data/money_benchmark/benchmark.json.gz dosyasına göre puanla ve çalışmayla karşılaştırabileceğim bir tablo olarak yazdır.”./mybot dizininde — birlikte gelen kıyaslama kümesindeki her kararı botumla değerlendir ve referans equity'lere göre PR'ını hesapla.”
Kıyaslama kümesi — katmanlı güvenilir değerlendirme kümesi — tek bir betik tarafından kurulur ve puanlanır: scripts/benchmark_money.py. İki giriş yolu vardır.
Depo, derlenmiş kıyaslama kümesini
data/money_benchmark/benchmark.json.gz olarak sunar (sıkıştırılmamış JSON GitHub'ın dosya boyutu sınırını aşar; betikler gzip'i şeffaf biçimde okur). Herhangi bir Sage seviyesini puanlamak, Bölüm 3 tablosundaki satırını yeniden üretir:
# 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
Tamamen farklı bir motoru puanlamak için betiğin içeride kullandığı kuralın aynısını uygulayın: veri kümesindeki her karar için motorunuzun seçimini alın ve equity'sini kayıtlı referans (“rollout”) equity'siyle karşılaştırın — ortalama hata × 500 o motorun PR'ıdır.
Üç uyarlamalı geçiş veri kümesini yeniden oluşturur. Oyunlar tohumlanmıştır (tohum 1'den 500 oyun), dolayısıyla kararlar ve referans equity'ler aynı çıkar:
# 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
3. Geçiş şunu yazar: data/money_benchmark/benchmark.json
(ve onun .gzdosyasını); tam olarak A Seçeneği'ndeki gibi puanlayın. --stages verilmezse üç geçişin tümü sırayla çalışır.
XG'nin API'si yoktur, dolayısıyla sonuçları XG'nin Toplu Analizinden gelir. 1. Geçiş, XG'ye aktarılacak transkriptleri şuraya yazar: data/money_benchmark/xg/ — bunlar depoyla birlikte gelmez, bu yüzden yalnızca veri kümesinden başladıysanız 1. geçişle yeniden üretin.
xg/ klasörünü özel bir seviyeyle — 3-ply kararlar, anlaşmazlıklarda test edilen seviyeye yükseltme — ve Save Games after analyze işaretli olarak Toplu Analiz edin. XG oyun başına bir
.xg yazar.
python scripts/benchmark_pr_xg.py; bu betik XG'nin pozisyon başına en üst kararını .xg dosyalarından okur, aynı referans equity'lere göre puanlar ve aynı PR dökümünü yazdırır.
Bölüm 3'teki XG referanslı sınırsız oyun tablosu — ve tartışmalı pozisyon çalışması — bunun yerine XG'nin en zor pozisyonlar için yaptığı rollout'lara ihtiyaç duyar. O pozisyonlarda XG'nin Toplu Rollout'unu çalıştırın (Save Games işaretli), ardından python scripts/xg_benchmark_report.py bunları ayrıştırır ve hem XG referanslı seviye tablosunu hem de tartışmalı pozisyon raporunu yazdırır. Aşağıda İkinci Yöntem'e bakın.
5 puanlık maç çalışması aynı şekilde
scripts/benchmark_match.pyile yeniden üretilir —
benchmark_money.py betiğinin maç oyunu ikizi; maç uzunluğu ve maç sayısı argüman olarak verilir ve maç skoru her değerlendirmeye işlenir. Referansı şu dosyayla birlikte gelir: 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
Anlaşmazlık çalışması, Birinci Yöntem için kurulan aynı sınırsız oyun kıyaslama kümesinden beslenir; en zor pozisyonlar XG'nin kendi tam rollout'uyla çapraz referanslanır. Elle yürütülen tek bağımlılık XG'nin Toplu Rollout'udur; gerisini tek bir betik yapar.
data/money_benchmark/xg/.
.xg dosyaları.
python scripts/xg_benchmark_report.py
XG'nin rollout'larını
data/money_benchmark/xg_results/rollout.jsonldosyasına ayrıştırır, ardından hem XG rollout'una göre değerlendirme seviyesi PR'ını (Bölüm 3'ün ikinci referansı) hem de tartışmalı pozisyon raporunu — her anlaşmazlık sırasıyla Sage ve XG rollout'larına göre puanlanmış — yazdırır.
Maç oyunu henüz bu yöntemle kapsanmıyor: maç pozisyonlarının XG tam rollout'u gerekiyor ve bunu çalıştırmadık. Maç gücü bunun yerine Rollout PR çalışması (Bölüm 3) ve gerçek maç uyum çalışması (Bölüm 5) ile kapsanıyor.
.xg dosyaları.