GPW2007自戦記

今年も、11/9から11/10夜までGPWに参加してきました。興味深い発表や、開発者の方の話などを色々と聞くことができ有益でした。

GPWのサブイベントのコンピュータ将棋大会であるGPW杯2007においては、 何と大槻将棋はYSS, Bonanza ら並み居る強豪を撃破し全勝優勝しました。 GPW杯という非公式大会ではありますが、もう二度と機会がないかもしれず、かつ比較的良い将棋を指せた気がするので、優勝記を書くことにしました。
 

大会前の話

例年はそれなりにGPW杯を1つの目標として作りこみをしているのですが、今年は1ヶ月前位に一念発起して、55将棋のプログラムをbitboardで0から作り始めたので、そちらにかかりきりになり、本将棋については、一応木偶の坊対戦で動くことを確認した程度でした。選手権との差分も、実はあまりなくて、
・hashを1手毎にクリアしないように
・評価関数のパラメータをチューニング
・序盤の定跡手選択を頻度の多いものがより選ばれるように改良
したことくらいと思われます。これらの改良により、将棋倶楽部24で対戦した感触では、序盤が比較的安定したという印象はありましたが、大して期待はしていませんでした。

現状の大槻将棋の実装は、ほぼ、
・Crafty(+Fruit)の探索アルゴリズム
・Bonanzaメソッドによる学習評価関数
・YSSライクな指し手生成およびオーダリング
・PDSの詰め将棋ルーチン、類似ハッシュ

を組合わせたものとなっていると言ってよいと思います。もちろん、それぞれにちょっとした工夫や改良点はあるものの、個別で見ると本家には及ばないもだと思われます。

55将棋について

ついでなので、やはりGPWのサブイベントであったコンピュータ55将棋大会に関してもコメントをしておきます。55将棋は32bitで足りるので、本将棋よりはbitboardを使いやすいだろうと思い、研究がてらbitboardで55将棋のプログラムを書いてみました。昨年のGPWでライエルさんが発表されていたdiagonalの話が漸く理解できたり、Crafty の実装に感動したりと、それなりに得るものはありました。ただCUTやORDERINGの実装が間に合わず、npsはcore2duoの並列化なしで350万ノード程度出ているにも関わらず、20秒考えてもイテレーションは9-11手位先位までしか回りませんでした。オーダリングが完璧なら、全幅+ただのalpha-betaでも1秒で12手位は読め、色んなCUTを実装すれば、全幅でも20手近くイテレーションが回るのかなという気はします。

評価関数は全く分からなかった(+時間がなかった)ので、駒価値を適当に定めただけ(2日目からは、1日目の夜中に夜通しで研究を行った保木さんのアドバイスに従い、33の位置に駒があるときの評価を追加、効果があるかは不明)の単純なものでした。駒価値としては、馬、金、龍の価値がかなり高く、その他の駒(歩以外)の価値は似たようなものでは、という話が定説になっていました。

結果は、
・最初の対局でいきなり打ち不詰めの反則負け(銀も持ってたのに・・・)になった。
・なぜか変な+INF が返って暴走手を指してしまう。
・一手詰めを、指されるまで気付かない

などバグが色々とあったためか、10チーム中4位でした。優勝は55TACOSで、2位が午後のゆうちゃん、3位が55みさき、でした。(間違っていたらスミマセン)TACOSは実現確率を使っているとのことで圧敗し、55みさきとは、大会では当たりませんでしたが、練習対局では負けました。やはり将棋の場合は、UCTのような確率的なことをやるよりは、しっかり探索するプログラムの方が強いようです。モニタを見せていただいた感じでは、55TACOSも55みさきも、私のプログラムより深くイテレーションが回っていたので、妥当な結果だと思いました。ただ大会の途中からは並行してやっていたコンピュータ将棋に気を取られてしまって、55将棋の方はかなりおざなりになってしまいました。関係者の皆さん失礼しました。




自戦記


以下、自戦記です。
なお以下の棋譜表示には、勝田将棋盤 V2.3 を使用させていただいています。

一回戦:vs GPS戦 ○

