電王戦第2局においてSeleneが相手の角不成に対して非合法手を指して反則負けになった件ですが、理由は私には想像つくので、以下に書いておきます。
UCIプロトコルでは、思考を開始する局面は、普通、startpos(平手の初期局面)からの指し手を示す文字列が送られてきます。と言うことは、常識的には、UCI表記での指し手文字列を思考エンジンが内部で使っている指し手構造体に変換する必要があります。ところが、Stockfishにはこの変換をダイレクトに行なう関数は存在しません。さて、どうやっているのでしょうか。
実は、現在の局面の合法手すべてを生成して、それをmove_to_uci( )でそれをUCIの指し手文字列に変換し、それが与えられた文字列と一致したら、そのmove_to_uci( )で変換する前の指し手構造体を返すという実装になっています。少し遅いのが気になりますが、思考開始のときに送られてくるだけなのでこの部分が多少遅くとも誤差の範疇です。
このようにしてUSIの指し手文字列から内部の指し手構造体での形式に変換しているのですが、「現在の局面の合法手すべてを生成して」の部分でSeleneは、角不成を生成してないんですね。ここは、探索中に角不成を生成していなくとも、このときばかりは生成しなくてはならないのですが、それをやっていないのでしょう。
なので、角不成に対応するUSI文字列が送られてくるとそれを非合法手として認識して、そこで局面を進めるのをリタイアしてしまうのだと思います。(その結果、その1手前の局面が探索開始局面として設定されることになるので、何らかの誤動作が生じます。)
今回のやねうら王は、そのへんちゃんとやってます。まあ、自己対戦だとお互い不成を読んでいない&指さないのでなかなか気づきにくいバグではあります。棋譜からの学習のときにちゃんと読み込めていない棋譜がないかをチェックすれば気づくとは思うのですが、西海枝さんは面倒だからそういうチェックはやってなかったのか、たまたま使用している棋譜にそういう指し手がなかなったのか…。
まあ、何にせよ、将棋ソフト界隈ではよくあることでありまして、76歩34歩33角不成(ただ捨て!)の3手で試合が終了しなくて本当に良かったなぁと、我がごとのように思いました。
76歩34歩77角不成の3手ならさすがに指し直しになるのではないでしょうか?しかも不成禁止で。
まあ、そのときは勝負としてはソフト側の負けとして、そのまま親善試合としてもう一局という感じになるのでしょうかね…。さすがに残りの枠、ずっとスイーツ食べてられませんし(笑)
また、アルゴリズムの地平を見てしまった。
結局何事も配慮の問題になるんですよね。
しかし、将棋所ってただのブリッジかと思ってましたが、ルール把握してるとか意外と高性能なんですね。
指し手の合法性のチェック自体はそんなに大変ではないので…。(15行ぐらいで書けます…)
なるほど!気が付きにくいバグなんですね
>76歩34歩77角不成)(ただ捨て!)の3手で試合が終了
私も納得さんの意見に賛成します。
その場合、多分不成禁止で指し直しです。
永瀬さんもそれが分かってて
やらなかったと思います。
それをしたら永瀬さんに非難が行く可能性があります。
永瀬さんは「半分ぐらいの確率で修正されてるかなと思ってた」とか言ってましたが99%以上の確率で修正されてないと思ってたはずですよ?
だって前回の件があるから修正されてたら棋士に連絡が行くはずでしょう?
ドワンゴが棋士に内緒でバグ修正を許すとは思えません。
というか今回、正当な理由?のバグ修正すら許して貰えなさそうな雰囲気ですよね。
そして永瀬さんに連絡がなかったんです。
だから永瀬さんは不成のタイミングを見計らって
わざとやったと考えるのが自然じゃないでしょうか?
ところでセレネがバグってから1時間ぐらい話し合いが行われてたみたいですけど何を話してたんでしょうね?
気になります。
> だから永瀬さんは不成のタイミングを見計らって
> わざとやったと考えるのが自然じゃないでしょうか?
わざとだとは思いますが、勝ちになってからなので、おまけみたいなものでは。(^^;
そうですか、おまけみたいなものですか。なんだか私もぐっすり寝てスッキリしましたし(笑)。
良しとしますか。
開始1分で試合終了、残りは尺を埋める為に10時間スイーツを食べる、そんな番組も見てみたかった気がしますが・・
電王戦ルールでは
「何らかのコンピュータのトラブルがあり、原因がコンピュータ側にある場合: 1.手番において着手が確定
できない場合、その持ち時間を消費してコンピュータ将棋開発者側がトラブル処理を行うこととする。」
とあったので西海枝さんが生放送中のその場でババッとデバッグ・コンパイルして間に合わせるという絵が観れるかもと期待してました。
不成に対応+テストは断念してぶっつけ本番、くらいなら残り時間で対応出来ますよね?
ニコニコ的にも(変に)盛り上がったんじゃないでしょうか(笑
環境を用意してなかったんでしょうけど残念でした。
それとも環境があってもそういうリカバリはルール上不可なのでしょうか?
プログラムの修正はルール上不可ですね。あの局面を手で将棋所から入力して、続行はありえたと思いますが。Seleneが最終手を将棋所に送信していない状態ならば。
今回の電王戦は昔のSFを思い出させてくれますね。プログラマも棋士もそれどころじゃないでしょうが、見る方は勝手に感傷的になってしまいます。
いよいよ来週ですね。函館の夜景を楽しむにはまだ寒すぎると思いますが、温泉も美味しい物もたくさんありますよ。防寒が心配なら和服のふりをして褞袍を着て対局とか。
熱戦を期待しています!>やねうら王
ありがとうございます。
それより気になったのは、最終局面で、成りであっても、
selene、やねうら王2014ともに、形勢判断を間違っていたのでは?
というところです。
やねうら王2015では、ちゃんと対応できていたのでしょうか?
今回の局面、入玉が絡んだり、双玉(玉が近いところ)であったり、右玉であまり出てこない戦型であったり、端が絡んだりしていて、3駒型の評価関数では比較的評価しにくい局面であるとは思います。たぶん、どのソフトでも浅い読みだとある程度おかしい評価値を出す局面だと思いますね。
反則負けする前にSeleneが不利だったのが気になりますね
> 私がこの八百長ルール(事前貸出ルール)で研究していいなら、100%ソフトに勝てますね。
今回電王戦が終わってもプロ棋士がコンピュータと対戦してくれる可能はゼロではありませんが、今の方式だと「羽生さんと対戦」なんて状態はゼロのような・・・
羽生さんVSコンピュータ将棋の棋譜が将棋の歴史として残せないと思うと・・・・
> 反則負けする前にSeleneが不利だったのが気になりますね
まあ、あの戦型はコンピューターには難しいと思いました、はい。
対局場にデバッグと開発が出来る環境ってあったのですかね?
今回の電王戦でもプログラムの改変禁止とかいう将棋連盟プロを実際よりも強く見せたい為だけの変な八百長ルールがあるから、対局場にデバッグ・開発環境があってもプログラムの修正は許され無かっただろうと推測しますけど。
いずれにしても本電王戦でプログラムの修正は禁止でしょうね。Seleneが最後、指し手を将棋所に送信していなければ、トラブルとして処理して、あの局面を手で将棋所から入力して試合続行という復旧の仕方はありえたということだと思います。
コンピューター将棋という黒船相手に龍馬にならなかった永瀬が勝利した
というダジャレのためかと思った(角成らず)
なんか、今回の一件で電王戦熱が少々冷めてきちゃいました。
やねさんがおっしゃられたような「八百長ルール」を元に棋士が今回のようなバグまたは必勝法を発見して、それを本番で体現するだけのつまらない見せ物になってしまったのかな、と。
そもそも棋士がいう「研究」とは何なんでしょうね。。。
大勢の棋士がよってたかって一つのソフトの粗探しすることをいうんでしょうかね。
いずれにせよ興醒めでした。
後味悪いなか3局目迎えそうですが、ここまでは意地で見届けようと思います。
頑張ってください。
第一局・第二局は「八百長ルール」をプロ側はあまり活かせておらず、真っ向から斬り合っての二連勝なので、私自身はたいそうドラマチックの展開だなぁと思っておりますが。
さて、このドラマは一体いつまで続くのでしょうか…。
貸出ルールを活かすというのは、噂の2八角戦法とか、finalへの道の動画であったように、水平線の向こうだか枝刈り過ぎだかでソフトの見えてないところで大ゴマを詰ますといったやり方ですかね。やねさんもそういう展開を予測して八百長ルールと言っているのかなと。
プロはプロの凄さを見せるのが目的なのでそういう方向の研究は避けている気がします。
成り不成りに関わらず盤面自体もプロ側のほぼ勝ちだということわかってますかね?
やねうら王の評価値がずっと高かったのを信じきって負けそうなところをバグで勝ったと思っているように感じられるコメントなもので。
仮に研究で一手違わずあそこまで再現していてその通り進行した、というならば何も言えませんが。
問題は局面自体が勝ちになっていたか、という事実よりも永瀬六段がどこまで優勢を意識していたかということだと思います。
つまりは一手勝ちや詰みを読み切っていたのか、あるいはまだまだ難しいと読んでいたのか。
終局後の大盤解説で永瀬六段は「まだ自分には(はっきりとした勝ちが)判らなかった」という旨の発言をされている通り、彼の示した角不成り以下の局面図は客観的に見てもそう簡単に後手勝ちとは言えないものでした。
もし勝ちを読みきれないままあのような手段に及んだのであれば、理屈やルールに反していないとはいえ、個人的には落胆させられる結果となりました。
全く同感です。
> 自分には(はっきりとした勝ちが)判らなかった」
逆です。先手(Selene側)がよくなる筋がわからなかった、という発言ですよ?
つまり「完全にわたしの勝ちですね」の、彼流の表現です。
> 個人的には落胆させられる
ということで、落胆する必要は一切ございません。よかったですね。
角成でそのまま進んでたら こうなったんじゃないか☆ww
↓
Selene「(^o^)^^^^^^^^^^\____(;_;)」
Yaneuraou2014「(^o^)^^^^^^^^^^\____(;_;)」
Apery「(^o^)^^^^^^^^^^^^\____(;_;)」
Bona「(^o^)^^^^^^^^^^^^\____(;_;)」
Pona「(^o^)^^^^^^^^^^^^\____(;_;)」
激指「(^o^)^^^^^^^^^^^^\____(;_;)」
wwwww
コンピューター同士の将棋ではあんな
端っこで入玉含みの局面になったら
お互い読み抜けてかけひきしてるのかなんだぜ☆w??
コンピューターみんなが苦手な局面って
コンピューターだけの棋譜で上達できるのかなんだぜ☆?
(というか開発者が気づくのか)
怪しくなってきて面白いんだぜ☆ww
結局、悪手は何なんだったんだぜ☆www
解説がないんだぜ☆wwww
そのダッチワイフみたいな顔文字はなんぞ…。ああ、評価値が良くてゴキゲンなのか…。
ちなみに、Ponanzaの山本さんはTwitterでこの挙動について発言していて、最新版では84手で34秒の思考でこの問題に気づいて、別の局面に行ってそこそこ戦えると判断していたみたいです。
https://twitter.com/issei_y/status/579491122633777152
なるほろ…。
ソフトの指し手がドワンゴ側が用意したブラックボックスを通じて反映されていると思いますが
ここで予め用意された棋譜に変換させて開発者を騙すことは可能でしょうか?
そんなことをするくらいなら買収して視聴者だけを騙す方が容易でしょうか?
ソフト(思考エンジン)は、自分でログファイルに思考内容を書き出すことは出来るので、そのログファイルを確認すれば、自分が思考した通りの指し手が実際に電王手さんに反映しているかは開発者には容易に確認できますね。
開発者をお金で買収できるかどうかは私にはわかりません(^^;
プロの将棋指しと同様に、芯の通った人が多いですから、いくらお金を積んでも転ばない人は転ばないような…。
最終局面でやねうら王は二歩となる手を提示していたように見えたのですが、あれはどういう経緯で提示されたのでしょうか?(タイムシフト10時間15分ごろのアングル4です)
変な棋譜が流れてきたのが原因のようです。
https://twitter.com/MobileHackerz/status/579506322565046273
なるほど! そうだったんですね。次局も同じことになるとマズイと思ってたのですが、良かったです。
解説ありがとうございます。
少し気になったんですが、ニコ生での電王戦第2局放送時に、
やねうら王(2014)の評価値もそうですが、
投了図での予想手が変だったと思うんですが・・・
(ニコ生タイムシフトで10時間13分あたり)
あのバージョンでは読めていなかったということでしょうか?
永瀬六段が切り込んでいった辺りから、後手優勢だったと思うのですがいかがでしょうか?
変な棋譜が流れてきたのが原因のようです。
https://twitter.com/MobileHackerz/status/579506322565046273
そうでしたか!これは失礼いたしました。
お返事ありがとうございました。
来週の対戦を愉しみにしています。
電王戦のルールでは「コンピュータ側の着手は将棋コンピュータソフトが着手を確定して「ロボットアーム」に伝達し、盤上に正しく着手された状態で完了とする。」とありますが、昨日のケースでは電王手さんが2二銀を指していないので、厳密には開発者の投了であって「反則負け」ではないのではないかという疑問が残ります。
この点、コンピュータ側の手の確定はどの時点だと規定されているのでしょうか。
自己レスすみません。質問中に
>人間対人間では盤上から指が離れた瞬間をもって手の確定としていますが、
が抜けていました。よろしくお願いします。
あれ・・そうなんですか > 着手を確定
だとしたら非合法手はルール上は反則負けではないんですね!これは思わぬ抜け道。
Seleneが将棋所からの通知で投了したのであれば、この局の勝敗を直接判断したのは将棋所である、ということになりますね。
解釈はいろいろあるでしょうが、「コンピュータ側にも対戦者(思考ソフト+開発者)以外に勝敗を判定する第三者がいて、その存在は人間側から見えていない」となると、またゲームの公正性自体に疑義がかけられそうな気がします。
>76歩34歩77角不成
76歩34歩33角不成
ですよね?
おお、ほんとだ。修正しときました…。
もし電王トーナメントが無く、最初から対人用に作るとしたら詰み探索を重視するとかして、大分違うソフトになるんですかね?
詰み探索を重視したほうがいいかどうかはよくわかりません…。入玉は強化しないと狙われそうですが、それは簡単なことではなく。
76歩34歩26歩77角不成 の4手での終了の間違いでは?
76歩34歩33角不成の間違いでした(´ω`) 修正しました。
人間が後手だったので4手目不成ですね、私もすみません
いつもブログ楽しみにしています。
今回の件、私は「既にコンピュータ将棋は終盤間違えない領域まで達している」と思い込んでいたので
それが覆されたのがとても意外でした。
(Ponanza vs AWAKEもPonanzaの見落としでしたけど人間vsCOMでもあるとは)
本当に将棋は、奥が深いですね。
次週の対戦も、熱戦をとても楽しみにしています。
(まだ公開されていませんが、PVも(笑)。悪意切り貼り煽りMADでないことを願ってます。)
ありがとうございます。
プログラマとしては、負けるよりこういう不具合を指摘された方が悔しい・恥ずかしいのかなという気がします。それともこういう不具合はしょうがない?という感覚なのでしょうか。
プログラマの心理が気になります。
私としては、「よくあるよねー」ぐらいの感覚なのですが(何とも思ってはないのですが)、シリアスに受け止める人なら、この大舞台でこのバグが出ると胃が痛くなるでしょう…。
わたしなら「あるある」「直せばいいんだぜ☆」ぐらいの感覚だぜ☆wwww
それこそ自分の美学に関わるところなら「直さない」という気持ちのときもあるんだが、
そうでもなければ ささっ ささっ と 直すだけ☆wwwww
周りの人がカンカンに起こるのも 分かる☆wwwww
「そりゃその通り」みたいな☆wwwwwww
できてない→怒り という つながり方はしないと思うんだぜ☆
「できてない→なぜなんだぜ→あーそうか うっかり☆ww うっかりではいかんいかん」 みたいな☆ww
むしろ 怒っているのを はいっ はいっ はいっ と聞きつつ 席に戻って さささっ みたいな☆wwww
プログラマーなら、
もっと変なところで感情論になるんじゃないだろうか☆ww
飛車、角、歩の不成を読んでいなかった。ということですが、
この不成の読みがあるのとないのとでは、読みの効率が変わってくるものなのでしょうか?
もしかしてSeleneに不成の読みが入っていたら少し弱体化しちゃうのかな?と思っています。
通常探索で不成を読むと勝率が落ちます。それは先人たちが相当やっているので間違いないです。Ponanzaはさらに、「桂を成って王手できるときは桂不成を読まない」だとか言ってました。(2013年) いまはどうだか知りませんが。
ところで、探索深さの 18/21 という数字についてですが、右側については前の記事で言及がありました(最善応手時の一直線読み)が、18という左の数字については反対に「その深さまでは全ての局面を完全に評価済み」という理解でよいでしょうか?
そうだとしたら、いくら早く本命の筋を枝刈りしてしまったとしても、「最悪の場合でも、この数字が2増えるごとに見落としに気づく手番が1回ずつ早くなる」というのは正しいことになるんですかね?
18/21の18のほうは、枝刈り込みなのですべての局面ではないですね。枝刈りざくざくやって、平均的に18手ぐらい読んで(反復深化でdepth = 18で探索して)、部分的に延長した最長の枝が21手であったという意味です。
あ、そういうことなのですね。
ありがとうございます、参考にします。
はじめまして。
タイムシフト見返してたら、
「角不成のあとSeleneは22銀を指すことを決めた後に
王手知らずの反則負けに気づき投了」
といった概要の西海枝さんの発言が聞こえたんですが、
やねうらおさんの見解とこの発言内容は
一致すると思ってよいのでしょうか。
局面を将棋所から送られてきたときに、角不成の指し手をparseするときにエラーでリタイアして、そのときの王手している駒の初期化等がなされないのかなぁとは思うのですが、よくわかりません。まあ、(本記事での推測が当たっているとして、その挙動は)ありうる範囲なのかなと。
あの局面は永瀬さんの勝ち」
これは見ている人のうち、半分もわかっていません
だから、欠陥をついた勝ち方でなく、普通に角成りをやってもらいたかったです
かっこわるい勝ち方だった
将棋所」とどう関係して盤上に駒がさされるのかよくわかりません
プログラムが指してを決定→プロセスA→プロセスB→プロセスC→プロセスD→電脳手さんが実際にアームを動かして指す
なんですよね?
そこをやねうらおさんに教えて欲しいです。
以下、想像するとこんなふうにもとれちゃいます。
西海枝さんが、プログラムの指し手をみて、(ここでまだ先のプロセスに進んでいない。つまり止められる)
「あれ、こんなんでちゃったけど、どうしよう。
(うーん、とりあえず関係者に相談しよう。)
・この段階で、西海枝さんがプログラムの次の候補手を選ぶことができたのじゃないか?
・西海枝さんが、プログラムを再思考させるなどして、問題を回避できたのじゃないか?(時間をかかるとしても)
見てる側からすれば、
・ひょっとして将棋連盟は人間勝ちにしたいから、西海枝さんにネガティブな提案をしてそこでおわらせたのじゃないか?
たとえば、
連盟:どうしたんです?
西海枝さん:コンピューターの指し手が販促負けになる手をだしました
連盟:それで?
西海枝さん:他の手も上げていますから、次善手でもいいですか?
連盟:それは・・・
西海枝さん:指し手を次善手に入れ替えるのにすこし時間もかかります
連盟:それなら指し手を考える時間がなくなって、結局たいしたことない手を指して終わっちゃうんじゃないの?
西海枝さん:はぁ
連盟:それなら潔くここでおわりにするのも一考では?
西海枝さん:・・・(最後にみっともない負け方するよりはいいのかな?。)わかりました。ここで負けにします。
「どうせ勝ちだったから」
将棋連盟のこの台詞がほんとにうざかった
連盟が少なくともごまかして勝ちにしたいその思惑があったのは明らかで、それが残念
しきってる人の思慮が低いのが原因。
どうせ勝ちならなぜ最後までわかりやすく指すことを選択しない?!
勝ちだとわかる視聴者の方がすくないんだのに。
永瀬さんが逆にかわいそう。彼は自分のことを思えば、彼は不成りを指すべきじゃなかった。
彼はいろいろ理由をいっているが、負けたくないという消極的な理由が少ないなりにそこにはっきり感じられたから。
また、グレーの判断があって、それが彼をさらに誤解させる力が働くから。
やねうらおさんには、きっちり指しきってもらいたい
きっちり報告をおねがいしたいです。
> そこをやねうらおさんに教えて欲しいです。
今日の日付の記事で書いておきまーす。(^^)
盤面作り直して、27角打とすれば続行出来たと思うんですが・・・
なんか納得いかない結果で非常に残念です。
はい、盤面入力しなおしての続行は出来たでしょうね。
変な質問ですみません。
USBメモリにソフトの改良版とか修正パッチを入れておいて、隙を見て入れ替えることは物理的に可能ですか?
動作確認とか、対局中でもバグ修正とかチャンスはありそうなんですがw
そこまでギチギチに見張られているのでしょうか?
はい、一度開始させたあとは指し手入力以外の操作はできないです。これはカメラで見られてるはずです。思考エンジン設定等も開始時にドワンゴの担当者の立ち会いのもとにやるので…。
やねさんの記事のおかげで、記者会見でも深く質問されなかったSeleneバグの真相がだいぶ分かりました。
しかし思ったのですが、このバグの可能性に気づいた永瀬六段は当然再現性を検証したでしょうから(記者会見では10回くらいとか言っていましたが)、数手で投了に追い込むハメ手ができることも知っていたのではないかと思いました。
もしそれが正しければ(最初の数手でSeleneを投了させられることを知っていたのであれば)、簡単にバグ技で勝てる相手に真っ向勝負で挑んで優勢を築くというのは心理的に影響があったのではないかと思っています。
永瀬六段が修正されている可能性は半々だと言っていましたが、私なら角交換の時点で試してしまうような気もします。試さないのであれば88手目も角成とした気がします。
私の思っている状況と真相とが違っている可能性はありますが、しかし色んな意味で永瀬六段はすごく冷静に、そしてバグで終わったものの優勢で勝利したのがとてもすごいと思うのですが、やねさんはどう感じておられますか?
必勝の局面以外でフリーズさせるために故意にバグ技を使ったのであれば非難されることもありえたと思いますが、あの完璧なタイミングでの不成では非難のしようもありません。実に見事です。
1996年当時、森田将棋の森田さんは、ソフトを事前に貸し出した上で人間に勝つには、大駒一枚の差がないと無理ではないかとおっしゃっていました(パソコン通信時代の将棋ファーラムで)。
やねうらおさんは、事前貸し出しルールをどの程度のハンデに相当するとお考えですか?
序盤のランダム性がそこそこ担保されれば、常識的には本番と同じ持ち時間5時間での対局は数えるほどの回数しか出来ませんので、そこまで大きなハンデではなくて、ランダム性を追加することによる弱体化(R50〜R150)だけで済みます。序盤定跡で乱数を使ってバラけさせるだけなら、弱体化はしなくて済みますが、初手で定跡を外されると終わりですし、今回やねうら王はランダム性があまりないので、研究手順で負ける可能性もなきにしもあらず…。(すごく大きなハンデ!)
ゲーム攻略的に攻略していいなら100%勝てると私は思っていますし、その場合、大駒一枚ぐらいの差がないといけませんね。つまり、森田さんと同じ考えです。森田さんも私と同じく「ゲーム攻略的に攻略」することが前提としてあるんでしょうね。
不成を読まないんだったら、不成の入力を受け取ったら読めるように変換してしまえば99%は大丈夫ですよね?
研究してくるプロ相手にそれをしなかったのは迂闊だなぁと思ってしまう。
将棋ソフト開発者のなかでは、わりかしよくあるミスということで…。特に、西海枝さんは毎回1から作りなおされているそうなのでなおさら。