初代素数王の備忘録

KA4T6X|X=9(カステラくん)は素数。

素数大富豪イロレーティングを計算してみた

素数大富豪プレーヤーにとって「自分は素数大富豪界の中でどれくらいの強さなのか」は興味の対象のひとつです(と本稿では仮定します)。たとえば相手を見つけて練習したいときに、自分より格上ないし格下とするよりも、同程度(できれば少し上)とする方が効果が高いように思います*1。本稿ではプレーヤーの実力を相対的な指標のひとつである「イロレーティング」を紹介し、実際に過去の大会結果から算出したレーティングを発表します。

イロレーティングとは

イロレーティングについてはWikipediaやtsujimotterさんの記事でも解説がありますが、念のためここでも説明します。イロレーティングはざっくりいうと

  • 勝敗比は積に関して推移的であるという仮定のもとに
  • 平均的なプレーヤーとの勝敗比を表したもの

です。「勝敗比は積に関して推移的である」とは任意の3人のプレーヤーX, Y, Zに対し、XのYに対しての勝敗比(odds)を O_{XY}などと記すとき、 O_{XZ} = O_{XY} \times O_{YZ}が成り立つことをいいます。たとえば、XがYに対して勝率75%( O_{XY} = 3)、YがZに対して勝率70%( O_{YZ} = 7 / 3)なら、XのZに対しての勝率は87.5%( O_{XZ} = 3 \times 7 / 3 = 7)となります。2人のプレーヤーとそれぞれの「平均的なプレーヤーとの勝敗比」が与えられれば、この推移性を使って両者の間の勝敗比が計算できます。
原理的にはこの「平均的なプレーヤーとの勝敗比」をそのままレーティングにしても問題ないわけですが、人間にとってはかけ算よりもたし算のほうが扱いやすいので対数をとって、値がわかりやすい範囲に収まるように正規化します。具体的には、プレーヤーXの平均的なプレーヤーとの勝敗比を O_{X0}としたとき、Xのレート R_X R_X = 1500 + 400 \times \log_{10} O_{X0}で定義されます。すなわち、平均的なプレーヤーのレートは1500で、平均的なプレーヤーとの勝敗比が10のプレーヤーのレートは1500+400=1900です。これによって、ほとんどのプレーヤーのレートは1000~2000の間になり、2人のプレーヤーの実力差は両者のレートの差でわかります。
実際のレーティングは次のように計算されます。まず、全員のレートを1500とします。次にプレーヤーX, Yが N回対戦し、Xの W (N-W)敗であったとします。このとき、Xの新しいレート R’_X \Delta = K (W - N P_{XY} )として R’_X = R_X + \Deltaとなります。ここに Kはあらかじめ決めてある正定数、 P_{XY}はレートから期待されるXのYに対する勝率で、 P_{XY} = 1 / ( 10^{(R_Y – R_X) / 400} + 1 )です。Yに対しても同様にレートを更新します。この手続きを繰り返し行うことで、各プレーヤーのレートは適正なレートに収束していきます。

レートの計算結果

素数大富豪のイロレーティングの計算はすでにtsujimotterさんの記事(参考文献に記載)や素数大富豪トーナメント*2でも行われていますが、私は次の方針でレートを計算しました。

  • 対象はこれまでの素数大富豪大会の全試合*3
  • 勝敗は各勝負ごとに判定する。
  • 前節における正定数 Kは32とする*4。レートの変動値 \Deltaは四捨五入により整数に丸め、レートが常に整数になるようにする*5
  • 試合順は原則として行われた順とする*6。ただし、トーナメントの1回戦同士など交換してもレートの計算に影響のない場合は集計の便宜のために入れ換えた箇所がある。
  • 同一のプレーヤーが異なる大会で異なる名前で参加している場合は同一プレーヤーとみなして集計する*7

各大会の試合結果一覧です*8

  • 第1期Mathpower杯(2016年10月5日) 参加者16名(うち有効な参加者12名) 10試合25勝負(放送試合のみ)
  • 第2期Mathpower杯(2017年10月8日) 参加者28名(うち有効な参加者13名) 11試合27勝負(放送試合のみ)
  • せきゅーん杯(2018年1月14日) 参加者16名 34試合79勝負(3人対戦によるプレーオフは除く)
  • 第3期Mathpower杯(2018年10月7日) 参加者24名 23試合67勝負
  • 第1期蝉王戦(2019年7月6日~10月14日) 参加者22名 51試合129勝負
  • マスパーティ杯・一般の部(2019年10月19日~20日) 参加者28名 27試合67勝負
  • マスパーティ杯・ジュニアの部(2019年10月20日) 参加者6名 5試合12勝負
  • 第1期雪華流星戦(2019年12月8日~2020年4月19日) 参加者24名 86試合244勝負
  • 札幌杯・無差別級(2020年2月29日) 参加者16名 15試合40勝負
  • 札幌杯・ライト級(2020年2月29日) 参加者11名 10試合24勝負

合計 参加者76名 272試合714勝負

計算結果は次のようになりました*9

上位10名についてのレーティング推移(横軸: 大会)、および30勝負以上のプレーヤー(18名)のレーティング推移(横軸: 勝負数)は次の通りです。



考察

試合数・ゲーム数とレートの収束性

