# Hand-Crafted Evaluation
Hand-Crafted Evaluation(HCE)は、
人手で特徴量と重みを設計する評価関数である。
[NNUE](/shogi/shogiwiki/search/nnue/) 以前の主流であり、
今でも小型エンジンや教育用実装では重要である。
## 概要
HCE では、
開発者が
- 何を特徴量として数えるか
- どれくらい重く扱うか
を設計する。
典型的な要素は、
- [Material](/shogi/shogiwiki/search/material/)
- [Piece-Square Tables](/shogi/shogiwiki/search/piece-square-tables/)
- [King Safety](/shogi/shogiwiki/search/king-safety/)
- [Mobility](/shogi/shogiwiki/search/mobility/)
である。
## 実装例
```cpp
int evaluate(const Position& pos) {
int score = 0;
score += material(pos);
score += pieceSquareTables(pos);
score += kingSafety(pos);
score += mobility(pos);
return score;
}
```
実際には phase に応じた重み付けや、
多数の pattern feature を加えることが多い。
## 将棋AIでの位置づけ
将棋では、
- Bonanza 以前の手作り評価
- Bonanza 系の大規模特徴量評価
- [NNUE](/shogi/shogiwiki/search/nnue/) 系
という流れがある。
HCE はその出発点であり、
現代的な学習評価を理解するためにも土台として有用である。
また、将棋では
- 持ち駒
- 成り
- 囲い
- 玉頭の厚み
などをどう表現するかが設計の肝になる。
## NNUE との関係
[NNUE](/shogi/shogiwiki/search/nnue/) は学習評価だが、
差分更新を重視する点や高速評価を目指す点では、
HCE と連続した発想を持つ。
そのため HCE の知識は、
NNUE を理解したり、補助評価を設計したりするうえでも役立つ。
## 注意点
- 項目が増えるほど [Evaluation Overlap](/shogi/shogiwiki/search/evaluation-overlap/) が起こりやすい
- 重み調整が手作業だと時間がかかる
- 戦術的な強さは [探索](/shogi/shogiwiki/search/) に強く依存する
## 関連項目
- [評価関数](/shogi/shogiwiki/search/evaluation-function/)
- [Evaluation Overlap](/shogi/shogiwiki/search/evaluation-overlap/)
- [NNUE](/shogi/shogiwiki/search/nnue/)
- [Material](/shogi/shogiwiki/search/material/)
## 参考にしたホームページ
- [Chessprogramming Wiki: Hand Crafted Evaluation](https://www.chessprogramming.org/Hand-Crafted_Evaluation)
- [int0x80.ca: chess engines and NNUE](https://int0x80.ca/posts/chess-engines-nnue/2-hce)
- [Rustic Chess documentation](https://rustic-chess.org/evaluation/handcrafted_evaluation.html)