- 追加された行はこの色です。
- 削除された行はこの色です。
- イロレーティングを用いたレート計算案 へ行く。
- イロレーティングを用いたレート計算案 の差分を削除
*イロレーティングを用いたレート計算案 [#e6fc409e] せっかくなので、ゼロサムのイロレーティングを応用した計算式を考えるだけ考えてみました。 [[wikipediaのイロレーティング項目>http://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%AD%E3%83%AC%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0]] もし間違っていたら、突っ込みお願いします。 ''結論は大体つまり?の部分にありますので、お急ぎの方はそこを見てください。'' #contents **イロレーティングの簡易な説明 [#xf499934] 先に元のイロレーティングについて、分かりやすく説明しておきます。分かりにくかったら申し訳ない。 具体的な式は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に適用する場合の要点 [#v5359444] このレート計算式をAoCで適用する際に、改変ができると思われる点は次の3つ。 '' 「K値(レート変動量)」 「z値(レート価値)」 「各プレイヤーへのレート分配」'' うちz値については、マッチングが機能しているうちはあまり考える必要がないので、K値に応じて後で変える程度に留めておきます。 すると残る要点は、 K値 と 各プレイヤーへのレート分配 、この2点のみが考えられる事になります。 「戦力が同等になるようマッチングするチーム戦で、イロレーティングを使いたい」場合は、どのような場合でもこの2点に主眼が置かれる事だと思います。 **レート分配、チームレート変動量 [#y602f00c] イロレーティングは、ゼロサムのシステムです。変動値の合計(サム)は常に0になります。 勝手に数字を足したり引いたりする事は、想定されていません。 ですがチーム戦の場合、一つの結果を基準にメンバーの数だけ変動が起こります。 参加者が2人であれば同値にせざるを得ませんが、チームの場合個々人は異なる変動量であっても、総和がゼロであれば設計上問題は発生しません。 そこで、総和がゼロになる変動量を参加者にどのように分配するか、という概念が発生します。 ひとまず重要な問題として、割る人数が増えるほど割る前のチームレート変動量を大きくしなければならない、という点があります。 「チーム人数で掛ければいいじゃないか」と思われるかもしれませんが、2:3などの変則的試合をどうするか、という問題があります。 少ない方にあわせるか、多い方にあわせるか、中間をとるか、変な計算式を導入するか。 ここでは「原則同数戦なんだから、イレギュラーな試合の影響は小さくしよう」と考え、少ない方にあわせてチームレート変動量を決めたいと思います。 2:3なら2、1:4なら1です。 **信用度(c) [#rce1e9a0] ここから自論の展開に入ります。眉に唾をつけて読んでください。 レート分配ですが、単純にプレイヤーの数で割ると、責任の軽重が考慮されなくなってしまいます。 レートが低いのに強い、レートが高いのに弱い、こういうプレイヤーがいるとマッチングがうまくいかなくなってしまいます。 これらを適正レートにするにはどうすれば良いか。 ゲームの内容で判断する、というのがアナログな回答ですが、それは色々と困難さが伴います。 そこで純粋に戦績の多寡で信用度を数値化してはどうか、そしてそれをレート分配と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)オプション [#kb8debbb] 基本的な骨組みは前項の通りですが、この数値は感覚的な調整が許されるので、追加オプションも色々考えられます。この項目ではそれをメモしておきます。 -連勝・連敗しているレートは適正かどうか怪しい(信用できない) 特別な補正を設け、c値を-する事で調整が図れます。前項の試合変動量×(連勝・連敗数)程度が妥当でしょうか。 通常の試合加算cは常にプラスされる事を考えると、2連勝で2試合(=勝った試合)分のc値がチャラ、3連勝で2試合分マイナス、4連勝で累計5試合分、5連勝で9試合分・・・と、連勝すればするほど加速的にc値が減っていく事になります。 2連勝程度ならよくある事だと思うので、c値は上がりにくくなります。 前提が変わったので通常の試合加算cにも変更を加え、ここでは交互に勝ち負けしても上限まで20戦が必要な+20に設定する事にします。 後から考えたのでオプションとして別項にしていますが、以下このオプションを適用する事を前提にして話を進めます。 **信用度(c)によるレート分配 [#rbc149c5] こうして算出された信用度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値決定 [#r7b83eaf] これで個人のレート分配に差をつける事ができましたが、これは相対的な評価にとどまっています。 例えば全員の戦績がリセットされた環境だと、全員のcが0であるため、レートの変動量は通常と変わりません。 本来ならレートの信用度が低いのですから、変動量を大きくしなければなりません。 そこでチームに配分されるレートの絶対的な量、つまりK値を参加者のc合計に応じて変化させます。 例えば全員のcが0の時には配分量も2倍にしたい、というのであれば、2-全員のc総和/(400×参加人数)をK値に掛ければ良い事になります。 とりあえずこれを採用します。 K値の調整が係数でできてしまったので、元々のKの絶対値をどうするかは自由のままです。 特に手を加える理由もないので、今回は一般的な数値である32を適用します。 ''(勝率0.5の場合、基礎的なレート変動量は16という事になります)'' **信用度(c)採用による副次的効果 [#y05d1081] c値はゼロサム的な数値ではなく、手動変更等で自由に変えても比較的影響は少なく済みます。 もとよりほっとくと0になるし、初期値から増える事はあっても減る事はない、そういう数値です。 もとよりほっとくと0になるし、初期値から増える事はあっても(初期値より)減る事はない、そういう数値です。 つまり、ゼロサムのシステムを採用したにも関わらず「今のレート全然あってねーよ助けて!」という人の声にも限定的に応えられる可能性があります。 権限を持つ人が「レート信用度低いみたいだから下げておく」事で、多少の不満なら解決できるはずです。 **つまり? [#zb99d792] 全体としてはこのようになります。 -各プレイヤーに「試合毎に12(仮)増える」「毎日-1される」「上限は400(仮)」というc値(レートの信用度の数値化)を設定する 連勝・連敗補正を用いるのであれば「試合毎に20(仮)増える」「連勝・連敗すると-20(仮)×(連勝・連敗数-1)」という数字設定に変更・追加する 連勝・連敗補正を用いるのであれば「試合毎に20(仮)増える」「連勝・連敗すると-20(仮)×(連勝・連敗数)」という数字設定に変更・追加する -チーム全体のレート変動量は &color(blue){32};×{2-参加者全員のc総和/(400×参加人数)} &color(blue){× (勝てば1負ければ0 - チームレート差から算出した勝率(0.5付近想定) )}; × 最少人数のチーム人口 で算出する ※青い部分がイロレーティングによるもの -各プレイヤーのレート分配比を 600-c で算出する(以下q) -個人のレート変動量は チームレート変動量 × q/(チームメンバーのq総和) で算出する -c値は手動変更しても、構造的な破綻は招かない 日本語で言えばこうなります。 -試合数が増えるほどレート変動が静かになる、ブランクが空くとまた激しくなる。 連勝・連敗補正を導入すると、連勝・連敗でも激しくなる。 -平均レート変動量は16~32ぐらい。全員新規だと32。廃人ばっかだと16&br;チーム人口に差がある場合は、少ないチームは通常通り、多いチームは変動が少なくなる -個人のレート変動量は、チーム内で最大3倍の開きが出る。試合数が少ない人はやたら動く。多い人はあまり動かない。 -レートが合ってない人のレートを、直接いじる事はできなくても、動かしやすくする事ぐらいは出来る(新パラメータは権限者による手動変更が可能) **シミュレート [#t7e5cd26] 実際に運用する事を想定した計算をいくつかしてみます。 理論上の個人のレート変動幅は、(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戦でカンストになります。 **突っ込んで欲しい事 [#j7db6204] -理論的破綻。あれば問題外です。 -各数値の妥当性。文を見ても分かるかもしれませんが、理論的というより感覚的に決めているので、妥当な数値かどうかは怪しい部分があります。 「マッチングは基本勝率0.5だから」と、z値は思考放棄したままです。 ***数値設定調整例 [#m695df45] 最後に各数値の設定しなおし例を残しておきます。 '''別案に頭を移し始めてから書いた項目であるため、細部が適当です。参考までに。''' マッチングはレート総和で行われます。つまり通常の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。 レート変動幅のブレが非常に大きく感じられますが、意外と適正に働くかもしれません。 **コメント [#tb477249] #pcomment