Reduction は、特定の手やノードに対して探索深さを減らす手法の総称である。 Late Move Reductionsが代表例であり、 現代的な alpha-beta 探索では重要な高速化技術になっている。
発想は extension の逆で、
ではなく、
という判断を使う。
典型的には、
に対して reduction をかける。
int reduction = 0;
if (depth >= 3 && moveCount > 3 && isQuiet(move)) {
reduction = 1;
}
int score = -search(next, depth - 1 - reduction, -alpha - 1, -alpha);
浅く読んだ結果が良ければ、通常深さで再探索するのが一般的である。
また、Improvingやノードタイプによって reduction 量を変えることも多い。
という対称的な関係にある。
現代的な探索では、全体としては reduction の方が大きな役割を持つことが多い。
将棋は分岐数が大きいので、reduction の恩恵が大きい。 ただし、
のような tactical な手を浅く読みすぎると危険である。