Edited at

【将棋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パーセンタイルをとっているようである。

全コートはここからダウンロードして見られる。


まとめ

・第三者的なレーティングを求めた

・どうやら、イロレーティングから求めているようだ

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