Dominion Online でのレートのみかた

こちらは、うりはりさん主催のドミニオンアドベントカレンダー6日目の記事になります。
多くのドミニオン強豪プレーヤーがさまざまな視点からドミニオンの記事を書いており、大変素敵な企画となっております。
是非、私以外の参加者さんの記事もご覧ください。
(むしろ、この記事よりもドミニオンへの理解が深まる記事がほとんどだと思います。)

こんにちは、ろびたんです。
「ドミニオン木曜会(木ドミ)」に参加してボコボコにされたり、ぐらわん道場の門を叩いて稽古をつけてもらったりしています。
順位戦や大会などは怖くてなかなか参加できていませんが、先日発表があったドミニオンGPには参加するつもりです。

さて、「レベル〇〇達成しました!」「$${\mu}$$で目標を定めた方がいい」「レベルはサボると下がり続ける」などなど。
Dominion Online で順位戦を嗜む方々はどこかで耳にしたことがあるのではないでしょうか。
だが、こんなドミニストも多くないでしょう。

「このレベルなどの値ってなんなんだ」

大きければすごいんだろうなぁということはわかるが、どんな仕組みなのかはわかんない。
リダボ勢の値を見てもバラバラで規則性は見当たらない。

そんな迷えるドミニストのために、Dominion Online で用いられているレート計算「Glicko-2 System」について解説していきます。

ただし、専門外である私が最近勉強したことのまとめのような記事なので、「この辺りが間違っている」などあった場合は是非教えてくださると嬉しいです。

これだけ理解できれば十分

リーダーボードにおける4つの数字のざっくりとした意味

  • レベルは「実力の下限」

  • レート$${\mu}$$は「最終結果から予測される実力」

  • レート偏差$${\phi}$$は「最終結果とその時期から予測される実力の幅」

  • volatility measure(意訳:不確かさ、適訳求む)$${\sigma}$$は「実力の不安定さ」

もうちょっと深く理解しよう

  • 実力は$${\mu -2\phi}$$から$${\mu +2\phi}$$の間に95%の確率であるとされる

  • レベルは$${50 +7.5\times(\mu -2\phi)}$$(上の区間の下限を大体$${0}$$から$${100}$$の間に入るようにしたもの)

  • レート$${\mu}$$は時間によって変化しないが、レート偏差$${\phi}$$はレートをしない日があると微増する(その結果としてレベルが微減する)

  • $${173.7178 \times \mu +1500}$$を計算すると$${1500}$$を中心としたレートに変換できる(ただし、ポケモンのランク戦などと計算方法が異なる点は注意されたい)

  • 割と複雑な計算をしているため、手計算で大まかなレートの上下を求めるのは難しい

Dominion Online における個別の注目点

  • 各値の初期値は$${(\mu, \phi, \sigma) = (0, 0.75, 0.06)}$$
    (2022 12/8追記:新規アカウントで表示される数値を元に初期値を訂正しました。$${\phi}$$に関しては参考元と違いが出ています。詳しい方は是非教えてください。)

  • $${\sigma}$$が大きく変動しないような設定になっている(ドミニオンではジャイアントキリングがよく起こるため)

  • レベルは$${100}$$を超えたり$${0}$$を下回ったりする可能性がなくはない

もっと詳しく見てみよう

以下は、レートの計算方法について詳しく見ていきます。
残念ながら、複雑そうな数式やアルゴリズムが登場します。
可能な限り噛み砕いて説明しますが、なおわかりづらくなっている場面もあるかと思いますのでご容赦ください。

設定として、自分のレートと偏差が$${(\mu, \phi)}$$で、1日の中で$${j}$$番目に戦った相手のレートと偏差が$${(\mu_{j}, \phi_{j})}$$の場合を考えます。
また、$${j}$$番目の相手との勝敗を$${s_{j}}$$で表します。
$${s_{j}}$$の値は、自分が勝った場合は$${1}$$、負けた場合は$${0}$$、引き分けた場合は$${\frac{1}{2}}$$とします。

Step1. 諸計算のための準備

まずは、各値を計算するための準備をしましょう。

$$
\begin{align*}
g(\phi) &= \frac{1}{\sqrt{1+3\phi^2/\pi^2}} \\
E(\mu, \mu_{j}, \phi_{j}) &= \frac{1}{1 +\exp({-g(\phi_{j})(\mu -\mu_{j})})}
\end{align*}
$$

$${g(\phi)}$$は、$${\phi}$$の絶対値が大きくなるほど$${0}$$に、小さくなるほど$${1}$$に近づく関数です。
$${E(\mu, \mu_{j}, \phi_{j})}$$は、$${\mu}$$と$${\mu_{j}}$$を比べて$${\mu}$$が大きいほど$${1}$$に、$${\mu_{j}}$$が大きいほど$${0}$$に近づく関数です。$${g(\phi_{j})}$$が小さいほど$${0}$$や${1}$に近づきにくくなっています。
以下、$${E(\mu, \mu_{j}, \phi_{j})\{1-E(\mu, \mu_{j}, \phi_{j})\} }$$という形も出てきますが、これは$${\mu = \mu_{j}}$$ のときに$${\frac{1}{4}}$$をとり、$${\mu}$$と$${\mu_{j}}$$の差が大きいほど$${0}$$に近づいていきます。

これらの関数を用いて分散$${v}$$とレートの改善$${\Delta}$$という2つの値を定めます。
$${v}$$については、表記の簡略化のためその逆数($${v^{-1} = \frac{1}{v}}$$)を定義します。

