第26回世界コンピュータ将棋選手権に参加した

いちいち注釈を付けるのも煩わしいので普通に断言口調で書くけど、細かい記憶違いはたくさんあると思うので注意。

開発状況

1月〜3月は心身の調子が悪く、4月もアニメと囲碁しかやってなかった。1月の時点で申し込みをしてあるわけで、4月はずっと「出場できるようなソフトがない、どうしよう」「他の開発者に怒られるんじゃないか(んなわけないが)」と思っていた。本番2週間前から囲碁断ちしてアニメも減らし、ゆっくり開発を進めることができた。プログラミング自体はできていたのだが、もう一生コンピュータ将棋が書けるときは来ないんじゃないかという恐怖もあった。

0日目

前日準備。16時少し前に到着。ここでフィッシャー対応とテスト対局をして、夜に本番用の評価関数を学習予定だった。家を出た時点で学習ルーチンの完成度がそこそこ高くなっていたので、ある程度の安心感はあった。
きむりんさんにテスト対局どうですかと言ってもらったものの、フィッシャー対応がまだなのでそこでは対局できず。1時間くらいかけて対応して、そこで芝浦Jr.さんと対局することに。ところが、接続ができない。PCはLANケーブルが差さっていることに気づいているが、将棋所も対局サーバも接続してないと言っているし、pingも通らない。
芝浦と運営の人たちが長時間対応してくれて本当にありがたかった。僕はWindows 10にアップグレードしてから有線LANを試しておらず、去年も出場した経験があるので対局テストもろくにやっていなかった。そのせいで原因の切り分けができず申し訳なく思った。(原因はしょーもないもので、LANケーブルを差す場所を間違えて、対局サーバではなくインターネットにつながっていた)
ごちうさの壁紙にしていたときに突然トラブルが起きたので、いや俺は見られてもいいんだけど、対応してくださった方には申し訳なかった。
時間が経つとだんだん人が増えてくる。芝浦将棋Jr.とのテスト対局は負け。1局にけっこう時間がかかる。去年の10分10秒のルールが短かったとも言える(自分は25分切れ負けを経験していない)。
19時頃会場を出て、コンビニに寄ってから宿泊先へ。1泊5000円の割にはいいところだった。これから開発。学習ルーチンはこれで今回は完成として、ペナルティのかけ方や評価関数の形を色々試した。
選手権前の夜は眠れない。普段は23時半くらいに寝ていたのだが、もう全く眠くならない。横になっていても疲れるだけだ。途中で布団から出て作業的に実験を続け、午前3時頃に50分くらいかけて本番用の評価バイナリを作った。
駒得やねうら王に勝っていたため、そこそこ強いと勘違いしていた。

1日目

初戦の相手はSilverBullet。相手の隙を突いていき、勝利。去年はいきなり時間切れ負けをやらかしてしまったので、こうして1局を指しきり、早くも1勝を挙げることができたのは嬉しかった。
2戦目はきふわらべ。学習した棋譜が少ないからか、大駒の狭さを評価できていない。負けるのは仕方ないにしても、こういう展開はつまらない。きふわらさんとたくさん話せたのは嬉しかった。
3戦目はCGPとの対戦。定跡で相矢倉となり、そこからshogi686が低すぎる構えで屈服する。穴角は仕方ないとしても、歩を垂らされて平気でいるのはおかしい。CGPも攻めあぐねていた(shogi686陣の評価値が悪すぎるので、対稲庭で攻めないのと同様の問題なのではないかと話した)が、さすがに形勢の差が大きく順当に負け。自玉を危険にするだけならともかく、相手陣が堅いのを何とも思ってないのが問題だ。ネタ的にはこの対局がハイライトだったと思う。
4戦目、カツ丼将棋。Noviceさんに棋譜を見せてもらっていて、駒割だけで出場することになったとはいえ、けっこう強いので警戒していた。しかし結果はshogi686の圧勝。48手目△55角打で勝ちを読み切ったのはすごかった。shogi686は玉の近くに歩を垂らされても何も感じないようだが、評価関数が駒割のカツ丼将棋もまた玉の近くに歩を垂らそうとは思わないわけで、(対SilverBulletもそうだが)相性がよかったのかなと思った。
次は白砂将棋。早い△74歩が相手の狙いを封じたらしい。白砂将棋が▲78金と引いたのも、コンピュータらしい形を気にした疑問手。ここから、白砂将棋は銀損の攻め。shogi686は、歩を2枚垂らされることになるのは読めていたと思うが、それを評価できないのでそういう局面にしてしまった。白砂将棋は銀損してから悠々と2手かけて玉を囲っていたが、結果的にこれが大変な好手で、shogi686はいいところなく負けてしまった。水平線効果が出そうな局面で歩不成をしてしまったのが残念だった。一緒に観戦していて、白砂さん(人間)の棋力を感じた。コンピュータ的にはどうやっても大差の終盤で、人間の考え方を聞けたのがよかった。
6戦目、悲劇的 with Zero。ワーセナルとは一言も言ってないですよ?▲38金〜▲29飛とした陣形はけっこういいと思ったが、相手の銀を繰り出す攻めを全く軽視している。やはり玉頭を危険な状態にしてしまい、順当に負けた。
最後の相手は隠岐。序盤から読み勝っていた印象で、そのまま押し切ったが、こちらがmate+13の手を指したところで投了され、すごみを感じた。
これで3勝4敗、一次予選24位。この成績は悔しかったが、準備期間を考えれば順当だとも思った。
夜はもんもんとしながらTwitterを楽しんでいた。

