やねうら大定跡はじめました

やねうら大定跡とは?

プロジェクトの目的

やねうら大定跡とは、やねうら王を用いて長い時間をかけて深く探索し、新定跡の開拓、従来定跡を整備することを目的としたプロジェクトです。

プロジェクトの内容

このプロジェクトで生成された定跡自体は、やねうら王定跡フォーマット2016に従い、誰でも利用できる形で公開します。

どうせなら強いソフトでやったほうがいいというのはありますが、魔女≒やねうら王2016Midと、現時点で最強ソフトPonanzaとはR300程度しか(?)離れていませんから、思考時間で言うとPonanzaの3倍かければそれと同等の棋力の指し手は得られるわけです。

まあ、やねうら王がもう少し強くなったら改めて定跡を生成しなおします。現状はコンセプトプルーフの段階だとご理解いただければと。

現時点で生成中の定跡

対象棋譜 = 2ch棋譜 + floodgateの強いソフトの棋譜

・ 1 ~ 5手目 MultiPV 10 , depth 32 → 作業中 : あと2日ほど
・ 1 ~ 6手目 MultiPV 10 , depth 28 → 完了
・         6手目 MultiPV 10 , depth 32 → 放置中 : 20コアで10日ほどかかる。
・ 7 ~ 8手目 MultiPV 10 , depth 24 → 完了
・ 9 ~16手目 MultiPV 10 , depth 24 → 作業中 : あと3日ほど。
・ 17~32手目 MultiPV 5 , depth 18 → 完了

とりあえず、上記の定跡生成が終わった時点でいったん公開して、意見を募りたいと思います。

今後の予定

1) 16手目ぐらいまでdepth 32で探索させたものが欲しい。
2) 欲を言うなら32手目までdepth 32で…。
3) 評価関数を改良してから生成しなおしたい。
4) 技巧・Aperyなどの特定のソフトの搭載定跡に対してdepth 32で探索させたものも欲しい。
5) floodgateの上位ソフトの棋譜の進行に対してdepth 32で探索させたものも欲しい。
6) プロの公式戦で指されている最新の棋譜の局面すべてに対して、depth 32で思考した指し手を用意しておきたい。

プロの実戦で出てくる形について、即座にdepth 32で思考させた指し手(しかもMultiPV 10なので候補手10手!)が表示されると面白いかなと思っています。

やねうら大定跡を踏まえてやねうら王2016 Midを改良した点

・定跡ファイルは最終的に超巨大(10GB以上!)になることが予想され、これを対局開始時にメモリに丸読みするのは無理があるため、1手指すごとに定跡ファイルを調べるモードをやねうら王2016 Midに追加しました。

定跡ファイル(テキストファイル)を力技で二分探索しているので、定跡ファイルが10GBであろうと100GBであろうと、そこそこ速い(はず)です。とは言え、この機能を用いるときは、HDDよりはSSDのほうが(ランダムアクセス性能が桁違いに良いので)好ましいでしょう。

・定跡の指し手を選ぶときの評価値下限、探索深さなどを柔軟に設定できる機能追加。

その局面で、探索深さが24以下の定跡の指し手しか登録されていなければ、その局面では定跡の指し手を採用しない(思考した結果、その指し手が指されることはある。)だとか、評価値の幅がベストの指し手と、いくら以内に収まっていないと採用しないだとか。色々なオプションを追加で用意しました。

やねうら王2016Midを用いて定跡を作る方法

これは別記事にて詳しく書きます。

プロジェクトの問題点

・一人で巨大な定跡を生成するのには限度がある。

クラウド化したいのですが、評価関数ファイルのアップデートや配布など、結構のサーバーを用意しないといけないですし(それを構築するのも結構の手間がかかりますし)、参加する人が増えてきたときに悪意のあるクライアントを弾くのが難しいなどの問題点があります。

・思考対象とする局面は棋譜(sfen)の形で与えているが、自ら思考した指し手を定跡DBに登録するので、この定跡を用いても棋譜の進行からはすぐに外れてしまう。

このDB上に存在しない局面にすぐに突入してしまいます。定跡としてはやや物足りない気がします。定跡DBにあるベストの指し手で進めたときの局面についても思考して定跡DBに登録するなど、何らかの処置が必要だと思いますが、それをやりだすと莫大な計算リソースが必要となるので現状やっていません。

まあ、sfenで2ch棋譜+αを与えている以上、プロの棋譜に存在する局面であれば必ず定跡DBには指し手があり、この定跡DBに指し手が存在しない局面というのは、対戦相手のソフト(プロの棋譜をそのまま定跡として登録しているタイプのソフト)にとっても定跡DBにはないはずなので、相手のソフトだけ定跡にhitするという事態にはならないので実戦上はそこまで深刻な問題ではないのかも知れません。

まとめ

とりあえず今年の電王トーナメントが終わったら、新しいやねうら王で定跡を生成しなおしたいですね。Xeon PC 40コア×5台(200C 400HT)を1,2ヶ月ぶん回してみようかと思っています。

なお、いま実験的に生成している定跡は、あと10日ほどで上記の目標には到達するのでそれをいったんGitHubのほうで公開します。電王トーナメント参加者の方々は電王トーナメントで使っていただければと。

