# Zugzwang
Zugzwang(ツークツワンク)は、
「手番であること自体が不利」な局面を指す。
もしパスが許されるなら有利または互角を保てるのに、
何かを指さなければならないために評価が悪化する。
## 概要
探索上で重要なのは、
zugzwang 局面では
「何もしない手は普通の手より悪くない」
という前提が崩れることである。
この点が特に問題になるのは
[Null Move Pruning](/shogi/shogiwiki/search/null-move-pruning/) である。
null move は、
「1 手パスしても局面が大きく悪化しないだろう」
という仮定に基づいているため、
zugzwang では誤判定を起こしやすい。
## 典型例
チェスでは駒の少ない終盤で現れやすい。
将棋でも純粋な意味での zugzwang はチェスほど典型的ではないが、
- 一手パスなら助かるが、受けるしかない
- 余計な手を指すと形が崩れる
といった「手番損」が問題になる局面はある。
## 探索器での扱い
null move を使う実装では、
zugzwang を避けるために
- 終盤では null move を弱める
- 駒数が少ない局面では使わない
- 王手中や特殊局面では無効化する
といった制限を入れることが多い。
## 実装例
```cpp
bool allowNullMove(const Position& pos, int depth) {
if (depth < 3) return false;
if (inCheck(pos)) return false;
if (isLikelyZugzwangEndgame(pos)) return false;
return true;
}
```
`isLikelyZugzwangEndgame()` では、
駒数や大駒の有無などを見て保守的に判定することが多い。
## 将棋AIでの位置づけ
将棋では持ち駒があるため、
チェスより純粋 zugzwang は少ない。
それでも、
[Null Move Pruning](/shogi/shogiwiki/search/null-move-pruning/) を安全に使うには
「どんな局面で null move の仮定が壊れるか」を知っておく必要がある。
その意味で Zugzwang は、
探索の枝刈りを理解するための重要概念である。
## 注意点
- 「悪い手しかない局面」すべてが zugzwang とは限らない
- 将棋では持ち駒の存在で性質が変わる
- 検出を厳密にやろうとするとコストが高い
## 関連項目
- [Null Move Pruning](/shogi/shogiwiki/search/null-move-pruning/)
- [Reverse Futility Pruning](/shogi/shogiwiki/search/reverse-futility-pruning/)
- [Horizon Effect](/shogi/shogiwiki/search/horizon-effect/)
## 参考にしたホームページ
- [Chessprogramming Wiki: Zugzwang](https://www.chessprogramming.org/Zugzwang)
- [en.wikipedia.org: Zugzwang](https://en.wikipedia.org/wiki/Zugzwang)
- [en.wikipedia.org: NULL MOVE Heuristic](https://en.wikipedia.org/wiki/Null-move_heuristic)