May25th

イロレーティングを用いたレート計算案

Top / イロレーティングを用いたレート計算案

イロレーティングを用いたレート計算案

せっかくなので、ゼロサムのイロレーティングを応用した計算式を考えるだけ考えてみました。
wikipediaのイロレーティング項目
もし間違っていたら、突っ込みお願いします。
結論は大体つまり?の部分にありますので、お急ぎの方はそこを見てください。

イロレーティングの簡易な説明

先に元のイロレーティングについて、分かりやすく説明しておきます。分かりにくかったら申し訳ない。
具体的な式はwikipediaにある通りですが、それを噛み砕くと次のようになります。

レートの変動量は
   K  ×  ( 実際の勝利数:今回のような場合1か0 - レート差から算出した勝率 )
この数値だけ、勝者は上がり、敗者は下がります。
Kの値は任意に決める事ができます(重要)。一般的には16とか32とか。

勝率が高い(レート差がある)と、勝ってもあまり変わらなく、負けると一気に下がる事が分かると思います。
逆に勝率が低いと、負けてもあまり変わらなく、勝つと一気に上がります。

このレーティングシステムは元々1:1の対戦ゲーム用であるため、チーム戦が基本となるAoCにはそのまま適用できません。
勝率の差などが出るのもチーム全員の戦力によるものであり、個人のレートをそのまま用いる事はできません。
そこで上の「勝率」は、チームメンバーの合計レートの差から算出される事になります。
対等になるようマッチングされているので、基本的には0.5に近い値になるはずです。
つまり、 実質的にK値の半分がレート変動量になる(事が多い) 、という事です。

参考までに、勝率は次の計算式で導かれます。
   1  /  1 + 10 ^ レート差/任意数(仮にzとする) (^は階乗を意味する)
レート差は「相手のレート-自分のレート」であり、自分が先ではありません。自分が弱いとプラス、強いとマイナス。
任意数zは、レートの価値に影響してきます。

仮にレート差が0の場合、10の0乗は1なので、1/(1+1)、つまり勝率は1/2となります。レート変動量も0.5。
zの値が400でレート差が200の場合、分母は 1+10の1/2乗≒4.16 となり、勝率は大体26%になります。レート変動量は勝てば0.74、負ければ0.26という事になります。
wikipediaでは「200点のレート差がある対局者間では、レートの高い側が75パーセントの確率で勝利する。」という前提を置いているので、zの値は二倍の400となっていますが、別にこの数値は固定値というわけではありません。
ただK値とも密接に関わってくるので、考慮する必要はあります。

このz値は、実質的にレート差の補正をどのように行うかに関わってきます。
「z値の半分のレート差があれば、高い側が勝率75%になる」ように、レート変動量に補正をしてくれます。
つまりz値が高いほどレート差に鈍感で、低いほど敏感、という事になります。
(例えばレート差が200の時、z値が400なら上のように勝率26%です。
 同じレート差でもz値が200なら、1+10の1乗=11が分母になるので、勝率は9%になります。
 つまり負けた時のレート変動が更に小さくなり0.09、勝った時のレート変動は更に増え0.91になります。
 K値が32の場合、負けてもレート-2.9なのに、勝つと29もらえる事になります。)
K値が高い場合はz値も高くして鈍感にしておかないと、乱高下が酷い事になるでしょう。

AoCに適用する場合の要点

このレート計算式をAoCで適用する際に、改変ができると思われる点は次の3つ。
   「K値(レート変動量)」   「z値(レート価値)」   「各プレイヤーへのレート分配」
うちz値については、マッチングが機能しているうちはあまり考える必要がないので、K値に応じて後で変える程度に留めておきます。

すると残る要点は、 K値 と 各プレイヤーへのレート分配 、この2点のみが考えられる事になります。
「戦力が同等になるようマッチングするチーム戦で、イロレーティングを使いたい」場合は、どのような場合でもこの2点に主眼が置かれる事だと思います。

レート分配、チームレート変動量

イロレーティングは、ゼロサムのシステムです。変動値の合計(サム)は常に0になります。
勝手に数字を足したり引いたりする事は、想定されていません。

ですがチーム戦の場合、一つの結果を基準にメンバーの数だけ変動が起こります。
参加者が2人であれば同値にせざるを得ませんが、チームの場合個々人は異なる変動量であっても、総和がゼロであれば設計上問題は発生しません。
そこで、総和がゼロになる変動量を参加者にどのように分配するか、という概念が発生します。

