コンピュータ将棋基礎情報研究所

コンピュータ将棋に関する基礎的な情報を収集し、分析し、発表する所です。英語名称はLaboratory for Fundamental Information on Computer Shogi (LFICS)。

前回の記事「イロレーティングの散歩道 2:理想世界の散策」では「実力レートと表示レートが一致している理想世界」を考えました。今回は「表示レートにゆらぎのある非理想世界」を考えます。

非理想世界では、住人の表示レートは実力レートの周りを揺らいでいます。中心極限定理が成立していると仮定すると、その確率分布は実力レートを平均とする正規分布になります。以下では、確率分布が正規分布となっている非理想世界を考えましょう。

この世界では、表示レートと実力レートが異なるため、表示レートで選出した対局相手に対する勝率も理想世界のものとは異なってきます。実際に、表示レートは一緒でも、その中には様々な実力レートの住人が混じっているため、勝率を求めるには確率分布を用いて期待値を計算しなければなりません。

具体的に数式で表すと、実力レート\[R_{e}\]のE君が、表示レート\[R_{W}\]の相手に勝つ確率は、\[P_{\lim}(R_{e}, R_{W}) = \int_{R_{\min}}^{R_{\max}} d{R_{w}}~ \rho_{w}(R_{w}; R_{W})~ E(R_{e} - R_{w})\]となります。ここで、\[E(dR) = \frac{1}{1 + 10^{- dR / 400}}\]は、前回の記事でも用いたイロレーティングの勝率式であり、\[\rho_{w}(R_{w}; R_{W}) = N e^{- (R_{w} - R_{W})^{2} / (2 s_{w}^{2})}\]は、住人の実力レートが\[R_{w}\]の時の表示レートの確率分布(正規分布)です。下付き添え字が小文字の時は実力レート、大文字の時は表示レートという記法にしています。下式中の\[s_{w}\]は標準偏差に対応する定数であり、また、係数Nは規格化条件:\[\int_{R_{\min}}^{R_{\max}} d{R_{w}}~ \rho_{w}(R_{w}; R_{W}) = 1\]によって決定されます。

ここで、式中の積分の上限と下限は、世界の住人の実力レートの上限と下限の境界を意味しているわけですが、とりあえず今回はスキップして、\[R_{\min} \to - \infty,~ R_{\max} \to + \infty\]としておいて、境界の問題については後の記事で改めて取り扱うことにします。

この場合の勝率を\[P_{\lim}(R_{e}, R_{W}) = P_{\infty}(R_{e}, R_{W})\]と書くとすると、\[P_{\infty}(R_{e}, R_{W}) = \int_{- \infty}^{+ \infty} \frac{d{z}}{\sqrt{2 \pi}} \frac{e^{- z^{2} / 2}}{1 + 10^{(s_{w} z - R_{e} + R_{W}) / 400}}\]となり、この関数はレート差\[R_{e} - R_{W}\]のみに依存します。ここで、\[z = \frac{R_{w} - R_{W}}{s_{w}}\]という積分変数の変換を行いました。

また、\[s_{w} \to 0\]の極限を取ると、確率分布はディラックのデルタ関数となるため、\[P_{\lim}(R_{e}, R_{W}) \to E(R_{e} - R_{W})\]となります。つまり、揺らぎが小さい極限では、数式上においても理想世界に戻るということです。

勝率\[P_{\infty}(R_{e}, R_{W})\]を下図にプロットします。黒線は理想世界の極限で、赤線が\[s_{w} = 100\]の場合です。

elo_syouritu

前回の記事を思い起こしてもらうと、標準偏差が100というのは結構大きな揺らぎであるわけですが、黒線と赤線との差はそんなに大きくありません。言い換えると、イロレーティングの勝率の式は揺らぎに対して、かなり頑強(ロバスト)であるということが分かります。これはシステムにとって非常に重要なことであり、揺らぎに対して大きく結果が変わってきてしまうようでは、システムを安定的に運用していくことはできません。

