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

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

前回の記事「手数と投了 6:様々な連続対局における投了手数」では、様々な連続対局における棋譜データを解析し、平均手数にはソフト間の“主張”の対立が反映されていることを示しました。すなわち、読み筋が合う(読みの類似性が高い)程、平均手数が長くなる傾向があるということです。今回は、その点を踏まえて、改めてfloodgate棋譜集の平均手数の詳細を再解析してみたいと思います。

今回、特に注目するのは、floodgate棋譜集(2012~2016年版)における平均手数(読みの類似度)とレート(両対局者の平均レート)との関係です。この関係を調べることで、全体の平均値からは見えない詳細な関係構造が明らかになり、また、2016年版における平均手数の大幅な上昇の原因も推測できるようになります。

手法としては、両対局者の平均レートをレート100刻みの区間に分割して(2000~2100、2100~2200等)、区間内の平均手数とレートの平均を算出します。採用するのは、30~230手まで、レート差200以内の対局に限ります。

2012~2015年版の結果を下図に示します。区間内のデータ数が10個以上の結果のみを黒点で表示し、また、レート500刻みの区間における平均を青線と青字で示しています。

mrate-tesuu_m

各点はばらついているものの、500刻みの区間の平均で見ると、大まかな傾向があることが分かります。2000~2500の区間では平均よりやや高めの平均手数であり、2500~3000の区間では平均手数が低くなり、3000~3500の区間では平均手数が高くなります。

2000~2500の区間は、弱くしたGPSやBonanza系統のソフトが多い領域であり、これらのソフトの読みの類似度が比較的に高いことから、少し高めの平均手数になっているようです。

2500~3000の区間は、種類の豊富なソフトが混在している領域であり、全体的に読みの類似度が下がり、平均手数が低くなっています。ソフトの“進化論”として眺めると、この領域は様々な手法が試行されている混雑期だと言えるかもしれません。

3000~3500の区間になると、読みの類似度が上がり、平均手数が上昇します。これは必ずしも同系統のソフトが増えているというわけではなく、異なるソフト間の読みの類似度も向上しているようです。この領域においては、現在の枠組みにおける手法の可能性がやや煮詰まってきているのかもしれません。

これらの傾向は、下図の2016年版の結果でも明確に現れています。

mrate-tesuu_m_2016

特に、3000~3500の区間の平均手数が大きく向上し、また、新しく出現した3500~4000の区間の平均手数はさらに増えています。そして、これらの区間の棋譜が増えたことが、全体の平均手数の向上の原因となっています。

この結果は、同系統のオープンソースソフト(Apery系、技巧)の放流が増えていることを差し引いても、レート上昇と読みの類似度との間に正の相関があることを示唆しています。この相関関係は“ある枠組みの中で最適化を目指していくと手法の詳細に依らずに類似性が増していく現象”として解釈できるかもしれません。

以上、今回は、floodgate棋譜集の平均手数の詳細を再解析しました。平均手数(読みの類似度)は対局者のレートに依存した詳細な構造を持っており、特にレート3000以上の領域においてはレート上昇と読みの類似度との間に正の相関が見られることが分かりました。

もしこの原因が手法の最適化にあるのだとすれば、今後もこの傾向は進んでいくと思われます。256手ルールの改善等も必要になるかもしれません。また、もしかすると新たな枠組みが開発されて、再び平均手数が大きく下がる混雑期に戻るという可能性もあります。未来のことは誰にも分かりません。

この論稿シリーズは一旦ここで締めたいと思います。次の記事でまとめます。

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

収録棋譜数は24622、その内、投了決着が22795、千日手が385、その他が1442となっています。

対局数がやや少ないとは言え、レート4000を超えるソフト

  • ukamuse_SDT4_2697v4_36c(43局、R4137)

が出現しました(ハードがE5-2697V4だとすると、少し高めに出ている気はしますが)。

また、スマートフォンと思われるソフト

  • Gc_at_Cortex-A53_4c(R3074)
  • test_cortex-A53_4c(R3065)
  • G_512_Cortex-A7_2c(R2878)
  • Gc_Test_Cortex-A7_2c(R2834)

やタブレットと思われるソフト

  • Gikou32_z8300tablet-4c(R3060)
  • Apery32_tmmod_z8300-4c(R2930)

も高いレートを記録しています。

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

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

