# Material

Material は、
盤上と持ち駒を含めて、どちらがどれだけ駒の価値を持っているかを表す評価項目である。
[評価関数](/shogi/shogiwiki/search/evaluation-function/)の中では最も基本的な要素であり、
ほぼすべての将棋AIが何らかの形で material を使う。

## 概要

最も単純には、
各駒へ固定の点数を与えて合計する。

たとえば将棋では、

- 歩
- 香
- 桂
- 銀
- 金
- 角
- 飛

にそれぞれ重みを置き、
成駒や持ち駒は別の重みで扱う。

この差分が material balance であり、
序盤から終盤まで一貫して強い影響を持つ。

## 実装例

```cpp
int pieceValue(PieceType pt) {
    switch (pt) {
    case PAWN:   return 100;
    case LANCE:  return 300;
    case KNIGHT: return 350;
    case SILVER: return 500;
    case GOLD:   return 600;
    case BISHOP: return 800;
    case ROOK:   return 1000;
    default:     return 0;
    }
}

int evaluateMaterial(const Position& pos) {
    int score = 0;

    for (Piece pc : pos.pieces(BLACK))
        score += pieceValue(pc.type());
    for (Piece pc : pos.pieces(WHITE))
        score -= pieceValue(pc.type());

    score += handValue(pos.hand(BLACK));
    score -= handValue(pos.hand(WHITE));
    return score;
}
```

実戦的には、

- 成駒の価値
- 駒組み合わせの相性
- 終盤での価値変化

まで考えることが多い。

## 将棋AIでの位置づけ

将棋では持ち駒があるため、
material はチェス以上に重要な意味を持つ。

たとえば、

- 角銀交換
- 飛車と金銀の交換
- 持ち駒の歩や金の価値

は単純な固定値だけでは測りきれない。

そのため現代の将棋AIでは、
material を基礎にしつつ
[King Safety](/shogi/shogiwiki/search/king-safety/),
[Mobility](/shogi/shogiwiki/search/mobility/),
[NNUE](/shogi/shogiwiki/search/nnue/)
などで補正する。

## 注意点

- material が良くても王が危険なら負けうる
- 持ち駒の価値は局面依存が大きい
- 単純な固定値だけでは交換の良し悪しを表しきれない

## 関連項目

- [評価関数](/shogi/shogiwiki/search/evaluation-function/)
- [Tapered Eval](/shogi/shogiwiki/search/tapered-eval/)
- [King Safety](/shogi/shogiwiki/search/king-safety/)
- [Mobility](/shogi/shogiwiki/search/mobility/)

## 参考にしたホームページ

- [Chessprogramming Wiki: Material](https://www.chessprogramming.org/Material)
- [www.gnu.org: Evaluation Function.Html](https://www.gnu.org/software/chess/manual/html_node/Evaluation-function.html)
- [Chessprogramming Wiki: Evaluation Function Draft](https://www.chessprogramming.org/Evaluation_Function_Draft)