また、基本的な傾向として、揺らぎが大きいほど、勝率はレート差に依らずに5割の方向に近づいていく傾向があることが分かります(黒線と赤線の違い)。実際に、ここでは具体的に表示はしませんが、揺らぎの標準偏差\[s_{w}\]が大きくなるほど、勝率の線は5割に近づき、平らになっていきます。

このような傾向は一般化することができ、一般的に揺らぎやノイズが大きくなるほど、勝率は5割の方向に近づいていくという傾向があります。その極端な例が「レート差に依存せずに全て勝率5割」という“デタラメ”世界です。このような“デタラメ”世界では、イロレーティングはランダムウォーク(酔歩)となり、E君の軌跡の標準偏差は対局数の平方根に比例して、対局数が増えると発散してしまいます。今回の場合には、どんなに揺らぎを大きくしても、「勝率はレート差に対して単調増加関数である」ということが数学的に保障されているため、完全にランダムウォークになることはありませんが、揺らぎを大きくすると近似的にそれに近づいていく(すなわち、E君の軌跡の標準偏差が増加する)だろうということは予測できます。

さて、前回と同様に、この世界にE君を召還して対局してもらいましょう。シミュレーションのやり方は基本的に前回と同じで、勝敗判定時の勝率の計算式が上記のものに変わっただけです。対局数も前回と同様に1億です。

結果的に、軌跡の頻度分布がほぼ正規分布となるところは前回と同じになりますが、分布の標準偏差の値が変わってきます。揺らぎの標準偏差を変えた時の分布の標準偏差の変化を下図にプロットしました。また、線形回帰を行い、それぞれの回帰直線を記しました。線形回帰については「データから線を引く 2:線形回帰と最小二乗法」の解説記事をご覧ください。

niw_s-d

回帰直線の傾きが全て正であることから、「揺らぎが大きくなると軌跡の標準偏差が増加する」という上述の予測が正しいことが確認できます。また、傾きの値がとても小さいことから、イロレーティングが頑強であることも同時に確認できます。さらに、それぞれの回帰直線を比較すると、傾きのK依存性は小さいようですが、Sに対しては正の相関がありそうです。この傾きのS依存性は、上で示した勝率の図に見られるように、レート差の絶対値が大きい方が揺らぎによる勝率のずれが大きくなっているためと考えられます。

この図では横軸が65までを表示していますが、さらに先はどうなっているのかと思われる方もいるかもしれません。しかし、実はこれ以上の先を示しても、あまり意味がないのです。このことは次回の記事で論じましょう。

以上、今回は「表示レートにゆらぎのある非理想世界」を考えました。結果として、揺らぎが大きくなると軌跡の標準偏差が僅かに増加するということが明らかになり、また、イロレーティングが揺らぎに対して頑強であるということも分かりました。

次回は、今回は所与の定数としていた「揺らぎの標準偏差」について、改めて考えてみたいと思います。

処理方法は「floodgateの棋譜整理とレート算出:floodgate棋譜集(2012年版)」と同じです。ただし、floodgateの仕様変更に合わせて、レートの原点をgps_normalを2150とするものから、gpsfish_normal_1cを2800とするものに変更しました。また、2015年2月1日より、持ち時間が、15分切れ負けから、10分+秒読み10秒(1秒未満切捨て、256手引き分け)に変更されています。

収録棋譜数は36768、その内、投了決着が33783、千日手が315、その他が2670となっています。

以下、最初に棋譜数順のリスト、続いてレート順のリストを記します。

最尤法を用いたレート推定の結果は「floodgate棋譜集レートの最尤法との比較一覧(2012~2016年版)」の記事をご覧ください。

