ym将棋のモンテカルロ探索

最近仕事が忙しく、GPW杯以降プログラムを全くいじってないのですが、年末年始の休みには手をつけたいと思っています。

しばらくは通常探索の方に専念したいので、この辺で一度、ym将棋のモンテカルロ探索のアルゴリズムを公開してしまいます。
以下の内容は、箱根では何人かの方に断片的にお話ししましたが、その時から全く変わってません。。
何かの参考になれば幸いです。


思考はモンテカルロ探索だけで行うのではなく、通常探索と並行です。
よーいどん、で両者が同時に思考を開始し、その指し手の制限時間が到来するか、通常探索が打ち切りになった時に、両者とも終了します。
そして、両者がはじき出した最善手を比較し、良かった方を選んで指します。

良かった方といっても、たいていの場合は通常探索の手を選ぶのですが、次のケースではモンテカルロ探索の手を選びます。

(1)通常探索の手の、モンテカルロ探索での勝率が低い場合
  これは説明が難しいのですが、
  たとえば、通常探索で76歩が選ばれたとします。
  このとき、モンテカルロ探索での76歩の勝率を調べ、それが4割だったとします。
  そして、モンテカルロ探索で26歩が6割の勝率をあげていたら、26歩を指します。
  モンテカルロ探索でも他にいい手がないようなら、あきらめて76歩を指します。

(2)通常探索で評価値がとても低い場合
  マイナス2000を下回ったら、モンテカルロ探索の手を指します。
 (この値は適当で、別にマイナス1500でも1000でもいいと思います。)
  敗色が濃い場合、まともな手段では勝ち目がない場合に、勝負手を指すようなイメージです。

モンテカルロ探索ではUCTを用いています。
指し手の選択は、おおまかにいうと次のように行っています。

・ルートノード:1playout目からUCB1-TUNED
・ルートに近いノード:1playout目からUCB1-TUNED
   かつ、Progressive Widening を行う。指し手の順位付けには静止探索の評価値を使用
・ルートから遠いノード:指し手の特徴により重みを付けたランダム選択。
   特徴は、成る手、駒を取る手、前に進む手、など。

上記の他、随時通常探索のハッシュを参照し、詰みがある局面などでは、プレイアウトを中断し、無条件で勝ち(負け)を返したりしています。
これは後から思いついて入れた処理ですが、GPW(確かポスターセッション)で発表があった、
「詰みを見つけたところで、そこに至るノードに特別扱いするフラグを立てる」
方法の方がきれいな気がします。

以上、思いつくままに書いてみましたので、分かりにくいところがありましたらコメントをお願いします。できる限りお答えしたいと思います。