ひよこカルロ将棋を過大評価されても困ります

なんだか某巨大掲示板の某スレがひよこカルロ将棋のことで荒れているようです。

ざっと読みましたが、私やひよこカルロ将棋に関して、disるのは結構ですが、技術的に間違ったことを流布する人がいて、今後、コンピューター将棋を開発しようとする人がそれを信じるといけませんので、正しいことをここに書いておきます。

・ひよこカルロ将棋は稲庭戦法のための専用の評価関数を載せているから駒得だけの評価関数というのは誇大表記ではないか

それはそうかも知れません。まあ、floodgateで稲庭戦法をやってくるのは稲庭れさぴょんのみで、稲庭れさぴょんはおらそく乱数によって稲庭をする/しないを選択するようです。稲庭をされたとき、稲庭対策をしていないひよこカルロ将棋では必ず千日手になり、これは無試合です。レーティング上は影響ありません。

ゆえに、ひよこカルロ将棋に稲庭対策を入れたからと言って本来のレーティングより大幅に高い点数がつくということはあまり考えられないのですが、れさぴょん戦のうちの半分が無試合になると、相対的に他の将棋ソフトと対戦する割合が増えて、それによって100戦したときにレーティングがいまより少し下がるということはありえそうなシナリオです。


モンテカルロシミュレーションの結果によって枝刈りしたり探索延長したりしているので、駒得だけの評価関数ではないのではないか(という批判)
モンテカルロシミュレーションの結果を探索に活かしてそれが成功したというのは画期的ではないのか(という賞賛)

この二つはどちらも間違っております。私が詳しく書いていないのが悪いのですが、ひよこカルロ将棋はモンテカルロシミュレーションの結果を探索に活かしていません。いや、活かせておりませんと言うほうが正確です。


現在の実装は単に置換表の探索ルートのところに書きこむだけです。それも書き込みにBonanzaのhash_store相当の関数を用いてしまっていたため、何手か前にすでに探索済みのノードであれば書き込めていません(探索残り深さがそのとき書きこんだ値のほうが大きいため)でした。そこで副作用が怖くてモンテカルロシミュレーションを行なうときは置換表を1手ごとに毎回クリアするようにしました。

適当かつ、めちゃくちゃな実装です。

その後気づいたことは、「探索残り深さを無視して置換表に書きこむ関数を作ればいいんだ!!」ということでして、それがBonanzaのhash_store_pvなのだと気づいたのはそのさらにあとです。

まあともかく、なぜhistoryに書きこむのをやめたかというと数手前の探索で置換表にそのノードの最善手が書きこまれているとそちらを優先してしまうからです。「なら、置換表、毎回クリアすればいいじゃん?どうせしてるんでしょ?」と言われると返す言葉もありません。その通りです。そのことに気づいたのは、そのまたさらにあとです。

正しい実装はhistoryに反映させて、かつ、hash_store_pvでその探索開始の局面の最善手をMOVE_NA(無効な指し手)に設定することでしょう。そうすると指し手のオーダリングのときにこのhistoryが参照されるので、モンテカルロシミュレーションの結果が探索に反映されるでしょう。

ところが、historyモンテカルロシミュレーションの結果を反映させて探索が改善されるのかというと、これがどうも疑問なんです。効果があると思っている人がいるといけませんので書いておきますが、たぶんほとんど効果がありません。大きな成果でも何でもありません。効果はたぶん無いのですから。

なぜ効果がないかと言いますと、探索を延長しようが、枝刈りをしようが、駒得のみの評価関数ですと序盤のほとんどの指し手において終端ノードの評価値が0なんです。historyの内容が書き換わったところで効率的に枝刈りできるわけでも、効率的に探索が延長できるわけでもありません。簡単に言うとそういう理由です。

Bonanzaのhist_goodというα値を更新したときおよびβcutをしたときにhistoryを書き換えるための関数があって、それを見ていただくのが一番良いのですが、とても慎重に、慎重すぎるほどにhistoryに今回のノードの情報を書きこむかどうかを決定しています。historyとはそれぐらいやらないといけない、デリケートなものなのだと思います。そこにモンテカルロシミュレーションの結果、みたいなものはノイズにほかなりません。悪影響しかないことは想像に難くないです。ゆえに私はhistoryに書きこむのはやめました。

もう少しまともなモンテカルロシミュレーションを行なって、かつ、historyに反映させる指し手を厳選したなら話は違ってくると思いますが、historyに書きこんでおけば探索が改善されるかどうかはそれでもわかりません。というか、それによって探索が改善されたという結果が出たならそれこそ画期的なことだと思います。論文にして発表すべきです。

私はモンテカルロシミュレーションにはあまり興味がなく、あくまで“お遊び”で実装しただけですので、このへんは真面目に研究されている方にお願いしたい次第です。

探索ルートという書き方が紛らわしいかも

コンピューター将棋用語で「探索ルート」というと、探索のroot node = 探索の開始局面のことなのですが、知らない人が聞くと、探索のroute = 探索した経路 = 探索開始局面から現局面までの指し手 みたいに聞こえますね。

ちなみにrootとrouteとは全く同じ発音ですから、話し言葉でも全く区別がつきません。
「探索ルート」という書き方/言い方は誤解を生みそうなのでやめようと思った次第です。


そう言えば、先日は、私はUSIのことを「うしってさぁ」と、とあるコンピューター将棋の開発者に言って「牛?!!…ああ、U(ユー) S(エス) I(アイ) ね…、これ牛って読むんだ(乾いた笑い)」みたいな感じで冷たい目で見られた私ですが、USIって牛って読むんじゃなかったんだ。なにげにショックでした。


まあ、私はこれからもずっと牛って呼びますけどね!!!呼びますからね!!!


USIのことを牛って読むの、流行るといいなぁ…。