ひよこカルロ将棋neoで相手番でもCPU負荷がかかる問題について

どうやら、昨日書いた相手番でponderしているらしい問題は、相手番でCPU負荷がかかっていることを言われていたようです。

これは探索を並列化したときに、スレッドの起動時間が惜しいので(0.1秒程度かかりかねない)その時間を節約するために常にスレッドをぶん回しているためです。常にと言いましてもSleep(0)でスリープさせているので実質的にはほぼCPU負荷はかかっていないのですが、タスクマネージャーで見るとわずかにCPU負荷がかかっているように見えるかも知れません。

どうするのがベストなのかは私もよくわかりません。ちなみにBonanzaでは、iterate(探索の開始)でスレッドを生成(tlp_start)しており、思考終了時にスレッドを毎回スレッドを終了(TlpEnd)させてあるようです。

私はやはりスレッドの起動時間が惜しいので相手番ならSleep(1)になるように次のバージョンで修正しようと思います。これならば自分の手番に移ったときに、1ms(0.001秒)でスレッドが待機状態から戻れる(ことが多い)からです。

ひよこカルロ将棋neoの並列化は、かなりアグレッシブで、探索ルート(探索開始ノード)でもsplit(探索を並列化)させています。

YSSの掲示板で書いてあったと思いますが、探索ルートでのsplitは途中で停止させたときに探索結果が不安定になったり、技術的な理由でいろいろ面倒なことがあるので、探索ルートでのsplitはなかなか困難です。Bonanzaでは探索ルートでのsplitはやっていません。(通常の探索用のsearch関数とは別に、探索ルート用としてsearchrという関数が用意されています。)

Bonanzaのように探索を開始してからスレッドを起動させ、しかも探索ルートではsplitしませんから0.1秒程度の間は並列化されていない状態で探索されることになり、1秒将棋などでは結構な損になると私は考えています。

非常にセコい話で大変恐縮ですが、0.1秒すら惜しむのがひよこカルロ将棋neoだとご理解ください。

なんにせよ次のバージョンでCPU負荷がほぼかからないように修正しますのでいましばらくお待ちください。バグ報告ありがとうございました。

自己対戦の怖さ

自分のソフトを改良して強くなったかどうかを確認するのは自己対戦に頼るのが普通なのですが、自己対戦での勝率はわずかに強いだけで大きく勝ち越してしまうというのが定説でありまして、私は半信半疑だったのですが、どうやらそれを証明する結果がついに出ました。

floodgateに投入しているひよこカルロ将棋neo v1.12 vs zattai-bonanza(KPPのみのひよこカルロ将棋)の対戦成績がこれです。

0勝30敗!!

1度も勝てません!!gps_normalには半分ぐらい勝てているのに1勝すら出来ません。

かと言ってzattai-bonanzagps_normalより圧倒的に高いレーティング点数がついているのかというと、そんなことは全くなく、gps_normalと同じぐらいのR2150付近を上下しております。

おそらく、ひよこカルロ将棋neo v1.12とzattai-bonanzaとはほとんど同じ部分を探索しており、わずかずつ評価関数の差で損をした結果、どれだけやっても勝てないという結果になるのでしょう。

これが自己対戦の怖さなのだと思いました。

ちなみにzattaiって何のことかと言いますとsettai-bonanza(接待ボナンザ)と言うソフトがfloodgateに参戦していたので、「こっちは絶対ボナンザだもんねー♪」という軽い気持ちで「絶対ボナンザ」と書いたつもりが、タイプミスしていて、zattai-bonanzaになってしまったというだけです。

決して「うざったい」のzattaiとかではありません。いやしかし、0勝30敗は、ひよこカルロ将棋neoにとってまさに天敵であり、「うざったい」存在であると言えるかも知れませんが。

ひよこカルロ将棋neo v1.15をアップしました

1.14はKKPの実験をやっている最中だったのでfv.binを読み込むコードが残ったままでした。fv.binがないと停止するようになっていましたので修正した v1.15をアップしました。

大変失礼しました。