fail low/highしたときの読み筋の出力

最近、やねうら王では、fail low/highしたときに読み筋を出力するかどうかを思考エンジン設定で変更できるようにした。

検討モード用のPVを出力しているときでも、fail low/highのときにPVが出力されて欲しいという意見があったためだ。OutputFailLHPVというオプション項目がそれだ。

しかしだ。

fail lowというのは真の評価値は今回の探索で得られた評価値より小さいであろうことしかわかっていない。逆にfail highは、真の評価値が今回の探索で得られた評価値より大きい値であろうことしかわかっていない。つまり、これらのときの評価値は、信用ならない。またきちんと探索が完了してもいない。だから、私は、こんなものを出力しても(開発時のデバッグ以外に)あまり参考にならないのではないかと思わないではないのだが、出力されて欲しい人がたくさんいるようなので出力することにする。

読み筋についても、fail lowしている場合、思考エンジンの探索部では、2手目あたりで、どの指し手でも予想を上回らなかったのでそこ以降読んでいない。だから、読み筋としては表示されないのが本来は正しいのではないかと思う。置換表から指し手をかき集めてくると、以前、その指し手のあとに読んだゲーム木を拾ってくることが出来るので、一応、読み筋は表示できる。しかし、これを表示するのが正しいことなのかどうかはよくわからない。

確かに、読み筋の1手目が変更になったときに、2手しか表示されないよりは、そのあとどういう応手になっているのか、以前調べたゲーム木から読み筋を表示して欲しい気はしないではない。しかし1,2手目が変更になっていないならこれを表示する意味はあるのだろうか。よくわからない。

また、fail low/highが何かわからない人のために改めてここで説明する。

将棋所では “–“とか”++”とかが表示されると思うが、これがfail low/highしたという意味である。fail highして100以上の評価値であることがわかっている場合、++ 100 のように表示されると思う。これはコンピューターチェスでの表記らしい。

以前は各ソフトが独自に出力していた。例えば、やねうら王では「100↑」と出力していた。真の値が100より大きいのだから、こちらのほうが直感的な表示だと思うのだが、チェスに倣っておくほうが、将棋ソフトの海外での普及のためには良いのかも知れない。

ちなみに、Ponanzaでは「↑100」と出力していた。数字の前に「↑」があるので将棋所はこれを解釈できずに、0とみなしてしまう。そして通信対局のときは、将棋所はそれを評価値としてサーバーに送信するのでサーバーに評価値「0」が送られてしまっていたのは記憶に新しい。

このようなことから、将棋所では、読み筋を出力するときにupperbound / lowerboundという表記が追加された。fail low/highで得られた評価値がそれぞれ「上界」、「下界」(数学用語)であるというわけだ。これをつけて思考エンジンから読み筋をGUIに出力すると、あとはGUI側が良きに計らってくれる。

あと、MultiPVを2以上に設定しているときは、fail low/highしたときに読み筋を出力しないようになっている。Stockfishがこうなっている。MultiPVなのだから、別の指し手を指したときの読み筋自体はつねに出力されているわけで、fail low/highしたときの読み筋なんぞ要らないだろう、という考えだと思う。

fail low/highしたときの読み筋の出力」への2件のフィードバック

  1. fail low/highしたときの読み筋の出力の実装ありがとうございます。
    あまり詳しくないので疑問があるのですが、評価値というのは読み筋の一番最後の局面の評価という認識でよいのでしょうか?
    そうだとすれば読み筋が短いfail low/highのときの評価値の局面までの道筋を知るのもソフトを用いて研究するうえで有意義だと思います。
    最近はbest moveだけ信じればいい気もしていますが

    • > 評価値というのは読み筋の一番最後の局面の評価という認識でよいのでしょうか?

      普通はそうなんですけど、fail low/highのときは、枝刈りが発生した局面のスコアが評価値になりますので、そのスコアが読み筋の最後の局面のスコアである可能性は低いですね。

コメントを残す

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