Весовой процент выигрыша по количеству сыгранных игр - PullRequest
8 голосов
/ 22 сентября 2011

Я хочу создать систему рейтинга для пользователей на игровом сайте.

Система должна основываться на взвешенном проценте выигрыша с взвешенным элементом, представляющим количество сыгранных игр.

Например:

55 побед и 2 поражения = 96% выигрыша

1 выигрыш и 0 поражений = 100% выигрыша

Первая запись должна иметь более высокий рейтинг, посколькубольшее количество побед.Я уверен, что математика очень проста, я просто не могу обернуть ее вокруг.Кто-нибудь может помочь?

Ответы [ 4 ]

4 голосов
/ 22 сентября 2011

ELO более тщательный, потому что учитывает силу противника при выигрыше или проигрыше, но если противники случайно выбраны, простой и очень эффективный подход:

(выигрыши + постоянные * средний выигрыш% всех игроков) / (выигрыши + проигрыши + постоянные)

поэтому при 0 играх формула является средней для всех игроков, так как при увеличении количества сыгранных игр формула сходится к фактической записи. Константа определяет, насколько быстро она это делает, и вы, вероятно, можете выбрать что-то между 5 и 20.

0 голосов
/ 22 сентября 2011

Как насчет очков = (очков за выигрыш) * (количество побед) + (очков за проигрыш) * (количество потерь), где очки за выигрыш - это некоторое положительное число, а очки за проигрыш - некоторое отрицательное число, хорошо работать для вашего приложения.

0 голосов
/ 22 сентября 2011

Другой возможностью будет мой ответ на Как мне заказать эти «полезные» оценки? .В основном, используйте количество побед, чтобы определить диапазон вероятных вероятностей того, что игрок выиграет игру, а затем выберите нижний предел.Это делает 55-2 удар 1-0 для любого разумного выбора уровня доверия.(В отсутствие причины поступить иначе, я бы предложил установить его на 50% - подробности см. В посте, который на самом деле очень прост.)

В качестве небольшого технического отступления: я видел некоторыепредложения использовать интервал Вальда, а не Agresti-Coull.Практически они дают одинаковые результаты для больших входов.Но есть веские причины предпочитать Agresti-Coull, если количество игр может быть небольшим.(Кстати, я сам придумал эту идею - хотя, конечно, я был не первым - и только позже обнаружил, что она была несколько стандартной.)

0 голосов
/ 22 сентября 2011

Да, это «супер просто»:

 Percentage = Wins * 100.0 / (Wins + Losses)

Для округления до целого числа вы обычно используете round или Math.round (но вы не указали язык программирования).

Значение может быть взвешено по числу выигрышей с использованием заданного соотношения:

 Rank = Wins * Wins / (Wins + Losses)

Но есть другие системы, которые лучше понимают проблему, например Elo (см. Мой комментарий).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...