Reverse Futility Pruning(RFP)は、静的評価がすでに十分高く、
少し安全マージンを引いても beta を超えそうなら、そのノードを fail-high とみなして早めに打ち切る手法である。
Static Null Move Pruning と呼ばれることもある。
Futility Pruningが
「どうせ alpha を超えないから探索しない」
という下側の枝刈りであるのに対し、
RFP は
「どうせ beta を超えるから探索しない」
という上側の枝刈りである。
典型的には、
evalmarginを使って、
eval - margin >= beta
なら fail-high とみなしてその場で返す。
if (!inCheck(pos) && depth <= 4) {
int margin = 100 + depth * 80;
if (staticEval(pos) - margin >= beta) {
return staticEval(pos) - margin;
}
}
実際には、
といった条件が入ることが多い。
alpha を超えないと見て手を省くbeta を超えると見てノードごと打ち切るという対称的な関係にある。
ただし実際には、RFP は null move observation に近い発想を使うため、 Null Move Pruningの軽量版として見ることもできる。
将棋では、
で RFP が効きやすい。 一方で、
では過信が危険である。