電王戦第二局における検討用やねうら王の不可解な指し手について

Seleneが反則負けをした局面で、検討用のやねうら王が2歩となる指し手を示しているらしく、「第三局のやねうら王は大丈夫なのか?」と心配する声を頂戴しております。

これについてはMIROさん(ニコファーレの中の人)が次のようにコメントしています。

ところで、何故第二局の検討用のソフト(評価値と読み筋を提供するソフト)がやねうら王なのでしょうか?

気づいている人は気づいていると思いますが、前回電王戦出場の第1局から第5局のソフトが、今回の電王戦での1局から5局の検討用ソフトに対応しているんですね。前回電王戦で第2局で戦った「やねうら王(2013年バージョン)」が、今回の電王戦の第2局の検討用ソフトとなっているという仕組みです。

この「やねうら王(2013)」は、色々バグがあったいわくつきのバージョンで(その節はお騒がせしました)、私としてはなるべくなら使って欲しくないんですよね。ドワンゴ担当者から使わせて欲しいと言われたときも、

「使われるの嫌なんですよね〜(・ω<)テヘペロ」

とか私は答えまして、でも、ドワンゴ担当者が言うには、上のように昨年の電王戦出場ソフトが今回の電王戦のそれぞれの局で検討ソフトになる仕組みだと言うので、「なるほど!」と思い、それなら今回の「やねうら王(2014年バージョン)」にするわけにはいかないなぁと思ったのです。

でも古いほうのやねうら王だと視聴者にわかって欲しくて「そういう事情でしたら、やねうら王(2013)と表記してもらえるんなら、使っていいですよ?」とドワンゴ担当者に言ったんですけど、何故か本番では「やねうら王(2014)」と表記されてました。これでは新しいほうのバージョンだと誤解する人が増えるだけですがな…。

まあ、ともかく、あの第二局の検討用のやねうら王は昨年電王戦出場バージョンであるということを皆様にお伝えしておきます。あと、今年のやねうら王も「角不成」で誤動作することはありませんのでご安心を。(笑)

 

さて、Selene戦ですが、Ponanzaで検討させたところ、△16角をSeleneが見落としていたようですPonanzaでは(おそらくSeleneでも)もう少し思考時間があればあの変化は回避でき、形勢自体は互角ぐらいのようです。

あの局面自体は、右玉であったり、入玉が絡みそうであったり、端が絡んでいたりと、いまのコンピューター将棋では評価を誤りやすい局面なのかなぁとは思います。

 

それから、昨日の記事のコメントで、どうやって電王手さんに思考を伝達しているか仕組みがわからないというコメントがあったので簡単に書いておきます。

普通、将棋所に思考エンジンを登録して遊ぶときは次のようになっています。

通常 : [思考エンジン] — [将棋所]

今回は、この間に[ブリッジ]が入ります。

今回 : [思考エンジン] — [ブリッジ] — [将棋所]

[ブリッジ]は「電王手さん」のために株式会社デンソーが作ったものだと思います。

→ [2015/3/23 12:50] 修正。ドワンゴ製だそうです。

[ブリッジ]は、[将棋所]に対しては思考エンジンのふりをして、思考エンジンに対しては[将棋所]のふりをします。

内容的には、単にやりとりを中継しているだけです。この[ブリッジ]はやりとりを中継する以外に、電王手さんに[思考エンジン]からの指し手を送信します。

ですので、[ブリッジ]は単に中継しているだけなので、[思考エンジン]と[将棋所]からすれば、ないものとして考えることが出来ます。

そこで、通常通り、[将棋所]のログ表示で[思考エンジン]側から送られてきている文字列はすべて確認することが出来ます。

あと、今回の電王戦のルールでは、次のようになっているようです。

コンピュータ側の着手は将棋コンピュータソフトが着手を確定して「ロボットアーム」に伝達し、盤上に正しく着手された状態で完了とする。

