# 三駒関係

三駒関係とは、玉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)