Я использую алгоритм ELO для ранжирования игроков в продолжающемся соревновании понг. Большинство игроков играют каждый день, но у нас есть один игрок, который не играл в течение месяца. Мой алгоритм в настоящее время отслеживает только результаты за последние 30 дней, и в результате этот игрок быстро поднимается по рангу, несмотря на то, что никогда не играл. Он проиграл кучу своих первых игр, но выиграл большинство своих последних нескольких игр, а это значит, что его потери падают с чартов, и в результате его счет растет.
Очевидно, мой план снижения баллов через 30 дней не работает. Какие еще методы я могу использовать, чтобы наказать игроков за то, что они не часто играют?
Единственное, что я до сих пор придумал, - это уменьшать очки на основе процента, основанного на днях бездействия (то есть, если пользователь не играл в неделю, его очки стоят только 70% от нормы, и ему придется сыграть X раз, чтобы получить 100% очков).
Однако это кажется слишком произвольным. У кого-нибудь есть лучшие идеи или предложения по работе с неактивными игроками в другой активной среде?
Заранее спасибо.
источник
Алгоритмы, такие как Elo и TrueSkill, определяют мастерство игрока на основе результата каждой сыгранной игры, независимо от времени. Тем не менее, оба алгоритма имеют фактор «неопределенности» - в случае с Эло
K Factor
обычно устанавливается высокий уровень для новых игроков, так что их рейтинг Эло быстро сойдется с их «истинным» рейтингом навыков. После установленного времени или заданного количества игр, какK Factor
правило, уменьшается, так что рейтинг меняется меньше между играми.То, что вы видите, вероятно, является типичным поведением Эло (в зависимости от вашей реализации Эло): ваш игрок сыграл меньше игр, чем его конкуренты, что делает его «новым игроком» с более высоким рейтингом
K Factor
; так как он выигрывает свои игры, алгоритм рассматривает его как игрока с более высокой квалификацией и присуждает ему более высокий рейтинг!Обратите внимание, что алгоритмы ранжирования обычно используются только для сравнения между игроками, а не для определения результатов соревнований, учитывая их поведение. Если вы хотите получить награду за участие, я бы порекомендовал забивать игроков в соревновании другим способом. Некоторые предложения:
Обратите внимание, что ни одно из этих решений не даст полностью «честного» результата, поскольку игроки, которые играют больше, будут иметь более высокий балл, чем игроки, которые этого не делают. Единственный способ обеспечить справедливость - это сыграть одинаковое количество игр.
источник
Я не знаю об алгоритме ELO, но как насчет того, чтобы вместо наказания людей, которые не часто играют, вы поощряете людей, которые играют часто? Например, если вы сделали свой счет что-то вроде:
Тогда люди, которые часто играют, вероятно, в конечном итоге сыграют больше игр и получат больше шансов на более высокий балл.
И еще одна вещь, которую вы, возможно, захотите изменить, - это не допустить, чтобы очистка старых результатов влияла на общий счет игрока. Это основная причина, по которой этот игрок растет в строю (а также почему он в конечном итоге полностью выпадет из чартов).
Кроме того, люди, которые некоторое время играют серьезно и добились отличных результатов, вероятно, не будут счастливы, зная, что их достижения со временем исчезнут и исчезнут. Эта система серьезно обескураживает.
Это легко исправить, просто сохраняя в кэше «общее количество сыгранных игр» и «соотношение выигрышей / проигрышей» каждого игрока, даже после того, как вы сами удалите результаты.
С помощью этой информации вы можете легко определить, сколько выигрышей и проигрышей получил игрок, и обновлять их соответственно, когда он снова играет.
источник