Syzygyはその情報をどのように保存しますか?


10

これまでに見つけたものをすべて読んでいると、Syzygyはwin / draw / lossファイルとゼロまでの距離ファイルの両方を使用していることがわかりますが、これらのファイルが使用する内部ファイル形式に関する情報は見つかりませんでした。低レベルの骨の折れる説明を探しています。

回答:


13

単一の包括的な出版物はないため、これはプローブコードジェネレータ、およびRonald de Man(ジェネレータの作成者)からのさまざまな説明に基づいています


ほとんどすべてのテーブルベース(別名、巨大な圧縮ハッシュマップ)をプローブする場合:

  1. 位置は正規化されており......
  2. ...整数インデックスにマッピングされます。
  3. インデックスは、それが属する「ブロック」を識別するテーブルで検索されます。
  4. インデックスの情報が取得できるまで、ブロックは圧縮解除されます。

次に、通常、少なくとも全体的なキャプチャを解決するために、プローブの「外側」にコードがいくつかあります。


WDLの外部コードから始めます。Syzygyテーブルは、次の観察に基づいた最適化を使用します。ポジションに特定の値を達成する(例:勝つ)キャプチャがある場合、ポジション自体は少なくともその値を持ちます(例:勝つ)。この場合、テーブルには、圧縮に最適な任意の低い値を格納できます。これは、キャプチャのサブテーブルをチェックすることで簡単に修正できます。

DTZを取得するには、最初にWDLプローブを実行する必要があります。位置が描画される場合、DTZは0であり、テーブルは圧縮に最適なものを格納できます。最善の動きがキャプチャ(WDLプローブから覚えることができる)であった場合、DTZはWDLに応じて+/- 1または+/- 101であり、テーブルは圧縮に最適なものであれば何でも格納できます。

ポーンフルテーブルには、「正規化ポーン」の各ファイルに1つ(正規化後)の4つのサブテーブルが含まれています。

WDL(サブ)テーブルは両面です。つまり、基本的に、エンドゲームの両側に2つの個別のテーブルが含まれます(マテリアルが対称でない場合)。

DTZテーブルは、移動する片側のみを保存します。したがって、反対側のDTZを計算するには、簡単な1層検索が必要になる場合があります。


(1)正規化について:これには複数の方法があり、どの方法が最適な圧縮につながるかを事前に判断するのは簡単ではありません。ジェネレータは、さまざまな順列を試すだけです。ピースの最終的な順序は、テーブルファイルのヘッダーに格納されます。

(2)いくつかの組み合わせ論。問題は、不可能な位置に大きなギャップがないことです。かなりトリッキーですが、ここではSyzygyが特別なことをすることはないと思います。概念的には、ピースまたはピースのグループは、ヘッダーで指定された順序でボードに配置されます。

(3)圧縮された値はブロックに格納されます。ブロックサイズはテーブルヘッダーで指定されます。インデックスをブロックにマッピングするテーブルはスパースであるため、正しいブロックに非常に近くジャンプすることができ、正確なブロックを見つけるために短い順方向または逆方向のスキャンが必要です。ブロックは最大65536の位置の値を保存できます。

(4)SyzygyテーブルはRE-PAIRに基づくカスタム圧縮を使用します。重要な機能は、上記で特定された任意の値を保存する機会を実際に利用できることです。解凍は非常に高速で、目的のインデックスの値が利用可能になるとすぐに停止できます。

オプションで、DTZテーブルには、別のステップf(wdl、stored value)=実際の値が必要になる場合があります。この追加のDTZマップはテーブルヘッダーで参照され、それ自体が8ビットのエントリを持つテーブルです。(興味深いことに、これはポーンがあっても7ピースのエンドゲームには不十分であることが判明したため、16ビットのエントリを有効にする別のフラグがあります)。

DTZ値の場合、テーブルのすべての値が100未満であるとジェネレーターが判断した場合、完全な再生を保証するために正確な半移動カウントは必要ありません。代わりに、テーブルヘッダーにフラグを設定し、スペースを節約するために、半移動を全移動に丸めます。

また、WDL値から推測できるため、標識、または呪われたエンドゲームの+/- 100の追加オフセットを保存する必要がないことも明らかです。

解凍は非常に高速なので、キャッシュは必要ありません。代わりに、エンジンはオペレーティングシステムのページキャッシュに依存して(まだ圧縮された)ブロックを格納できます。


6個のテーブルには、150ギガバイトで3,787,154,440,416の一意の位置の WDLおよびDTZ情報が含まれているため、位置ごとに約0.3ビットです。

すべてのSyzygyテーブルはすべて、これらの領域の少なくとも3つで以前のテーブルベースフォーマットを改善し、非常にコンパクトで高速なフォーマットになりました。驚くべきことに、ジェネレーターも非常に高速です。

そしてもちろん、DTZ50の使用は実用的な選択です。これは、確実に進歩するのに十分な情報であり、50移動ルールの有無にかかわらず、完璧なプレー(結果)を可能にするからです。ただし、これまでに公開されたCfishへの変更に基づいて(RdMはDTMテーブルに取り組んでいます)、多くの手法がDTMにも適用されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.