------------------
棋譜数順位. 名前 (棋譜数): レート平均 ±標準偏差
  1. gpsfish_normal_1c            (10137): R2800 ±38
  2. gpsfish_XeonX5680_12c_bid    ( 5473): R3194 ±37
  3. NewMorning                   ( 4129): R2649 ±37
  4. gpsfish_XeonX5680_12c        ( 3146): R3219 ±34
  5. Sunfish3_vps                 ( 2818): R2170 ±34
  6. acop                         ( 2362): R2442 ±38
  7. gps_l                        ( 2234): R2432 ±34
  8. Kingfish                     ( 2027): R2693 ±36
  9. kato2                        ( 1346): R2666 ±35
 10. tanuki-_5500U                ( 1213): R3066 ±36
 11. gpsfish_mini                 ( 1128): R3157 ±36
 12. Titanda_L                    ( 1087): R3146 ±35
 13. flummi2                      ( 1075): R2611 ±34
 14. CRAZYKING                    (  872): R3046 ±37
 15. 6.0bookKai_4700MQ-4cHT4t     (  724): R2666 ±32
 16. Basement                     (  711): R2670 ±34
 17. Apery_20151016               (  647): R3129 ±35
 18. Bonafish_0.39                (  602): R3118 ±32
 19. stap5                        (  586): R3057 ±32
 20. ycas                         (  585): R3238 ±34
 21. Yss1000k                     (  568): R2526 ±34
 22. asukaren_2c                  (  563): R2998 ±31
 23. ddd                          (  540): R2455 ±33
 24. NineDayFever_XeonE5-2690_16c (  506): R3479 ±27
 25. Apery_i7-5820                (  470): R3298 ±30
 26. nozomi_i7-4790               (  464): R3014 ±33
 27. Apery_i5-4670                (  456): R3124 ±30
 28. ponanza-990XEE               (  423): R3500 ±23
 29. bonanza6.0                   (  411): R2576 ±31
 30. suzuran                      (  409): R2809 ±30
 31. Bonanza6.0_1c_X              (  395): R2449 ±26
 32. Breeze                       (  384): R2543 ±24
 33. sinbo                        (  372): R3092 ±30
 34. Apery_20150909_i7-2600K      (  362): R3039 ±30
 35. vibes                        (  347): R3231 ±28
 36. nanopery_FX9590_4.7GHz_test  (  336): R3064 ±32
 37. Apery_20150909_i7-2860QM     (  335): R2925 ±29
 38. Cherry                       (  324): R2660 ±30
 39. sunfish_expr                 (  321): R2468 ±21
 40. PXW                          (  310): R3180 ±29
 41. Saya_Test0.9                 (  301): R2855 ±28
 42. sonic                        (  298): R2801 ±30
 43. bona6_1000k                  (  285): R2353 ±24
 44. AUJK                         (  278): R3196 ±27
 45. eric                         (  269): R2637 ±26
 46. Soho_Amano                   (  267): R2984 ±24
 47. AperyWCSC25_1000k            (  251): R2615 ±25
 48. apery_1c                     (  249): R2961 ±24
 49. UNKO                         (  242): R3269 ±22
 50. SlowTurning                  (  242): R2679 ±26
 51. Apery_i7-4790k_4c            (  238): R3229 ±25
 52. Apery2015327-i73770r         (  235): R3005 ±25
 53. Achilles                     (  232): R2838 ±24
 54. Bonafish_0.42                (  226): R3324 ±26
 55. BlunderXX_test1              (  224): R2934 ±22
 56. saya-1c_0.1.11               (  222): R2778 ±23
 57. maple_wise0.04               (  213): R2908 ±24
 58. Foxglove                     (  207): R2855 ±26
 59. Ocean                        (  204): R2817 ±26
 60. maple_wise0.08               (  197): R2894 ±24
 61. apery-1c-dp5                 (  193): R2483 ±23
 62. ForestTrap_test3             (  188): R2866 ±20
 63. BonanzaTF1000k               (  187): R2536 ±20
 64. Kakinoki-Z                   (  187): R2140 ±14
 65. sayapery_1c_test1            (  183): R2897 ±24
 66. test_t_dti                   (  182): R2455 ±23
 67. 38GINAutoApery3              (  181): R2989 ±20
 68. Apery_WCSC25_sse42_980X      (  181): R3120 ±21
 69. 38GINAutoApery2              (  181): R2969 ±24
 70. budou                        (  175): R2112 ±19
 71. saya-1c                      (  175): R2784 ±19
 72. Gikou_20151122               (  173): R3596 ±12
 73. Apery_Twig_test              (  168): R3423 ±17
 74. Bonafish_0.38                (  168): R3121 ±20
 75. ForestTrap_test6             (  165): R2886 ±21
 76. Himawari                     (  164): R2636 ±12
 77. TDA                          (  162): R3241 ±21
 78. grow                         (  161): R2819 ±22
 79. sandra                       (  159): R3154 ±21
 80. fool                         (  158): R2574 ±23
 81. boNanoha                     (  156): R2820 ±21
 82. Saya_chan0.0.9.8             (  154): R2898 ±19
 83. Bonafish_0.41                (  151): R3298 ±22
 84. Janie                        (  151): R2677 ±15
 85. CrazyKing                    (  148): R3169 ±20
 86. YssF_6t_x1                   (  143): R3060 ±20
 87. damn                         (  141): R2640 ±20
 88. ElectroMasterLv4             (  141): R2590 ±13
 89. nanohamini_1c                (  141): R2144 ±14
 90. chap                         (  138): R2608 ±21
 91. Apery_WCSC25_2c              (  131): R3111 ±18
 92. ponax-tab                    (  129): R2788 ±17
 93. gpsfm-1c                     (  127): R2891 ±19
 94. gpsfish_Corei7-4771_4c       (  126): R3169 ±20
 95. apery-twig-1c                (  126): R3041 ±15
 96. tanukiclang-1c               (  125): R3247 ±20
 97. DELETE                       (  125): R3110 ±17
 98. Apery_WCSC25_i73770r         (  124): R3006 ±16
 99. AperyWCSC25_test1            (  124): R3188 ±17
