Razoring は、浅い残り深さで静的評価が alpha よりかなり低いとき、
通常探索を省いて静止探索へ直接落とす選択的探索手法である。
考え方としては、
なら、その局面は通常探索で持ち直しにくいだろうという見立てを使う。
そこで、
という流れを取る。
if (depth <= 2 && !inCheck(pos)) {
int razorMargin = 300 + 200 * depth;
if (staticEval(pos) + razorMargin <= alpha) {
return quiesce(pos, alpha, beta);
}
}
実際には、深さや評価差に応じてマージンを変えたり、 fail-high したときだけ通常探索へ戻すこともある。
Futility Pruningは「ある手を飛ばす」発想だが、 Razoring は「そのノード全体を通常探索せず quiescence に落とす」発想に近い。
そのため、
という違いで捉えると分かりやすい。
将棋では、
が多いため、浅い深さでも突然評価がひっくり返ることがある。 そのため razoring は強力だが、条件を攻めすぎると tactical miss が増えやすい。
実際に Stockfish 系でも、stalemate 周辺で razoring が絡む不具合報告が出ている。