Material

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

概要

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

たとえば将棋では、

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

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

実装例

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, Mobility, NNUE などで補正する。

注意点

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

関連項目

参考にしたホームページ