100. Apery_depth8                 (  123): R2175 ±10
101. Apery_depth7                 (  123): R2004 ±7.6
102. Apery_5960X_8c               (  121): R3289 ±14
103. hikari_i7-4790               (  120): R2762 ±17
104. Nanoha_PhenomII_3GHz         (  119): R2757 ±12
105. nanopery_FX9590_4.7GHz       (  118): R2728 ±18
106. Saya_chan_0.1.0.6_test       (  118): R2927 ±20
107. hydrangea                    (  118): R3231 ±17
108. bps                          (  117): R2701 ±18
109. NeverGiveUp                  (  115): R2314 ±15
110. 7610_W                       (  114): R3121 ±18
111. apery_32bit_z3735f_2c        (  114): R2790 ±16
112. Saya_chan                    (  110): R2646 ±19
113. misaka_10032                 (  108): R2717 ±14
114. Yss300k                      (  106): R2052 ±11
115. ForestTrap_test8             (  104): R2857 ±18
116. AWAKE_i7_5960X_8c            (  104): R3314 ±15
117. tEStB                        (  104): R3188 ±15
118. Apery_Twig_i7-5820K          (  103): R3458 ±9.6
119. nanohanano                   (  103): R2197 ±7.8
120. SRS                          (  103): R3136 ±13
121. Skyline                      (  103): R2603 ±19
122. icecream                     (  101): R3291 ±12
123. XZV                          (   99): R3301 ±6.5
124. ana                          (   97): R3062 ±17
125. NeverGiveUp_expt             (   96): R2271 ±7.8
126. Bonanza6.0_1c_systern        (   95): R2278 ±7.7
127. Okara20XX                    (   95): R2413 ±12
128. Elsa                         (   94): R2280 ±7.2
129. hima_test2                   (   94): R2817 ±13
130. yakumi_test1                 (   92): R2540 ±14
131. Saya_chan_0.1.2.3            (   91): R2972 ±14
132. ElectroMasterLv3             (   91): R2662 ±13
133. Apery-tab                    (   88): R2736 ±14
134. hima_test                    (   87): R2584 ±8.8
135. vibgyor                      (   87): R3272 ±13
136. Apery_sse4.1msvc_8c          (   84): R3150 ±15
137. apery-1c-mpv25               (   83): R2667 ±13
138. freedom                      (   81): R2209 ±11
139. apery-1c-head                (   80): R2962 ±12
140. Teardrops                    (   78): R2654 ±12
141. ApeTw_Rand                   (   77): R3095 ±13
142. PonaX                        (   77): R3080 ±14
143. 38GINApery_Twig              (   75): R3052 ±11
144. Alban_Heruin                 (   75): R2870 ±13
145. Febrie                       (   74): R2632 ±7.1
146. HGDKJ                        (   74): R3257 ±12
147. molidae                      (   70): R2647 ±7.9
148. UUDNK                        (   70): R3327 ±6.9
149. Yss_8.8sec                   (   70): R2634 ±12
150. nanohamini_4c                (   69): R2528 ±11
151. Apery_Twig_4790K_test1       (   69): R3373 ±8.7
152. Apery_i7-3770                (   69): R2205 ±8
153. Apery_depth6                 (   66): R1941 ±5.4
154. Bonanza6.0_1c_system         (   61): R2346 ±7
155. nanoha-mini-PhenomII3GHz     (   59): R2405 ±8.3
156. Bonanzakai                   (   47): R2465 ±4.8
157. undertaker                   (   46): R2509 ±5.7
158. Bonanzaweak3                 (   39): R2009 ±2.7
159. Bonanzaweak                  (   28): R2160 ±3.7
------------------
------------------
レート順位. 名前 (棋譜数): レート平均 ±標準偏差
  1. Gikou_20151122               (  173): R3596 ±12
  2. ponanza-990XEE               (  423): R3500 ±23
  3. NineDayFever_XeonE5-2690_16c (  506): R3479 ±27
  4. Apery_Twig_i7-5820K          (  103): R3458 ±9.6
  5. Apery_Twig_test              (  168): R3423 ±17
  6. Apery_Twig_4790K_test1       (   69): R3373 ±8.7
  7. UUDNK                        (   70): R3327 ±6.9
  8. Bonafish_0.42                (  226): R3324 ±26
  9. AWAKE_i7_5960X_8c            (  104): R3314 ±15
 10. XZV                          (   99): R3301 ±6.5
 11. Apery_i7-5820                (  470): R3298 ±30
 12. Bonafish_0.41                (  151): R3298 ±22
 13. icecream                     (  101): R3291 ±12
 14. Apery_5960X_8c               (  121): R3289 ±14
 15. vibgyor                      (   87): R3272 ±13
 16. UNKO                         (  242): R3269 ±22
 17. HGDKJ                        (   74): R3257 ±12
 18. tanukiclang-1c               (  125): R3247 ±20
 19. TDA                          (  162): R3241 ±21
 20. ycas                         (  585): R3238 ±34
 21. hydrangea                    (  118): R3231 ±17
 22. vibes                        (  347): R3231 ±28
 23. Apery_i7-4790k_4c            (  238): R3229 ±25
 24. gpsfish_XeonX5680_12c        ( 3146): R3219 ±34
 25. AUJK                         (  278): R3196 ±27
 26. gpsfish_XeonX5680_12c_bid    ( 5473): R3194 ±37
 27. AperyWCSC25_test1            (  124): R3188 ±17
 28. tEStB                        (  104): R3188 ±15
 29. PXW                          (  310): R3180 ±29
 30. gpsfish_Corei7-4771_4c       (  126): R3169 ±20
 31. CrazyKing                    (  148): R3169 ±20
 32. gpsfish_mini                 ( 1128): R3157 ±36
 33. sandra                       (  159): R3154 ±21
 34. Apery_sse4.1msvc_8c          (   84): R3150 ±15
 35. Titanda_L                    ( 1087): R3146 ±35
 36. SRS                          (  103): R3136 ±13
 37. Apery_20151016               (  647): R3129 ±35
 38. Apery_i5-4670                (  456): R3124 ±30
 39. 7610_W                       (  114): R3121 ±18
 40. Bonafish_0.38                (  168): R3121 ±20
 41. Apery_WCSC25_sse42_980X      (  181): R3120 ±21
 42. Bonafish_0.39                (  602): R3118 ±32
 43. Apery_WCSC25_2c              (  131): R3111 ±18
 44. DELETE                       (  125): R3110 ±17
 45. ApeTw_Rand                   (   77): R3095 ±13
 46. sinbo                        (  372): R3092 ±30
 47. PonaX                        (   77): R3080 ±14
 48. tanuki-_5500U                ( 1213): R3066 ±36
 49. nanopery_FX9590_4.7GHz_test  (  336): R3064 ±32
 50. ana                          (   97): R3062 ±17
 51. YssF_6t_x1                   (  143): R3060 ±20
 52. stap5                        (  586): R3057 ±32
 53. 38GINApery_Twig              (   75): R3052 ±11
 54. CRAZYKING                    (  872): R3046 ±37
 55. apery-twig-1c                (  126): R3041 ±15
 56. Apery_20150909_i7-2600K      (  362): R3039 ±30
 57. nozomi_i7-4790               (  464): R3014 ±33
 58. Apery_WCSC25_i73770r         (  124): R3006 ±16
 59. Apery2015327-i73770r         (  235): R3005 ±25
 60. asukaren_2c                  (  563): R2998 ±31
 61. 38GINAutoApery3              (  181): R2989 ±20
 62. Soho_Amano                   (  267): R2984 ±24
 63. Saya_chan_0.1.2.3            (   91): R2972 ±14
 64. 38GINAutoApery2              (  181): R2969 ±24
 65. apery-1c-head                (   80): R2962 ±12
 66. apery_1c                     (  249): R2961 ±24
 67. BlunderXX_test1              (  224): R2934 ±22
 68. Saya_chan_0.1.0.6_test       (  118): R2927 ±20
 69. Apery_20150909_i7-2860QM     (  335): R2925 ±29
 70. maple_wise0.04               (  213): R2908 ±24
 71. Saya_chan0.0.9.8             (  154): R2898 ±19
 72. sayapery_1c_test1            (  183): R2897 ±24
 73. maple_wise0.08               (  197): R2894 ±24
 74. gpsfm-1c                     (  127): R2891 ±19
 75. ForestTrap_test6             (  165): R2886 ±21
 76. Alban_Heruin                 (   75): R2870 ±13
 77. ForestTrap_test3             (  188): R2866 ±20
 78. ForestTrap_test8             (  104): R2857 ±18
 79. Saya_Test0.9                 (  301): R2855 ±28
 80. Foxglove                     (  207): R2855 ±26
 81. Achilles                     (  232): R2838 ±24
 82. boNanoha                     (  156): R2820 ±21
 83. grow                         (  161): R2819 ±22
 84. hima_test2                   (   94): R2817 ±13
 85. Ocean                        (  204): R2817 ±26
 86. suzuran                      (  409): R2809 ±30
 87. sonic                        (  298): R2801 ±30
 88. gpsfish_normal_1c            (10137): R2800 ±38
 89. apery_32bit_z3735f_2c        (  114): R2790 ±16
 90. ponax-tab                    (  129): R2788 ±17
 91. saya-1c                      (  175): R2784 ±19
 92. saya-1c_0.1.11               (  222): R2778 ±23
 93. hikari_i7-4790               (  120): R2762 ±17
 94. Nanoha_PhenomII_3GHz         (  119): R2757 ±12
 95. Apery-tab                    (   88): R2736 ±14
 96. nanopery_FX9590_4.7GHz       (  118): R2728 ±18
 97. misaka_10032                 (  108): R2717 ±14
 98. bps                          (  117): R2701 ±18
 99. Kingfish                     ( 2027): R2693 ±36
