Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Book バイナリ形式

rsshogi::book::StaticBook が使用する 定跡バイナリ形式の仕様です。 読み取り専用の構成で、大量局面に対して高速参照できることを優先しています。

基本方針

  • Zobristキー(64/128bit)を主キーとする
  • 可変長の指し手数に対応する
  • score / depth は必須
  • 参照は binary_search + slice のみ

エンディアン

すべて little-endian

ファイル構造

| magic (8) | version (2) | flags (2) | key_bytes (1) | reserved (1) |
| node_count (4) | move_count (4) |
| keys [node_count * key_bytes] |
| offsets [(node_count + 1) * 4] |
| moves [move_count] |

magic

  • 固定文字列: RSHOGIBK

version

  • 現行: 1

flags

ビット意味
0score を含む
1depth を含む

現行仕様では score/depth は必須。両方が立っていない場合は読み込み不可。

key_bytes

意味
864bit Zobrist
16128bit Zobrist

読み込み時の key_bytes は、現在の build の BookKey 幅と一致している必要があります。 default build は 8、hash-128 feature build は 16 です。幅が違うファイルは、検索キーが 一致しないため読み込み時にエラーになります。

node_count / move_count

項目説明
node_countu32局面数
move_countu32指し手総数

keys 配列

node_count 個のキーを strict 昇順で保持します。

  • ソート順: (low_u64, high_u64) の昇順

offsets 配列

node_count + 1 個の u32 を保持します。

  • offsets[i]..offsets[i+1]i 番目の局面の手一覧
  • offsets[0] == 0 を満たす
  • 最後の offsets[node_count] == move_count を満たす
  • 非減少であること

moves 配列

move_count 個の BookMove を連続配置します。

BookMove レイアウト

項目説明
mvu1616bit指し手
scorei16評価値(Eval::raw()
depthu16深さ

制約・注意

  • StaticBook の参照は 常に read-only
  • score/depth の欠落は非対応
  • Zobristの衝突は理論上あり得る(確率は極小)

参考実装

  • crates/rsshogi/src/book/static_book.rs

関連項目