第29回世界コンピュータ将棋選手権(WCSC29)で、『やねうら王 with お多福ラボ2019』は優勝しました。応援してくださった皆様、ありがとうございます。
手短にいくつか印象に残った試合と簡単な感想を書いておきます。
Qhapaq戦
Qhapaqはこちらが指し手を思考している最中に相手の指し手を別のPCで予測して、それに対するponderの指し手を探索する『Pre-ponder』という隠し球を実装しているそうでした。
QDMのクラスタはmultiponderベースだったのですが独自実装のpreponderを加えることで相手の持ち時間の120%を使えるという謎の効率化に成功しました。
— Ryoto_Sawada☀Qhapaq (@Qhapaq_49) May 5, 2019
そこで、Qhapaq戦については、SlowMover(序盤重視率)=67にして、序盤の思考時間を減らして終盤に時間を使う設定に変更しました。この運用がうまくハマって、安定した勝利に結びつきました。
Qhapaq「グワアアアア」
白ビール「Qhapaqが敗れたようだな」
狸王「奴はやねうら王系四天王の中でも最弱」
水匠「やねうら王本家如きに負けるとはやねうら王ライブラリ勢の面汚しよ…」 pic.twitter.com/7ktM4Ai47a— やねうら王 (@yaneuraou) May 5, 2019
狸王戦
狸王は、『Multi-Ponder』+詰み探索でAWSのインスタンスを17個も立ち上げての運用らしく、詰む変化を巧妙に避けてきます。終盤の驚異的な粘りが印象的でした。17個立ち上げていると聞いた時点で、Multi-Ponder + αだからこちらの持ち時間を削られるなと理解した私は狸王戦でもSlowMoverをQhapaq戦と同じ値にしての対局としました。これのおかげで泥沼の終盤でも相手の倍以上の時間を余らせており、難局を制することができました。
狸王、本日はAWS17台使用らしいです。multi ponderと詰み探索で驚異の粘りを見せつけます。やねうら王側は、multi ponder対策で思考時間を短めに設定しているので本来より弱くなっていて…。 pic.twitter.com/XlUyVJXb7D
— やねうら王 (@yaneuraou) May 5, 2019
PAL戦
対PALとはPALのそこまでの他ソフトの対局棋譜から、角換わりに進行すると思っていました。角換わりに関してはこちらは60手目付近まで定跡を掘ってあるため、定跡にヒットする限り持ち時間には余裕ができるはずであり、SlowMoverはほんのわずかだけ下げて90に設定。この狙い通り、序盤はやねうら王が40手目付近まで断続的に定跡にヒットして持ち時間の節約に成功し、一度はやねうら王側は評価値-1000ぐらいの大劣勢になったにも関わらず、相入玉形に持ち込みました。終盤にはPALが時間があまり残っておらず、そのためPALが小さなミスを繰り返して小駒を損していき、312手目でやねうら王がついに入玉宣言勝ちしました。(ルール上、320手で手数による引き分けなので危なかったです)
対PAL戦、評価値-1000からのまさかの超大逆転。312手で入玉宣言勝ち。 pic.twitter.com/BEPsKoUooj
— やねうら王 (@yaneuraou) May 5, 2019
白ビール戦
白ビール戦の始まる前、星を数えると白ビールもやねうら王も5勝1敗で、4勝以上しているソフトが他になかったため、この時点で2位は確定していました。この勝負に勝ったほうが優勝なのですが、引き分けはどうなるのでしょうか?ソルコフを確認するとやねうら王のほうが勝っているようでした。「千日手を意図的に狙いに行くのは本大会でルール違反になるのか?」(将棋電王トーナメントでは稲庭戦法のようなものはルール違反であったため)を運営委員のうさ親さんに確認したところ、「本大会にはそのようなルールはありません」とのことだったので、積極的に狙いに行くことにしました。
というのも、前日、Multi-Ponderを自分で実装しようと考えていたときに、千日手が絡んだときに正常に動作させるのはわりと難しいことに気づいたからです。何故かというと、例えば連続王手の千日手は禁則なので、四回目に千日手局面に突入するときには、その局面をMulti-Ponderのslave PCに渡してはいけません。(非合法局面なので)
ところが、Multi-Ponder用のプログラムは、思考エンジンを中継する形で書くのが普通であり(ソフトウェアの設計用語で言うところのproxyパターン)、その部分はC++以外の言語で書いたほうが楽なので、C#(やねうら王の場合)やGo(白ビール)やruby(GPS将棋の場合)など他の言語で書いている場合、この局面が非合法局面であることをproxyを書いている言語のなかで判定することは難しいです。(指し手生成部や、局面クラスや千日手判定のためのコードなどをその言語で再実装しないといけないため。やねうら王は『将棋神やねうら王』のためにC#でそういった様々な部品をC#で再実装したので一式書いてあるのですが…)
また、Multi-Ponderで各指し手をどのslaveに割り振るかは、上位の指し手からslave 1,slave 2,slave 3,…のように割り振るとは限りません。(slave 1が必ず空いているとは限らないので、空いているslaveを探して割り振るほうが待機時間が減り、レスポンスが上がる可能性がある) そうすると千日手のように局面が循環する場合に、毎回同じslaveにその千日手手順の指し手を割り振れば、置換表に前回探索したものが残っているので同じ局面を再度”go ponder”されたときに徐々に探索深さが上がっていき、千日手を打開する可能性があるのですが、そういう実装になっていなくてそのため千日手を打開しない可能性もわりと高いのではないかと私は予想しました。
これらのことから、Multi-PonderをGo言語で書いているのであれば(WCSC29の公式サイト上の情報で、白ビールの使用言語にC++,Goと書いてあったことから、このMulti-Ponderの実装用の言語としてGo言語が使われているのは自明)、千日手絡みで何らかバグが引き起こる可能性が高いはずだし、千日手の回避自体もMulti-Ponder実装上の技術的な理由から難しいのではないかと思いました。
あと、白ビールは、Multi-Ponderで相手の思考時間を奪うことに主眼があるため、SlowMoverをかなり小さめの値に設定している(Ponderが当たれば高い確率で即指しして相手にponderさせる時間を与えない)ことに前日での対局棋譜の消費時間から私は気づいていました。つまり、こちらもSlowMoverを小さめに設定した場合、相手はそれに合わせてほとんど時間を使わずに指し手を返してくるはずであり、その場合、思考時間が短すぎて千日手の打開筋を見つけるのは困難なのではないかと思いました。
また一般論として将棋で積極的に千日手を狙ってくる相手に対して、千日手を回避するのはわりと難しいです。
以上のことから私は千日手時のスコアを+200に設定を変更しての対局することにしました。これだけで白ビールは何らかのバグを踏むか、極めて高い確率で千日手が成立すると予想していました。
そこで私は自信満々で自分の勝利を確信するかのように対局開始2秒前に次のツイートをします。
対、白ビール秘密兵器!千日手で優勝大作戦開始!
Contempt=-200(千日手時スコア200) , SlowMover(序盤の思考時間減らす率) = 67。 pic.twitter.com/V1FOcZkv8U— やねうら王 (@yaneuraou) May 5, 2019
この作戦が見事にハマり、対局開始わずか3分半で千日手成立により、やねうら王の優勝が確定しました。
千日手の筋に。引き分け勝ちのやねうら陣営は千日手、千日手の大合唱(笑) pic.twitter.com/ulSMplgk7k
— 将棋情報局編集部 (@mynavi_shogi) May 5, 2019
千日手速攻成立、やねうら王優勝確定しました!
新人のやねうら王です!ソフトの名前だけでも覚えて帰ってください。 pic.twitter.com/FKCStdoHnT— やねうら王 (@yaneuraou) May 5, 2019
一瞬での幕切れであり、偶然奇襲が決まったように周りには見えたかも知れませんが、私は私のなかで上のような思考過程を経ていて、それなりに確信があったということです。
逆にあの状況で、千日手を何が何でも打開する設定にしていなかったのは白ビール側の勝負師としての甘さかなと私は思っています。(千日手成立でも2位確定で、負けでも2位確定であるなら、千日手を打開する設定にしないのは損) 無論、あの会場でそこまで気が回るかと言うとなかなか難しいものがあるとは思いますが。
やねさんらしい汚い勝ちかたですね!
白ビールさんに一回も勝てないまま、優勝できました!でも、これが世界コンピューター将棋選手権( ˃̶͈ ᴗ ˂̶͈ ) pic.twitter.com/sZJ2Z7zBFh
— 気軽にさゆ殿と呼んで (@mecha_sayurin) May 5, 2019
■ やねうら王チームのところにいたお子さんは?
奨励会員の山下数毅君だそうです。数学者の山下剛さん(後ろにおられたヒゲおじさん)の御子息のようです。(山下剛さんは『宇宙際タイヒミューラー(IUT)理論』というめちゃんこ難しい数学理論の理解者として有名)
数毅君は、『将棋神やねうら王』を将棋の勉強に使っているそうで、エンジン設定とかめっちゃ詳しかったです。作った私が設定の仕方を忘れているような設定も細かに覚えていて…。
会場に来ていた小学生の読みが深く、そして正確だったので私も負けじと「いや、こういう変化もあるんじゃないでしょうか」と全力で対抗してみた結果、またたく間に論破されてしまいました。ディモールト強い
— Ryoto_Sawada☀Qhapaq (@Qhapaq_49) May 5, 2019
昨日、会場に遊びに来てた小学生(奨励会員の山下数毅君)のお父上の山下剛さんからメッセージがお多福ラボのほうに来てました。山下剛さんは『宇宙際タイヒミューラー(IUT)理論』というめちゃんこ難しい数学理論の理解者として有名。
やねうら王は数毅君がプロ棋士になるのを応援してます! pic.twitter.com/RrCIjh6LgR
— やねうら王 (@yaneuraou) May 6, 2019
やねうら王VS白ビールの千日手になった戦いについて、山下剛さんは「クレバーですね、事前にしっかり対策も練って」と、やねさんのことを褒められていました。ちなみに山下さんはチェス好きだそうです。
チェスは引き分けが多く、勝ちに行くなら引き分けを狙うのも普通なんでよネ。(続く)
— すえよし@十六式いろは改公式 (@16shiki168) May 6, 2019
■ 本大会に参加して
大会直前まで評価関数が強くならなくて、たぬきチームの野田さんに学習方法など色々アドバイスをもらっていたのですが、野田さんの言う通りにしてもその再現実験自体が成功せず、その原因がわからず半年ぐらいの私の時間と計算資源(にかかった費用)が奈落の底に吸い込まれていきました。これだけ野田さんに教えてもらって、自分は何もできない、何もできてないという無力感により私は疲弊し、心を病んでいきました。
それが選手権の数日前に天啓を受けて、何もかもがわかった気になり、全能感に包まれ、「生命、宇宙、そして万物についての究極の疑問の答え」もわかる気がして、いまなら車に撥ねられようが雷に打たれようが大丈夫だろ、ぐらいの状態になりました。(私の気分的な話であり、物理的な話ではありません。念の為。)
そのため、評価関数はぐんぐん強くなり、探索部はめきめき強くなって、定跡はがんがん強くなり…え。これ夢じゃないよな…?
【第29回 #世界コンピュータ将棋選手権】
5/5(日)決勝リーグは、やねうら王が5勝1敗1引分で優勝しました。ドワンゴ賞として上位3チームへ賞金を贈呈しました。
優勝 やねうら王
2位 Kristallweisen
3位 狸王▼特設サイトhttps://t.co/0prmRF0yek
▼視聴https://t.co/jqMOjyMY8j pic.twitter.com/5Kw96uWG0z
— ニコ生公式_将棋 (@nico2shogi) May 5, 2019
2019/05/06 10:00 追記
白ビールの芝先生のほうから、本記事に言及があったので紹介しておきます。
2019/05/11 23:00 追記
やねうら王の優勝が確定する瞬間の会場の様子(動画)
関連記事
やねうら王 WCSC29に参戦します
WCSC29、一日目の感想と疎結合クラスターについて
“水匠相手に横歩を取らせてしまうやねうら王”
WCSC29、2日目の感想
優勝おめでとうございます。過去の電王戦や「CODE VS」など見させて貰っていますが、もう駄目か?と思もっても踏ん張って残り勝ち上がっていくという展開を何度も見ました。「CODE VS」とかやねさんの事前分析で語られていた通りに試合が展開したり・・・。
ドラマチックな展開の裏にはその都度考え抜かれた作戦が有ったのですね。
やねさんは本当エンターテイナーですね。存分に楽しませて貰いました。
私としては自分の観測できる範囲の情報を用いての最善を目指しているだけのつもりなんですけど…。
勝つよ勝つよと言って勝っても盛り上がらないからファンを不安にさせておいて喜ばせるというふりですね。さすがエンターテイナー。
言ったとおりになりましたね。
しかもらしい勝ち方ですばらしい。一成さんもそうだったけど勝ちにこだわる情熱が勝敗を分けるんですね。〇chで批判されるのを楽しむスタイルですねw
寝坊して1日目で速攻とんぼ返りの可能性は十分ありましたけども(´ω`)
夢ですね!w
やっぱ夢かー…
初出場初優勝の快挙おめでとうございます
ボナンザ以来になるのかな?
後はuuunuuunでトップを取れるかですね!
R4500くらいになってるんですか?
計測方法でずいぶん変わるので、レーティングサイトでいくらになるかは私はよくわかっていません…。
この記事を含めて、ここ数日の解説、めちゃおもしろかったです!!!
プロスポーツだと選手や監督の頭の中が詳細に語られることはないですからね(生活をかけて勝負しているので)。
相手チームの思考を先読みし、巧妙に策を繰り出す。その過程が詳細にわかって、もはや感動的なまでにおもしろかったです!! すごい傑作ドキュメンタリーですよ…。
お褒めいただき、ありがとうございます。(`・ω・´)b
まずなにより優勝おめでとうございます。
5/3~5、ビールを飲みながらw PCにかじりついて応援しておりましたが、とにもかくにも面白かったです。やねさんをはじめ、運営に関わった全てに人に感謝申し上げます。
コンピュータ将棋選手権なのに、裏では人間の虚々実々の駆け引きが行われているような所が、ゲーム好きとして痺れました。
特に、千日手について「やねうら王は千日手は打開する設定にするぞ」ってのが伏線となり、最終局の開始2秒前に「千日手大作戦」の twitter メッセージ。
下手な推理小説真っ青です。w
お疲れが出ませんように。
失礼します。
> 「やねうら王は千日手は打開する設定にするぞ」ってのが伏線となり
あれが結果的には完璧に煙幕となってますねw まあそれは狙ってやったわけではなく、刻一刻と状況は変化していくので、その状況のなかでの最善を手探りで探っているに過ぎないのですが。
長かったですね
思い起こせばponanza、定跡・評価値・検索をいろいろ駆使してもでには全く歯がたたなかった(他のソフトも)
悲願のponanza攻略は弟子?のelmoが代わって退治
勝利を我が事のようにように喜んでおられたのが印象的
しかしZERO以来、評価値部門では引退されたのかなと思っていました
昨年、美女棋士?に参戦を依頼され、クリスマスのブーイングをものともせず参加決意
ぎりぎりまで、強くならん評価値に嘆いてらっしゃいました
天啓があり鬼神のごとき強さになり優勝候補の一角に…
だが1次予選の白ビールとの将棋は時間がなく終盤ぼろぼろでした(アマ初段レベルw)
決勝最終の再戦に向け1つ目の武器を公表
実は1つ目の武器は白ビールに対策とられていた、隠し持った2つの目の武器がヒット
表彰式の神妙な面持ちにジーンときました
悲願の優勝おめでとうございます
白ビールとの最終戦。
千日手成立時のスコア(評価値)をなぜ+99999(MAX)にせず+200にしたんですか?
大きな値にした場合、何らかのコーナーケースに引っかかって地雷を踏み兼ねないからです。(事前検証していないので)
優勝おめでとうございます!
やねうら王WCSC29ver.の公開はいつごろですか?
公開するかどうかは南の島(バカンス)で考えますわ…。(´ω`)
優勝おめでとうございます!
この次はNNUEとテラショックを引っ提げチェス界に殴り込みですか?
CrazyShogiのRemiさんに「YaneuraOu is the most famous shogi library.」「Nice to meet you.」しか言えなかった私が英語圏で戦えるとお思いで?(´ω`)
TCECは対面で喋らなくていいからきっと大丈夫ですよ(?)
(;・∀・)
えー、人間の将棋は対戦相手が誰になるという事前情報がある訳で、コンピュータの思考はアイマスクを付けたまま盤の前に座らされ、1回目の手番が回ってきたところでアイマスクを外すようなものだと思うので、対戦相手が確定したところで対戦相手に合わせた作戦をパラメータとして付加するのは問題ないんですよね?
全盛期を過ぎ引退するに至ったひふみんが対戦相手ですと言われて盤の前に座って待っていたら、部屋にやってきたのが全盛期羽生さんとか全盛期に向けてブーストが掛かり始めた藤井さんだったでござる、という訳ではないですしw
優勝おめでとうございます❗
お名前は以前から知っていましたが、並みいる強豪を押さえての優勝。
素晴らしい。
機会があれば、アルファゼロとの対局も観てみたいと思っています。
TPU×2のAlphaZeroにはAWSのm5.metal 1台(本大会のやねうら王の仕様)で互角以上で戦えると思うのですが、あちらはTPUいくらでも使うと強くなるので、あちらはまだまだブーストできそうで…(´ω`)
こちらも、もっと効率の良い疎結合クラスター手法を発明しないと太刀打ちできなさそうです。
やねさん。疑問なのですが、なぜwcscに出ている評価関数は一から作り直したものなのですか?過去の評価関数から学習させればもっと強くなるはずなのに、、、
来年はルールが改定されるらしいのでそのへんの問題は多少クリアになるはず…。