------------------
棋譜数順位. 名前 (棋譜数): レート平均 ±標準偏差
  1. gpsfish_normal_1c                ( 7051): R2800 ±37
  2. gps_l                            ( 5356): R2323 ±36
  3. gpsfish_XeonX5680_12c_bid        ( 2158): R3268 ±38
  4. Starbound                        ( 1623): R2818 ±36
  5. nanoTwig_FX9590_4.7GHz           ( 1519): R3087 ±37
  6. Gc_Test_Cortex-A7_2c             ( 1025): R2834 ±33
  7. KifuWarabe_i7_WCSC26             ( 1014): R2543 ±37
  8. ANSM                             (  956): R3441 ±34
  9. Titanda_L                        (  897): R3381 ±37
 10. yanetest                         (  793): R3301 ±31
 11. Apery32_tmmod_3735F-4thread      (  713): R2887 ±34
 12. jsus                             (  631): R3555 ±33
 13. Ydebug185                        (  598): R2772 ±35
 14. nanopery_FX9590_4.7GHz_test      (  542): R3083 ±33
 15. dm                               (  485): R3374 ±32
 16. KifuWarabe                       (  480): R2832 ±33
 17. komasan                          (  420): R3422 ±32
 18. Apery_Twig_i7-4510U              (  402): R3197 ±31
 19. hima_for_miryoku                 (  399): R2373 ±29
 20. Apery32_tmmod_z8300-4c           (  386): R2930 ±31
 21. usapyon2_slave_USEAVX_FX9590_8t  (  362): R3361 ±31
 22. CRAZYKING                        (  353): R3119 ±32
 23. yygiko-2c                        (  333): R3314 ±28
 24. gpsfish_8n8c                     (  328): R2870 ±27
 25. KifuWarabe_NotePC                (  320): R2702 ±29
 26. Tomabechi                        (  310): R3453 ±28
 27. Gc_at_Cortex-A53_4c              (  274): R3074 ±20
 28. aggressor                        (  253): R2444 ±26
 29. GoneuraOu_i7-4770K               (  248): R3301 ±27
 30. Gikou_20160606_1c_3s             (  246): R2884 ±23
 31. yomita_6c                        (  242): R3248 ±26
 32. Adad                             (  242): R3444 ±26
 33. G_512_Cortex-A7_2c               (  241): R2878 ±23
 34. SILENT_MAJORITY_i7-3517U         (  238): R3330 ±24
 35. 6.0bookKai_4700MQ-4cHT4t         (  236): R2672 ±25
 36. Bonanza_6.1.2_core2duo_test      (  227): R3567 ±24
 37. Apery_WCSC26_0911_1c             (  221): R3059 ±20
 38. Azul_abnormalOu                  (  217): R3657 ±24
 39. nanopery_FX9590_4.7GHz_4t        (  216): R3079 ±25
 40. 6sec_1c_Rtest_G                  (  215): R3026 ±23
 41. SILENT_MAJORITY_6700K            (  214): R3446 ±24
 42. Gikou_20160606_1c                (  206): R3137 ±21
 43. SILENT_MAJORITY_i7-4510U         (  201): R3387 ±23
 44. YaneClaTce_i5                    (  201): R2966 ±19
 45. apery_twig_sdt3_duo3.2_oc        (  197): R3250 ±24
 46. YssF_6t_x1                       (  192): R3059 ±24
 47. kosotto                          (  192): R2959 ±24
 48. QWERTY                           (  185): R3342 ±25
 49. gikou-i5-5200u                   (  177): R3261 ±20
 50. BonanzaFeliz0.0MYU               (  174): R2420 ±22
 51. Gikou-5820k                      (  171): R3546 ±23
 52. NanohaSDT4                       (  170): R3113 ±18
 53. May                              (  164): R3471 ±19
 54. 2c_Rtest_G                       (  161): R3258 ±20
 55. Gikou-980X                       (  161): R3443 ±22
 56. sayapery_4c_4790K                (  159): R3168 ±23
 57. SILENT_MAJORITY_2c               (  157): R3333 ±16
 58. smmpv-1c                         (  156): R3082 ±18
 59. Apery_WCSC26_i7-3517U            (  153): R3117 ±15
 60. nozomi_i7-4510U                  (  152): R3173 ±21
 61. LL                               (  151): R3364 ±23
 62. Gikou_deth10                     (  149): R2445 ±20
 63. usapyon2_slave_TWIG_1t           (  148): R2800 ±24
 64. Celsius                          (  148): R3330 ±17
 65. gpsfish_0414                     (  145): R3118 ±21
 66. Gikou_6700K                      (  143): R3554 ±18
 67. Saya_chan0107-4iMYU              (  139): R2564 ±16
 68. komadoku_plus_kkp_6c             (  131): R3057 ±19
 69. UP2S                             (  128): R3445 ±18
 70. Gekisashi_X5590_7c               (  124): R3280 ±17
 71. moonlight_ray_04                 (  123): R3364 ±19
 72. sinbo                            (  120): R3390 ±15
 73. hamu                             (  120): R3595 ±15
 74. YSS                              (  120): R2219 ±14
 75. yomita_dynamic_margin            (  117): R3507 ±15
 76. usapyon2_slave_TWIG              (  117): R3003 ±18
 77. nozomi_i7-4790                   (  117): R3443 ±14
 78. atsm                             (  112): R3560 ±11
 79. Gikou_6950XEE                    (  112): R3680 ±11
 80. Tsukajumi                        (  111): R3094 ±17
 81. SM-980X                          (  108): R3341 ±16
 82. TvT                              (  107): R3304 ±16
 83. usapyon2dash-withBUG             (  107): R3212 ±14
 84. SILENT_MAJORITY_Kai-3517U        (  107): R3405 ±10
 85. BrilliantDisguise                (  107): R2987 ±17
 86. Celsius_0.2.2                    (  106): R3018 ±15
 87. OkaraManju                       (  105): R2747 ±14
 88. nozomi_4790K                     (  105): R3264 ±13
 89. orange2_AWS-t2.micro_YClassicTce (  105): R2695 ±13
 90. ponderman                        (  103): R3397 ±14
 91. Gikou32_z8300tablet-4c           (  101): R3060 ±11
 92. Gikou_2016_i7-3517U              (  100): R3373 ±14
 93. KBTIT                            (  100): R3271 ±16
 94. SILENT_WHALE                     (  100): R3373 ±12
 95. ShootingStar                     (   99): R2974 ±11
 96. nanoha_test                      (   97): R2743 ±17
 97. MeijinCobra_WCSC26               (   97): R2682 ±14
 98. SensitiveTraining                (   97): R2846 ±17
 99. TAKUYA                           (   95): R3321 ±15