100. SlowTurning                  (  242): R2679 ±26
101. Janie                        (  151): R2677 ±15
102. Basement                     (  711): R2670 ±34
103. apery-1c-mpv25               (   83): R2667 ±13
104. kato2                        ( 1346): R2666 ±35
105. 6.0bookKai_4700MQ-4cHT4t     (  724): R2666 ±32
106. ElectroMasterLv3             (   91): R2662 ±13
107. Cherry                       (  324): R2660 ±30
108. Teardrops                    (   78): R2654 ±12
109. NewMorning                   ( 4129): R2649 ±37
110. molidae                      (   70): R2647 ±7.9
111. Saya_chan                    (  110): R2646 ±19
112. damn                         (  141): R2640 ±20
113. eric                         (  269): R2637 ±26
114. Himawari                     (  164): R2636 ±12
115. Yss_8.8sec                   (   70): R2634 ±12
116. Febrie                       (   74): R2632 ±7.1
117. AperyWCSC25_1000k            (  251): R2615 ±25
118. flummi2                      ( 1075): R2611 ±34
119. chap                         (  138): R2608 ±21
120. Skyline                      (  103): R2603 ±19
121. ElectroMasterLv4             (  141): R2590 ±13
122. hima_test                    (   87): R2584 ±8.8
123. bonanza6.0                   (  411): R2576 ±31
124. fool                         (  158): R2574 ±23
125. Breeze                       (  384): R2543 ±24
126. yakumi_test1                 (   92): R2540 ±14
127. BonanzaTF1000k               (  187): R2536 ±20
128. nanohamini_4c                (   69): R2528 ±11
129. Yss1000k                     (  568): R2526 ±34
130. undertaker                   (   46): R2509 ±5.7
131. apery-1c-dp5                 (  193): R2483 ±23
132. sunfish_expr                 (  321): R2468 ±21
133. Bonanzakai                   (   47): R2465 ±4.8
134. test_t_dti                   (  182): R2455 ±23
135. ddd                          (  540): R2455 ±33
136. Bonanza6.0_1c_X              (  395): R2449 ±26
137. acop                         ( 2362): R2442 ±38
138. gps_l                        ( 2234): R2432 ±34
139. Okara20XX                    (   95): R2413 ±12
140. nanoha-mini-PhenomII3GHz     (   59): R2405 ±8.3
141. bona6_1000k                  (  285): R2353 ±24
142. Bonanza6.0_1c_system         (   61): R2346 ±7
143. NeverGiveUp                  (  115): R2314 ±15
144. Elsa                         (   94): R2280 ±7.2
145. Bonanza6.0_1c_systern        (   95): R2278 ±7.7
146. NeverGiveUp_expt             (   96): R2271 ±7.8
147. freedom                      (   81): R2209 ±11
148. Apery_i7-3770                (   69): R2205 ±8
149. nanohanano                   (  103): R2197 ±7.8
150. Apery_depth8                 (  123): R2175 ±10
151. Sunfish3_vps                 ( 2818): R2170 ±34
152. Bonanzaweak                  (   28): R2160 ±3.7
153. nanohamini_1c                (  141): R2144 ±14
154. Kakinoki-Z                   (  187): R2140 ±14
155. budou                        (  175): R2112 ±19
156. Yss300k                      (  106): R2052 ±11
157. Bonanzaweak3                 (   39): R2009 ±2.7
158. Apery_depth7                 (  123): R2004 ±7.6
159. Apery_depth6                 (   66): R1941 ±5.4
------------------

