Extension は、特定の条件を満たした手に対して探索深さを増やす手法である。 地平線効果を避けたり、強制的な変化を最後まで追うために使われる。
通常の探索では、手を 1 つ進めるたびに深さを 1 ずつ減らす。 しかし、
など、重要な手だけは少し深く読みたいことがある。
そこで extension では、
depth - 1depth - 1 + extという形で深さを増やす。
int ext = 0;
if (givesCheck(move)) {
ext = 1;
}
int score = -search(next, depth - 1 + ext, -beta, -alpha);
実際には、
といった工夫が入る。
よく知られている extension には、
などがある。
ただし、古典的エンジンでは多用された extension も、 現代エンジンでは reductions や pruning の発達により控えめになっている。
将棋では、
で extension が有効なことがある。
一方で、分岐数が大きいので延長しすぎると探索爆発しやすい。 そのため、現在は控えめな設計が多い。