龍を先に作られ、不利になったと思ったら、いきなりプチっとPCの電源が落ちた。何とブレーカーが飛んだらしい。本将棋、55将棋、囲碁と3つも大会を開催したのは少し無理があったみたい。何と言ってもすべてのマシンが全力で回っているので・・・。結局、全局指し直しとなった。今日はツイてるなと思ったが、後で調べたら、中断局面もコンピュータ的には必ずしも悪くなかったみたい。私の実力ではよく判らないが・・・。
改めて仕切りなおし。途中は良さそうで、さっさと端を突いたりして抑え込みにいければ優勢にできた気もするが、そんなことはできず切り合いにいく。GPSは104手目の▽22金に7分以上使ってしまい、その後ほぼ1秒将棋になったのが痛かったか。よく考えると、ここからは大槻将棋が10倍近く時間を使っているのに、互角以上の終盤となっているということは、GPSの方が自力は上という気がする。じっくり考えれば負けの局面は多くあったが、最後は、時間を残したお陰で何とか勝ちになった。

二回戦:vs 柿木将棋戦 ○

相矢倉もどきから馬を作られ、金銀をたくさん取られ必敗局面に。もう駄目かと思ったが、今年の選手権の対戦と同様のまさかの大逆転となった。最近の大槻将棋はコンピュータ相手に結構こういう展開が多い。強い人間にはあまり通用しないのだが。
   

三回戦:vs マイムーブ戦 ○

ブログを拝見させて頂いている感じでは、着々と強くされている感じで楽しみな対戦。飛車交換した辺りは、駒損ながらマイムーブも相当な形と思ったが、その後うまく攻めを続けられなかった。飛車交換は陣形の低い先手の方が有利といった感覚は、まだまだ大槻将棋には難しいみたいである。ただマイブームはこの後ミスを重ねてしまい、ジリ貧になってしまった。
 

四回戦:vs 奈良将棋戦 ○

藤井システムの定石が切れた直後に、ちょっと無理めな▲13桂成り捨てを敢行したものの、そのまま攻め切ってしまった。 この辺りは、Bonanzaメソッドの弱点の一つだと思う。読んでなくても凄い手が指せるというのはある意味、長所の裏返しなのだが。人間の強い人相手だと、こういう無茶苦茶な攻めは切らされてしまいそうだが、以下は無理が通ってしまった。
 

五回戦:vs YSS戦 ○

かれこれ10連敗位しているYSS。ここからは超表街道で、連敗が予想された。
YSS戦はいつも中盤になる前に終わってしまう。本局も、この一番肝心な勝負で、美濃囲いから18香19玉のアナグマの屋根なし(???)を目指してしまった。これは明らかにBonanzaメソッドの弊害、といっても後で28に埋められれば、良いかと楽観的に考えていた。
この後まずは快調に攻められ成銀を作られた。その後怪しく暴れて何とか馬を作ったものの、後手に角筋を生かして、▽35歩ともろに弱点のこびんをつかれ万事休すかと観念した。しかし、ここで▲17馬から▲26馬という怪しい受けがあり、何とその後YSSの攻めを凌いでしまった。
その後は、2枚目の馬も作り大優勢になり、どんどん評価値が上がっていく。後は間違いさえ起こらなければと思っていた。

すると、その間違いが起こった。139手目▲32銀打以下は詰みと読みきったはずだが、145手は何故か▲21角という詰みでない手が返ってしまい、「え゛っ・・・」となった。多分、詰めハッシュエントリを上書きするようにした弊害で、バグが入ったようだ。147手目いきなり考え始めたときは呆然とした。しかし幸いだったのは、まだ負けではなかったこと。YSSの時間切迫にも助けられたか、再度詰ますことができた。YSSに念願の初勝利。しかもコンピュータを騙すような勝ち方ではなく、しっかりねじりあいを制しての勝ちなので、より価値が高いと思う。
漸く一矢報いることができた。今大会では一番嬉しい勝利。

六回戦:vs Bonanza戦 ○

言わずと知れた、Bonanza。奇跡は2度は続かない・・・はずであった。

本局は割と重い序盤となり、大槻将棋はBonanza 囲いもどきになる一方、Bonanzaは一人千日手モードに。そこでまた▽12香。Bonanzaメソッド(大槻版)は、屋根がなくても穴熊は大好きである。決して、この後の展開を読んで指した訳ではない。と思っていたら、今度はしっかり▽53銀を22まで持っていって好形に。まるでプロみたいである。この後穴熊らしく切り合ってかなり良くなった気がする。しかし92手目▽88歩打は重くて、さすがに悪手だろう。この辺りからだんだん混戦に。もう少し早くと金を活用していれば、この後の展開が楽だったかも。以下はねじり合い。進めば進むほどよく判らなかったが、最後は勝ちに。何と、Bonanzaまでねじりあいで下してしまった。2位以下は2敗していたため、これでまさかまさかの優勝確定。
 

