-
Tapered Eval tapered-eval
tapered-eval
-
-
添付ファイル
-
変更点
-
ソースを表示
-
表示
# Tapered Eval
Tapered Eval は、
中盤用評価と終盤用評価をゲームフェーズに応じて滑らかに混ぜる手法である。
局面段階の変化による評価の不連続を減らせるため、
手作り評価で広く使われている。
## 概要
将棋でもチェスでも、
- 中盤では王の安全や駒の連携が重要
- 終盤では王の活動性や駒の単独性能が重要
になりやすい。
もし中盤評価と終盤評価を完全に切り替えると、
局面が少し変わっただけで評価値が急に飛ぶことがある。
Tapered Eval は、
- opening / middlegame score
- endgame score
- game phase
を使って両者を線形補間する。
## 実装例
```cpp
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()` は典型的には、
大駒や駒数の残り具合から計算する。
## 将棋AIでの位置づけ
将棋では持ち駒や成りがあるため、
チェスより phase の設計が少し難しい。
それでも、
- [King Safety](/shogi/shogiwiki/search/king-safety/)
- [Mobility](/shogi/shogiwiki/search/mobility/)
- [Piece-Square Tables](/shogi/shogiwiki/search/piece-square-tables/)
- [Material](/shogi/shogiwiki/search/material/)
の重みが局面段階で変わるのは自然である。
そのため、手作り評価を組む際の基本テクニックとして有用である。
## NNUE との関係
[NNUE](/shogi/shogiwiki/search/nnue/) では明示的な tapered eval をそのまま使わないことも多いが、
「局面段階で特徴の意味が変わる」という考え方自体は依然重要である。
また、手作り評価と NNUE を併用する場合には、
一部項目だけ tapered にする設計もありうる。
## 注意点
- phase の定義が悪いと重みづけが不自然になる
- 中盤評価と終盤評価で同じ特徴を二重に数えやすい
- 将棋では持ち駒込みの phase 設計が悩ましい
## 関連項目
- [評価関数](/shogi/shogiwiki/search/evaluation-function/)
- [Material](/shogi/shogiwiki/search/material/)
- [Piece-Square Tables](/shogi/shogiwiki/search/piece-square-tables/)
- [King Safety](/shogi/shogiwiki/search/king-safety/)
## 参考にしたホームページ
- [Chessprogramming Wiki: Tapered EVAL](https://www.chessprogramming.org/Tapered_Eval)
- [Chessprogramming Wiki: Evaluation Philosophy](https://www.chessprogramming.org/Evaluation_Philosophy)
- [mediocrechess.blogspot.com: Guide Tapered Eval.Html](https://mediocrechess.blogspot.com/2011/10/guide-tapered-eval.html)
- [arXiv: 1801.07411](https://arxiv.org/abs/1801.07411)