ELO алгоритм для работы с людьми, которые не часто играют

9

Я использую алгоритм ELO для ранжирования игроков в продолжающемся соревновании понг. Большинство игроков играют каждый день, но у нас есть один игрок, который не играл в течение месяца. Мой алгоритм в настоящее время отслеживает только результаты за последние 30 дней, и в результате этот игрок быстро поднимается по рангу, несмотря на то, что никогда не играл. Он проиграл кучу своих первых игр, но выиграл большинство своих последних нескольких игр, а это значит, что его потери падают с чартов, и в результате его счет растет.

Очевидно, мой план снижения баллов через 30 дней не работает. Какие еще методы я могу использовать, чтобы наказать игроков за то, что они не часто играют?

Единственное, что я до сих пор придумал, - это уменьшать очки на основе процента, основанного на днях бездействия (то есть, если пользователь не играл в неделю, его очки стоят только 70% от нормы, и ему придется сыграть X раз, чтобы получить 100% очков).

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

Заранее спасибо.

Jemaclus
источник

Ответы:

18

Похоже, вы сохраняете очки, начисленные за каждый матч, а затем «истекаете» эти корректировки очков с течением времени. Который, как вы заметили, открыт для легкой эксплуатации.

В стандартной реализации ELO ваш счет ELO навсегда; он не «затухает» с течением времени, так как наличие очков, покидающих систему ранжирования таким образом, в конечном итоге приведет к общей дефляции (т. е. 1500 больше не будет означать «среднее»).

Помните, что рейтинг ELO - это не «очки» в том смысле, в котором игроки о них обычно думают; они являются попыткой ранжировать уровень мастерства игрока относительно других игроков, они не являются наградой. Эти очки не должны отниматься как наказание для игрока, потому что это единственный инструмент, который вы должны попытаться сопоставить игрокам с противниками с аналогичным уровнем квалификации. Единственное, что должно повлиять на эти ценности - это победы и поражения против других игроков в рейтинге.

Подход, используемый большинством игр, которые хотят помешать игрокам набрать высокий балл и затем исчезнуть, чтобы никогда не играть снова, состоит в том, чтобы иметь требование активности для отображения таблицы лидеров; если игрок не играл в игру в течение 30 дней (или чего-то еще), он просто не появляется в таблицах лидеров, пока не появится. Когда игрок возвращается и играет другой ранговый матч, он возвращается со своим полным рейтингом ELO, точно так, как если бы он никогда не уходил. Если их уровень мастерства изменился по сравнению с другими активными игроками за это время, игра быстро это заметит и скорректирует их рейтинг, используя стандартный процесс победы и поражения противников.

Тревор Пауэлл
источник
1
+1, хотя это правильное объяснение того, почему это не помогает, я бы просто отбросил ELO и занялся чем-то совершенно другим. (Я не знаю что, или я бы написал это ^^)
o0 '.
4
@Lohoris Это был бы разумный выбор для развития. Если цель не состоит в том, чтобы поддерживать значимое сравнение объективных уровней навыков людей по отношению друг к другу (то есть: в целях организации матчей), то ELO не является отличным выбором для использования в качестве механизма подсчета очков. И даже есть некоторые игры, которые используют систему наподобие ELO для сватовства, в то время как используют совершенно другую систему «очков» для отображения, что позволяет им вознаграждать людей за более частую игру. StarCraft 2 делает это, например.
Тревор Пауэлл
4

Алгоритмы, такие как Elo и TrueSkill, определяют мастерство игрока на основе результата каждой сыгранной игры, независимо от времени. Тем не менее, оба алгоритма имеют фактор «неопределенности» - в случае с Эло K Factorобычно устанавливается высокий уровень для новых игроков, так что их рейтинг Эло быстро сойдется с их «истинным» рейтингом навыков. После установленного времени или заданного количества игр, как K Factorправило, уменьшается, так что рейтинг меняется меньше между играми.

То, что вы видите, вероятно, является типичным поведением Эло (в зависимости от вашей реализации Эло): ваш игрок сыграл меньше игр, чем его конкуренты, что делает его «новым игроком» с более высоким рейтингом K Factor; так как он выигрывает свои игры, алгоритм рассматривает его как игрока с более высокой квалификацией и присуждает ему более высокий рейтинг!

Обратите внимание, что алгоритмы ранжирования обычно используются только для сравнения между игроками, а не для определения результатов соревнований, учитывая их поведение. Если вы хотите получить награду за участие, я бы порекомендовал забивать игроков в соревновании другим способом. Некоторые предложения:

  • Оценка игроков в зависимости от количества побед.
  • Присвойте баллы выигрышам / проигрышам, например, 2 балла за победу, 1 балл за проигрыш.
  • Считайте только лучшие X-игры игрока за данную неделю / месяц.
  • Требовать от игроков сыграть минимальное количество игр, чтобы «пройти квалификацию».

Обратите внимание, что ни одно из этих решений не даст полностью «честного» результата, поскольку игроки, которые играют больше, будут иметь более высокий балл, чем игроки, которые этого не делают. Единственный способ обеспечить справедливость - это сыграть одинаковое количество игр.

Блэр Холлоуэй
источник
Я думаю, справедливо будет то, что игроки, которые играют больше (при одинаковом среднем соотношении выигрыша / проигрыша), должны иметь более высокий балл, чем игроки, которые играют не так много ...
Дэвид Гувейя
3
@davidluzgouveia - это не совсем определение «честный». При подсчете игроков в турнире результат будет «честным», если ни один из игроков не имеет преимущества, которого нет у другого игрока (без учета навыков). Сказав это, я думаю, что речь идет о случайном соревновании между друзьями; выигрыш - это скорее поощрение участия, чем прямая победа.
Блэр Холлоуэй
Да, это скорее случайное соревнование, чем строгий турнир. Я согласен с комментарием Дэвида, очевидно, именно поэтому я ищу решение здесь. Спасибо за ваш вклад!
Jemaclus
0

Я не знаю об алгоритме ELO, но как насчет того, чтобы вместо наказания людей, которые не часто играют, вы поощряете людей, которые играют часто? Например, если вы сделали свой счет что-то вроде:

Score = (Wins / Losses) * (Total Games Played) * Some_Scale_Factor

Тогда люди, которые часто играют, вероятно, в конечном итоге сыграют больше игр и получат больше шансов на более высокий балл.

И еще одна вещь, которую вы, возможно, захотите изменить, - это не допустить, чтобы очистка старых результатов влияла на общий счет игрока. Это основная причина, по которой этот игрок растет в строю (а также почему он в конечном итоге полностью выпадет из чартов).

Кроме того, люди, которые некоторое время играют серьезно и добились отличных результатов, вероятно, не будут счастливы, зная, что их достижения со временем исчезнут и исчезнут. Эта система серьезно обескураживает.

Это легко исправить, просто сохраняя в кэше «общее количество сыгранных игр» и «соотношение выигрышей / проигрышей» каждого игрока, даже после того, как вы сами удалите результаты.

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

Дэвид Гувея
источник