100. SM-i5-5200u                      (   92): R3250 ±13
101. Okara20XX                        (   90): R2584 ±9.5
102. NanohaWCSC26                     (   90): R2991 ±8.3
103. nozomi_i5                        (   90): R3326 ±14
104. HurricaneVolt                    (   89): R2914 ±16
105. YaneuraOu_classic-tce_4790K      (   89): R3169 ±13
106. TelegraphRoad                    (   89): R2919 ±16
107. Gekisashi_X5590_1c               (   86): R3055 ±12
108. Bonanza6.0_1c_X                  (   85): R2408 ±12
109. Apery_5820K                      (   85): R3395 ±14
110. Starwheel                        (   83): R2816 ±14
111. gikou_win_20160606_i7-2600K      (   82): R3378 ±11
112. SILENT_HIRAOKA_20160803_2700K    (   82): R3522 ±13
113. ajiva                            (   80): R3424 ±13
114. SILENT_HIRAOKA_20160917_2700K    (   80): R3474 ±7.6
115. SILENT_MAJORITY_6950XEE          (   80): R3507 ±13
116. Apery_twig_i7_6700K              (   79): R3239 ±12
117. Saya_chan_WCSC25ver              (   78): R2894 ±14
118. bonanza6.0                       (   77): R2776 ±11
119. celery1_YCT                      (   77): R2731 ±9.2
120. YaneuraOuSimple                  (   77): R3534 ±13
121. Gikou_i3_5010U                   (   77): R3230 ±12
122. test_cortex-A53_4c               (   76): R3065 ±7.8
123. AperyTwig_FX9590                 (   76): R3249 ±11
124. orange_AWS-t2.micro_GPSfish      (   76): R2435 ±13
125. max                              (   74): R3085 ±11
126. SILENT_HIRAOKA_20160930_2700K    (   74): R3470 ±11
127. Renovate                         (   74): R3621 ±10
128. MAJO_6700HQ_160917               (   73): R3594 ±8.9
129. yocvp13mk2                       (   71): R3125 ±13
130. Gift                             (   71): R2765 ±11
131. Rolling                          (   71): R2906 ±13
132. apery-wcsc26-1c                  (   71): R2997 ±10
133. Blunder_6700HQ                   (   70): R2647 ±8.4
134. MAJO_1.2_161007_6700HQ           (   70): R3733 ±4.3
135. YaneuraOu-2016-Mid_6950X         (   69): R3347 ±11
136. Celsius0.2.0                     (   67): R2770 ±13
137. SolitaryWave                     (   67): R2935 ±11
138. SM_newEval_test                  (   64): R3855 ±4.6
139. WeddingSong                      (   64): R2972 ±10
140. TMOQ_64bit                       (   63): R2807 ±11
141. MAJO_160824_6950X                (   63): R3837 ±2.7
142. Apery_WC26_6950XEE               (   63): R3359 ±9.1
143. Celsius0.0.9                     (   62): R2645 ±10
144. GameoverZeus                     (   60): R3568 ±8.4
145. Apery-160917_6700HQ              (   59): R3350 ±9.6
146. s1510009                         (   59): R2372 ±9.3
147. Gikou_AperyEvalMix_i5-3317U      (   58): R3231 ±9.6
148. Gikou_AperyEvalMix_SurfacePro    (   58): R3177 ±5.8
149. ukamuse_6700K                    (   56): R3691 ±6.2
150. Nozomi_6950XEE                   (   56): R3453 ±8
151. SILENT_MAJORITY_4770K            (   56): R3373 ±5.4
152. GravityJet                       (   56): R2938 ±9.8
153. GradientWind                     (   55): R3017 ±10
154. att                              (   55): R2978 ±10
155. Bonafish_0.42                    (   54): R3237 ±10
156. Bonanza6.0_1c_systern            (   53): R2343 ±10
157. Aqours                           (   53): R3570 ±6.8
158. Gikou_20160606_i7-4510U          (   53): R3286 ±7
159. yomita_i7-6700HQ                 (   53): R3335 ±9.4
160. Apery-160908_6700HQ              (   51): R3356 ±5.4
161. MAJO-1.2_AG1.13_6950X            (   50): R3828 ±4.6
162. Apery_Kai_1.67-3517U             (   48): R3330 ±6.2
163. METEORA                          (   48): R3668 ±8.5
164. piyo_lv6_iphone6s                (   46): R1967 ±3.6
165. Yomita_SDT4_6700HQ               (   45): R3383 ±6.9
166. ukamuse_SDT4_2697v4_36c          (   43): R4137 ±8.1
167. Apery_Cus_6950XEE                (   37): R3709 ±2.8
168. Yomita_1.83_6700HQ               (   36): R3443 ±3.4
169. YaneuraOu_Kai_6950X              (   34): R3653 ±4.3
170. ukamuse_2c                       (   31): R3588 ±3.1
171. YaneuraOu_Xeon_E5_2698_v4_40c    (   27): R3541 ±3.9
------------------
------------------
レート順位. 名前 (棋譜数): レート平均 ±標準偏差
  1. ukamuse_SDT4_2697v4_36c          (   43): R4137 ±8.1
  2. SM_newEval_test                  (   64): R3855 ±4.6
  3. MAJO_160824_6950X                (   63): R3837 ±2.7
  4. MAJO-1.2_AG1.13_6950X            (   50): R3828 ±4.6
  5. MAJO_1.2_161007_6700HQ           (   70): R3733 ±4.3
  6. Apery_Cus_6950XEE                (   37): R3709 ±2.8
  7. ukamuse_6700K                    (   56): R3691 ±6.2
  8. Gikou_6950XEE                    (  112): R3680 ±11
  9. METEORA                          (   48): R3668 ±8.5
 10. Azul_abnormalOu                  (  217): R3657 ±24
 11. YaneuraOu_Kai_6950X              (   34): R3653 ±4.3
 12. Renovate                         (   74): R3621 ±10
 13. hamu                             (  120): R3595 ±15
 14. MAJO_6700HQ_160917               (   73): R3594 ±8.9
 15. ukamuse_2c                       (   31): R3588 ±3.1
 16. Aqours                           (   53): R3570 ±6.8
 17. GameoverZeus                     (   60): R3568 ±8.4
 18. Bonanza_6.1.2_core2duo_test      (  227): R3567 ±24
 19. atsm                             (  112): R3560 ±11
 20. jsus                             (  631): R3555 ±33
 21. Gikou_6700K                      (  143): R3554 ±18
 22. Gikou-5820k                      (  171): R3546 ±23
 23. YaneuraOu_Xeon_E5_2698_v4_40c    (   27): R3541 ±3.9
 24. YaneuraOuSimple                  (   77): R3534 ±13
 25. SILENT_HIRAOKA_20160803_2700K    (   82): R3522 ±13
 26. SILENT_MAJORITY_6950XEE          (   80): R3507 ±13
 27. yomita_dynamic_margin            (  117): R3507 ±15
 28. SILENT_HIRAOKA_20160917_2700K    (   80): R3474 ±7.6
 29. May                              (  164): R3471 ±19
 30. SILENT_HIRAOKA_20160930_2700K    (   74): R3470 ±11
 31. Nozomi_6950XEE                   (   56): R3453 ±8
 32. Tomabechi                        (  310): R3453 ±28
 33. SILENT_MAJORITY_6700K            (  214): R3446 ±24
 34. UP2S                             (  128): R3445 ±18
 35. Adad                             (  242): R3444 ±26
 36. Yomita_1.83_6700HQ               (   36): R3443 ±3.4
 37. nozomi_i7-4790                   (  117): R3443 ±14
 38. Gikou-980X                       (  161): R3443 ±22
 39. ANSM                             (  956): R3441 ±34
 40. ajiva                            (   80): R3424 ±13
 41. komasan                          (  420): R3422 ±32
 42. SILENT_MAJORITY_Kai-3517U        (  107): R3405 ±10
 43. ponderman                        (  103): R3397 ±14
 44. Apery_5820K                      (   85): R3395 ±14
 45. sinbo                            (  120): R3390 ±15
 46. SILENT_MAJORITY_i7-4510U         (  201): R3387 ±23
 47. Yomita_SDT4_6700HQ               (   45): R3383 ±6.9
 48. Titanda_L                        (  897): R3381 ±37
 49. gikou_win_20160606_i7-2600K      (   82): R3378 ±11
 50. dm                               (  485): R3374 ±32
 51. SILENT_MAJORITY_4770K            (   56): R3373 ±5.4
 52. Gikou_2016_i7-3517U              (  100): R3373 ±14
 53. SILENT_WHALE                     (  100): R3373 ±12
 54. LL                               (  151): R3364 ±23
 55. moonlight_ray_04                 (  123): R3364 ±19
 56. usapyon2_slave_USEAVX_FX9590_8t  (  362): R3361 ±31
 57. Apery_WC26_6950XEE               (   63): R3359 ±9.1
 58. Apery-160908_6700HQ              (   51): R3356 ±5.4
 59. Apery-160917_6700HQ              (   59): R3350 ±9.6
 60. YaneuraOu-2016-Mid_6950X         (   69): R3347 ±11
 61. QWERTY                           (  185): R3342 ±25
 62. SM-980X                          (  108): R3341 ±16
 63. yomita_i7-6700HQ                 (   53): R3335 ±9.4
 64. SILENT_MAJORITY_2c               (  157): R3333 ±16
 65. Celsius                          (  148): R3330 ±17
 66. SILENT_MAJORITY_i7-3517U         (  238): R3330 ±24
 67. Apery_Kai_1.67-3517U             (   48): R3330 ±6.2
 68. nozomi_i5                        (   90): R3326 ±14
 69. TAKUYA                           (   95): R3321 ±15
 70. yygiko-2c                        (  333): R3314 ±28
 71. TvT                              (  107): R3304 ±16
 72. yanetest                         (  793): R3301 ±31
 73. GoneuraOu_i7-4770K               (  248): R3301 ±27
 74. Gikou_20160606_i7-4510U          (   53): R3286 ±7
 75. Gekisashi_X5590_7c               (  124): R3280 ±17
 76. KBTIT                            (  100): R3271 ±16
 77. gpsfish_XeonX5680_12c_bid        ( 2158): R3268 ±38
 78. nozomi_4790K                     (  105): R3264 ±13
 79. gikou-i5-5200u                   (  177): R3261 ±20
 80. 2c_Rtest_G                       (  161): R3258 ±20
 81. apery_twig_sdt3_duo3.2_oc        (  197): R3250 ±24
 82. SM-i5-5200u                      (   92): R3250 ±13
 83. AperyTwig_FX9590                 (   76): R3249 ±11
 84. yomita_6c                        (  242): R3248 ±26
 85. Apery_twig_i7_6700K              (   79): R3239 ±12
 86. Bonafish_0.42                    (   54): R3237 ±10
 87. Gikou_AperyEvalMix_i5-3317U      (   58): R3231 ±9.6
 88. Gikou_i3_5010U                   (   77): R3230 ±12
 89. usapyon2dash-withBUG             (  107): R3212 ±14
 90. Apery_Twig_i7-4510U              (  402): R3197 ±31
 91. Gikou_AperyEvalMix_SurfacePro    (   58): R3177 ±5.8
 92. nozomi_i7-4510U                  (  152): R3173 ±21
 93. YaneuraOu_classic-tce_4790K      (   89): R3169 ±13
 94. sayapery_4c_4790K                (  159): R3168 ±23
 95. Gikou_20160606_1c                (  206): R3137 ±21
 96. yocvp13mk2                       (   71): R3125 ±13
 97. CRAZYKING                        (  353): R3119 ±32
 98. gpsfish_0414                     (  145): R3118 ±21
 99. Apery_WCSC26_i7-3517U            (  153): R3117 ±15