このシリーズでは、擬似乱数を用いたシミュレーション計算により、イロレーティングの詳細な性質を解析していきます。ここで、擬似乱数というのは「コンピュータ上で生成される擬似的な乱数」のことであり、厳密には乱数ではないものの実用上は乱数として取り扱うことができる数列のことです。擬似乱数には様々なものがありますが、ここではRKISSを使います。

一般的に、乱数を用いた計算手法のことを、カジノで有名なモナコ公国の地区名にちなんで、モンテカルロ法と言います。モンテカルロ法は物理学や工学等の分野で盛んに使われている手法であり、モンテカルロ積分、確率過程の計算、アニーリング最適化など、様々な用途のものがあります。本シリーズで用いるのは、各対局を勝率による確率過程とした時のシミュレーション計算です。

今回は、まず手始めとして、最も理想的な世界を考えてみましょう。すなわち、全ての勝率はイロレーティングの式:\[E(dR) = \frac{1}{1 + 10^{- dR / 400}}\]からレート差dRのみで決まっており、さらにレートの情報がみんなに正確に共有されている「“実力”レート=“表示”レート」という世界です。

ある人(イロ教授にちなんでE君としましょう)がこの世界にやってきて、多数の対局を行ったとします。E君は外から来た人なので、例外的に実力レートと表示レートが異なっていてもかまいません。この時、E君の表示レートの動きはどうなるでしょうか? 表示レートはイロレーティングによって決定されますので、その動きを観測すれば、イロレーティングの性質をうかがい知ることができるかもしれません。