ひとまず重要な問題として、割る人数が増えるほど割る前のチームレート変動量を大きくしなければならない、という点があります。
「チーム人数で掛ければいいじゃないか」と思われるかもしれませんが、2:3などの変則的試合をどうするか、という問題があります。
少ない方にあわせるか、多い方にあわせるか、中間をとるか、変な計算式を導入するか。

ここでは「原則同数戦なんだから、イレギュラーな試合の影響は小さくしよう」と考え、少ない方にあわせてチームレート変動量を決めたいと思います。
2:3なら2、1:4なら1です。

信用度(c)

ここから自論の展開に入ります。眉に唾をつけて読んでください。

レート分配ですが、単純にプレイヤーの数で割ると、責任の軽重が考慮されなくなってしまいます。
レートが低いのに強い、レートが高いのに弱い、こういうプレイヤーがいるとマッチングがうまくいかなくなってしまいます。
これらを適正レートにするにはどうすれば良いか。

ゲームの内容で判断する、というのがアナログな回答ですが、それは色々と困難さが伴います。
そこで純粋に戦績の多寡で信用度を数値化してはどうか、そしてそれをレート分配とK値に反映させてはどうか、というのが私の案の骨子です。

具体的には

  • 戦績が多いレートは適正なはず(信用できる)
  • 試合日が古いレートは適正かどうか怪しい(信用できない)

この二点を柱に、各プレイヤーにレートとは別に「レート信用度(以下、creditのc)」を算出していく事にします。

最初は戦績がないので、0です。マイナス値はとらないので、下限です。
「試合日が古いレートは信用できない」ようにするため、cは毎日-1される事にします。
ブランク期間が空いた場合、何日で信用0にするかを考え、cの上限値も決めます。ここでは仮に400とします。
「戦績が多いレートは信用できる」ようにするため、試合毎に勝敗に関わらずcを増やす事にします。
この時、新規が何戦ぐらいすれば十分信用に足りるレートになるかを考え、その試合数で上限値を割ると良いと思います。
私は30~40戦ぐらいが適当だと思われるので、ここでは33戦+αで上限に達する+12に仮設定します。
(参考までに、標準的イロレートで勝率が10%になるには、レート差約400(=z値)が必要になります。計算上の勝率が50%固定でK値32の場合、1戦の変動量は16で、負けっぱなしでも25戦かかる事になります。初期レート-400だと適正な初期レートの相手に対しても勝率10%しかない(もっと高い相手には更に勝率が落ちる)、という事になりますが、一つの目安にはなると思います。)

結論として、各プレイヤーのレート信用度を示すcは
「試合毎に12(仮)増える」「毎日-1される」「上限は400(仮)」
この3点で算出される事とします。

信用度(c)オプション

基本的な骨組みは前項の通りですが、この数値は感覚的な調整が許されるので、追加オプションも色々考えられます。この項目ではそれをメモしておきます。

  • 連勝・連敗しているレートは適正かどうか怪しい(信用できない)
    特別な補正を設け、c値を-する事で調整が図れます。前項の試合変動量×(連勝・連敗数)程度が妥当でしょうか。
    通常の試合加算cは常にプラスされる事を考えると、2連勝で2試合(=勝った試合)分のc値がチャラ、3連勝で2試合分マイナス、4連勝で累計5試合分、5連勝で9試合分・・・と、連勝すればするほど加速的にc値が減っていく事になります。
    2連勝程度ならよくある事だと思うので、c値は上がりにくくなります。
    前提が変わったので通常の試合加算cにも変更を加え、ここでは交互に勝ち負けしても上限まで20戦が必要な+20に設定する事にします。

後から考えたのでオプションとして別項にしていますが、以下このオプションを適用する事を前提にして話を進めます。

信用度(c)によるレート分配

こうして算出された信用度cですが、まずレート分配に適用します。
低いほど勝敗結果に大きな責任を負うとして、レート変動を大きくし、高いほど小さくします。

この配分を決める値(quotaからq)は様々な計算方法が考えられますが、単純な方法としては引き算が考えられます。
例えば「800-c」であれば、c上限400の人とc0の人とでは、400と800と、二倍の差が生まれる事になります。
「600-c」だと200と600で3倍、「1200-c」だと800と1200で1.5倍。