100. NanohaSDT4                       (  170): R3113 ±18
101. Tsukajumi                        (  111): R3094 ±17
102. nanoTwig_FX9590_4.7GHz           ( 1519): R3087 ±37
103. max                              (   74): R3085 ±11
104. nanopery_FX9590_4.7GHz_test      (  542): R3083 ±33
105. smmpv-1c                         (  156): R3082 ±18
106. nanopery_FX9590_4.7GHz_4t        (  216): R3079 ±25
107. Gc_at_Cortex-A53_4c              (  274): R3074 ±20
108. test_cortex-A53_4c               (   76): R3065 ±7.8
109. Gikou32_z8300tablet-4c           (  101): R3060 ±11
110. Apery_WCSC26_0911_1c             (  221): R3059 ±20
111. YssF_6t_x1                       (  192): R3059 ±24
112. komadoku_plus_kkp_6c             (  131): R3057 ±19
113. Gekisashi_X5590_1c               (   86): R3055 ±12
114. 6sec_1c_Rtest_G                  (  215): R3026 ±23
115. Celsius_0.2.2                    (  106): R3018 ±15
116. GradientWind                     (   55): R3017 ±10
117. usapyon2_slave_TWIG              (  117): R3003 ±18
118. apery-wcsc26-1c                  (   71): R2997 ±10
119. NanohaWCSC26                     (   90): R2991 ±8.3
120. BrilliantDisguise                (  107): R2987 ±17
121. att                              (   55): R2978 ±10
122. ShootingStar                     (   99): R2974 ±11
123. WeddingSong                      (   64): R2972 ±10
124. YaneClaTce_i5                    (  201): R2966 ±19
125. kosotto                          (  192): R2959 ±24
126. GravityJet                       (   56): R2938 ±9.8
127. SolitaryWave                     (   67): R2935 ±11
128. Apery32_tmmod_z8300-4c           (  386): R2930 ±31
129. TelegraphRoad                    (   89): R2919 ±16
130. HurricaneVolt                    (   89): R2914 ±16
131. Rolling                          (   71): R2906 ±13
132. Saya_chan_WCSC25ver              (   78): R2894 ±14
133. Apery32_tmmod_3735F-4thread      (  713): R2887 ±34
134. Gikou_20160606_1c_3s             (  246): R2884 ±23
135. G_512_Cortex-A7_2c               (  241): R2878 ±23
136. gpsfish_8n8c                     (  328): R2870 ±27
137. SensitiveTraining                (   97): R2846 ±17
138. Gc_Test_Cortex-A7_2c             ( 1025): R2834 ±33
139. KifuWarabe                       (  480): R2832 ±33
140. Starbound                        ( 1623): R2818 ±36
141. Starwheel                        (   83): R2816 ±14
142. TMOQ_64bit                       (   63): R2807 ±11
143. usapyon2_slave_TWIG_1t           (  148): R2800 ±24
144. gpsfish_normal_1c                ( 7051): R2800 ±37
145. bonanza6.0                       (   77): R2776 ±11
146. Ydebug185                        (  598): R2772 ±35
147. Celsius0.2.0                     (   67): R2770 ±13
148. Gift                             (   71): R2765 ±11
149. OkaraManju                       (  105): R2747 ±14
150. nanoha_test                      (   97): R2743 ±17
151. celery1_YCT                      (   77): R2731 ±9.2
152. KifuWarabe_NotePC                (  320): R2702 ±29
153. orange2_AWS-t2.micro_YClassicTce (  105): R2695 ±13
154. MeijinCobra_WCSC26               (   97): R2682 ±14
155. 6.0bookKai_4700MQ-4cHT4t         (  236): R2672 ±25
156. Blunder_6700HQ                   (   70): R2647 ±8.4
157. Celsius0.0.9                     (   62): R2645 ±10
158. Okara20XX                        (   90): R2584 ±9.5
159. Saya_chan0107-4iMYU              (  139): R2564 ±16
160. KifuWarabe_i7_WCSC26             ( 1014): R2543 ±37
161. Gikou_deth10                     (  149): R2445 ±20
162. aggressor                        (  253): R2444 ±26
163. orange_AWS-t2.micro_GPSfish      (   76): R2435 ±13
164. BonanzaFeliz0.0MYU               (  174): R2420 ±22
165. Bonanza6.0_1c_X                  (   85): R2408 ±12
166. hima_for_miryoku                 (  399): R2373 ±29
167. s1510009                         (   59): R2372 ±9.3
168. Bonanza6.0_1c_systern            (   53): R2343 ±10
169. gps_l                            ( 5356): R2323 ±36
170. YSS                              (  120): R2219 ±14
171. piyo_lv6_iphone6s                (   46): R1967 ±3.6
------------------

