# 三駒関係
三駒関係とは、玉1枚と他の駒2枚、あるいは王を含む3つの駒の関係を特徴量として評価関数へ取り込む考え方である。
将棋では [KPPT](/shogi/shogiwiki/search/kppt/) やその周辺形式を説明するときの基礎概念になる。
## 概要
将棋の局面評価では、単独の駒価値や升ごとの点数だけでは表しにくい形が多い。
たとえば、
- 王と飛車と歩の位置関係
- 王と金と相手の攻め駒の関係
- 王の位置によって同じ駒配置の意味が変わる
といった要素である。
このため、Bonanza 系以後の手作り・学習型評価関数では、
三駒の組み合わせを特徴量として扱う方式が広く使われた。
## なぜ重要か
二駒関係だけでは表しにくい
- 囲いの固さ
- 攻防の噛み合わせ
- 特定の玉型でだけ有効な駒配置
を、より自然に表現できるからである。
一方で、特徴量数は非常に大きくなるため、
インデックス設計や学習法が重要になる。
## KPPTとの関係
将棋の評価関数では、三駒関係はしばしば
- KPP
- KKP
- KPPT
などの略称と一緒に説明される。
特に KPPT では、
王位置と2つの駒の関係を大量のパラメータとして持ち、
それを学習で調整する。
## 実装例
概念的には、王位置と2つの駒番号から配列を引く形になる。
```cpp
int scoreThreePiece(const Position& pos, Square kingSq, int p1, int p2) {
return kppt[kingSq][p1][p2];
}
```
実際には、
- [BonaPiece](/shogi/shogiwiki/search/bonapiece/) による駒番号体系
- 対称性の利用
- 配列圧縮
- 差分更新
が重要になる。
## NNUE時代との関係
現在は [NNUE](/shogi/shogiwiki/search/nnue/) が主流だが、
三駒関係の考え方は、
- 手作り特徴量の設計思想
- 将棋らしい形をどう表現するか
- Bonanza 系評価の歴史
を理解するうえで依然として重要である。
## 関連項目
- [評価関数](/shogi/shogiwiki/search/evaluation-function/)
- [BonaPiece](/shogi/shogiwiki/search/bonapiece/)
- [Bonanza](/shogi/shogiwiki/search/bonanza/)
- [elmo式学習](/shogi/shogiwiki/search/elmo-style-learning/)
- [NNUE](/shogi/shogiwiki/search/nnue/)
## 参考にしたホームページ
- [やねうら王公式サイト: MAKE Evaluate Function](https://yaneuraou.yaneu.com/2020/11/17/make-evaluate-function/)
- [やねうら王公式サイト: MAKE Evaluate Function 11](https://yaneuraou.yaneu.com/2020/12/07/make-evaluate-function-11/)
- [Chessprogramming Wiki: Bonanza](https://www.chessprogramming.org/Bonanza)