この数値を決定するにあたっては、次項のK値補正と照らし合わせて実際に計算・シミュレートをする事が望ましいです。
本文中の数値設定下では「686-c」にすると、敵味方のc値が全員同値で、自分のcが0であれば、レート変動量はほぼ一定になります(大体K値と同値)。
「敵味方のc値が全員同値」というのは非現実的な想定ですが、同程度の信用度でゲームされている中に新規が入り込んだケースを想定するには十分有用であると考えられます。

固定値をこの「686-c」より高くすると補正がにぶくなり、全員新規の環境で始めた時よりも、熟練者の集団に新規が入り込んだ時の方がレート変動量が小さくなります。
今回は逆の方が望ましいと思われるので、686よりも低い「600-c」で計算する事にします。

こうして決めたqを元に、チームメンバー間でレートを分配します。
   q / チームメンバーのq総和
この数値で掛ければ、チーム全体のレート変動量をイロレーティング通りにしつつ、cに応じて個人のレート変動量に差をつける事ができます。

信用度(c)によるK値決定

これで個人のレート分配に差をつける事ができましたが、これは相対的な評価にとどまっています。
例えば全員の戦績がリセットされた環境だと、全員のcが0であるため、レートの変動量は通常と変わりません。
本来ならレートの信用度が低いのですから、変動量を大きくしなければなりません。

そこでチームに配分されるレートの絶対的な量、つまりK値を参加者のc合計に応じて変化させます。
例えば全員のcが0の時には配分量も2倍にしたい、というのであれば、2-全員のc総和/(400×参加人数)をK値に掛ければ良い事になります。
とりあえずこれを採用します。

K値の調整が係数でできてしまったので、元々のKの絶対値をどうするかは自由のままです。
特に手を加える理由もないので、今回は一般的な数値である32を適用します。
(勝率0.5の場合、基礎的なレート変動量は16という事になります)

信用度(c)採用による副次的効果

c値はゼロサム的な数値ではなく、手動変更等で自由に変えても比較的影響は少なく済みます。
もとよりほっとくと0になるし、初期値から増える事はあっても(初期値より)減る事はない、そういう数値です。

つまり、ゼロサムのシステムを採用したにも関わらず「今のレート全然あってねーよ助けて!」という人の声にも限定的に応えられる可能性があります。
権限を持つ人が「レート信用度低いみたいだから下げておく」事で、多少の不満なら解決できるはずです。

つまり?

全体としてはこのようになります。

  • 各プレイヤーに「試合毎に12(仮)増える」「毎日-1される」「上限は400(仮)」というc値(レートの信用度の数値化)を設定する
     連勝・連敗補正を用いるのであれば「試合毎に20(仮)増える」「連勝・連敗すると-20(仮)×(連勝・連敗数)」という数字設定に変更・追加する
  • チーム全体のレート変動量は 32×{2-参加者全員のc総和/(400×参加人数)} × (勝てば1負ければ0 - チームレート差から算出した勝率(0.5付近想定) ) × 最少人数のチーム人口 で算出する
    ※青い部分がイロレーティングによるもの
  • 各プレイヤーのレート分配比を 600-c で算出する(以下q)
  • 個人のレート変動量は チームレート変動量 × q/(チームメンバーのq総和) で算出する
  • c値は手動変更しても、構造的な破綻は招かない

日本語で言えばこうなります。

  • 試合数が増えるほどレート変動が静かになる、ブランクが空くとまた激しくなる。
    連勝・連敗補正を導入すると、連勝・連敗でも激しくなる。
  • 平均レート変動量は16~32ぐらい。全員新規だと32。廃人ばっかだと16
    チーム人口に差がある場合は、少ないチームは通常通り、多いチームは変動が少なくなる
  • 個人のレート変動量は、チーム内で最大3倍の開きが出る。試合数が少ない人はやたら動く。多い人はあまり動かない。
  • レートが合ってない人のレートを、直接いじる事はできなくても、動かしやすくする事ぐらいは出来る(新パラメータは権限者による手動変更が可能)

シミュレート

実際に運用する事を想定した計算をいくつかしてみます。