前回の記事「評価値という数値 1:一歩百点?」では、評価値が本来は順序尺度であることを指摘し、なぜ将棋の評価値が比率尺度として取り扱われているのかを説明しました。今回は、将棋の評価値を別の形で表現する方法について考えてみたいと思います。

コンピュータ囲碁においては、評価値は0~100%までの“勝率”で表現されます。囲碁では「駒得/駒損」のような分かりやすい指標がなく、また、目数の期待値を用いた従来的な形勢判断もコンピュータ囲碁では有効ではなかったため、勝率の予測値がそのまま評価値となりました。“勝率”は「ゲームの特性」や「評価関数の設計」に依存しない表現であるため、評価値の普遍的な表現方法の一つだと言えます。

コンピュータ将棋においても、評価値を“勝率”に換算して表そうという考え方があります。形式的には、評価値をVとすると、値域が[0, 1]である単調増加関数fを用いて、

\[P = f(V)\]

と変換することで、“勝率”Pに換算することができます。

ここで、“勝率”とは何を意味しているのでしょうか? この定義がはっきりしないと、関数fを具体的に定めることができません。

“勝率”の定義については、おおよそ以下のような考え方があります。

  1. シミュレーションによる勝率。
  2. 棋譜集における勝率。
  3. 自己対局による勝率。
  4. ある関数fによる換算値を“勝率”と定義して、意味は後で検証する。

1つ目の考え方は、モンテカルロ囲碁などで採用されている考え方です。定義はシミュレーションの手法に依存しますので、シミュレーションを1つの評価関数とした時の評価値と考えるのが妥当かも知れません。形勢判断の精確性もシミュレーションの精確性に依存します。将棋では、現在はモンテカルロ法は有効ではないされているため、この考え方は非常に少数です。

2つ目の考え方は、棋譜集内の局面の評価値と勝敗結果を結び付けたものであり、最も一般的な手法です。例えば、「勝率に基づく評価関数の評価と最適化」の論文では、将棋倶楽部24の棋譜9万局を用いて(ただし、勝敗判定には対局者自身の投了の他に簡単な詰め判定も併用)、当時のGPS将棋の静的評価値と勝率との関係を算出しています。この手法は棋譜集に大きく依存し、精確性を追求するには高品質な棋譜が大量に必要となります。

3つ目の考え方は、2つ目の考え方の亜種であり、棋譜集の代わりに自己対局の棋譜を用いるというものです。評価値は基本的に自分自身で使うためのものであるため、短時間の自己対局の勝率を用いるのは合理的です。また、自己完結した手法であるため、きれいな結果も得られるようです(参照:Ponanzaによる結果)。この手法は探索局面数/深さに依存します。また、現実的な対局時間よりも遥かに少ない時間での自己対局の場合には、実質的には1つ目のシミュレーションによる勝率に近くなっていると考えられます。

