Qhapaq overfit adventureの評価関数を公開します

第1回世界将棋AI電竜戦で3位入賞、振り飛車最強を達成したQhapaq overfit adventureの評価関数を公開します。

 

ダウンロードはこちらから

github.com

【学習方法と基本的なスペック】

本関数は特定の戦型に特化しないことを目指した設計になっています。より具体的にはtnk互角局面やillqha互角局面などの公開された互角局面集において良い勝率を上げられるようにすることを目指しています。

昨今のNNUE関数は特定の戦型に特化すると別の戦型で勝率が下がることが示唆されており、大会ではこれを定跡でカバーするのがお約束となっていますが、角換わりと矢倉に飽きたのでより雑多な局面でも強さを発揮できる、検証用に使いやすい関数を目指しました。

 

qhapaq.hatenablog.com参考:2019年のsotaソフト群のvs振り飛車勝率

 

2020年のwcsc版の水匠を元データに追加学習を行い、1手1秒、tnk互角局面集におけるvs水匠勝率はおよそ55%(81-3-62)でした。ただし、定跡offでは水匠よりも微妙に弱い(誤差の範囲ではある気もするが300戦で勝率48%)ので、ムラの大きい関数であると思います。

 

大会では振り飛車で戦いましたが残念ながら関数自体は居飛車党です。shinderellaの項目で紹介したような振り飛車向けの追加学習も狙ったのですが、HoneyWaffleの定跡が優秀過ぎたのでそちらを採用しています。

 

【2日目の振り返り】

対戦結果などはこちらからどうぞ

golan.sakura.ne.jp

 

ソフトの運用方法

1日目の振り返りで述べたように、チームメンバーが謎に高いCPUを持っていたのでめちゃくちゃ強かったです。ここ暫くの大会と違い今回はPreponderなしで運用しました。お高い単一のPCでやねうら王を回しているのと同じ状態です。唯一細かい違いと言えば、ConsiderBookMoveCountをfalseにしています(厳密には負けたdlshogiといちびん戦だけtrueにしてました)。

 

1戦目 Grampus 勝ち

飛車を振ってくれるか非常にヒヤヒヤしましたがなんとか振ってくれました。定跡の引きも悪くなく、抜けた時点で-100前後に収まってくれていました。入玉模様になり宣言勝ちルートに迎えたのはただ運が良かっただけなのですが、やねうら王の引き分け設定を書くにするのを忘れており、256手目で持ち時間を使い切らないかヒヤヒヤしていました。今のデフォルトのやねうらではn手引き分けを前提にしていないので、普通に持ち時間を使って宣言勝ちをしてくれました

 

2戦目 GCT 勝ち

deqshi相手に飛車を振ってボコボコにされていたので、深層学習勢に飛車を振っていいのかイマイチ自信がなかったのですが終盤の局面で相手がいきなり頓死筋をひいたおかげで暗殺することが出来ました。余談ですがGCTの頓死筋はやねうら王なら即座に読み切れる(1秒未満の読みでもqhapaq超有利との結論がでていた)ものだったので、やはりdeqshiのように深層学習とやねうら王を組み合わせる戦略は正しかったと思い至り、無駄にガッツポーズをしていました。まあ、この時点ではここからGCTが無双して優勝するとは読めてなかったし、二大会連続で優勝ソフトの全勝を一人で阻むという名誉に預かるとも思ってなかったのですが

 

3戦目 BURNING BRIDGES 勝ち

floodgateの常連との戦いはありそうでなかなかないので、個人的には当たるのを楽しみにしていた相手の一人です。定跡の引きが評価値的には悪く(-200前後)、22の飛車がニート化して負けるのではないかと思っていましたが、詰む詰まざるやの局面で二段目の守護神として相手の守り駒と刺し違えたときには感動しました。HoneyWaffleの定跡的には好みの戦型の一つのようなので、評価値に惑わされずに長時間戦で勝てる定跡を作れるのは凄えなあと感心しました。

 

4戦目 二番絞り 勝ち

2日目は計算資源がでないとのことなので割とあっさり勝てました。とはいえ、過去の大会で定跡などで急激な変化に持ち込んでいきなり大駒や玉が寄り筋にはいってレート差をひっくり返される展開を度々見てきたので、急な戦いを避けやすい振り飛車は偉いなと少し思いました。

 

5戦目 Amaetadine 勝ち

