Как рассчитывается рейтинг в преферансе?
Зачем нужен рейтинг
Преферанс - игра коммерческая. Однако у нас, в SmartPref, не играют на реальные деньги, это бы противоречило условиям магазинов, но партии всё равно нужна ставка. Игроку важно не столько выиграть пулю, ему важно получить результат, который останется с ним после игры. Рейтинг берёт эту роль на себя: последствия каждой сдачи отражаются в рейтинге. Рейтинг показывает общий результат, который можно сравнивать, и даёт соперникам цель - за что и на что, собственно, они играют.
Как это было
Изначально рейтинг рассчитывался по итогам всей партии. Звучит, вроде логично, ведь расчёт в преферансе происходит по итогу игры. После победы рейтинг должен был расти, после поражения пропорционально снижаться. Но с этим было несколько проблем: пользователи иногда выходят до завершения игры, в том числе из-за плохого соединения. Наказывать за такой выход потерей рейтинга за всю партию слишком жёстко: система не может отличить намеренный выход от оборвавшейся связи.
Но была и более серьёзная причина отказаться от такой системы: рейтинг не задумывался как накопительный, но даже со сглаживанием постепенно стал именно таким. Чем дольше играл пользователь, тем выше в среднем оказывался его рейтинг, а общие значения продолжали расти. Такая инфляция особенно мешала новичкам: они сразу видели перед собой игроков с огромной и постоянно растущей форой. Когда видишь рейтинг в миллион баллов у топов - это демотивирует, согласитесь.
Как это стало
- Изменение рейтинга каждого игрока рассчитывается после каждой сдачи, а не после всей партии. Почему? Потому что каждая сдача в преферансе - тоже игра с нулевой суммой, как и вся игра целиком.
- Расчёт учитывает текущий рейтинг всех соперников за столом.
- У каждого уровня сложности ботов есть максимальный рейтинг. Это не позволяет бесконечно набирать очки на игре против ботов бесконечно долго (однако не мешает фармить до достаточно больших величин).
- На краях шкалы изменение рейтинга сглаживается. Игрок с высоким рейтингом не получает чрезмерный штраф за игру с новым соперником, рейтинг которого ещё слишком мал и не отражает его реальную силу игры, а игрок с низким рейтингом не получает слишком большой прирост за редкую победу над сильным.
Как рассчитывается рейтинг
Расчёт рейтинга производится после каждой сдачи. Итоговый рейтинг за игру = сумма рейтингов за сыгранные сдачи. (Перейти к калькулятору рейтинга)
Основные положения:
- Начальный рейтинг игроков берётся равным 1000
- В любительской лиге рейтинг может уменьшаться
- Для перехода в Pro лигу нужно набрать 1800
- В таблице лидеров возможны две сортировки: по текущему рейтингу пользователя и по максимальному на данный момент
- Rn - новый рейтинг; Rs - текущий рейтинг; Rd - дельта, набранная за данную сдачу
Rn = Rs + Rd
- Rd - дельта рейтинга после каждой сдачи (после рейтинга 4000 применяется сглаживание)
Vs - свои набранные висты (коэффициент Kd см. ниже)
Vs > Vf: Rd = + Kd * sqrt(Vs - Vf)
Vs < Vf: Rd = - Kd * sqrt(Vf - Vs)
- Vf - ожидаемый итог в вистах
Vf = min((Rs - Rt) / Kv, 4) (Rt и Kv см. ниже)
Максимальный Vf ограничен +4, полагая, что 4 виста - минимально возможный выигрыш на шестерной игре - не должен подвергаться штрафу
- Kv - (ожидаемый фактор вистов) — зависит от вашего рейтинга. Делает ожидания более справедливыми: от игроков с высоким рейтингом ожидаются хорошие результаты, но без нереалистичных требований. Игроки с рейтингом 1000 не должны получать рейтинг, если набрали менее -5 вистов против текущего обычного бота (1800).
if (Rs > Rt): Kv = 60 + (Rs - Rt) / X (X=6 найдено эмпирически)
else: Kv = 60 + (Rt - Rs) / Y (Y=22 найдено эмпирически)
- Kd - динамический коэффициент для сдач - уменьшается по мере роста разницы между вашим рейтингом и средним рейтингом стола.
Игроки с высоким рейтингом не теряют рейтинг, несмотря на победу.
Игроки с низким рейтингом не получают слишком большой прирост за редкие победы.
Kd = clamp(baseKd / (1.0 + log10(1 + diff / 100)), minKd, maxKd)
baseKd = 2.0 (базовое значение)
minKd = 0.3 (минимальное ограничение)
maxKd = 2.0 (предел для игроков с низким рейтингом против сильных столов)
diff = abs(Rs - Rt) - абсолютная разница в рейтинге
- Rr1, Rr2 и Rr3 - рейтинги соперников; вклад в средний рейтинг стола больше от пользователя с бóльшим рейтингом;
Rs - свой рейтинг
Rt - рейтинг стола
двое за столом:
Rt = Rr1
трое:
Rt = (Rr1 * 2 + Rr2) / 3 (где Rr1 ≥ Rr2)
четверо:
Rt = (Rr1 * 3 + Rr2 * 2 + Rr3) / 6 (где Rr1 ≥ Rr2 ≥ Rr3)
Ниже приведен калькулятор, который можно использовать, чтобы лучше понимать, как рассчитывается рейтинг: просто введите цифры, и значения обновятся автоматически.
Каждый ряд - ваш рейтинг. Столбцы - средний рейтинг соперников