ということは、[思考エンジン]が非合法手(反則手)を送信しても「ロボットアーム」は動かないので、着手が完了したことにはならないようです。まあ、Seleneのケースはさらに「投了」まで宣言しちゃっているので、投了に関するルールも適用されるのかも知れませんが。

Seleneが非合法手を送信したあと、何もしていなければ、もしかすると局面を手入力しての再開もありえたのかも知れませんね。

[2015/3/23 12:50] 追記。

電王戦第二局における検討用やねうら王の不可解な指し手について” への21件のコメント

  1. Seleneは2二銀と打ったのに着手が完了しなかったのは、ブリッジに合法手を判定する機能があるということなんでしょうか?
    西海枝さんが角不成を成りで入力していたらどうなっていたんでしょうね。普通に同玉でしょうから、誤入力と気付かれなかった可能性もあるかも。ロボットアームに文字を読む機能がなくて位置だけで駒を認識しているなら、角を裏返して駒台に置いて、次に角を打つときに馬を打ったりとかもありえたのかも。

  2. Seleneの投了宣言前に立会人が迅速かつ適切に行動していたら、対局が継続していたかもしれませんね。ルールの作成にプログラマが関わっていたら、こんなケースも想定していただろうなと思います。

    • Selene「角不成の指し手が送られてきた。ワイ、これわからんやでー。無視しておくやでー。」
      Selene「探索開始するデー」
      Selene「あれ?探索開始局面から1手進めたら相手番やのに自分の王手回避できてないやでー。おかしいから投了しとくでー。」

      という感じで、今回のケースでは局面が送られてほぼ同時にSeleneが投了している気はします。

      • >>Selene「角不成の指し手が送られてきた。ワイ、これわからんやでー。無視しておくやでー。」
        これはUCI::to_move() でMOVE_NONEが返ってくるということですよね?

        >>Selene「探索開始するデー」
        MOVE_NONEを返した時点で指し手の読み込みが終了するので、角不成の直前までの手で探索が始まるかと思います。その後、Seleneが2二銀と指してるので、探索が無事終了しbestmoveを将棋所に送信したのだと考えていいと思います。

        >>Selene「あれ?探索開始局面から1手進めたら相手番やのに自分の王手回避できてないやでー。おかしいから投了しとくでー。」
        ここで分からないのですが、同角は無視したのではないのでしょうか・・・

        と言う事で、今ひとつSeleneが投了した理由が理解できていません。プログラミングが分からないなりにソースを読んでみたのですが、素人には難しいです。もう少し解説いただけるとありがたいです。

      • 追記です
        UCI::to_move() は「Stockfish完全解析」で言うとmove_from_uci() ですね。move_from_uci()からmove_to_uci()が呼び出された結果、MOVE_NONEが返ってくると言う事です。

        で、USIプロトコルを読んで確認していたのですが、もしかして投了は「bestmove ?? ponder ??」の送信後に将棋所が返してくる局面図が王手放置の状態だったせいでしょうか?ponderで先読みを開始しようとしたら、相手手番で自分の王が詰んでいることに気づき投了宣言・・・

        Seleneの実装が分からないので西海枝さんに聞かないと本当のところは分からないと思いますが、素人なりにここまで考えてみました。

        • > ponderで先読みを開始しようとしたら、相手手番で自分の王が詰んでいることに気づき投了宣言・・・

          ponder中の思考は何があっても送信しないのが普通なのですが(USI通信部では探索部から指し手が返ってきてもその送信を保留される)、何か異常事態のときは、デバッグのためにそこをすり抜けるようにしてあるのかなぁと想像しましたが、真相は西海枝さんのみぞ知る、です。

  3. Seleneの指し手はともかく、評価用に去年のソフトを担ぎ出すのは不自然ですね。自分がプログラマだったらバグがあろうとなかろうと「恥ずかしいからやめてくれ!」と叫びたくなります。小学校の卒業文集に書いたのを大人になってから人前で朗読される気分です。
    個人的には電王トーナメントで敗退したソフトに評価を任せて、誰も気づかなかった手を指摘するのがカッコイイと思いますがw

  4. >何故か本番では「やねうら王(2014)」と表記されてました。これでは新しいほうのバージョンだと誤解する人が増えるだけですがな…。

    これについては多くの人は電王戦の開催された年でバージョンを認識しているので大丈夫かと(おそらくドワンゴ側もそれを考慮して2014としたのかと思います)。
    私も2014と見たときには一瞬〝ん?〟と思いましたがすぐわかりましたし。
    何はともあれ3戦目は熱戦(炎上的な意味でも)を期待しています。

    • いやあ、電王戦をよく見ていて、やねさんのブログも読んでる人(要するに俺)は、(2014)って書かれたら出番なかった方だって思っちゃいましたよ。

      理由1
      第3回電王戦も第2回の1〜5局に出たソフトが順番に評価値を出していたけれど、その時もわざわざ(2013)とかは書かれていない(除く第4局=Puella α登場せず)。
      結果、第3回の第1局で、評価値=習甦(第2回)、対局=習甦(第3回)のとき、対局中の習甦の評価値と読み筋だと覆う人が複数いた(説明あるまで)

      理由2
      やねさんがやねうら王2013を出したがらない気持ちはすでに表明済みだった。また、第3回第4局の評価値にPuella αが出てこなかったことからして、開発者が出したくないといえば出さないことも前例があった。理由1と合わせて考えれば、わざわざ(2014)と書いてあるからには、当然出場した2013ではなく、陽の目をみなかった2014なのだろうと思った。

      理由3
      ニコファーレのmaloさんは、第1回の電王戦タッグマッチの際、gps将棋について最新版のgpsfishを用意したことについて、「最新版を用意することが開発者への礼儀だと思う」という趣旨のツイートをされていた。
      クラスタ構成で登場したgpsだから、どのバージョンを用意するかについての解釈の余地があったとはいえ、運営の中の人のそういう過去の実績があった以上、評価値を出すのにやねうら王2014を出すのは合理的だと思った。

      そしたらなんですか、(2014)=2013とか、がっかりですよもう(冗談ですよ)。
      冗談ついでなので、やねうら王2014で、山本さんみたいに第2局の棋譜解析お願いできますでしょうか?
      1三歩成を選ぶか選ばないか、1六角を打たれたところでどうか、の2点だけでもよいので、お願いします。

  5. 局後インタビューでの西海枝さんの説明によると、Seleneは22銀を応答したけれども、禁則であるため将棋所が負け(投了?)を返したと言っています。となると、Seleneは投了していないように思えます。

    そうすると、Seleneと将棋所の間のブリッジは22銀と認識していたはずで、電王手さんにも22銀が送信されたことになります。1局目の1:34:00頃のDENSOのインタビューによると、電王手さん側に送られた手は電王手さんの管理ソフトでチェックした後、最終的にはスタッフが人手で確定させているようなので、電王手さんが動作しなかったのは、管理ソフトがはじいたか、スタッフ判断ではじいたかのいずれかだということになります。

    ルール上は電王手さんが盤上に着手した時点で着手完了となっていますが、ルール上には以下の規定もありました。
    ・「ロボットアーム」が不調の時は、人間が代理で対局
    盤面へのコンピュータの着手を行う
    ・人為的な入力ミス(コンピュータへの棋士の指し手の入
    力、及びコンピュータ出力の盤面への着手)が発覚した場合、速やかに立会人に連絡し、立会いのもと正しい局面の状態まで復旧に努めるものとする

    今回管理ソフトが22銀をはじいたのであれば、ロボットアームの不調で手を再現できなかったので、人間が代わりに22銀を指してSeleneの負けが確定。スタッフがはじいたのであれば人為的なミスなので、立会人に連絡して22銀が指された状態に復旧してSeleneの負けが確定、というのがルール上の解釈のように思います。

コメントを残す

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