# Mobility

Mobility は、
駒がどれだけ自由に動けるかを評価する項目である。
合法手の数そのものを数える場合もあれば、
有効な利きや活動範囲として評価する場合もある。

## 概要

駒の mobility が高い局面では、

- 攻めの選択肢が多い
- 守りへ回る余裕がある
- 相手の王や弱点へ圧力をかけやすい

といった利点がある。

そのため評価関数では、
各駒について「どれだけ働いているか」を数値化することが多い。

## どのように数えるか

最も単純には、
各駒の移動可能先の数に応じて点数を与える。

```cpp
int evaluateMobility(const Position& pos, Color us) {
    int score = 0;

    for (Piece pc : pos.pieces(us)) {
        Bitboard attacks = legalTargets(pos, pc);
        score += mobilityWeight(pc.type()) * popcount(attacks);
    }

    return score;
}
```

ただし実戦的には、

- 単なる利き数
- 安全な移動先
- 相手陣への侵入度
- 王周辺への圧力

を分けて扱うことが多い。

## 将棋AIでの位置づけ

将棋では、
打ち駒や成りがあるため、
チェスの mobility をそのまま持ち込むだけでは不十分である。

それでも、

- 飛車や角の通り
- 金銀の窮屈さ
- 相手陣での成駒の活動性

は強さに直結しやすい。

そのため mobility は、
[King Safety](/shogi/shogiwiki/search/king-safety/) や
[Piece-Square Tables](/shogi/shogiwiki/search/piece-square-tables/) と並んで、
手作り評価の基本要素のひとつとみなせる。

## 注意点

- 利きが多いだけで良い手とは限らない
- 王手されている側の mobility は特殊で、単純評価しづらい
- 打ち駒を含む将棋では「盤上の可動性」だけでは足りない

## 関連項目

- [評価関数](/shogi/shogiwiki/search/evaluation-function/)
- [King Safety](/shogi/shogiwiki/search/king-safety/)
- [Piece-Square Tables](/shogi/shogiwiki/search/piece-square-tables/)
- [パターン認識](/shogi/shogiwiki/search/pattern-recognition/)

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

- [Chessprogramming Wiki: Mobility](https://www.chessprogramming.org/Mobility)
- [Chessprogramming Wiki: Evaluation Overlap](https://www.chessprogramming.org/Evaluation_Overlap)
- [Chessprogramming Wiki: Evaluation](https://www.chessprogramming.org/Evaluation)