やねうら王2016 Midの開発の進捗

やねうら王2016 Midでは、Apery(WCSC26)の評価関数バイナリを読み込めるようにした。私のような天才であればこんなもの瞬殺…と言いたいところであるが、実は、魔女の作者のソースコードを参考にさせてもらった。魔女の作者のソースコードがなかったら、私はこんな面倒な作業はやってなかったであろう。

それで、Apery(WCSC26)の評価関数バイナリを用いると以前のバージョンとの0.1秒での自己対局では、以前のやねうら王から+R105ぐらい上がった。以前のやねうら王がfloodgateでR3250付近だったので、R3350付近になると予想される。

私が手元でやっている0.1秒自己対戦は、進行をバラけさせるために定跡としてfloodgateの棋譜を寄せ集めたものを使っている。それを32手目まで用いるので、進行はバラけるが、定跡を抜けた時点で敗勢というものもある。それらがノイズとして作用するので勝率は5割のほうに少し引き寄せられる。だから、実際の対戦においては、この自己対戦の結果より大きく勝率が出ることが多い。0.1秒で+R105なら、R150ぐらい上がっている可能性はある。

だとすると、これでだいたいR3400であってもおかしくはない。

ここで、いくつか問題が生じた。

探索パラメーターを自動調整しようと思うと、評価関数バイナリが倍のサイズになったために、PCのメモリが足りないのだ。探索パラメーターの自動調整に使う5台のPCすべてを32GBに増設しなければならない。amazonでDDR4のメモリをポチったが、まだ来ない。予想外の出費と、配達の遅延。どちらも嬉しくない誤算である。

さらに、仕方ないので、試しに魔女と対局させてみるかと、この0.1秒の自己対戦フレームワークで対局させてみたところ、やねうら王がずいぶん勝ち越すのだ。原因はわからぬ…。魔女側がKKか何かのファイルが読み込めていない可能性がある。

細かいことを言えば、
・コンパイル環境の違い(コンパイラごとに最適化のされかたが違うので)
・探索中に入出力をどれだけするか(短い時間の対局だと読み筋を出力すると大きなロスになる)
・制限時間の何ms前に指し手を返すかなどの処理が思考エンジンごとに異なり、それが0.1秒のような短い対局においては顕著に出る
などがあって、他のソフトとの公平な比較をするのはすこぶる難しい。自分のソフト同士であればこのへんは普通は同じ条件になるのだが…。

そんなわけで魔女より強いか弱いかすら現状わからない。嬉しくない誤算である。

仮に魔女より弱いとして、弱いかも知れない理由として、
・探索パラメーターはまだ調整していない。
・利きを更新しているが、この更新のコストが馬鹿にならない。このコストを1手詰めとSEEの高速化だけでは回収できていない。(3手詰めなどを入れると回収できるかも。あるいは利きを用いない1手詰めを実装すべきか?)
・魔女のほうが、やねうら王2016 Midより新しいStockfish7のコードを参考にしてある。
・魔女のほうはSEEや1手詰め等はAperyのコードに依存しているが、その部分がやねうら王より精度が良い可能性がある。
などが挙げられる。

仕方ないのでfloodgateに投入して様子を見ているのだが、floodgateはいま技巧だらけになっている。

Titanda_Lとか、以前はBonanzaだったのにいつの間にか中身が技巧になっている。(たぶん)

以前よりRの基準が変わっていて、これではfloodgateでR3400相当とか言ってもいつのfloodgateの話だ?ということになりそうである。

そんなわけでfloodgateのほうは、自己対戦よりさらに信用ならない。嬉しくない誤算である。

とりあえず、そんな感じで開発が行き詰った。

と書いていたら、いまメモリが到着した。
探索パラメーターの自動調整だけ行なって、これをやねうら王2016 Midの正式版として公開する。

やねうら王2016 Midの開発の進捗」への14件のフィードバック

  1. やねうら王が。というか、やねうら王こそがR3300付近のソフトであると確立したいところですね。
    願わくば超えたいところだと思いますが。

    • フロードゲート(2週間)見てきたら、技巧関係はR3500付近にいってるのかな??
      上の方は技巧同士で運ゲしてる感じでしょうか。
      屋根さんも普通にR3300行ってて割ともんだいないかんじですかね?
      将棋ソフトも大体才能が揃ってきて、手法も揃ってきてそろそろ飽和気味まで来ましたかね??
      後は、調整の感覚次第というところまで来たらいよいよ個性の時代になるんでしょうか?
      フロードゲートを見ていると、自分がプログラムした生物が環境を支配するゲームをMSとかが主催していたのを思い出します。
      そこで、屋根さんの生存戦略はいかがなものでしょうか。
      私がもし作るんだったら、意味評価を削って探索特化にするとかそういう方向になりそうですけど、将棋ソフトの規模で生成する覚悟がありません。Orz

  2. おいおいメモリ、2Rx8の8GBx2が4月前半より2000円近く安くなってるじゃんw
    5月前半に4月前半より1000円くらい安くなってタイムセールもやってたから難平したけど、その価格より安いorz

  3. 適切な環境でやれてるか分からないので、なんとなくですが魔女よりはやや弱い気がするような。
    魔女の作者が作った、やねうら王をAperyの評価関数読み込めるように改造したものと互角な感じもします。

  4. ss->staticEval = eval =
    (ss – 1)->currentMove != MOVE_NULL ? evaluate(pos)
    : -(ss – 1)->staticEval;

    置換表から評価値を得る部分、一手前の評価値の符号を反転させていますがこれで大丈夫ですか?手番評価が入ってる場合は入れ替わった手番から見た評価値を計算し直す必要がありませんか?

    • 正確にはそうなのですけど、NULL MOVEの次のnode以降の局面ではEvalSumから差分計算されるので、そこは正しい評価値になります。

      それでいま問題となるのは、NULL MOVE直後のnodeの評価だけなのですけど、そこ、例えば、
      -(ss – 1)->staticEval + Eval::tempo;
      みたいな感じで1手の手番の価値(固定値)で見積りをしておくだとかしてもそこまでひどいことにはならないので、まあ、どれくらいの処理にするのが計算コストと見合うかを考え中と言ったところです。

  5. ついに良質な睡眠方面へ手を出したということは、開発速度がさらに上乗せされるということですか?

      • 良質な睡眠によって開発速度は上がるけど、時間を削って開発速度が上がるような良質な睡眠が取れるかどうかの部分が地雷なので、時間に限りがあるときは通常は効率が悪くても徹夜の方を選ぶということなんだと思ってた。

コメントを残す

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