[Rumble-jp-dev] レーティング制ランキングシステム(案)

Back to archive index

Laplace lapla****@csc*****
2003年 12月 21日 (日) 12:50:34 JST


laplaceです。

レーティングを用いたシステムの案です。
最終的に使うか、使わないかは別でもいいので、
いい!とか、こりゃだめだとか、
こうしたほうがいいとかあれば言ってください。

・レーティング制ランキングシステム

対戦結果をもとに、ロボットの力量を数値で比較するためのシステムです。
また、力量の違うロボット同士の対戦に、
一種のハンディキャップのような手法を用いて、
レートの更新を公平になるように考えています。
高いレートを維持するには、低いレーティングのロボットには、
高いスコアで勝ち続けなければいけない仕組みになっています。
チェスやテニスなどは1対1の対戦で、勝敗のみの考慮して考えていますが、
複数対戦かつスコア差をも考慮に入れたレーティングということで
麻雀のレーティングをベースに考えています。
レーティング差=1ラウンドの平均スコア差*100ぐらいを
想定したのですが、かなり不安。

ハンデキャップ
対戦するロボット群の平均レーティングを計算し、
その差がハンデキャップになります。
ハンデキャップは、レーティングの計算に使用するだけで
実際の対戦結果には影響を与えません。
ハンデキャップ = (レーティング平均値 - 自分のレーティング)*比率A(0.01)

対戦での獲得スコア
対戦したロボット群のスコアの平均を計算し、
獲得スコア = ((自分のスコア - スコア平均値)/ラウンド数 + ハンデキャップ)
      *|ハンデキャップ|*比率B(0.01〜1)

対戦結果後のレーティング
新レーティング = 現在のレーティング + 獲得スコア

獲得スコアのアップダウンの上限が必要そうです。
試作(Rumble改じゃないです)では、差がありすぎるロボットに負けると
レーティングがマイナスとかになっちゃってダメでした(;^_^A あせあせ
特にRamDamageのレーティングは、ヒドかった・・・
あと比率Bもいい値を求めないといけないです。
レーティングの差や分布をどう考えるかによって、統計学っぽいものを
考慮して決めるので、グラフっぽいものや変換表が多くかかれています。
この辺はよく理解できておりません(^_^;;
ということで
獲得スコア = 上限*function(自分のスコア,スコア平均値,ハンデキャップ,ラウンド
数)
                  (-1<=function<=1)
ラウンド数を無限大にしたときの
レーティング差=1ラウンドの平均スコア差*100
となるようなfunctionをもとめて!っていう感じかな。

計算は、スコア(ラウンド数)とレーティングしか用いないので
トータルスコアだけでなく、BulletDamageやその他のスコアにおいても
別々に計算することで、各スコアのレーティングを計算することができます。

レーティング結果は、シーズンあるいはバトル終了時点で計算し、
結果をSQLに入れておくので、いまの戦力分析データを集計後に
計算する必要がなくなります。そのためロボット詳細ページでも
レーダーチャートをさくっと表示できるようになります。
レーダーチャートには、Duel、Melee両方を重ねる感じか?
いまの戦力分析ページはやめて、各大会、リーグの対戦成績のみを表示するように
すればよいと思います。

また、現在のランキング一覧もこのレーティングの結果を
各項目、ロボット順にソートして表示することで、
各項目の実力順位になると思います。


・レーティング初期値とユーザ登録
ユーザ登録で現在指定している「上級、初級、学生」を
「ロボコードレベル(経験)」のようなものに変更し、
この値から、所有ロボットの初期レーティングを設定します。
レベルは、Lv1〜10まで自由に選択できるとします。
例えば、
Rumbleに登録されているLvあるいはレーティングのついたロボットに
安定して勝てるLvを設定してくださいとか
Lv 5:全てのサンプルに勝てるぐらいなどを表示しておきます。

また、所有ロボットの最高あるいは平均レーティングを
ユーザのLvに換算することで、ユーザLvが変化していくようにします。
追加ロボットは、その時のユーザLvから換算された値が
レーティングの初期値になります。
バージョンアップは、前のバージョンのレーティングを引き継ぎます。

たとえ最初に低いLvに設定されても、ロボットが強ければ、
徐々にレーティングが上がっていくため、適正なユーザLvになります。
対戦の結果次第では、ユーザLvの最高は20とか30とかに
なるかもしれません。
Lv10を超えることができるのは、数多くの大会、リーグに参加し
勝ちつづけていかなければならず、ちょっと自慢もできます。
Lv1以下はなく、負けつづけても1でストップさせます。
たとえば、レーティング500以下はないなど。
別にサンプルロボットのレーティングは
固定にできる仕組みがあるといいのですが・・・

定期戦のリーグは、レーティング順に特定数選んで対戦させると
いうようにすれば、Wikiで書いていたような感じにできると思います。
ユーザLvによって追加ロボットの初期レーティングが決まるため、
高レーティングから参加させることができる場合もあります。
新規ユーザは、Lv10を設定することで、ある程度高いレーティングから
参加させることもできます。

Lv別トーナメントなどが開催されたら、
実力がほぼ同じであるだけに、どのロボットにも優勝の可能性が
あって、白熱するかもしれませんね。

・計算場所
レーティングを計算する場所は、
分散サーバ側でもメインサーバ側でもどちらでもOKです。
メインサーバの場合は、メインサーバの負荷が増えるが
レーティングデータそのものを改ざんされにくくなります。
また、データ通信量を減らすことができます。

分散サーバで計算する場合は、その時のロボットのレーティングデータも
分散サーバに送る必要があります。
ユーザLvなどにも影響を与えるため、改ざんされると厄介。
レーティングのアップダウンの上限から
送られてきたレーティングの値が、おかしくないか軽くチェックしたり、
まれに対戦結果とレーティングから全て計算して、
全て正しいかチェックしたりすることで、
あやしいサーバを見つけることもできると思います。
まぁ、対戦結果も計算後のデータも帳尻を合わされていた場合は、
全くダメです。
対戦結果データのロボット名だけをシャッフルされて、
計算されていたらお手上げです。

以上が、レーティング案と各所の変更案です。







Rumble-jp-dev メーリングリストの案内
Back to archive index