Cythonを使った高速なPythonの将棋ライブラリcshogiに、Elo rating測定機能を追加した。
誤差とLOS
連続対局を行い、Elo ratingと誤差(95%信頼区間)をレポートする。
何%の確率で強いと言えるかを表すLOS(Likelihood of superiority)も表示する。
LOSが95%を超えない場合は、追加で対局が必要であるという判断ができる。
以下のような形式で、結果がレポートされる。
100 of 100 games finished. Apery_WCSC28 vs Gikou 2 (v2.0.2): 62-38-0 (62.0%) Black vs White: 60-40-0 (60.0%) Apery_WCSC28 playing Black: 36-14-0 (72.0%) Apery_WCSC28 playing White: 26-24-0 (52.0%) Gikou 2 (v2.0.2) playing Black: 24-26-0 (48.0%) Gikou 2 (v2.0.2) playing White: 14-36-0 (28.0%) Elo difference: 85.0 +/- 71.2, LOS: 99.2 %, DrawRatio: 0.0 %
※cutechessを参考にしている。
複数プログラムでの測定
強さの測定は、同系統のプログラム同士だと勝率の差が付きやすくあまり信用ができない傾向がある。
そのため、系統が違う複数のプログラムを混ぜて測定を行う必要がある。
複数プログラムの対局結果から、Elo ratingを算出するのは単純ではなく、Bayesian Eloのようなベイズ推定で事後確率から事前確率を推測するアルゴリズムが必要になる。
Ordo
Leela Chess Zeroのテストでは、Ordoというツールが使用されている。
Ordoでは以下のような形式で、複数プログラムのレーティング差がレポートできる。
# PLAYER : RATING ERROR POINTS PLAYED (%) CFS(%) W D L D(%) 1 sf : 0.0 ---- 2073.5 4000 52 98 800 2547 653 64 2 lc0_policytempdecay : -9.6 9.0 973.0 2000 49 85 338 1270 392 64 3 lc0 : -16.6 9.5 953.5 2000 48 --- 315 1277 408 64
Ordoは、チェスのデファクトスタンダードであるPGNフォーマットを入力とする。
PGNには、プログラム名と結果を含む7個の必須の項目だけ記述されていればよく、将棋の対局結果も問題なく記述できる。
PGN出力機能
そこでcshogiにも、連続対局の結果をPGNで出力する機能を追加した。
出力したPGNをOrdoに入力すると、以下のような結果が表示できる。
PS C:\> ordo-win64.exe -Q -D -a 0 -A "Gikou 2 (v2.0.2)" -W -n8 -s1000 -U "0,1,2,3,4,5,6,7,8,9,10" -p games.pgn 0 10 20 30 40 50 60 70 80 90 100 (%) |----|----|----|----|----|----|----|----|----|----| *************************************************** # PLAYER : RATING ERROR POINTS PLAYED (%) CFS(%) W D L D(%) 1 Apery_WCSC28 : 89.8 75.7 62.0 100 62 99 62 0 38 0 2 Gikou 2 (v2.0.2) : 0.0 ---- 38.0 100 38 --- 38 0 62 0 White advantage = 75.74 +/- 39.21 Draw rate (equal opponents) = 0.00 % +/- 0.00
オプション「-W」を付けると、先手有利を補正した上のレーティングになる。
推定された先手のレーティングは、「White advantage」に表示される。
※チェスのツールのためWhiteが先手なので注意
上記は2プログラムの例だが、複数プログラムの対局の組み合わせで連続対局を行い、結果のPGNを連結して、Ordoに入力すれば、複数プログラムのレーティングが計算できる。
使い方
インストール方法
ソースからインストールする場合
pip install git+https://github.com/TadaoYamaoka/cshogi
コマンド例
> python -m cshogi.cli C:\apery_wcsc28\bin\apery_wcsc28_bmi2.exe C:\gikou2_win\gikou.exe --options1 Byoyomi_Margin:0 --options2 ByoyomiMargin:0 --byoyomi 100 --games 100 --opening records2016_10818.sfen --pgn games.pgn