レート測定エンジン ELQを使って君も棋力解析をしよう!

藤井四段と羽生三冠のどちらが強いか、流行の人工知能に聞いてみました - qhapaq’s diaryで用いたレート解析機をやっとの思いでリリースいたしましたので、此処に報告いたします。ソフト自体はかなり前にできていたのですが、皆様の利用に耐える形になるのに凄く時間がかかりました......

 

DLはこちらから(ソースコード付き)

Release レート測定器ELQ · qhapaq-49/qhapaq-bin · GitHub

 

レート測定器ELQの使い方

0.ELQの動作環境

ELQはC#で開発されています。windows上での動作を確認していますが、他OSでの動作は確認しておりません。

 

1.将棋guiを用いた棋譜解析

まず最初に、ELQのkif_exampleのように、解析したいプレイヤー(プロ棋士、ソフト、etc)の棋譜を先手、後手別に分別して保存してください。ELQには棋譜コメントから先手後手を判別する機能はついていません。

分別が終わったら、解析したい棋譜将棋guiの"連続解析"を用いて解析します。手元のバージョンでは対局タブから棋譜解析から連続解析が出来ました。指定したフォルダにkif、csaファイルといった将棋guiに対応した棋譜ファイルを置くことで、連続で解析を行うことができます。解析にはそこそこ時間がかかります。ラノベを読むなどしてお待ちください。

kif_example/fujiis/fujiis_sente/ 内のkifファイルのように、kifファイル内に指し手とソフトの評価値が用意されたら準備OKです。

 

2.ELQを用いて仮想エージェントを創る

kifファイルが保存されたフォルダを指定して、「指し手データ作成」ボタンを押してください。保存するcsvファイルの名前を聞かれるので、適当な名前を付けてあげましょう。

注:ELQは指定したフォルダ内のkifファイル"のみ"を"全て"読み込む仕様になっています。将棋guiの解析の保存形式がkif以外だったり、元の棋譜ファイルがkifファイルだったりすると不具合の原因となりますのでご注意ください。

注2:将棋guiは日本語でログが保存される関係で、テキストエンコーディングの愛称が問題になってきます。ELQはshift_jis対応ですが、他のエンコーディングへの対応は明示的にはしていません。将棋guiのデフォルト設定で問題なく動いていることは確認していますが、ご注意ください。

 

3.仮想エージェント同士で対局させる

step2で作ったエージェントをレート測定のタブ上で戦わせることが可能です。細かい動作原理はソースコードを参照していただけると幸いですが、雑に言えば「各プレイヤーについて、局面の良さに毎の指し手の統計データを取り、それにしたがって局面の評価値を動かすエージェントを作り、その勝率を測定」することでレートを測っています。

藤井四段と羽生三冠のどちらが強いか、流行の人工知能に聞いてみました で用いたレート測定用のパラメタは評価値カーネル200、ノイズ20です。これは羽生三冠ととある棋士(双方とも対局数が多く年単位でレートがあまり動いていない)のレート差を際限するように調整した結果です。

 

4.棋風を解析する

step2で作ったcsvファイルをelq_templateに入れることで、棋風の解析が出来ます。一例として、藤井聡太四段のデータを可視化してみましょう。

f:id:qhapaq:20170719231154p:plain

横軸は局面の評価値、縦軸は悪手を指す確率(厳密にはソフトが評価する手を指す前と後での勝率の差分の変化量の平均)です。値が大きいほど悪い手を指す傾向が強いです。青が藤井四段、赤が対局相手です。

こうして見比べると、藤井四段と対局相手とでは200-1000点程度の自身が有利な局面での手の質に大きな差があることが解ります。藤井四段の29連勝には逆転勝ちの棋譜も少なくないですが、改めて数値化すると、藤井四段は自分が有利なときはミスをせず、相手が有利なときにミスを誘うような手を指すのがとても上手であると言えます。加えて、相手のミスを誘う勝負手はソフト的にはベストな手ではないことが多いにも拘わらず、藤井四段の不利な局面での悪手率は対局相手と比べてもあまり高くないのは驚愕です。

 

藤井四段旋風に乗っかって藤井四段の棋譜ばかり解析していたので、他の棋士のデータがあまりないのは心苦しいですが、本ソフトを使って皆様も棋風解析を楽しんでくれれば幸いです。本研究ではやりませんでしたが、戦型別の棋風測定なども有意義であると思います。

 

おまけ、本ソフトの名前の由来

本ソフトの正式名称は「ねうら王の学習がまだ終わらないから作ったelmo-qhapaq理論型レート測定器」略して「山田エルク」です。

どういうわけか某大作ノベルの人気キャラの名前にとても良く似ていますが、1億%偶然です。やる気が出たからコードを書きました。レート測定部分の変数添字が逆だったなどのバグを発見した際はダビデ像を添えてご報告いただければ幸いです。