統計なんて当てにならんよ…統計的に言って。
しばし引きこもってましたが、また最近ぼちぼち開発を始めてます。
今年のお題としては「クラスタ並列をちゃんとモノにしたい」というのがまずあるんですが、bonasseを公開したりいろいろしてるうちにいくつか単体エンジンの改良アイデアが出てきたため、まだしばらくbonasseの改造をやってます。
bonasse v1.2までは純粋に「高速化」しかやってない、つまり探索自体は元ボナと全く同じ(ノードを辿る順序が同じ、という意味で)だったんですが、最近の変更ではアルゴリズムから変更してます。単純な高速化の場合は、例題数問走らせて(答えは必ず同じ)、npsを測定して上がってれば即採用、だったため採用可否で悩むことはありませんでした。ですがアルゴリズムを変えると、「強くなったか」の判定がまず大問題。他に方法思いつかないため、大量自己対戦(数百〜千レベル)の結果に頼ってます。そのための環境も作りました。
ある変更を入れる前と後のバイナリ2つ用意して、i7 980 の 12スレッドのうち10スレッドで5局同時に進めていくスクリプトと、shogi-serverのログを定期的にチェックして勝敗数差が有意水準に達したかどうかをみるスクリプトを作成。1手1秒だと大体一局約3分なので、10スレッドで5局/3分、100局/時。一晩で1000局くらいはできます。
今まで環境なかったんかい、とつっこまれそうですが、はいありませんでした自慢じゃないけど。ボナを使う前は細かいチューンを積み重ねていくとかいう以前の段階で、基礎から作り直すレベルの改造が多かったので、大量自己対戦の必要性がなかったんですよね。私にとっては必要が出てきたのはここ1、2か月ほどの話です。ちなみに5月前に高速化しかやらなかったのも、「大量自己対戦してる時間がないだろう」という理由でした。
統計あまり詳しくないんですが、ググったところX勝Y敗のとき
(X-Y)/sqrt(X+Y) > 1.65
なら片側5%で有意に強くなった、でいいんですよね?(<違ってたら誰か指摘して)
でも実際やってみると、1.65越えて、やった!とか喜んでると、その後段々下がっていき結局負け越す、というのもけっこうあるんですよね。片側5%じゃ全然当てにならない気がします。まあ5%って以上、20回に1回は間違って当然なんでしょうか。
1秒自己対戦だけじゃどこまで信頼できるのかというのもあるんですが、ともかく一応、何らかの変更入れたときに、それで「強くなったか」を機械的に判定する環境ができたので、ちょっとした変更を入れては自己対戦、というのを最近何度もやってます。
勝率とレーティングの関係は私はいつもCGOSのページ http://cgos.boardspace.net/ で見てますが、ここによるとR10差は勝率51.44%。これはほぼ18勝17敗のペースになります。これだと、仮に勝率通りの勝敗数(18n勝17n敗)で進むとして、上記の値が1.65越えるのはn≒100、つまり3500局必要となります。んなもんやってられるか! R20差なら52.88%、ほぼ9勝8敗ペースで、これだとn≒50、つまり850局必要。
てことは、1つの変更の採用可否判断を一晩で終わらせたいとすると、だいたいR20以上の変更でないと検出できない、ということになります。それでいいの?とも思うんですが、とは言っても三日かけたりするわけにも…というわけで今のところこうしてます。
クラスタでやればもっと多く対局できますが、クラスタ対応はまあ不可能ではないんですが多少めんどくさいのと、あと夏はマシン動かしてると暑くて^^; エアコンも入れることになるので電気代気になるし、エコじゃないし。冬になったら暖房がわりにやるかも?大学のチームはたぶんクラスタでがんがんやってるんでしょうね。wdoorなんか裏でめいっぱい対局してたし。いいなぁ。
1000局やって勝率52.88%で、「R20強くなった!」とか思うわけなんですけど、そういう変更が3つ見つかって、「じゃあR60強くなるだろ」とか思うと、これがならないんですよorz なんでだろう?ていうかそういうもんなのか?20+20+20=20、とかなったりしてます。
てなわけで今のところbonassev1.2に1秒自己対戦で558勝442敗(R+40?)のものがいちおうできてるんですが、時間長くしたらどうだろ、対他のソフトや人間でもほんとに強いんか、というのを知りたいね、というわけでここ1週間ほどbonasse_1cをfloodgateに入れてるんですが、最近floodgateが過疎気味のためいまいちよくわかりません。(数十局程度では全然当てにならん、というのは身にしみてわかった)来週は都合でできないので、また後ほど入れてみます。
最近のコメント