Horizon Effect

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;
}

将棋AIでの位置づけ

将棋では、

  • 王手の連続
  • 成りの発生
  • 駒打ちによる急所
  • 受けの一手

があるため、地平線効果はチェス以上に表れやすい場面がある。

特に、 静止探索に何を含めるか、 Extensionをどこで入れるかは、 強さに直結する設計点である。

注意点

  • 静止探索を入れても完全には消えない
  • 枝刈りを強くしすぎると、別の形で地平線効果が悪化することがある
  • 要塞や長手数詰めのように、評価関数だけでは扱いにくい問題は別に残る

関連項目

参考にしたホームページ