やねうら大定跡はじめました」への15件のフィードバック

  1. 中々熟成してきて面白くなってきましたね。
    自分も何か情熱を注げるものを持ちたいものです。
    えいえいおー。

      • まぁ、こんなこと言うのはあれですけど、
        自分の言動で人振り回すのは得意ですけど、人の言動で振り回されるのは苦手なのです。
        どういうことかというと、人の作ったものを自分流にアレンジするのは得意なのですが、成果物をいじるのは得意ではないのです。
        とも、屋根さんの成果物ですから、解析してる間にアップデートが来そうです。そうなったら、なかなか追いつけない感じがします。
        どこから手を付けるべきですかねぇ。。。Orz

        • あれ?なんか妙なことに。
          メタをいじるのは好きなのですが、物理が絡むとダメなんです。

        • > そうなったら、なかなか追いつけない感じがします。

          追いつく必要はないような…。思考部はいまさらそんなドラスティックに変わらないでしょうし。

          • それもそうですねぇ。
            どこから手を付けたもんかなぁ。むー。

  2. USIエンジンの中に一定以上の深さで思考した場合はどこぞのサーバに送るとかでは無理ですかね。
    dragonfruitさんのshogi-serverは長時間対局なのでせっかく長時間思考した結果が生かせるならいい方向だと思うのですが。

    • なるほど、面白いアイデアですが、定跡として登録するならMultiPVであって欲しいというのもありますね。1手しかないと定跡DBとしてはその変化でハマって必勝パターンを相手に築かれてしまうのもつまらないですし。探索深さも32は欲しいですね。そう考えるとなかなか自然発生的には発生しないかなと。

      その思考エンジンを使っているときに1割のCPU資源を費やして、サーバーとやりとりして定跡生成を加担してもらう的な使い方は出来るかも知れません。(もちろんユーザーの同意の上で) そのへんは利用ユーザーが増えてこないと、なんともですね…。

      • なかなか難しそうですね。(´・ω・`)
        そういえば、MultiPVで対戦させるとすぐ持ち時間使い切ってしまう問題が。なんかうまい対応ありますかね?
        double unstablePvFactor = 1 + (mainThread->bestMoveChanges/MultiPV);とか考えたんですがいまいちな感が・・・

  3. 持ち時間が少ない場合には時間を節約する効果がありそうで効果が出やすいと思いますが、持ち時間が長い(例えば1手60秒とかの)場合どの位効果が出るか、興味深いです。

    • 長い持ち時間の対局においては持ち時間を節約する効果はあまりないでしょうね…。まあ、MultiPV10で思考させてあり、序盤がバラけるので特定の定跡を狙い撃ちされないという利点はあるような。

  4. 以前、定跡を作成したことがある者です。
    私も最初は深い探査のほうが強いだろうと思い、作成しましたが失敗しました。
    深い探査では自分自身で良いと思った手をつぶしてしまい、えらく中途半端な手を連発するようになりました。(良く言えば柔軟な動き)
    私が見た感想は、ちょっと駒が上がった稲庭に毛の生えたような動きで、とても戦法や手筋といった概念の動きではありませんでした。
    さらに相手が棒銀等の急戦に来たときに、深く読み過ぎて変な対応をしていました。

    その後、成功した例は、
    MultiPV 2 , depth 18
    MultiPV 2 , depth 19
    MultiPV 2 , depth 20
    MultiPV 2 , depth 21
    MultiPV 2 , depth 22
    MultiPV 2 , depth 23
    MultiPV 2 , depth 24
    この実際に実現しやすい探査範囲の7種類を重ねた物を基本定跡とし、自己対局で悪い物を消し込みながら、勝った棋譜を定跡に追加していく方法でした。

    当時のソフトと最新のソフトはまったく別物ですから、また違った結果になる可能性もあるでしょうから参考までに。

    • 2年前ぐらいに、当時のやねうら王で、深い探索をして定跡を生成したときも、特におかしな手はなかったですし(R3100程度(?)のソフトでdepth 32)、まあ、さすがにR3400以上のソフトでdepth 32で探索していればそう簡単に咎められるような指し手は指さないかと。

      ※ 当時、やねうら王が深い探索をして生成した定跡の指し手について、itumon先生からお褒めの言葉もいただきました。(以下記事)
      http://d.hatena.ne.jp/yaneurao/20140310

  5. >3) 評価関数を改良してから生成しなおしたい。
     :
    >クラウド化したいのですが、…
     :
    >その思考エンジンを使っているときに1割のCPU資源を費やして、サーバーとやりとりして定跡生成を加担してもらう的な使い方は出来るかも知れません。

    であるならば,どのエンジンで局面評価したのかを,
    フォーマットバージョン情報と別に,
    sfen局面ごとに記載すべきように思われます。
    候補手ごとに記載しても面白そうですが,無駄にデータが大きくなる割に使いづらいですかね。同一エンジンでの評価値同士でないと相対比較は意味を成しませんし。

    あと,候補手の並びについて,先手番局面には評価値が高い順,後手番局面には評価値が低い順にソートされていることを保証したほうがベターのように思います。
    そうすれば,最初の候補手の評価値を見ればそのsfen局面自体の動的評価値がわかります。

    • > どのエンジンで局面評価したのかを,フォーマットバージョン情報と別に,

      まあ、ソフトの改良で年々R200ぐらい上がっている状況ですから、以前のソフトで生成した定跡自体使いたくないので、古いソフトで作った定跡は捨てて作りなおせばいいかと思ってます。

      > あと,候補手の並びについて,先手番局面には評価値が高い順,後手番局面には評価値が低い順にソートされていることを保証したほうがベターのように思います。

      どうせ対局中にオンラインで定跡を検索しようと思うと、DBファイルに対して”sfen”で始まる文字列をバイナリサーチしないといけなくて、”sfen”の文字列を見つけたら次の”sfen”(もしくはeof)まで丸読みすればいいので(そこは極めて小さなコストなので)、ファイル上で指し手がソートされている価値はあまりないかと…。まあ書き出すときにソートするか、読み込むときにソートするかの違いではありますけども。

コメントを残す

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