Piece-Square Tables(PST, PSQT)は、 「どの駒がどの升にいると良いか」を表形式で持つ評価手法である。 実装が簡単で高速なため、手作り評価の入門として非常に重要である。
駒種ごとに、 盤上の各マスへ点数を割り当てる。
たとえば、
といった知識をテーブル化する。
int PST[PIECE_TYPE_NB][SQ_NB];
int evaluatePieceSquareTables(const Position& pos, Color us) {
int score = 0;
for (Piece pc : pos.pieces(us)) {
score += PST[pc.type()][pc.square()];
}
for (Piece pc : pos.pieces(~us)) {
score -= PST[pc.type()][mirror(pc.square())];
}
return score;
}
探索中に make/unmake で差分更新しやすいのも大きな利点である。
将棋では駒の向きや成り、持ち駒があるので、 チェスより単純ではない。
それでも、
などを素早く入れられる。
また、 NNUE の入力として知られる king-piece-square table も、 広い意味では PST の発展形と見なせる。
実戦的には、
を用意して混ぜる tapered evaluation がよく使われる。
将棋でも、 玉の位置や飛車角の働きは局面の段階で意味が大きく変わるため、 複数テーブルの方が自然である。