遂に飛車を振らないというガバをやらかしました。定跡が外れると飛車を振らないのは想定の範囲内でしたが、ここに来てようやくConsiderBookMoveCountをfalseにしていた事に気づきます。居飛車での戦いは想定していませんでしたが、評価関数が居飛車だったため普通に居飛車で強く、計算資源の差もあって勝つことが出来ました。

 

6戦目 みずうら王 負け

蓋を開ければ飛車を振って5連勝と優勝すら見えてきてテンションがダダ上がりしました。この戦いは優勝ソフト決定戦かということで、とても注目されていたことと思います(なお、私はビビリなので動画中継を視聴してネットが死ぬことを心配して中継はみていない)。が、qhapaqはここでも飛車を振りそこねました。その後、「相手が右四間飛車なので実質対抗戦」みたいな謝罪文章を考えている間にもあれよあれよと評価値を損ね、あっさりと負けてしまいました。評価値の推移的にも定跡を抜けた時点で既に悪く、定跡が噛み合わなかった感じがします。

 

7戦目 dlshogi 負け

流石に飛車を振らずに負けるのはどうかということでConsiderBookMoveCountをtrueに変更。deqshi相手に振り飛車でほぼ負けと言っていい試合をしたことから、深層学習勢に振り飛車が刺さるか不安だったのですが後手番であり定跡の引きも悪かったのもあって、定跡を抜けた時点で評価値-200、50手目には評価値-500とフルボッコな展開になってしまいました。

 

8戦目 いちびん 負け

ConsiderBookMoveCountをtrueにするのが縁起が悪い気がしてきたものの、先手ならなんとかなるやろと据え置きで対局。が、定跡は再びハズレをひいて定跡を抜けた時点で評価値-200、50手目には評価値-500と再びフルボッコな展開になってしまいました飛車を振ってる分はエライんだが。中の人はこの時点で相当ふてくされていましたが、5chで「qhapaqの終盤の失速がお家芸だ」と書き込まれてるのをみて「おお、qhapaqを年単位で観測してくれてる人がいるのか」となんとかテンションを維持しました(ふてくされても勝ち負けに全く影響がでないのがコム将棋のいいところですね)

 

9戦目 dolphin(illqha) 勝ち

floodgateやレーティングでしのぎを削ってきたdolphinと遂に大会で直接対決。勝つとメダルがもらえる圏内に入れるかもということでConsiderBookMoveCountをfalseに戻して神頼み。が、流石は長らく振り飛車を葬ってきた信頼と実績dolphinだけあり、あっさりと負け模様に。dolphinに負けるとメダルは他力。具体的にはみずうら王が勝たないと駄目っぽい。四連敗の画面を見てると萎えるので、vs dolphinの中継画面を閉じて、みずうら王 vs BURNING BRIDGESの試合で全力でみずうら王を応援することに。が、映画館でプリキュアを応援する女児のように「みずうやおう がんばえー!!」という私の叫びは通らず、みずうら王敗戦。対局が終わったから仕方ねえなと画面を開くと......

 

なんか逆転してるーーーー!!!!

f:id:qhapaq:20210102124124p:plain

 

恐らく本大会のAリーグ最大の逆転勝利をキメていたのです。流石は振り飛車の神の寵愛を一身に受けしもの。このぐらいの評価値はひっくり返せるってか?

 

というわけで、最終戦でみずうら王が負けたのをあわせて勝ち星で並び、GCTとGrampusが頑張ってくれたのもあってソルコフ差で3位入賞。やねうら時代で恐らく初の振り飛車党での賞金圏入りに成功しました。

 

【細かい反省点】

定跡がハズレても飛車を振るようにしたかったです。HoneyWaffleの定跡が強かったのでそれを使うのはいいとしても、定跡が外れたと気に無理やり飛車を振るように、予備の定跡を用意するか、序盤だけShinderella的なソフトに指させるかをすればいけるだろうと思ってましたが時間が足りませんでした。

 

次の大会のコンセプトどうしようかしら。恐らく深層学習勢が滅茶苦茶増えることでしょうけど、単純に計算資源を投げ込んで学習しても面白くないしなあ。

 

でもなんかやります。大会を運営してくれた方、参加してくれた方、そして何より楽しんでいただけた方全てに改めてお礼申し上げます。関数の公開遅れて申し訳ないです。