ねこにゃの開発は、少しだけ進展。
長らくバグっていた連の差分更新やらその他を諦めて、超シンプルなコードから書き直し。
この状態で、ほぼ完全にランダムに手を選択すると、
9路の初手からは、平均110手でシミュレート完了・1500Playout/sec位でした。
で、そのままUCB1・UCTを入れてみて、10秒思考で勝也と対局。
勝也は、ほとんどの局面で1手1秒もかけずにバシバシ打ってくるので、大分思考時間に差がありますが、どうやら『中国ルールなら』互角に戦えるっぽい感じです。
…そして、また『日本ルール』の壁にぶちあたってます。
単純に勝也がパスした局面でパスすると、ほぼ確実に負けてるんですよね(苦笑)。その後、ごちゃごちゃ打ってると、いつの間にか戦いが全盤面を巻き込んでいて、怪しげな手で『中国ルールなら』勝っているという感じ。
そう、日本ルールでは2~3目負けてるんです…OTL
『日本ルール用終局判定』とか作成して、『日本ルールで』勝っていたら相手がパスしたらパスするとか、そういう工夫をするか、あらかじめ少しコミを大きめに設定しておくという手があるかと思うんですが…前者は結構実装が大変。そして後者については、試してみたら、『負けてる』と思い込んで、暴れまくって状況を悪くするケースが目立つ目立つ(苦笑)。
そして、この程度のシミュレーションの精度や速度では、19路では使い物にならないこともほぼ明らか。
シミュレーションの精度をあげて行く工夫と、速度を上げるための何かを並行して考えていかないとダメですね。速度を上げるには、一つ比較的簡単な方法があって、モンテカルロシミュレーション部分を並列化するというのがあるのですが、手持ちのマシンでは所詮2倍とか4倍程度しか早くならないですし。精度を上げていく方は、読まなくてもいいような変な手も読んでいるので、これをどうにかしていく(パターンを使うことになるでしょうね)方向が一つと、UCTの各ノードで、とりあえず全候補手を(ランダムな順で)読んでみる代わりに、一部の候補手(たとえばアタリの石を逃げる手や石を取る手)の優先度をあげていくとか、最初は一部の候補手しか読まない(適当な回数シミュレートしてみて、どうも思わしい手がないと思ったら別の候補手も読む)とか、そういう工夫が必要そうです。
また、UCTに関しても、単純に上のノードに1回のシミュレーションの結果を繰り上げるのではなくて、もっとMinMax的なことをやってもいいような気がしています。
たとえば、あるノードで、次にある手を打たれたら「勝ちはない」のなら、そのノードの勝率は完全に0にしてしまうとか。…全然理論的な裏づけはないんですが(苦笑)。
うーん…先の、最初は一部の候補手しか読まないとか、キラー手的な手を先に読むだけで、同じような効果が得られるか…。
いまいち、どういう風にチューニングしていけばいいのか、という感覚が掴めない感じですね。未だにアルゴリズム的に何となく納得できていないっていうのが一番大きな理由かも知れません。うまく行くことは分かるんだけれど、っていう意味では、αβでも同じような感覚が未だにありますね、そういえば。
…長い長い呟きでした。しかも、誰の役にも立ちそうにないし(苦笑)。
最近のコメント