$$
\begin{align*}
v^{-1} &= \sum_{j}g(\phi_{j})^{2}E(\mu, \mu_{j}, \phi_{j})\{1-E(\mu, \mu_{j}, \phi_{j})\} \\
\Delta &= v \sum_{j}g(\phi_{j})\{s_{j}-E(\mu, \mu_{j}, \phi_{j})\}
\end{align*}
$$

試合数が多くなるほど$${v}$$は小さくなります。
ただ、$${v^{-1}}$$における各項は$${\phi_{j}}$$と$${\mu-\mu_{j}}$$の絶対値が大きいほど小さくなるので、$${v}$$に与える影響度は小さくなります。
$${g(\phi_{j})\{s_{j}-E(\mu, \mu_{j}, \phi_{j})\}}$$を見てみると、勝利点$${s_{j}}$$からレート差を元に減点され、相手の偏差が大きいほどその影響度合いを弱めていることがわかりますね。

Step2. Volatility measure の更新

以下、再帰処理を用いて volatility measure $${\sigma}$$ を更新していきます。
プログラミングがわかる人だと理解しやすいのかもしれません。

以下、手続きは書きますが式や処理の気持ちは分からなかった部分が多いです。
詳しい方がいらっしゃいましたら教えてください。

まずは、評価する関数を定めます。
おそらくこの関数$${f}$$がこの段階のミソですが、イマイチ嬉しさがまだわかっていないです。

$$
\begin{align*}
f(x) = \frac{e^{x}(\Delta^{2}-\phi^{2}-v-e^{x})}{2(\phi^{2}+v+e^{x})^{2}} -\frac{x-\ln}{\tau^{2}}
\end{align*}
$$

Dominion Online の2人戦において $${\tau = 0.3}$$ となっており、これでジャイアントキリングによる$${\sigma}$$が大きく変わることを防いでいるみたいです。

続いて、次の手順で$${A,B}$$を定めます。

  • $${A = a = \ln(\sigma^{2})}$$

  • $${\Delta^{2} \geq \phi^{2}+v}$$ であれば$${B=\ln(\Delta^{2}-\phi^{2}-v)}$$

  • $${\Delta^{2} \leq \phi^{2}+v}$$であれば、$${f(a-k\tau) > 0}$$を満たす最大の自然数$${k}$$を用いて$${B=a-k\tau}$$

最後に、$${f_{A}=f(A), f_{B}=f(B)}$$とおき、$${|B-A|}$$が十分小さく(設定した値$${\epsilon}$$以下に)なるまで以下の操作を繰り返し、新たなvolatility measure$${\sigma’}$$を得ます。

  • $${C=A-\frac{B-A}{f_{B}-f_{A}}}f_{A}, f_{C}=f(C)$$とおく

  • $$f_{C}f_{B}$$の値が正なら$${f_{A}}$$の値を半分にし、そうでない場合は$${A}$$を$${B}$$に、$${f_{A}}$$を$${f_{B}}$$に変える

  • $${B}$$を$${C}$$に、$${f_{B}}$$を$${f_{C}}$$に変える

  • $${|B-A|}$$が設定した$${\epsilon}$$以下になるまで上の操作を繰り返す

  • $${|B-A|} \leq \epsilon$$となったら、$${\sigma’ = e^{A/2}$$として終了

イリノイ法というアルゴリズムを用いて適当な値を求めているようです。

Step3. レートと偏差の更新

最後に、上で得た$${\sigma’}$$を用いて$${\mu}$$と$${\phi}$$を更新しよう。

$$
\begin{align*}
\phi^{\ast} &= \sqrt{\phi^{2}+\sigma’^{2}} \\
\phi’ &= \frac{1}{\sqrt{(\phi^{\ast})^{-2}+v^{-1}}} \\
\mu’ &= \mu + (\phi’)^{2}\sum_{j}g(\phi_{j})\{s_{j} -E(\mu, \mu_{j}, \phi_{j})\}
\end{align*}
$$

$${\phi^{\ast}}$$は$${\sigma’}$$を元に計算した元となる偏差で、それと分散$${v}$$から新たな偏差$${\phi’}$$を計算しています。
$${\phi’}$$は$${v}$$が大きいほど$${\phi^{\ast}}$$に近づき、$${v}$$が小さいほど小さくなります。
$${\mu’}$$は$${\mu}$$に「実力差と相手の偏差を考慮した勝ち点の総和に自身の新しい偏差をかけたもの」を足して得られています。
それゆえ、$${phi}$$が大きいほどレートが上下しやすいのですね。

Step4. サボった場合のレート等の処理

この場合は$${\phi}$$のみ更新します。

$$
\begin{align*}
\phi’ = \phi^{\ast} = \sqrt{\phi^{2}+\sigma^{2}}
\end{align*}
$$

これにより、偏差$${\phi}$$のみが徐々に大きくなっていきます。
これは$${\phi}$$が小さいほど、また$${\sigma}$$が大きいほど増加量が大きくなります。

あとがき

この記事をきっかけに、レベルだけでなく$${\mu}$$や$${\phi}$$などを参考にした評価がより広まったら幸いです。

この記事は、Dominion Online のリーダーボードページ右上部のページを参考にしました。(私の技術的な問題でこの記事には片方のリンクのみ記載しています、方法が判明次第もう片方のリンクも記載します)
より詳しく知りたい方はそちらを参照ください。
私はアメリカごが得意でないので誤訳や思い違いがあるかもしれません、是非読んで間違いを指摘してください。

この記事が気に入ったらサポートをしてみませんか?