2日目

居場所があるのか不安だったが、空いてる机を使わせてもらえるようで、エスペラさんのPCでクジラちゃんのニコ生を見せてもらっていた。他の開発者と話しながら見るのは楽しい。
時間が経つと、一次予選敗退組が集まってくる。色々話をしたり、ソースを見せ合ったりして素晴らしい空間だった。ただ、どうしても同世代(年齢ではなく大会初参加の時期が同じという意味)で集まってしまう傾向があり、そこはちょっともったいないと思った。
一次予選組が強いのだが、シード組の棋力もかなり底上げされているように見えたのが印象的だった。全体の技術レベルの向上を感じた。

3日目

疲れは去年ほどではなく、夜もある程度は眠れていた。お腹の調子がよくなかったので、対局開始時には会場のトイレにいた(どうでもいい)。
空きスペースはけっこうあるけど、やはり中央は居づらいので、端っこの机でニコ生やダベり。ただ、時間が経つと人も増えて緊張感はなくなってくる。人が増えるのはいいことなんだけど、うるさくて話が聞き取りづらくなるのがつらかった。
決勝の空気をその場で感じながら、色々な人とコンピュータ将棋の話で盛り上がる。自分がなぜこんな幸せな場所にいるのかと思った。
そして川崎から電車で帰る。充実していた。時間はかかるが、乗り換え1回で帰れるのはありがたい。俺(川崎まで2時間)より遠くから選手権に参加している人のことは、無条件で尊敬している(やや大げさな表現)。CSAは来年もこの会場を考えているようだ。

その他

自分で参加すると、棋譜やニコ生を見る量が極端に減るので、もったいない感がある。
シード権放棄について。一次予選から色々な人と交流したいと思い放棄したが、実は二次予選のほうが対局数が多いという。交流という意味でも対局数は重要だからね。まあどっちもどっちという気がする。結局ね、あんまり話したことがない人には話しかけづらいんだよね。今回は特に、開発時間が少なくて持っている話題も少なかったし。
技術的なことはアピール文書(短いけど)に。ざっくり言うと、電王トーナメントバージョンのバグを直して並列化(12月)、創作評価関数を試してみた(4月)、という感じ。短時間で開発した割には形になった(弱いのが問題なんだけど)。半年前の電王トーナメントのときから少し思っていたけど、基本的なもの(Stockfish探索+ボナメソ)を自分で書いた経験があると、コードを流用するなどすれば短期間でもそこそこのものが作れてしまう。普通はサボってしまいがちになると思う。
本番での設定は、Ponderオフ、置換表1GB、スレッド数7、定跡手数は50、秒読みマージンは15秒。Ponderを切ったのは、なんか最近すぐ熱でクロックが落ちるようになったから。不本意だが、相手の手番で冷やして自分の手番で高速に回すという作戦。テストが不十分なPonderを使いたくなかったというのもある。スレッド数が7なのは、1スレッド空けておくことで指し手を返すのが遅れるリスクを減らすためで、保険のようなもの。よく考えたらフィッシャーならそんなに気にする必要なかったか。定跡は微妙なところだが、序盤でおかしくしたくなかった。色々な展開でこの評価関数の将棋を見てみたかったというのもある。