札幌杯の開催や素数大富豪トーナメント(蝉王戦・雪華流星戦)の結果も集計対象にしたことによりデータ量はtsujimotterさんのときの約2.7倍になりました。
レーティング1位のマモさんのレート(1735)は平均的なプレーヤーに対する勝率が 1 / (10^{(1500-1735)/400}+1) \approx 0.795である実力に相当します。マモさんと対戦した平均的なプレーヤー(レート)に対する勝率は 1 / (10^{(1590.4-1735)/400}+1) \approx 0.697と期待されます。一方、実際のマモさんの勝率は0.609ですので、マモさんの現在のレートは過大に評価されていると考えられます。レーティング2位のもりしーさんでは、対戦した平均的なプレーヤーに対する期待勝率は 1 / (10^{(1579.2-1703)/400}+1) \approx 0.671、実際の勝率は0.719なので、もりしーさんのレートは過小評価です。他の対戦実績が多いプレーヤーについてもレートに基づく期待勝率と実際の勝率の差異が大きい場合がありました。しかしながら、勝負数を横軸にとったレーティング推移のグラフではマモさんが最近の連勝でレートが上昇し続けているなどの例外はあるものの、レートの長期的な上昇・下降は落ち着いてきたように見えます。これは、レートが適正レートに近づいているものの直前の対戦結果に影響を受け乱高下しているものと考えられます*10。原因は定数 Kが大きいことにあります。この定数は大きいほど適正レートに収束するのが早くなる一方で、そのあともレートが上下に大きく動いてしまいます。対策として、プレーヤーの対戦回数に応じて定数 Kを個別に変化させる手法があるようです。

対戦カードの妥当性

対戦したプレーヤーの平均レートを求めると、ほとんどのプレーヤーが1500を超えています。これはアクティブなプレーヤーの平均レートが高いことから説明できます。特にトーナメントでは優勝者以外は負けて終了するので単発のプレーヤーのレートが1500を超えることはほとんどありません。全プレーヤーの平均レートは常に1500であることを考慮すると、アクティブなプレーヤーのレートは全体的に上昇します。しかしながら、レーティング下位プレーヤーの対戦平均レートも高いことから、実力差が大きな対戦カードが多いことが示唆されます。実力が拮抗した者同士の対戦を増やす方法としては実力に応じた階級制を採用する方法が考えられます。実際に階級制が採用された札幌杯*11では以前の大会よりも緊迫した戦いが多かったように思います。

勝敗比は積に関して推移的であるという仮定の妥当性

イロレーティングの計算の前提である「勝敗比は積に関して推移的である」という仮定を検証するためにレーティングから期待される勝率と実際の勝率を比較します。レート差を40ごとに区切り、各区間におけるレート上位者の勝率とレートから期待される勝率と比べました。結果は次の通りです。

レートから期待される勝率は実際の勝率とは概ね一致しているといえます。少なくとも、素数大富豪において勝敗比は積に関して推移的であるという仮定に反する結果は出てきませんでした。とはいえ以前twitterでマモさんが言及していたように、素数大富豪は実力差が大きくてもいわゆる「番狂わせ」が起きる可能性が一定程度あり囲碁や将棋、チェスなどとは異なる特徴を有しているので、「勝敗比は積に関して推移的である」という仮定よりもふさわしい仮定があるかもしれません。



まとめ

素数大富豪における戦績の評価基準としてイロレーティングとその計算結果を紹介し、その妥当性について検討してきました。検討の結果、ある程度の有用性は認められるものの改善の余地があることがわかりました。

付録

個人での研究に活用していただけるようにイロレーティングの計算に用いたデータを公開いたします。もし間違いなどがありましたらご連絡ください。

素数大富豪EloRating - Google スプレッドシート
(追記(2024年3月27日): リンクを変更しました。)

*1:素数大富豪は競技人口が少ないので同じ相手と練習せざるを得ないのですが、よりたくさんの人が素数大富豪をするようになればこのような方法も選択肢になりますね!

*2:新レーティング - Google スプレッドシート

*3:ただし、すぐ下にあるように初期の大会についてはデータ不足のため一部除いています。大会に参加しているものの有効な試合がないプレーヤーは集計から除きました。

*4:他のレーティングでも採用されることが多い値。

*5:計算当初は丸めずに計算していましたが端数処理のレートへの影響が最大でも2程度とごく小さいことや他の競技で使用されているレートが整数値のものが多いことから、端数処理をすることにしました。

*6:せきゅーん杯・予選リーグはリーグごとに対戦順、札幌杯は第1期雪華流星戦の途中(59試合/86試合消化)で行われたので雪華流星戦(59試合目まで)→札幌杯→雪華流星戦(60試合目以降)の順になります。

*7:この問題はtsujimotterさんも指摘していますが、完全に解決することは困難です。合算に漏れがある、あるいは同一の名前で異なるプレーヤーが参加している可能性があります。

*8:一部tsujimotterさんのデータと食い違っていますが一次資料(https://live.nicovideo.jp/watch/lv303564022https://twitter.com/tsujimotter/status/952444511468191744の画像)から判断するとこちらが正しいように思います。

*9:以前ツイートしたものと同じものです。https://twitter.com/graws188390/status/1251859349074407424

*10:1回の対戦でレートが60以上変動する場合がありました。また、最後の試合がマモさんともりしーさんの直接対決でレートがそれぞれ41変動しており期待勝率の変動も大きいものとなっています。

*11:無差別級とライト級の2階級。ライト級は過去の3大会(第3期Mathpower杯・第1期蝉王戦・マスパーティ杯(一般の部) )でベスト8以上の成績を収めたプレーヤー以外が参加できた。無差別級参加者の平均レートは1546.0、ライト級参加者の平均レートは1477.3(大会開始前の値)。