Python
DeepLearning
データ分析
ディープラーニング
コンピュータ将棋

【将棋AI】「将棋AIで学ぶディープラーニング」を読む♪~レーティングを求める

将棋AIで学ぶディープラーニング
第廿六夜は、先日にひきつづいてレーティングの話です。
今回は、参考のページに対戦成績を入力すると相対的なレーティング差からレーティングを求めるというものです。
【参考】
レート計算をする@コンピュータ将棋データベース

やったこと

(1)上記参考ページからレーティングを求める
(2)理論(ソースコード)を見る

(1)上記参考ページからレーティングを求める

昨夜の結果から、だいたいのレーティングはわかったが、やはり第三者的な意味でレーティングを出しておくことは意味があると思うのでやってみた。
結果は以下のとおりである。
data generated : 30/9/2018 total games: 76

software rating error games
Gikou2D5 2181 +544/-117 10
Gikou2D3 2036 +150/-96 10
Gikou2D2 1800 +0/-0 56
Try 1776 +23/-29 70
Q22 1695 +104/-136 6

入力データ;sample2.csv

sample2.csv
engine1,option1,engine2,option2,win1,win2,draw(-1=undef),drawadd,date(-1=undef),writer
Gikou2D2,+,Try,+,27.5,22.5,1,1,-1,undefined
Gikou2D3,+,Try,+,8,2,0,0,-1,undefined
Gikou2D2,+,Q22,+,4,2,0,0,-1,undefined
Gikou2D5,+,Try,+,9,1,0,0,-1,undefined

各データの意味は、レート計算スクリプトの使い方@コンピュータ将棋データベースにある。
※入力の仕方は上記のCSVファイルのとおりである
レーティングを正しく計算するために重要なことは、最初のSoftwareのレートを基準に計算しているので、そのレートが正しい必要がある。そのSoftwareを基準としたレート算出である。
※基本はイロレーティングで示したとおりである。

(2)理論(ソースコード)を見る

基本的な方程式は、以下のとおりである。
$ΔR=R-R_B$、$R_B$は基準となるソフトのレーティング、$R$は求めたいソフトのレートとすると、

E_{ΔR}=\frac{1}{1+10^{−ΔR/400}}

式変形すると以下の通り

R=R_B-400\log (\frac{1-E_{ΔR}}{E_{ΔR}})

そもそも$1-E_{ΔR}$は相手の勝率だから、イロレーティングは勝率比の$\log$の400倍がレート差という定義なのがわかる
ここまで式変形して、ソースコードを眺めてみると、
以下の関数でbias値(基準値)にレート差をプラスしてレートを計算している。

    def get_beta_with_bias(self,i,bias):
        beta = 400*np.log10(self.p)
        beta += (bias-beta[i])
        return beta

また、bias値(基準値)は以下で計算前に設定する必要がある。

    for k in np.arange(n_trial):
        bt = bt_model(samples[k,:,:],p_init)
        bt.estimate()
        betas[k,:] = bt.get_beta_with_bias(0,1800)   #rate of 1st
        p_init = bt.p

bt.get_beta_with_bias(0,1800)の1800を変更する。
そして、結果出力は、以下のように実施している。

result = np.c_[range(K),q_50,q_75-q_50,q_50-q_25,n_games]

ということで、上記の算出されたレートには+-がついているが、これはコードによれば再度サンプリング(思考実験して)、その中央値と25パーセンタイル、75パーセンタイルをとっているようである。
全コートはここからダウンロードして見られる。

まとめ

・第三者的なレーティングを求めた
・どうやら、イロレーティングから求めているようだ

・今回は、対戦条件が通常とことなるが、何を見るのかを定めてレーティング・ランキングを掲載するというのもありうる