理論上の個人のレート変動幅は、(4:4でチームレートが釣り合っている場合)最大52になるようです。最小は8.8。
基礎的なレート変動量を32にした(Kを64にする)場合、これもちょうど二倍になり、最大104で最小17.6となります。
「自分と敵チーム全員はc値0なのに味方は全員400」とか「自分と敵チーム全員c値400なのに味方は全員0」とか、本当に理論上の話になりますが。

もう少し現実的に
全員c値0の初期状態では、レート変動幅は約32(=K値)。
レートが煮詰まり、c値400ばかりの中に新規が飛び込んだ場合、レート変動幅は新規36・味方12・敵チーム18。
c値は勝ち負けが交互に来た時最も上がり20戦でカンストしますが、3試合に1回連勝か連敗したと想定した場合60戦でカンストになります。

突っ込んで欲しい事

  • 理論的破綻。あれば問題外です。
  • 各数値の妥当性。文を見ても分かるかもしれませんが、理論的というより感覚的に決めているので、妥当な数値かどうかは怪しい部分があります。
    「マッチングは基本勝率0.5だから」と、z値は思考放棄したままです。

数値設定調整例

最後に各数値の設定しなおし例を残しておきます。
別案に頭を移し始めてから書いた項目であるため、細部が適当です。参考までに。

マッチングはレート総和で行われます。つまり通常の3倍のレートの人は、通常の人3人分働くと言う事です。
強い人と弱い人の差は実態として、大体2倍ぐらいであると想定します。つまり最弱と最強のレートは2倍ぐらい違っているべき、という事です。
するとレートの範囲は、標準から少し手を加えて 初期値1500 適性レート幅2000~1000 という設計になります。

適性レートになるまでの時間は短ければ短いほどいいですが、限界は10戦ぐらいが許容範囲と想定します。
すると連勝・連敗補正含めて、1戦あたり50の変動があれば適正レートになる、という事になります。
また適正レートになったあとの変動量は、小さ目にすべきです。
通常のレーティング戦のように勝率70%だとかの戦いがまず発生しないため、微調整が効きづらいのが原因です。

これらを元に、z値は感覚的ですが500にします。レート250違えば勝率約75%、500違えば約10%となります。
最終レート変動幅を決めるK値は小さめの16にしたいところですが、zを変えたので同比率だけ増やし、20にします。
参加者のc値が全員MAXでレート差もなければ、一試合の変動量10という事になります。

レート最大変動量が50で、K値×0.5が10であれば、c値によるチームレート変動量補正は最大5倍にすべきという事になります。
c値の基本設定は特に変更しないとすると、 5-4×全員のc総和/(400×参加人数) となります。

チームレート変動量が最大5倍であれば、個人レート配分を定めるq値は 429-c で釣り合いが取れる事になります。
かなり極端な数字なので余剰分も少なくし、425-cにします。

結果として、次のようになります。

  • c値は「試合毎に+20」「上限は400」「毎日-1」「連勝・連敗すると-20×連続数」
  • チームレート変動量は 20 × {5-4×参加者全員のc総和/(400×参加人数)} × (勝てば1負ければ0 - チームレート差から算出した勝率(0.5付近想定) ) × 最少人数のチーム人口
  • q値は 425-c (最大425最小25、チーム内で最大17倍差が開く)
  • 個人のレート変動量は チームレート変動量 × q/(チームメンバーのq総和)

少々ながら実際に計算してみると、

  • 個人レート変動幅は(4:4でチームレートが釣り合っている場合)最大119、最小は2。
  • 全員c値0なら50。
  • 自分だけc0で他全員がc400なら、新規51・味方3・敵チーム15。

レート変動幅のブレが非常に大きく感じられますが、意外と適正に働くかもしれません。

コメント

最新の10件を表示しています。 コメントページを参照

  • いいと思います c値が入って新規や復帰の人が"正しい"レートになるのにたくさんゲームをしなくてよくなりますね 1戦目と100戦目では動くレートが違うというのはいいアイデアですね ただ新しいアイデアなので、β期間を設けてテストして数値を詰めたりする必要はありそうです -- 町の人? 2013-12-25 (水) 22:40:24
  • レート平均3000のレート差300と、平均300のレート差300だと、扱いかわりませんか? -- まゆごん? 2014-01-08 (水) 23:20:05
  • とりま対応しますた -- まゆごん? 2014-01-09 (木) 00:17:06
お名前: