ノードタイプ

ノードタイプは、alpha-beta / PVS 探索において各ノードがどのような役割を持つかを分類する考え方である。 特に PV-nodeCut-nodeAll-node の区別が重要である。

概要

Knuth と Moore に由来する分類では、

  • PV-node 正確値を求めたいノード
  • Cut-node どれか 1 手で cut が起これば十分なノード
  • All-node 全手を見ても境界を超えないことを確かめたいノード

という見方をする。

この分類は、

  • どこで選択性を弱めるか
  • どこで reduction を強めるか
  • どこで並列化を行うか

を考えるうえで役に立つ。

PV-node

PV-node では最善手列上の正確な値が必要なので、

といった扱いをすることが多い。

Cut-node

Cut-node は、ある 1 手が beta を超えれば十分なノードである。 そのため、

といった特徴がある。

All-node

All-node は、すべての手が alpha を超えないことを確認する側のノードである。 cut は起きにくいので、探索量が増えやすい。

そのため、quiet move の reduction や pruning が効く余地が大きい。

実装との関係

実装ではノードタイプを明示的な enum で持たないことも多いが、

  • 窓の形
  • 親から見た期待
  • fail-high / fail-low の文脈

から暗黙に扱いを変えていることが多い。

将棋AIでの位置づけ

将棋AIでは選択的探索の分岐が多いため、 「このノードは正確値が必要か、それとも cut を期待するか」を意識すると設計が整理しやすい。

たとえば、

  • PV-node は安全重視
  • Cut-node は高速化重視

といった調整方針が取りやすくなる。

注意点

  • 期待ノードタイプと、探索後に実際どうなったかは一致しないこともある
  • PVSや再探索で文脈が変わることがある
  • 厳密な分類よりも、実装上の挙動差を理解するための概念として使う方が分かりやすい

関連項目

参考にしたホームページ