Tapered Eval は、 中盤用評価と終盤用評価をゲームフェーズに応じて滑らかに混ぜる手法である。 局面段階の変化による評価の不連続を減らせるため、 手作り評価で広く使われている。
将棋でもチェスでも、
になりやすい。
もし中盤評価と終盤評価を完全に切り替えると、 局面が少し変わっただけで評価値が急に飛ぶことがある。
Tapered Eval は、
を使って両者を線形補間する。
int taperedEval(const Position& pos) {
int mg = evaluateMiddleGame(pos);
int eg = evaluateEndGame(pos);
int phase = gamePhase(pos); // 0..256
return (mg * phase + eg * (256 - phase)) / 256;
}
gamePhase() は典型的には、
大駒や駒数の残り具合から計算する。
将棋では持ち駒や成りがあるため、 チェスより phase の設計が少し難しい。 それでも、
の重みが局面段階で変わるのは自然である。
そのため、手作り評価を組む際の基本テクニックとして有用である。
NNUE では明示的な tapered eval をそのまま使わないことも多いが、 「局面段階で特徴の意味が変わる」という考え方自体は依然重要である。
また、手作り評価と NNUE を併用する場合には、 一部項目だけ tapered にする設計もありうる。