TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

第33回世界コンピュータ将棋選手権 結果報告

5/3~5/5に開催された第33回世界コンピュータ将棋選手権に参加しました。

HEROZチームとして、「dlshogi with HEROZ」というプログラム名でエントリしました。

大会の概要

世界コンピュータ将棋選手権は、1990年より毎年開催されている歴史のあるコンピュータ将棋の大会です。
今回は33回目の開催で、46チームが参加しました。
第1予選、第2予選を通過した上位8チームで総当たりのリーグ戦で決勝戦が行われました。

大会の結果

決勝リーグでは最終戦で上位3チームが1敗で並び優勝を争う展開になりました。
dlshogiは最終戦で勝って、同じく最終戦で勝ったやねうら王とはSBの差で、優勝(二連覇)という結果になりました。

優勝につながったポイント

今大会では、二次予選の結果で、上位ほど強い相手に先手番であたることができるというルールでしたので、二次予選を1位で通過したことが有利に働きました。
現在のコンピュータ将棋では、先手番が相当有利になっており、今大会でもdlshogiは先手番では一度も負けていません。

二次予選では、やねうら王とは後手番であたっており、ここで負けなかったことが、決勝リーグにも影響しました。
やねうら王チームには水匠の開発者がチームメンバとなっており、昨年の電竜戦で水匠が優勝した要因となった先手番角換わり定跡を搭載してくることはわかっていました。
そのため、今大会では、水匠の先手番角換わり定跡に対する対策が必要でした。
その対策ができていたことが、優勝にも影響したと思います。

先手番角換わり定跡

先後同型の角換わり腰掛け銀の37手目基本図からの定跡で、コンピュータ将棋同士では現在のところ先手が必勝となっています。
詳しくは、水匠のアピール文書を参照してください。
水匠アピール文書 - Tatsuya SUGIMURA.pdf - Google ドライブ

この定跡の結果については、水匠の同士での対局の結果であり、私は最初は懐疑的でした。
そのため、再現実験を試みていました。
また、定跡に欠陥があると、自動で反省をする新しい定跡作成手法を考えて、別手法で独自に基本図からの定跡作成を試みました。

途中で、水匠の定跡が公開されたため、それに対して新しい定跡作成方法で、自動的に欠陥を探したところ、

position startpos moves 2g2f 8c8d 2f2e 8d8e 7g7f 4a3b 8h7g 3c3d 7i8h 2b7g+ 8h7g 3a2b 1g1f 1c1d 6i7h 2b3c 3i4h 7c7d 4g4f 7a6b 4h4g 5a4b 3g3f 6c6d 2i3g 8a7c 5i6h 6b6c 9g9f 9c9d 4i4h 6a6b 2h2i 8b8a 4g5f 6c5d 6g6f 5d6c 6h6i 4b4a 6i7i 4a4b 7i8h 6c5d 3g4e 3c2b 3f3e 4c4d 3e3d 4d4e 4f4e 6d6e 6f6e 7d7e 6e6d 9d9e 9f9e 8e8f 8g8f 7e7f 7g7f 8a8f 7h8g 8f8a P*8b 8a8b B*7a 8b7b 7a6b+ 7b6b P*7d 6b6d P*6f

という後手が勝つ手順を発見しました。
しかし、この手順は、その後周知の事実となったため、対策としては意味がなくなりました。

他に、欠陥がないかを自動で探していましたが、見つからなかったため、dlshogiの新しい定跡作成手法でも先手必勝という結論です。

対策定跡

平手開始局面から、自動で反省する新しい定跡作成法で定跡を作成すれば、基本図からが先手必勝であれば、後手は自動的に別の手順を選ぶはずと考え、定跡を作成していました。
しかし、千日手を考慮しないで盤面のみをキーとして扱っているため、同一局面が非常に多く現れる角換わり基本図からの展開を正しく評価できず、開始局面からだと、角換わり基本図時点をほぼ互角と判断してしまうため、自動的に回避する機構がうまく働かないという問題に直面しました。

手順が異なる局面をすべて別のキーとして扱うことで正しく判断できるようになりますが、探索空間が膨大になり過ぎて現実的ではありません。
技術的に解決したいと考えていますが、今回は角換わり基本図を負けとして扱った上で定跡を作成しました。
それにより、角換わりの別の手順を選ぶようになりましたが、むしろより先手有利の手順になるため、最終的には、序盤で後手から角交換した局面を負けとして扱うことにしました。

そうして自動で作成された定跡が、8手目後手1四歩という定跡です。
WCSC33+U4_1-900-5F+yaneuraou+dlshogi+20230504125032
コンピュータ将棋の大会ではほとんど指されていない手なので、相手の定跡外しとしても有効でした。

モデル精度向上

もう一つ今大会に向けて準備したことは、モデル精度の向上です。
昨年の電竜戦では、ResNet 20ブロックと30ブロックのモデルで参加していましたが、その時点では同じくらいのレーティングでした。
まだ30ブロックは学習途中だったため、その後追加で学習を続けました。
また、水匠と評価が割れる局面を学習に追加することで、中終盤の精度を向上させました。
その結果、電竜戦時点のモデルから、R+40くらいになり、中盤互角局面からの水匠に対する勝率も改善しました。

今大会では、二次予選から通して、負けたのは、後手番の2回のみで、先手番では一度も負けていません。
これは、モデル精度の向上と、それをベースとした定跡作成の結果と考えています。

まとめ

今大会では、先手角換わり定跡への対策と、モデル精度の向上を行ったことで、優勝という結果に結びつきました。
上位ソフトはシビアな勝負となっており、定跡選択や、中盤でのわずかな精度差が勝敗をわけるようになっています。
勝つのも大変になってきたなという感想です。
個人的には、勝敗のみを意識した開発はしたくないと思っているので、技術にフォーカスしたいところです。

今大会ではディープラーニング系ソフトの躍進も目立っており、決勝リーグの半数はディープラーニング系ソフトでした。
上位に残っているソフトは、dlshogiをそのまま使うのではなく、モデル構造や学習方法に工夫をしており、それにより棋力を向上させています。
私の方でも、より精度を上げて効率的に学習できる方法にも取り組みたいと思っています。

最後に、大会を運営してくださった主催者様、対戦してくださった他のAIチーム、そして応援してくださった皆様にお礼申し上げます。