以上の3つの考え方は、評価値が表している形勢判断について、検証的な視点が暗黙的に盛り込まれています。実際に、詳細な定義を行えば、関数fを統計的に推定することもできますし、評価値と勝率の整合性を確認することもできます(関数が単調にならなかったり、滑らかにならなかったりすると非整合的)。さらに発展させて、整合性がよくなるように強化学習を行ったり、学習時の教師局面の精査を行ったりすることも可能です。

一方で、4つ目の考え方は、評価値に完全に従属したものであり、自然科学でよく使われる手法です。定義と検証を分離することで理論の整備がしやすくなります。例えば、Ponanzaは、学習時に

\[P = f(V) = \frac{1}{1 + e^{- V / 600}}\]

という仮定をしているようです(参照)。この関数はシグモイド関数と呼ばれるもので、自然科学一般でよく使われます(これを見て「フェルミ分布」と言うのは物理学だけでしょう)。

さて、一般論として、関数f(V)はどのような形になるべきなのでしょうか?

例えば、酔歩模型ではどうなるのかを見てみましょう。酔歩模型については「将棋は酔歩ではない?:酔歩模型と手数分布」の記事をご参照ください。

棋士棋譜集(2015年11月版)とfloodgate棋譜集(2012~2015年版)で調整された変数を用いて、シミュレーションした結果を下図に示します。棋士棋譜集(黒点)とfloodgate棋譜集(青点)共に、各点1000万回の結果です。

