Check Extensions

Check Extensions は、 王手がかかった局面や王手をかける手に対して探索深さを延長する extension 手法である。 地平線効果を抑え、強制変化をより正確に追うための古典的な方法として知られる。

概要

王手が絡む局面では、

  • 応手の自由度が低い
  • 数手先で詰みや大駒損に直結しやすい

ため、通常より深く読む価値が高い。

このため探索器では、

  • in-check node を延長する
  • checking move を延長する

といった規則が用いられてきた。

実装例

int extension = 0;

if (inCheck(pos)) {
    extension = 1;
} else if (givesCheck(move) && depth >= 2) {
    extension = 1;
}

int score = -search(next, depth - 1 + extension, -beta, -alpha);

ただし現代エンジンでは、 すべての王手を一律に延長すると遅くなりすぎるため、

  • 危険な王手だけ
  • 1 回だけ
  • 特定深さ以上だけ

といった制限を入れることが多い。

将棋AIでの位置づけ

将棋では王手の価値が高く、 連続王手や詰めろが絡みやすいので、 check extensions は自然に見える。

一方で、

  • 無意味な王手
  • 受けやすい王手
  • 手数稼ぎの王手

まで延長すると、探索効率が悪化しやすい。

そのため現代的には、 静止探索Singular Extensions、 他の選択性技術と組み合わせて慎重に使う。

注意点

  • 一律 extension は探索爆発を起こしやすい
  • 王手を重視しすぎると quiet な急所手を見落とすことがある
  • 将棋では連続王手の千日手などルール面も意識が必要

関連項目

参考にしたホームページ