Mobility は、 駒がどれだけ自由に動けるかを評価する項目である。 合法手の数そのものを数える場合もあれば、 有効な利きや活動範囲として評価する場合もある。
駒の mobility が高い局面では、
といった利点がある。
そのため評価関数では、 各駒について「どれだけ働いているか」を数値化することが多い。
最も単純には、 各駒の移動可能先の数に応じて点数を与える。
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;
}
ただし実戦的には、
を分けて扱うことが多い。
将棋では、 打ち駒や成りがあるため、 チェスの mobility をそのまま持ち込むだけでは不十分である。
それでも、
は強さに直結しやすい。
そのため mobility は、 King Safety や Piece-Square Tables と並んで、 手作り評価の基本要素のひとつとみなせる。