MTD-f
From Wikipedia, the free encyclopedia
以下に MTD(f) の擬似コードを示す。
node:探索開始ノード
f:ミニマックス値を見積もった値
depth:探索の最大深さ
function MTDF( node, f, depth ) {
g = f;
upperBound = +∞;
lowerBound = -∞;
while ( lowerBound < upperBound ) {
if ( g == lowerBound )
β = g + 1;
else
β = g;
/* 置換表付きアルファ・ベータ法で Null Window Search を行う*/
g = AlphaBetaWithMemory( node, β - 1, β, depth );
if ( g < β )
upperBound = g;
else
lowerBound = g;
}
return g;
}
Null Window Search
Zero Window Search とも。 アルファ・ベータ法やそれを改良した探索法におけるα(下限値)とβ(上限値)の幅を Window (探索窓)といい、 この幅を Null(Zero) にして行う探索を Null Window Search と言う。(但し、通常の実装では Null Window の幅は1とする。) 十分広い探索窓を設定して探索をすれば返る値はミニマックス値であるが、 狭い探索窓を設定して探索をすると、ミニマックス値がその範囲内に無い場合、探索窓の上限値以上の評価値が返る事がある。 この状態を fail-high といい、これはミニマックス値がその評価値以上である事を示している。 また、同様に探索窓の下限値以下の評価値が返る事もある。 この状態を fail-low といい、こちらはミニマックス値がその評価値以下である事を示している。 つまりNull Window Searchを行えばミニマックス値の存在範囲を知ることができる。 このような探索は MTD(f) だけでなく NegaScout法でも使われている。