NetworkDelay,NetworkDelay2のデフォルト値は何故0ではないのですか?

標題の件、ときどき問い合わせを頂戴するので記事にまとめておく。

NetworkDelayのオプションが何を意味するのかについては以下の記事を参考にどうぞ。

やねうら王ライブラリのNetworkDelayオプションについて

ところで、このNetworkDelayとNetworkDelay2、ネットワーク対局するわけじゃないんだから、デフォルト値は両方0にしてくれないかという問い合わせを時々頂戴する。

というのも、なんとかちゃんねるでは、ソフト同士の対局で10局ぐらいの結果を投稿すると、対局数が少なすぎるんじゃないか、お前は統計を学校で習ってないのかとフルボッコにされる。

確かに10局は少ない。100局や1000局でも微妙な棋力の差は計測するのに十分ではない。やねうら王では、少ない時でも数千局、多い時は数万局やって計測していた。

とは言っても、個人がPCを何十台も持っているわけではないので、10局で少なすぎると言われると、そういう人は次に時間を極端に短くして対局させるわけだ。GUIで設定できる最小のところ…、つまり、1手1秒対局である。

しかし、やねうら王では、NetworkDelay2のデフォルト値が1000より大きな数値になっているので、GUI側で1手1秒に設定すると、思考エンジン的には0秒で指せと命令されていることになり、何も考えない即指しになる。そうすると「俺より弱いぞ、なんだ、このゴミソフトわwww」みたいなことをなんとかちゃんねるに書き込むことになる。それを見た人たちが、「こういう馬鹿が出ないようにNetworkDelay , NetworkDelay2のデフォルト値は0にすべき!」と言い出す。そして、このブログの感想の送信フォームからガンガン匿名でそういう文が送られてくるわけですわ。

私としてはとばっちりに近いのだが、とりあえず、「NetworkDelay、0はまずいぞ」という理由を以下に書く。

プログラマでない人は、「ローカル対局なので通信の遅延時間は0!」みたいに思っているかも知れないが、GUIと思考エンジンとは別のプログラムである。OSの「プロセス」という単位の、別のプログラム(別のプロセス)なのである。GUIと思考エンジンとはプロセス間通信をしているわけだ。その他、なんやかんやのオーバーヘッド(詳細略す)で0.1秒ぐらいの遅延はある。さっき私の書いたMyShogiとやねうら王との組み合わせで計測したら、片道 100ms(0.1秒)~150ms(0.15秒)程度の遅延時間があった。また思考エンジン側も時間が過ぎてそうなら止まるようなコードが書いてあるが、多少の誤差はあって少し超過することもある。その超過の時の誤差が最大で100msぐらいある。そんなわけで、往復 300ms + αぐらい早めに思考した指し手を思考エンジンはGUIに返さないといけない。

そこでやねうら王では、NetworkDelay = 300をデフォルト値としてある。実はこれはギリギリの値で、CPUをフルに使っているときは、ときどき超過している。NetworkDelay2 = 300だと切れ負けになりかねない。そこでNetworkDelay2 = 500~600がローカル対局のときのベストな値であると思う。これより小さいと切れ負けになりうる。

そんなわけで、NetworkDelay = NetworkDelay2 = 0には出来ない。

ここまで言うと「フィッシャールールのように1手n秒加算の時ならNetworkDelay = 0 , NetworkDelay2 = 600でどうか」と言う話が出てくる。

しかし、「NetworkDelay = 0」も以下の理由でお勧めできない。

この値を0に設定すると、思考エンジンとしては、例えば2秒以内(計測1秒)で指すつもりが、2.3秒で指していることになり、このとき計測2秒である。つまり倍かかっているようにGUI側から見えるし、残り持ち時間も1秒ではなく2秒引かれてしまう。持ち時間が不当に減るのである。だから「NetworkDelay = 0」に設定すると短い持ち時間の対局では極端に弱くなる。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です