MTD(f)で苦労して気付いた事
MTD(f)自体がnull window searchの繰り返しなんで、それぞれの探索は「厳密に同じ条件で」実行する必要があるみたいです。
例えば、次の二つはどちらもNGでした。
- 現在の探索は残り深さ2で、ハッシュに残り深さ4の評価値があったので、ハッシュの値を流用する
- 静止探索の初期値(パスしてからStand-Patで探索した値)によって手生成のルーチンを変える
これをやっちゃうと、ルートノードで評価値の下界が上界より大きくなるっていう、異常な動作をしました。
…私には扱いきれないっスねぇ、MTD(f)は。上手く使えれば速そうなのに。