とさかず (@smash_tskz) です.
現在小規模オフ大会をより楽しくするためのWebサービスを作成しています.
そこで用いるための大会を跨いだランキング(レーティング)システムを考案していました.
Smash Banzukeという日本ランキングを作成するという話を聞き,参考になるかもしれないと思ったのでWebサービスの公開より先にシステムの仕様を共有しておきます.
(以前書いた仕様をそのまま乗っけているので分かりづらかったり情報の過剰や不足があるかもしれませんが,何か質問があれば気軽にTwitterやスマブラアナリスト窓で聞いてください.)
任意のプレイヤー \(S\)
は「基準レート \(B_S\in\mathbb{R}\) 」と「獲得レートポイント \(A_S \in \mathbb{R}\) 」の2つのパラメータを持つ.
「推定レート \(P_S\in\mathbb{R}\) 」は「基準レート」と「獲得レートポイント」の和とする.
つまり \(P_S = B_S + A_S\) である.
ベースのアルゴリズムとしてElo Ratingを用いる.
この時プレイヤー \(S\) が1位を取った時に得られるレートポイント \(G_1\in\mathbb{R}\) は以下の式で決定する.
\[ G_1=f(B_S, P_1) + \frac{1}{2}(f(B_S, P_2)+f(B_S, P_3)) + \frac{1}{4}(f(B_S, P_4)+f(B_S, P_5)+f(B_S, P_6)+f(B_S, P_7)) + ... + \frac{1}{2^k}\sum_{i=1}^{2^k}f(B_S, P_{i+2^k-1}) + ... \]
またプレイヤー \(S\) が2位,3位,4位を取った時に得られるレートポイント \(G_2,G_3,G_4\in\mathbb{R}\) は以下の式で決定する.
\[ G_2=\frac{1}{2}(f(B_S, P_2)+f(B_S, P_3)) + \frac{1}{4}(f(B_S, P_4)+f(B_S, P_5)+f(B_S, P_6)+f(B_S, P_7)) + ... + \frac{1}{2^k}\sum_{i=1}^{2^k}f(B_S, P_{i+2^k-1}) + ... \]
\[ G_3=\frac{1}{2}f(B_S, P_3) + \frac{1}{4}(f(B_S, P_4)+f(B_S, P_5)+f(B_S, P_6)+f(B_S, P_7)) + ... + \frac{1}{2^k}\sum_{i=1}^{2^k}f(B_S, P_{i+2^k-1}) + ... \]
\[ G_4=\frac{1}{4}(f(B_S, P_4)+f(B_S, P_5)+f(B_S, P_6)+f(B_S, P_7)) + ... + \frac{1}{2^k}\sum_{i=1}^{2^k}f(B_S, P_{i+2^k-1}) + ... \]
同様にしてプレイヤー \(S\) が \(n\in\mathbb{N}\) 位を取った時に得られるレートポイント \(G_n\) は \(P_n\) を含む項から先を足したものとする.
この時プレイヤー \(S\) の獲得レートポイント \(A_S\) は以下の式で決定する.
\[ A_S = C_1 + \frac{1}{2}(C_2 + C_3) + \frac{1}{4}(C_4 + C_5 + C_6 + C_7) + ... + \frac{1}{2^k}\sum_{i=1}^{2^k}C_{i+2^k-1} + ... \]
獲得レートポイントが \(100\) を超えた時基準レートを \(100\) 増加させ,獲得レートポイントを \(0\) に更新する.
ただしこの処理は基準レートが \(2200\) のプレイヤーには適用しない.
\(f(X,Y)\) は以下の式で決定される.
ただし \(\lambda\in\mathbb{R}\) は調整できる定数で,今のところ \(\lambda=30\) を予定している(主催者やプレイヤーの評判次第で調整する予定).
\[ f(X,Y) = \lambda (1-\frac{1}{10^{(Y-X)/400}+1}) \]
基準レートや獲得レートポイントのリセットに関係なく,今まで獲得したレートポイントの合計を累計獲得ポイントとする.
一つの大会で200レートポイント以上獲得した場合は獲得したポイントに応じて飛び級で段位を昇格できるようにする.
\(G_1\) の値は以下の状況でのElo Ratingに基づくレート変動値の期待値となる.
つまり1位を取るプレイヤー \(S\) は確率 \(1\) で推定レート \(P_1\) のプレイヤーと対戦し,
確率 \(\frac{1}{2}\) (トーナメントの開始位置次第)で推定レート \(P_2\) または \(P_3\) のプレイヤーと対戦し...という構造になっている.
なお, \(G_2\) 以降も同様に解釈できる.
ただし負けによるレート減少は考慮していない.
スマメイトでは同格に勝つとレートポイントが15得られる.
つまり最高レートを100増加させるには7連勝すれば良いと言える.
「事象を起こす確率=難易度」であるとすると,同格のみが出場している128人規模のシングルエリミネーショントーナメント(優勝まで7連勝が必要)で優勝することが同等の難易度であると言える.
この観点から考えても \(G_1\) の式は理にかなっている.
\(\lambda=30, N=128\) の時に \(G_1 = 105\) となり,ちょうど昇格できる値になるためである.
複数回の結果による昇格では,意図的に2個目以降の大会結果に強い減衰をかけている.
これは小さな結果を積み重ねるだけで昇格できてしまう減少を防ぐためである.
そのため小規模大会のみで昇格を目指す場合は1度の優勝だけではなく複数回の入賞が必要となる.
例:
小規模高頻度の大会では1度の参加のみで卒業すると参加者が減りやすいことを考えると妥当なラインだと思われる.
トーナメントの結果を出す順序によって得られるポイントが変わらないようにするため.
自分以外のレートは推定レートを使うことにしているが,これも基準レートの方が良い可能性もある.
トーナメント方式で順位が決まった場合など同率順位のプレイヤーが存在する場合,Best xxの順位としてポイントを計算する.
例:3位のプレイヤーが2人いる場合→両名とも4位として処理