BonaPiece

BonaPiece は、Bonanza 系やそれに互換性を持つ評価関数で使われる駒番号体系である。 駒や持ち駒や升上の状態を一意な番号へ写像し、特徴量配列の添字として使う。

概要

Bonanza 系評価関数では、 大量の特徴量配列を高速に引くために、 局面中の駒を規則的な整数へ変換して扱う。

このときの番号体系が BonaPiece であり、

の土台になる。

なぜ必要か

評価関数の特徴量は、局面中の駒をそのままキーに使うより、 連番化した方が配列アクセスしやすい。

BonaPiece を導入すると、

  • 特徴量テーブルの添字計算がしやすい
  • 学習器と探索器で同じ表現を共有しやすい
  • 互換評価関数を扱いやすい

という利点がある。

実装例

説明用の最小例では、駒と位置から番号を作る。

int makeBonaPiece(Piece piece, Square sq) {
    return pieceToBaseIndex(piece) + static_cast<int>(sq);
}

実際には、

  • 盤上駒
  • 持ち駒
  • 先後
  • 成り

を含めた設計が必要になる。

将棋AIでの位置づけ

BonaPiece は一般読者向けには地味に見えるが、 Bonanza 系や elmo 系の評価関数を読むときには非常に重要である。

NNUE時代になっても、 手作り特徴量時代の設計を理解する入口として価値がある。

関連項目

参考にしたホームページ