Bagaimana Syzygy menyimpan informasinya?

10

Dari membaca semua yang saya temukan sejauh ini, saya tahu bahwa Syzygy menggunakan kedua file win / draw / loss dan file distance-to-zero, tetapi saya belum menemukan informasi tentang format file internal yang digunakan oleh file-file ini. Saya mencari penjelasan seluk beluk tingkat rendah.

Oscar Smith
sumber

Jawaban:

13

Karena tidak ada publikasi komprehensif tunggal ini didasarkan pada kode menyelidik , generator dan berbagai penjelasan dari Ronald de Man (penulis generator).


Saat menyelidiki hampir semua tablebase (alias peta hash besar terkompresi):

  1. Posisi dinormalisasi ...
  2. ... dipetakan ke indeks integer.
  3. Indeks dilihat dalam tabel yang mengidentifikasi "blok" miliknya.
  4. Blok didekompresi sampai informasi untuk indeks dapat diambil.

Lalu biasanya ada beberapa kode "di luar" dari probing, setidaknya untuk menyelesaikan tangkapan yang lewat.


Dimulai dengan kode luar untuk WDL. Tabel Syzygy menggunakan optimasi berdasarkan pengamatan berikut: Jika suatu posisi memiliki tangkapan yang mencapai nilai tertentu (misalnya menang), maka posisi itu sendiri setidaknya memiliki nilai tersebut (misalnya menang). Dalam hal ini tabel dapat menyimpan nilai lebih rendah yang sewenang-wenang, mana yang terbaik untuk kompresi, dan ini dapat dengan mudah diperbaiki dengan memeriksa subtables untuk menangkap.

Untuk mendapatkan DTZ, probe WDL perlu dilakukan terlebih dahulu. Jika posisinya digambar, maka DTZ adalah 0 dan tabel dapat menyimpan apa saja, mana yang terbaik untuk kompresi. Jika langkah terbaik adalah tangkapan (yang dapat kita ingat dari probe WDL), maka DTZ adalah +/- 1 atau +/- 101 tergantung pada WDL, dan tabel dapat kembali menyimpan apa pun, mana yang terbaik untuk kompresi.

Tabel pion berisi 4 subtitle, satu untuk setiap file "pion terkemuka" (setelah normalisasi).

WDL (sub) tables adalah dua sisi, yaitu mereka pada dasarnya berisi dua tabel terpisah untuk setiap sisi endgame (kecuali materialnya simetris).

Tabel DTZ hanya menyimpan satu sisi untuk bergerak. Jadi pencarian 1-ply singkat mungkin diperlukan untuk menghitung DTZ untuk pihak lain.


(1) Tentang normalisasi: Ada beberapa cara ini bisa dilakukan dan tidak mudah untuk mengatakan sebelumnya mana yang akan mengarah pada kompresi terbaik. Generator hanya mencoba permutasi yang berbeda. Urutan terakhir dari potongan disimpan di header file tabel.

(2) Beberapa kombinasi. Tantangannya adalah tidak memiliki celah besar untuk posisi yang tidak mungkin. Meskipun cukup rumit, saya tidak berpikir Syzygy melakukan sesuatu yang istimewa di sini. Secara konseptual, potongan atau kelompok potongan ditempatkan di papan sesuai urutan yang ditentukan dalam header.

(3) Nilai terkompresi disimpan dalam blok. Ukuran blok ditentukan dalam header tabel. Indeks pemetaan tabel ke blok jarang, sehingga memungkinkan melompat sangat dekat ke blok yang benar dan kemudian memerlukan pemindaian maju atau mundur singkat untuk menemukan blok yang tepat. Blok dapat menyimpan nilai paling banyak untuk 65536 posisi.

(4) Tabel Syzygy menggunakan kompresi khusus berdasarkan RE-PAIR . Fitur penting adalah bahwa itu sebenarnya memungkinkan memanfaatkan peluang untuk menyimpan nilai-nilai sewenang-wenang yang diidentifikasi di atas. Dekompresi sangat cepat dan dapat berhenti segera setelah nilai untuk indeks yang diinginkan tersedia.

Secara opsional, tabel DTZ dapat meminta langkah lain f (wdl, nilai tersimpan) = nilai riil. Peta DTZ ekstra ini direferensikan di header tabel dan merupakan tabel dengan entri 8-bit. (Menariknya ini ternyata tidak cukup untuk endgame 7-piece, bahkan dengan pion, jadi sekarang ada bendera lain yang memungkinkan entri 16-bit).

Untuk nilai DTZ, jika generator menentukan bahwa semua nilai untuk tabel kurang dari 100, jumlah setengah langkah yang tepat tidak diperlukan untuk menjamin permainan yang sempurna. Alih-alih itu menetapkan bendera di header tabel dan putaran setengah bergerak ke gerakan penuh untuk menghemat ruang.

Juga jelas tidak perlu menyimpan tanda, atau offset tambahan +/- 100 untuk endgame terkutuk karena ini dapat disimpulkan dari nilai WDL.

Karena dekompresi sangat cepat, tidak perlu ada cache. Sebagai gantinya mesin dapat mengandalkan cache halaman sistem operasi untuk menyimpan (masih dikompresi) blok.


6 buah tabel berisi informasi WDL dan DTZ untuk 3.787.154.440.416 posisi unik dalam 150 Gigabytes, jadi ~ 0,3 bit per posisi.

Semua dalam semua tabel Syzygy meningkatkan format tablebase sebelumnya di setidaknya 3 area ini, menjadikannya format yang sangat ringkas dan cepat. Hebatnya generatornya juga cukup cepat.

Dan tentu saja menggunakan DTZ50 adalah pilihan pragmatis, karena ini hanya informasi yang cukup untuk membuat kemajuan dan memungkinkan bermain sempurna (hasil wrt.) Baik dengan dan tanpa aturan 50-langkah. Namun berdasarkan perubahan pada Cfish yang dipublikasikan sejauh ini (RdM sekarang sedang mengerjakan tabel DTM), banyak teknik yang akan berlaku untuk DTM juga.

Niklas
sumber