Horizon Effect(地平線効果)は、 不都合な出来事を探索の「見える範囲」の外へ押しやることで、 探索器が局面を実際より良く見積もってしまう現象である。 静止探索 が導入された大きな理由のひとつでもある。
深さ制限つきの探索では、 葉に到達した時点で探索を打ち切り、 評価関数の値を使う。
しかしその直前に、
のような激しい変化が控えていると、 探索は「今はまだ大丈夫」と誤解することがある。
たとえば負ける駒をすぐに助けられない局面で、 探索器が価値の低い待ち手を選んで損失を 1 手先送りし、 その結果だけを見て「こちらの方が得」と判断するのが典型例である。
原因は単純で、
探索が深さ d で止まるからである。
値の悪化が d + 1 手目にあるなら、
探索木の中にはその損失が現れない。
このため、探索器は
を過大評価しやすい。
最も代表的な対策は 静止探索 である。 葉局面で、
だけを追加で読むことで、 「落ち着いていない局面」で探索を止めないようにする。
加えて、
も役立つ。
地平線効果そのものに直接対処するというより、 葉で静止探索へ移るのが一般的である。
int search(Position pos, int depth, int alpha, int beta) {
if (depth <= 0) {
return quiescence(pos, alpha, beta);
}
for (Move move : generateMoves(pos)) {
Position next = doMove(pos, move);
int score = -search(next, depth - 1, -beta, -alpha);
if (score >= beta) {
return score;
}
if (score > alpha) {
alpha = score;
}
}
return alpha;
}
将棋では、
があるため、地平線効果はチェス以上に表れやすい場面がある。
特に、 静止探索に何を含めるか、 Extensionをどこで入れるかは、 強さに直結する設計点である。