ゲームサイトでユーザー向けのランキングシステムを作成しようとしています。
システムは、加重要素がプレイされたゲーム数である加重勝率に基づいている必要があります。
例えば:
55勝2敗=勝率96%
1勝0敗=勝率100%
最初のレコードは、勝利数が多いため、ランクが高くなるはずです。数学はとても単純だと思いますが、頭を包むことはできません。誰でも助けることができますか?
ELO は勝敗を決める際に対戦相手の強さを考慮するため、より徹底していますが、対戦相手がランダムに一致する場合、シンプルで非常に効果的なアプローチは次のとおりです。
(勝数 + 定数 * 全プレイヤーの平均勝率 %) / (勝数 + 敗北 + 定数)
したがって、ゲーム数が 0 の場合、公式はすべてのプレーヤーの平均であり、プレイするゲームの数を増やすと、公式は実際の記録に収束します。定数はこれを行う速度を決定し、おそらく 5 から 20 の間の値を選択することで問題を解決できます。
はい、それは「超簡単」です:
Percentage = Wins * 100.0 / (Wins + Losses)
整数に丸めるには、通常round
orを使用Math.round
します (ただし、プログラミング言語は指定しませんでした)。
値は、指定された比率を使用して、勝利数に重み付けできます。
Rank = Wins * Wins / (Wins + Losses)
しかし、Elo (私のコメントを参照) のように、問題をよりよく理解する他のシステムがあります。
スコア = (勝利ごとのポイント) * (勝利数) + (敗北ごとのポイント) * (敗北数) はどうでしょうか。ここで、勝利ごとのポイントは正の数であり、敗北ごとのポイントは負の数です。あなたのアプリケーション。
別の可能性は、これらの「役立つ」スコアをどのように注文すればよいですか?に対する私の答えです。. 基本的に、勝利数を使用して、プレイヤーがゲームに勝つ確率の可能性の範囲を決定し、下限を取得します。これにより、55-2 は 1-0 を打ち負かし、信頼水準を適切に選択できます。(特に理由がないので、50% に設定することをお勧めします。詳細については、投稿を参照してください。実際には非常に簡単です。)
技術的なことはさておき、Agresti-Coull ではなく Wald 間隔を使用するといういくつかの提案を見てきました。実際には、大きな入力に対して同じ結果が得られます。しかし、ゲーム数が少ない場合は、Agresti-Coull を好む十分な理由があります。(ちなみに、私は自分でこのアイデアを思いつきましたが、確かに私が最初ではありませんでしたが、後でそれがやや標準的であることがわかりました。)