BonaPiece は、Bonanza 系やそれに互換性を持つ評価関数で使われる駒番号体系である。 駒や持ち駒や升上の状態を一意な番号へ写像し、特徴量配列の添字として使う。
Bonanza 系評価関数では、 大量の特徴量配列を高速に引くために、 局面中の駒を規則的な整数へ変換して扱う。
このときの番号体系が BonaPiece であり、
の土台になる。
評価関数の特徴量は、局面中の駒をそのままキーに使うより、 連番化した方が配列アクセスしやすい。
BonaPiece を導入すると、
という利点がある。
説明用の最小例では、駒と位置から番号を作る。
int makeBonaPiece(Piece piece, Square sq) {
return pieceToBaseIndex(piece) + static_cast<int>(sq);
}
実際には、
を含めた設計が必要になる。
BonaPiece は一般読者向けには地味に見えるが、 Bonanza 系や elmo 系の評価関数を読むときには非常に重要である。
NNUE時代になっても、 手作り特徴量時代の設計を理解する入口として価値がある。