七回戦:vs 棚瀬さん戦 ○

最後は、コンピュータ将棋の弱点を知り尽くした棚瀬さん(人間)と。ある意味、2次予選レベルのソフトよりもずっと強敵。棚瀬さんは、じっとして、コンピュータから悪手を引き出すのが実に上手い。

本譜もまんまと嵌り▽93桂と跳ねてしまう。その後も、どこかで▲95歩の反発をみせつつ、じーっと駒を繰り替える。大槻将棋は、なぜか▽51金ではなく▽52金としてしまい、硬い穴熊には組めず。そして遂に76手目▲95歩。ここから暴れるしかなくなり、無理やり攻めるも的確に切らされて、と金を量産される展開に。

棚瀬さんはとりあえず入玉方針。しかし入玉を確定させた180手目辺りでは、すでに双方残り3分を切った。大槻将棋は、入玉の将棋はあまりうまくないので、そっぽの駒を取りにいっている。入玉の将棋は、陣地取りand 駒の死活判定という囲碁みたいな問題になっており、評価関数が悪いというだけに留まらず、本質的な難しさがあると思う。

この辺りから、棚瀬さんはほとんど考える必要がなくなり、ほとんど1秒の時間攻め。しかし、さらに時間が切迫した棚瀬さんも、あまり正確には指せず、時折ぽろっと駒をはがされる。192手目で遂に持ち時間が逆転し、ここから1秒で無意味な手を指され続けたら、おそらく負けていた。本譜は、棚瀬さんの決死の1秒攻めが炸裂。なぜか背後のギャラリーも棚瀬さんを応援している。250手目からは、大槻将棋も1分を切り、遂に双方1秒将棋に。1手毎に歓声が上がる。すでに将棋の勝負ではなく、瞬発力の勝負になっている。棚瀬さんは1秒にも関わらず的確にと金を寄せて、それなりに追い詰めていくが、さすがに1秒なので人間側にかなりミスも出て、迫っては取られの一進一退。しかし遂に▽31金で後手玉に詰めろがかかったと思った刹那。なんと先手玉に即詰みが生じた。総手数丁度300手の大熱戦は、突然幕を閉じた。

そして全勝優勝が決定した。

おわりに

本大会は、東大将棋(棚瀬将棋)も激指も出ていないイベントとは言え、YSS, Bonanza 等を抑えて優勝できたことは非常に嬉しいです。でも内容を良く見ると相当駄目な将棋をたまたま逆転したものも多く、やはり「運がよかっただけ」という気がします。選手権と比べると、実はマシンスペックで劣っていないというのが大きい気がします。来年は少しいいマシンそろえようかなという気になってきました。後は、(本当にできているのかは不明ですが)序盤の安定化が予想以上に効果があったかもしれません。選手権の負け将棋では、歩損からじわじわ差を拡大されていく展開が多かったので。

今後の改良点としては、以前も書きましたが、指し手生成&オーダリングを何とか学習させてシンプルな実装にしたいと考えています。GPWの中で、YSSは指し手オーダリング用の関数が50以上あり、柿木将棋は500以上あるという話がありましたが、調べてみると実は大槻将棋の指し手生成関数も、70以上あります。はっきりいってこれらは制御不能で、不良債権化しています。 この指し手のオーダリングに関しては、本年度のGPWでGPS将棋の金子さんの論文の評価項目の話と、 金子さんに伺った、RemiさんのElo rating の論文の話が、面白いと思いました。この辺で何とかうまくいかないかなと期待しています。 後、もう一つの課題は、ソフト名を気の利いたものに変えること(みんなに「変えろ変えろ」言われましたし・・・)、これは毎年課題であるものの、結局今年も先送りされるかも・・・。

おわりの最後に

11/11(日)に私用があったため、GPWからは、奇跡の優勝の後、夜中の高速を走って帰宅しました。隕石が落ちてくるか、少なくとも玉突き事故くらいには巻き込まれるのではないかと心配でしたが、何とか家に辿りつき、今のところ無事生きています。一部の方にしか挨拶もできず残念でしたが、また選手権の時にお会いしましょう。