MTD-f

From Wikipedia, the free encyclopedia

MTD(f) は MTD(n, f) (Memory-enhanced Test Driver with node n and value f) の略で、アルファ・ベータ法NegaScoutよりも効率の良いミニマックス法アルゴリズムの一種である。 MTD(f) は、ミニマックス値を見積もった値 f から、 Null Window Search を何度も繰り返す事で実際のミニマックス値に向けて近づいていく探索法である。 ミニマックス値が見つかると、再び Null Window Search を行っても同じ値が返るようになるので、これを探索の終了条件とする。

以下に 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;
 }

Zero Window Search とも。 アルファ・ベータ法やそれを改良した探索法におけるα(下限値)とβ(上限値)の幅を Window (探索窓)といい、 この幅を Null(Zero) にして行う探索を Null Window Search と言う。(但し、通常の実装では Null Window の幅は1とする。) 十分広い探索窓を設定して探索をすれば返る値はミニマックス値であるが、 狭い探索窓を設定して探索をすると、ミニマックス値がその範囲内に無い場合、探索窓の上限値以上の評価値が返る事がある。 この状態を fail-high といい、これはミニマックス値がその評価値以上である事を示している。 また、同様に探索窓の下限値以下の評価値が返る事もある。 この状態を fail-low といい、こちらはミニマックス値がその評価値以下である事を示している。 つまりNull Window Searchを行えばミニマックス値の存在範囲を知ることができる。 このような探索は MTD(f) だけでなく NegaScout法でも使われている。

置換表付きアルファ・ベータ法

パフォーマンス

外部リンク

Related Articles

Wikiwand AI