このように「一人のテスト者の動きを観察することによって世界全体の仕組みを考察する」という手法は理論物理学などでよく用いられます。例えば、物質の中の一つの粒子の運動を微視的な物理法則に従って理論的にシミュレートすることで、その物質の性質を分析できるといったような具合です。

今回の場合には、実力レートから勝率を算出して、擬似乱数によって勝敗をシミュレートしていくわけですが、その前に一つだけ、対局相手をどのように選ぶのかという規則を決めなければなりません。今回は「E君の実力レート±S」の範囲内の表示レート(理想世界では実力レートに等しい)からランダムに選ぶことにします。範囲を定めるSの値は100と400の2パターンで計算して比較してみましょう。

E君の実力レートについては、対局相手に困らないのであれば、どの値であっても同じ結果が得られます。なので、ここでは仮に1500としておきます。ただし、今回の対局相手の選び方では、E君のレートが世界の上限や下限の境界に近い場合に相手がうまく選べないという問題が発生してしまいます。この境界にまつわる問題に関しては、ここではスキップして、後で非理想世界を考える時に改めて取り扱うことにします。

イロレーティングのシステムでは、表示レート\[R_{W}\]の対局相手に対して表示レート\[R_{E}\]のE君が勝つと、\[K~ E(R_{W} - R_{E})\]だけE君の表示レートが上がり、負けると、\[K~ E(R_{E} - R_{W})\]だけ下がることになります。このルールに従って、多数の対局をシミュレートして、E君の表示レートの動きを観測します。