random_walk_syouritu

結果を見ると、変数の詳細には関係なく、ほぼ比例関係になっています。変形評価値が±1のところで跳んでいるのは模型の問題です(ギリギリでも引き返して逆転する可能性があるため)。

つまり、細かいことに目をつむると、変形評価値

\[X = F(V)\]

と勝率Pとの間には、

\[P \approx \frac{1 + X}{2} = \frac{1 + F(V)}{2}\]

という近似関係式が成立していることになります。

変形評価値は、例えば、

\[X \approx \text{tanh}(\frac{V}{2 u})\]

というような関数でした。この場合、勝率は

\[P \approx \frac{1}{1 + e^{- V / u}}\]

となり、シグモイド関数になります。ここで、uは評価値のスケールを決める変数です。上記のPonanzaの例では600点(おそらくセンチポーンで)でした。

具体的に、シグモイド関数というのは下図のような関数です。

fig1

酔歩模型に依れば、評価値と勝率との関係はおおよそ上図のようになると考えられます。この結果は記事の最初に紹介した様々な結果とおおよそ整合的です。

シグモイド関数はイロレーティングでも使われています(参照:「イロレーティングにおけるレート差と勝率との関係」)。イロレーティングにおける勝率Pとレート差dRとの関係式は

\[P = \frac{1}{1 + 10^{- dR / 400}}\]

です。

上記の式をまとめると、評価値Vとレート差dRとの間には

\[dR \approx 173.7 \frac{V}{u}\]

という比例関係の近似式が導けます。例えば、u = 600の場合には、比例係数は0.29程度になります。

もし評価値とレート差との間の対応がつくと、棋力差、局面の形勢、持ち時間、平均誤差等が全てレートに統一的に換算できることになります。そうなると、勝敗以外の大量の情報を総括的に活用できるようになりますので、序盤、中盤、終盤、残り時間などの様々な状況ごとにレートを詳細に推定したり、評価値だけではなく全体のレート差を最適化するような指し回しをしたりするようなことも可能になるかもしれません。

以上、今回は、将棋の評価値を“勝率”やレート差で表現することを考えました。酔歩模型に依れば、評価値はレート差とおおよそ比例関係になることが示されます。レート差への換算係数は、“勝率”の定義やソフトの詳細に依存しますが、思いっきり大雑把には0.3程度になりそうです。この辺の詳細な研究は今後の課題だと言えるでしょう。

このページのトップヘ