Як Syzygy зберігає свою інформацію?


11

Прочитавши все, що я знайшов до цих пір, я знаю, що Syzygy використовує як файли win / draw / loss, так і файли відстані до нуля, але я не знайшов жодної інформації про внутрішній формат файлів, який ці файли використовують. Я шукаю пояснення з низькою крупою.

Відповіді:


14

Оскільки не існує єдиної всеохоплюючої публікації, це ґрунтується на зондувальному коді , генераторі та різних поясненнях від Рональда де Мен (автора генератора).


При зондуванні майже будь-якої таблиці таблиць (так само величезна стисла хеш-карта):

  1. Позиція нормалізується ...
  2. ... відображається на цілий індекс.
  3. Індекс переглядається в таблиці, яка визначає, до якого «блоку» він належить.
  4. Блок декомпресується до тих пір, поки не вдасться отримати інформацію для індексу.

Тоді зазвичай є якийсь код "назовні" зондування, принаймні для вирішення захоплених захоплень.


Починаючи з зовнішнього коду для WDL. У таблицях Syzygy використовується оптимізація на основі наступного спостереження: Якщо позиція має захоплення, яка досягає певного значення (наприклад, виграш), то сама позиція має принаймні це значення (наприклад, виграш). У цьому випадку таблиця може зберігати довільне нижнє значення, що найкраще для стиснення, і це можна легко виправити, перевіривши підмножини на захоплення.

Щоб отримати DTZ, спочатку потрібно зробити зонд WDL. Якщо позиція намальована, то DTZ дорівнює 0, і таблиця може зберігати що завгодно, що б краще не було для стиснення. Якщо найкращим кроком було захоплення (яке ми можемо пам’ятати з WDL-зонда), то DTZ становить +/- 1 або +/- 101 залежно від WDL, і таблиця може знову зберігати що завгодно, що б краще не було для стиснення.

Таблиці, що зупиняються, містять 4 підтаблиці, по одній для кожного файлу "ведучої пішаки" (після нормалізації).

(Під) таблиці WDL є двосторонніми, тобто вони по суті містять дві окремі таблиці для кожної сторони кінця гри (якщо матеріал не симетричний).

Столи DTZ зберігають лише одну сторону для переміщення. Тому для обчислення DTZ для іншої сторони може знадобитися короткий одношаровий пошук.


(1) Про нормалізацію: Існує кілька способів цього зробити, і непросто сказати заздалегідь, який з них призведе до найкращого стиснення. Генератор просто пробує різні перестановки. Остаточний порядок фрагментів зберігається у заголовку файлу таблиці.

(2) Деякі комбінаторики. Завдання - не мати великих прогалин для неможливих позицій. Хоча це досить складно, я не думаю, що Syzygy робить тут щось особливе. Концептуально шматки або групи шматочків розміщуються на дошці в порядку, визначеному в заголовку.

(3) Стислі значення зберігаються в блоках. Розмір блоку вказаний у заголовку таблиці. Табличне відображення індексів блоків є рідким, тому воно дозволяє стрибати дуже близько до правильного блоку, а потім вимагає короткого сканування вперед або назад, щоб знайти точний блок. Блок може зберігати значення не більше 65536 позицій.

(4) У таблицях Syzygy використовується стисливе стиснення на основі RE-PAIR . Важливою особливістю є те, що вона фактично дозволяє скористатися можливостями зберігання довільних значень, які були визначені вище. Декомпресія дуже швидка і може зупинитися, як тільки з’явиться значення для потрібного індексу.

Необов'язково для таблиць DTZ може знадобитися ще один крок f (wdl, збережене значення) = реальне значення. Ця додаткова карта DTZ посилається у заголовку таблиці і сама є таблицею з 8-бітовими записами. (Цікаво, що цього виявилося недостатньо для 7-частинних ігор, навіть із пішаками, тому зараз є ще один прапор, який дозволяє 16-бітові записи).

Для значень DTZ, якщо генератор визначив, що всі значення таблиці менше 100, точні підрахунки на півдорозі не потрібні для гарантування ідеальної гри. Натомість він встановлює прапор у заголовку таблиці та округляє напівхвилі до повноцінного руху, щоб заощадити місце.

Очевидно також, що немає необхідності зберігати знак або додаткове зміщення +/- 100 для проклятих кінцевих ігор, оскільки це може бути виведено зі значення WDL.

Оскільки декомпресія дуже швидка, немає необхідності в кеші. Натомість двигуни можуть покладатися на кеш сторінки сторінки операційних систем для зберігання (ще стислих) блоків.


6-ти частинні таблиці містять інформацію WDL та DTZ для 3,787,154,440,416 унікальних позицій у 150 гігабайт, тобто ~ 0,3 біта на позицію.

Загалом таблиці Syzygy покращилися в порівнянні з попередніми форматами бази даних принаймні у 3 з цих областей, що робить її дуже компактним та швидким форматом. Дивовижно, що генератор також досить швидкий.

І звичайно використання DTZ50 - це прагматичний вибір, оскільки це достатньо інформації, щоб надійно досягти прогресу і дозволяє ідеально грати (wrt. Результат) як з правилом 50-х ходових, так і без них. Однак, виходячи з змін, які були опубліковані до Cfish (RdM зараз працює над таблицями DTM), багато методів застосовуватимуться і до DTM.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.