やねうら王で読み筋が数手しか表示されないことがある件

2017/5/6 23:50追記。皆さんのお陰で解決しました!ご協力いただいた皆さん、ありがとうございました。

標題の件、状況がよくわからないのですが、

魔女ではうまく表示できているのだと思うのですが、PVの出力には大きくわけて2つの方法があります。
1) 置換表から指し手を集めてきて出力する
2) 探索のときに作成したpv配列の内容をそのまま出力する

Stockfishの昔のバージョンは1)だったのですが、いつしか2)になって、それで、2)だとnull moveのときにうまく表示できないという問題かと思ったので、やねうら王V4.46では1)の方式で出力するようにしました。

ところが、これでも解決していないようです。

これは以下の局面のようです。(USIコマンド表記)

おかしいなと思って魔女のソースコードを見ると2)の方式で出力しているので、魔女がうまく出力できているのだとしたら、この問題ではなさげ?

そんなわけで、どうも状況がよくわかりません。

2)の方式で出力してそれでうまくいくのだとしたら、やねうら王のpv配列の更新処理にバグがあって正しく更新できていないのか、更新を3秒に1回に抑制している影響でPVが出力されないことがあるのが問題なのか…。

お気づきの点があればコメント欄で教えてください。

2017/5/6 18:00 追記

V4.46で改善しているとのことのようです。うーん、なんでだろ…。

2017/5/6 20:40追記

おお!?PvIntervalを0に設定しても1ms以内には複数PVを出力しないコードになっていたのですが( “≦” にすべきところを “<” にしていた)、これか原因だったのかも知れませんね…。

