レーティングについてと,グリコ2レーティング(Glicko-2 System)におけるレーティング算出方法
概要
オンラインゲームやチェスなどのボードゲームで使われているレーティングに関する記事です.
レーティングの算出方法は何種類かありますが,その中でSplatoon2やシャドウバースなど,様々な対戦ゲームで使われているグリコ2レーティング(Glicko-2 System)というレーティングアルゴリズムについて説明します.
「アルゴリズムの中身をはやく知りたい!」という方は,下の『本題:グリコ2レーティングのしくみ』からご覧ください.
アルゴリズムの説明には数式が登場します.「数式なんて見たくない!」という方は,この記事の前半でレーティング全般およびその歴史について書いたので,そちらでレーティングに対するイメージ・理解を深めていただければ嬉しいです.
はじめに:レーティングとは
みなさんは「レーティング」という言葉を聞いて,どんなものが思い浮かびますか.
国語辞書でレーティングを調べてみると,次のような意味が載っています.
1 段階や等級による格付け。
2 定まった数式にあてはめて算出した、競技者の実力の評定。「ヨットレースのレーティング」
3 テレビ・ラジオなどの視聴率。
4 証券会社や格付け機関などが行う、株式や債券などの騰落予想、信用格付け。「大手証券会社がA社のレーティングを上げた」
レーティングの語源であるrateには,「評価する」「見積もる」のような意味があり,そこから派生して色々な意味でレーティングという言葉が使われています.
今回の記事は,ゲームのレーティング対戦で使われるレーティングシステムに関するものです.上で言うと2番目の意味になります.
ところで,みなさんはゲームでレーティング対戦をしたことがありますか?
レーティング対戦をご存じでない方や,あまり馴染みがない方のために簡単な説明をしておきますと,レーティングとは,プレイヤーのゲームの実力を数値化し、客観的に実力を判断する指標の1つです.2人のプレイヤーがゲームの対戦をした時,勝利したプレイヤーのレーティングは上がり,敗北したプレイヤーのレーティングは下がります.
たとえば,ポケットモンスターサン・ムーンの通信対戦では,レート対戦とフリー対戦という2つのモードがあります.レート対戦では,各プレイヤーに「レートポイント」という数値が与えられます.レートポイントは1500から始まり,バトルに勝てば増加し,バトルに負けると減少します.このようなレーティング対戦を導入しているゲームはポケモンだけでなく,将棋・チェスなどのボードゲームや,サッカーのような2チームが対戦する形式のスポーツでも導入されることもあるようです.
今回の記事の内容は,レーティングの計算方法についてです.現在ではさまざまなレーティングシステムがありますが,その中でGlicko-2 System(以下グリコレーティング2)というレーティングシステムについて説明します.
レーティングシステムの歴史
いきなりグリコ2の説明に入る前に,Wikipediaの記事を参考しつつ,レーティングシステムの歴史を簡単に振り返ってみます.
チェスなどの2人制ゲームにおいて,プレイヤーのゲームの実力を数値化する考え方は少なくとも1900年代からありました.レーティングの算出方法として,1948年にIngo systemというアルゴリズムがAnton Hoesslingerによって考えられ,その後1956年にHarkness systemが Kenneth Harknessによって考えられました.それから1960年頃,アメリカの物理学者・チェスプレイヤーのArpad Eloによって,イロレーティング (Elo rating)が提案されました.イロレーティングは非常に広く知られているレーティングシステムであり,現在でも将棋,チェスのようなボードゲームや,対戦型オンラインゲームのランキングやマッチング,サッカーのようなスポーツなど,様々なところで取り入れられています.
その後,1995年にMark Glickmanはイロレーティングを改良したレーティングアルゴリズムとしてグリコレーティング(Glicko rating system)を発明し,2013年にこのグリコレーティングをさらに改良したグリコ2レーティング(Glicko-2 ratingSystem)を発明しました.
イロレーティングと同様に,グリコレーティングおよびグリコ2レーティングは様々なオンラインゲームのレーティング対戦で導入されています.たとえば,シャドウバースはグリコ2レーティングに基づいてレーティングを算出しているようです.さらに,Nintendo Switch用ソフトSplatoon2でも,正式な発表はされていませんが,グリコレーティングのWikipediaや海外サイトで,ガチパワーなどのレーティングの算出にグリコ2レーティングが使われているという情報がありました.
What is "Power" anyway? ---"Power" is actually a Glicko2 rating.
また,イロレーティングやグリコレーティング,グリコ2レーティングは1対1のチェスを想定したレーティングシステム(グリコレーティング,グリコ2レーティングも1対1,1チーム対1チームを想定したものです)ですが,Microsoftは2007年に3人以上でプレイするゲームでも適用できるTrueSkillというレーティングアルゴリズムを開発しました.
本題:グリコ2レーティングのしくみ
世界中のオンラインゲームで利用されているグリコ2レーティングですが,このレーティングシステムについて日本語の解説されている記事が見当たりませんでした(調査不足だったらごめんなさい...).そこで,グリコ2レーティングについての論文Example of the Glicko-2 systemを読み,自分なりにアルゴリズムの内容を理解し,Pythonでプログラムを実装して数値計算をしてみました.今回の記事では,グリコ2レーティングの仕組みをできる限り丁寧に説明していきます.
注意:本記事では,グリコ2レーティングのアルゴリズムの説明だけにとどめました.アルゴリズムに出てくるパラメータの直感的な意味は,論文に書かれていますので,興味のある方はそちらをご覧ください(後日この記事にも追記するかも...?).また,アルゴリズムの背後にあるレーティングシステムの数理・理論的な背景については論文にもあまり書かれていなかったのと,私自身の知識不足のため,説明を省かせていただきます.
ゲームの状況設定・表記法
- 1対1,あるいは1チーム対1チームの対戦ゲームを対象とします.
- ゲームに参加している各プレイヤーは,レーティング(rating) ,レーティング偏差(ratings deviation) ,レーティング変動率(rating volatility) というパラメータをもっています.
- プレイヤーPのレーティングが ,レーティング偏差が ,レーティング変動率が であったとき, と表記することにします.
- プレイヤーがもつ3つのパラメータの値は,試合をするたびに更新されます.このアルゴリズムのゴールは,試合後のレーティング ,レーティング偏差 ,レーティング変動率 を計算することです.
- パラメータの更新方法はグリコレーティングの方法をベースとしています.ただ,各パラメータの値のスケールがグリコレーティングとグリコ2レーティングで異なるので,スケールの変換を2回行う必要があります.
ステップ1:3つのパラメータの初期値と,定数τの値の決定
プレイヤーPのもつパラメータの初期値を設定する.
- 各パラメータの標準的な初期値
- レーティング は1500.
- レーティング偏差 は350.
- レーティング変動率 は0.06(実際に使われる場面に応じて適切な値に設定しておく必要がある).
また,定数 を,(基本的には)0.3から1.2までのどれかの値にする.
ステップ2:スケール変換
プレイヤーPのレーティング とレーティング偏差 のスケールを変換し,変換後の値 を計算する.レーティング変動率 にはスケール変換を施さないことに注意する.
これ以降,プレイヤーPが 人の対戦相手 と試合をしたとし,試合後にパラメータ を更新する.ここで, 番目( )の相手 のレーティング(のスケール変換後の値)を ,レーティング偏差(のスケール変換後の値)を とおく.また,プレイヤーと各対戦相手 の対戦結果を とおく.ただし,プレイヤーPが対戦相手 に勝利したとき ,引き分けであったとき ,敗北したとき とする.
ステップ3: の計算
以下で表される量 を計算する.
ただし,
とおいた.
ステップ4: を計算する.
ステップ5:更新後のレーティング変動率 を反復により求める.
① を (ただし対数の底は )とし,関数 を次のように定義する.
また, を非常に小さな正数とする.
② 以下のように反復アルゴリズムを設計する.
- とする.
- もし ならば, とする.
もし ならば, 次のような反復を行う.
(a) とする.
(b) もし ならば, として (b)へ.
その後, とする.
③ とする.
④ のとき,次の反復を行う.
(a) とする.
(b) もし ならば, とする.
(c) もし ならば, とする.
(d) とする.
(e) もし ならば反復をストップして⑤へ.そうでなければ(a)へ.
⑤一度でも が成り立ったならば, とする.
ステップ6: の計算
次のように表される を計算する.
ステップ7:レーティング,レーティング偏差の更新
次のようにレーティング,レーティング偏差を更新する.
ステップ8:元のスケールに変換し,レーティングとレーティング偏差の更新
試合後のプレイヤーのレーティング とレーティング偏差 を次の更新式にしたがって計算する.
以上より,プレイヤーPのもつ3つのパラメータ を に更新することができました.
数値実験
グリコ2レーティングの論文に書かれている数値実験の例を載せておきます.
- プレイヤーPが,3人の対戦相手 と対戦します.
- 試合前の各プレイヤーのパラメータを次のように設定します.
- (プレイヤーPの試合後のパラメータの値を知りたいので,対戦相手のレーティング変動率は不要です.)
- 定数 を とします.
グリコ2レーティングを用いて試合後のプレイヤーPのパラメータ を 計算すると,という結果になります.アルゴリズムの各ステップの計算結果( の値など)は論文の後半に詳しく書かれているので,それらの値を知りたい方はそちらをご覧ください.
上の結果は論文に書かれていたものですが,僕がPythonで実装して数値計算をしたところ,になりました.2つのパラメータの小数第二位が1だけズレていますが,概ね論文通りの結果になったと言えるでしょう....
おわりに
グリコ2レーティングのアルゴリズムの説明をしました.何度か見直しましたが,もし誤字や分かりづらい箇所があったら申し訳ありません.
次回は,このグリコ2レーティングを用いて,Splatoon2のリーグパワーの算出をしてみたり,プライベートマッチにプラベパワーというレーティングを導入してプラベ内でレート戦を再現してみた,という記事を書こうと考えています.
参考文献
- Example of the Glicko-2 system(Mark E. Glickman, 2013)(http://www.glicko.net/glicko/glicko2.pdf)
- Glicko rating system, Wikipedia (https://en.wikipedia.org/wiki/Glicko_rating_system)
- Chess rating system, Wikipedia (https://en.wikipedia.org/wiki/Chess_rating_system)
- An In-Depth Look at the Splatoon 2 Ranking System (https://oatmealdome.me/blog/an-in-depth-look-at-the-splatoon-2-ranking-system)