まずは、軌跡の頻度分布を下図に示します。頻度の分類のやり方は、各対局終了時の表示レートの小数部を四捨五入することで整数値として分類しています。対局数は1億、Kの値は16であり、頻度分布の規格化(すなわち、縦軸のスケール)は任意です。

iw_hindo_r-h

上図の頻度分布は、Sが100の場合、400の場合共に、誤差の範囲内でほぼ正規分布になっています(2次と4次のモーメントの関係性から確認)。誤差を除けば、分布の形は対局数には依りません。標準偏差は、S = 100の時は約37.7、S = 400の時は約37.5です。標準偏差に僅かな違いはありますが、大雑把に言えば、Sに依らずに大体同じ分布になると考えることができるでしょう。そもそも理想世界を考えている時点で大雑把なモデルなので、ここではあまり細かなことにこだわっても益はありません。

次に、分布の標準偏差とKとの関係性を下図に示します。これも対局数は1億です。

iw_k_k-d

Sが100の場合、400の場合共に、おおよそ平方根になっています(青線は最小二乗曲線)。この関係性も、誤差を除けば、対局数には依りません。また、ここでは詳細は記しませんが、Kの値に依らずに誤差の範囲内でほぼ正規分布になっていることも確認できます。

この結果は、一見すると、「Kはレートの移動の“歩幅”を決めている量であるため、Kが大きくなるほど、レートが大きく揺らいで、分布の標準偏差が大きくなる」と解釈できそうですが、実際にはそんなに単純ではありません。というのは、一回の対局の平均移動距離はSの値にも依っており、Sが100の時には約7.79、400の時には約5.70となっているのですが(対局相手とのレート差が離れているほど平均移動距離が少ないため)、Kと違ってSの方は標準偏差に与える影響は小さく、単純に「平均移動距離によって標準偏差が決まる」というわけではないのです。従って、この標準偏差のK依存性はイロレーティングの仕組みを直接的に反映したものであると考えることができます。

以上まとめると、理想世界の散策では、軌跡の頻度分布はほぼ正規分布(中心極限定理)となり、その標準偏差はおおよそKの平方根に比例するということが分かりました。大雑把に言うと、標準偏差は、K = 16の時には37.5程度、K = 32の時には53.5程度です。これらのことは、イロレーティングというものをよく知る上で最も基礎的な知識の一つとなります。

さて、今回は「実力レートと表示レートが一致している理想世界」を考えましたが、実際には両者は必ずしも一致していないのが普通です。次回は「表示レートにゆらぎのある非理想世界」を考えてみましょう。

このページのトップヘ