やねうら王で読み筋が数手しか表示されないことがある件」への43件のフィードバック

  1. ShogiGUIは探索深さを設定した時、設定した深さ以上を思考したときにその一つ前の手を返すみたいです(あくまで推測なので真偽不明)
    やねうら王の思考を見てると探索深さ2手読みからいきなり20手オーバーの探索をすることがあるので、そのせいかもしれないと私は考えてます

      • V4.46を落としてみましたが、PvIntervalを0にしても2~3手読みから9~10手読みに飛躍することがあります。
        また読み筋が途中までしか表示されないことがまだあるようです

        • といっても20読みの時に、18手しか表示されていない程度の差なので何度かやり直せばなんとかなります

          • あとV4.47リリースしました。検討モードだとPvIntervalを0とみなしてPVを出力します。あと前回から1ms以内に続けてPVを出力しないようになっていたのでこれを修正しました。こちらではどうでしょうか?

          • 以前のバージョンもPvIntervalを0にしたところ飛躍がありました。後ほどV4.47を落としますね

          • V4.47でPvIntervalを0にして検討モードと棋譜解析モードを試したところPVの飛躍がなく、読み筋も探索深さ分表示されていました。

            ただPvIntervalを300にして検討モードで試すと飛躍が出ます。
            「検討モードだとPvIntervalを0とみなしてPVを出力します。」←これがPvIntervalにどんな数字を入れても検討モードでは無理やり0にするって意味だと解釈していましたが、勘違いならすいません

          • > ただPvIntervalを300にして検討モードで試すと飛躍が出ます。

            go infiniteで思考が開始されたときにPvIntervalを0とみなすように変更したんですけど、もしかしてShogiGUIの検討モードというのは、go infiniteではない?

            また、棋譜解析のときは、思考時間固定とか、探索深さ固定とかなんですかね…。うーむ..。

  2. 当方、プログラムに疎い身ですが、情報提供まで。

    v4.47にすると、詰みのある局面で検討が深さ2などで止まってしまう問題は解決しました。ありがとうございます。

    しかし、棋譜解析した際に読み筋が1,2手しか入らないことがあります。(ShogiGUI0.0.6.10)
    (佐藤天彦 名人 vs. 稲葉 陽 八段 第75期名人戦七番勝負第3局の棋譜で確認)
    (1手1秒で解析、5秒で解析、深さ15で解析などいずれの時も)
    これは、PVIntervalを手動で0にしても起こります。

    また、コンピュータ同士の対局時にやねうら王の思考を見てみると、急に読み筋が減って表示されることがあります。(秒読み1秒対局時に0.9秒などでよくなる)
    参考までに限定公開で動画を上げました。(そのうち消します)
    https://youtu.be/K0orrP0IKA8

    • > 急に読み筋が減って表示されることがあります。

      これ、秒が来たので、思考の途中で打ち切っていて、そのときの読み筋を出力しているのですが、その読み筋が未完成なので、まあそうなります。

      この思考の打ち切りタイミングでは読み筋を出力しないようにするか、棋譜解析のときは探索深さを固定して解析させるとかですかね…。うーん..。前者の処置をすると、PvIntervalに0以外を指定されている場合にPvを出力しないまま指し手を指すことになります。PvIntervalが0でかつ思考を中断するときに読み筋を出力しなければいいですかね…。V4.48でとりあえずそうしておきました。

  3. 読みづらくなりそうなので返信ではなく新しくコメントを書きます。
    V4.48では、PvIntervalを300にしても飛躍はありませんでした。
    (もしかしたらV4.47で試した時にgithubのexeファイルの入れ替え前を使ったためかもしれません)

    2017Earlyでは
    検討モード、棋譜解析モードともに
    PvInterval 0 + 探索深さ設定で解決されますね。

    お忙しい中素早い対応本当にありがとうございました

      • ごめんなさい、コメント書いた後に数回試したら
        検討モードでPvInterval 300 + 時間設定だと飛躍することがありました。。。。

        PvInterval 0 + 探索深さ設定で解決しているので問題はないのですが

        • ShogiGUIの検討モードの仕様、よく知らないんですが、go infiniteではなく、秒固定での思考だったりするんですか?

          go infiniteならPvInterval 0とみなしてPVを出力しているはずなんですけど..

          • おお、なるほど。そういうことなんですね。> 検討モード

            > GUIとエンジンのやりとりってどこで確認できるんですか?

            将棋所だとあるのですが、もしかするとShogiGUIはその機能ないのかも…。やねうら王側は、「log」というコマンドが送られてくればファイルにログを書き出す機能はあるので、手動で思考エンジンに対してこのコマンドを一度発行できると良いのですが…。やねうら王をビルドしなおせるなら、「log」オプションをデフォルトで有効の状態にしてもらえればと…。

            エンジン設定にWriteDebugLogというオプションがあって、それをOnにすれば良いことをいま思い出しました。

  4. V4.48でPvIntervalを0に設定して時間指定で棋譜解析してみたのですが、
    やはり読み筋が数手しか表示されないことが多いような気がします。

    エンジン設定画面でWriteDebugLogをTrueにしてログを見ますと
    時間指定の棋譜解析では「go btime 0 wtime 0 byoyomi XXXX」が送られてくるようです。
    また、適当にデバッグログを入れて確認しましたところ
    V4.48でPvIntervalが0であっても、各指し手の最後にSignals.stopがtrueのときの読み筋(短い読み筋)を送っているように見えます。

    試しに以下のように直して棋譜解析してみましたところ
    少し改善したような気がします。

    ■V4.48
    if ((Signals.stop && pv_interval) ||
    // MultiPVのときは最後の候補手を求めた直後とする。
    // ただし、時間が3秒以上経過してからは、MultiPVのそれぞれの指し手ごと。
    ((PVIdx + 1 == multiPV || Time.elapsed() > 3000)
    && (rootDepth < 3 || lastInfoTime + pv_interval <= Time.elapsed() )))

    ■改修案
    if ((Signals.stop ||
    // MultiPVのときは最後の候補手を求めた直後とする。
    // ただし、時間が3秒以上経過してからは、MultiPVのそれぞれの指し手ごと。
    ((PVIdx + 1 == multiPV || Time.elapsed() > 3000)
    && (rootDepth < 3 || lastInfoTime + pv_interval <= Time.elapsed() )))
    && !(Signals.stop && !pv_interval))

    ただし、思考打ち切り時ではなく通常のpvが短いときには上記修正は効いてこないので
    V4.46のように「#define USE_TT_PV」も併用する方がよいかと思います。
    (実際、時間指定2秒では「#define USE_TT_PV」なしでもうまくいったように見えたのですが、
     時間指定10秒にするとfail low/fail highが増えて棋譜解析結果が1~2手のことが多くなってしまいました...)

    また、PvIntervalが0か否かで判定するのは苦肉の策のように思いますので
    「思考打ち切り時の読み筋を出力するか否か」を新たなオプションで定義してしまった方がすっきりするような気もしています。

    • その修正、なるほどですね。

      >  時間指定10秒にするとfail low/fail highが増えて棋譜解析結果が1~2手のことが多くなってしまいました...)

      ShogiGUIの「fail low/fail highのときの読み筋を棋譜解析のときに書き出す仕様」なのがおかしいような気もしますが、かと言ってそうなっていないとbestmoveがXなのに読み筋の初手がYみたいな状況になって、これはこれでおかしいのかも知れませんね。

      そのため、USE_TT_PVを有効にしないといけないというところまでは理解しました。

      その場合(USE_TT_PVを有効にする場合)、読みを打ち切るときにpvを出力してはいけないのでしょうか?これを出力しておかないと読みの1手目とbestmoveが違うケースが出てきて少し気持ち悪い気がしなくもないのですが。

      • 読みの1手目とbestmoveの件、確かにおっしゃるとおりですね。

        結局のところ、USE_TT_PVを有効にすれば思考打ち切り時の条件はV4.47以前のままでよく
        PvIntervalの値を0にする必要もない、ということのようですね。

        そのように直して棋譜解析1手10秒をPvIntervalが0msと300msで試してみましたところ
        読み筋が極端に短くなることはなくなったように思います。
        (githubを今確認しましたら、既にV4.49で修正済みでしたね...)

  5. githubのexeにあるV4.49だと棋譜解析・検討で14手読みの時に表示されている読み筋は9手だったりすることがあります。
    これは、時間設定でも深さ設定でもそうなりますしPvIntervalを0にしても飛躍はありませんが読み筋の表示は少なくなっています。

    V4.48を書き直したり、V4.49のソースコードからコンパイルすることが難しいので何が原因かはわかりませんが一応報告しておきます。

    • > 14手読みの時に表示されている読み筋は9手だったり

      これ、null move(読みのなかでの1手パス)があるので、まあ、そういうことはあるかなと思うのですが、魔女ではこの現象起きないのですか?

  6. 4.49試しました。読み筋が全く表示されないこともあります。空白。途中で表示されたりしましたが、長時間読ませてると表示されなくなったり。

      • 0にしないといけないのですか100にしていました。これから試してみますね

          • fukudaさんの返信がこのコメントに対する返信になっていなかったので、削除させていただいて、ここに要点だけコピペさせていただきますね。

            > やねうら王+elmo 候補手が表示されない
            > 魔女+elmo 候補手が表示される
            > たぬき+elmo 候補手が表示される
            > 読み太+elmo 候補手が表示される
            > カパック 候補手が表示される

          • まだ詳しく調査してないんですけど、もしかしてAVX2版ではなく他のCPU用の実行ファイルをお使いということはないのでしょうか。他のCPU用の実行ファイル、ここのところ更新してないので…。

          • ここにかけばいいのかな?
            今試したのですが
            YaneuraOu-2017-early-sse2.exeを登録して検討モード使うと候補手表示されますね。

          • YaneuraOu-2017-early-sse2.exe
            これをYaneuraOu-2017-early.exeとリネーム無しでSHOGIGUI登録し検討モードで試した所、候補手が表示されました。

  7. そうなんですね。わかりました。あと、コメントが返信になってないです。とりま、このコメントも含めて、あとで読む人のために、のちほどコメント、いくつか削除して整理しますね。

  8. その更新で読み筋まわりの変更はしてないので、fukudaさんが試していた一つ前のバージョンが、一つ前のバージョンではない可能性が高いかなと…。

    P.S. コメント欄、あとで整理します。

    • githubでdownload ZIPからダウンロードしても、タイムラグなどで最新版をダウンロードしているつもりでも過去のバージョンになっているとかですかね?

      • まあ、そういうケースもあるかと…。あとは私が実行ファイルを差し替えていないこともありますし、そちらで差し替えたつもりで差し替わってないケースもあるでしょうし、ともかく、思考エンジンの実行ファイルを直接実行して「usi」とタイプすれば、バージョンナンバーが表示されるので、そうやって確認してもらうと良いかと…。

        とりあえず、この問題は解決済みということで、修正作業は終わりとして、のちほど本記事のコメント欄を整理しますね。

やねうらお へ返信する コメントをキャンセル

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