# Razoring

Razoring は、浅い残り深さで静的評価が `alpha` よりかなり低いとき、
通常探索を省いて[静止探索](/shogi/shogiwiki/search/quiescence-search/)へ直接落とす選択的探索手法である。

## 概要

考え方としては、

- 残り深さが浅い
- 静的評価がすでにかなり悪い

なら、その局面は通常探索で持ち直しにくいだろうという見立てを使う。

そこで、

1. 条件を満たしたら通常探索を打ち切る
2. [静止探索](/shogi/shogiwiki/search/quiescence-search/)で tactical な確認だけする

という流れを取る。

## 実装例

```cpp
if (depth <= 2 && !inCheck(pos)) {
    int razorMargin = 300 + 200 * depth;
    if (staticEval(pos) + razorMargin <= alpha) {
        return quiesce(pos, alpha, beta);
    }
}
```

実際には、深さや評価差に応じてマージンを変えたり、
fail-high したときだけ通常探索へ戻すこともある。

## Futility Pruning との違い

[Futility Pruning](/shogi/shogiwiki/search/futility-pruning/)は「ある手を飛ばす」発想だが、
Razoring は「そのノード全体を通常探索せず quiescence に落とす」発想に近い。

そのため、

- futility は手単位
- razoring はノード単位

という違いで捉えると分かりやすい。

## 将棋AIでの注意点

将棋では、

- 受けの一手
- 王手の応酬
- 成りを伴う急変

が多いため、浅い深さでも突然評価がひっくり返ることがある。
そのため razoring は強力だが、条件を攻めすぎると tactical miss が増えやすい。

実際に Stockfish 系でも、stalemate 周辺で razoring が絡む不具合報告が出ている。

## 注意点

- 王手中には通常使わない
- 終局や特殊な引き分け判定を誤ると危険
- [探索不安定性](/shogi/shogiwiki/search/search-instability/)が強い局面では再探索コストや誤判定が起こりやすい

## 関連項目

- [静止探索](/shogi/shogiwiki/search/quiescence-search/)
- [Futility Pruning](/shogi/shogiwiki/search/futility-pruning/)
- [探索不安定性](/shogi/shogiwiki/search/search-instability/)

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

- [Chessprogramming Wiki: Razoring](https://www.chessprogramming.org/Razoring)
- [GitHub: official-stockfish/Stockfish](https://github.com/official-stockfish/Stockfish/issues/5899)
- [Chessprogramming Wiki: Quiescence Search](https://www.chessprogramming.org/Quiescence_Search)