Как составить рейтинг игроков

Время на прочтение
3 мин

Количество просмотров 49K

Рейтинг игроков (leaderboard, scores) для мобильной игры — вещь интересная и порой даже необходимая. В этой статье я расскажу о том, как добавить рейтинг игроков в приложение, созданное в Unity, т.к. в рунете информации об этом не так много. Кроме того, рейтинг будет кросплатформенный (android + iOS), однако без поддержки Windows Phone.

image

Раздел 1. КОНСОЛЬ РАЗРАБОТЧИКА

1. Считаем, что приложение уже опубликовано на Google Play, т.е. у нас есть package name, например com.AnonymousInteractives.NakedSnake

2. Идем в [консоль разработчика] (Developer Console), слева открываем [игровые сервисы] (Game Services)

image

3. Жмем «Добавить новую игру» и указываем название игры и категорию. Тут может возникнуть некоторая путаница. Термин «игра» здесь означает игровой сервис. Название может не совпадать с реальным названием вашего приложения. У игрового сервиса появляется уникальный идентификатор, например 88171208539
image

4. Заполняем [сведения об игре] — описание и картинки

5. В разделе [связанные приложения] можно связать с игровым сервисом до 20 приложений. Это могут быть android, iOS и web приложения. Выбираем android. Далее нужно только ввести название пакета приложения из пункта 1

image

6. В разделе [достижения] нужно добавить достижения. Для тестирования пункт можно пропустить, но для публикации нужно добавить не менее 5 достижений. Если у нас в игре нет достижений, то просто создаем фейковые достижения 1, 2, 3, 4, 5 и забываем про них

7. Наконец мы переходим в раздел [рейтинг игроков]. Создаем необходимые нам рейтинги, тут все очевидно. В итоге получаем рейтинг с каким-нибудь идентификатором, например CgkI276nu8gCEAIQAA. Впоследствии он и идентификатор игрового сервиса понадобятся нам для настройки плагина в Unity и обращения к сервису

image

8. В разделе [тестирование] можно добавить аккаунты для тестирования. Причем можно указать именно почтовые аккаунты, а не группу Google+, как при тестировании самой игры

9. В разделе [публикация] можно опубликовать игру, хотя для тестирования это не обязательно. Все, консоль разработчика нам больше не понадобится

Раздел 2. Unity

1. Переходим на страницу проекта play-games-plugin-for-unity и скачиваем проект (ссылка «Download ZIP»). В архиве находим файл GooglePlayGamesPlugin-0.9.02.unitypackage

2. Открываем проект приложения в Unity

3. Дважды кликаем по GooglePlayGamesPlugin-0.9.02.unitypackage и импортируем пакет в проект

image

4. Переходим в меню File / Play Games — Android setup и вводим идентификатор нашего сервиса (см. шаг 3 из предыдущего раздела). Все, на этом настройка завершена!

image

5. Теперь осталось добавить пару строчек кода и у нас появится рейтинг игроков. Графический интерфейс рейтинга находится в Android SDK, так что нам не придется тратить на него время. В тоже время, никакой кастомизации UI не предусмотрено (кроме настроек в консоли разработчика — иконка рейтинга и единица измерения). На странице плагина (см. пункт 1) находится достаточно справочной информации, поэтому я без комментарием приведу код внесения записи в рейтинг игроков с последующим его отображением. Замечу, что процесс асинхронный, и на каждое действие приходит callback. Из-за этого могут возникнуть затруднения при внесении записей сразу в несколько рейтингов. Как вариант — реализация цепочек из callback. Альтернативно можно вызывать ReportScore параллельно и обрабатывать все callback таким образом, чтобы только последний из них открывал рейтинг вызовом ShowAchievementsUI

PlayGamesPlatform.DebugLogEnabled = true;
PlayGamesPlatform.Activate();

Social.localUser.Authenticate(authenticated =>
{
	if (!authenticated || !Social.localUser.authenticated)
	{
		throw new Exception();
	}

	Social.ReportScore(1000, "CgkI276nu8gCEAIQAA", (bool success) =>
	{
        if (success)
		{
			Social.ShowAchievementsUI();
		}
		else
		{
			throw new Exception();
		}
    });
});
Раздел 3. Заключение

К сожалению, пока нет поддержки Windows Phone. Там все совсем печально, вас ждет низкоуровневая реализация взаимодействия с Azure и написание своего UI, готовое и рабочее решение найти не удалось.
На этом пока все, спасибо за внимание. В дальнейшем, если кому-то будет интересно, могу рассмотреть процесс создания web-приложения для модерации рейтингов (удаления читеров, например), т.к. в консоли разработчика нет для этого никаких средств.

Содержание

  1. Калькулятор рейтинга состава ФИФА 22
  2. Что такое калькулятор рейтинга ФИФА 22?
  3. Как вычислить общий рейтинг команды?
  4. Рейтинг игроков НХЛ с использованием стандартной и расширенной хоккейной статистики
  5. Данные наборы
  6. Модельная концепция
  7. Словарь терминов расширенной хоккейной статистики
  8. Алгоритм
  9. Рейтинги
  10. Сравнить с EA Sports
  11. Проблемы с моделью
  12. Вывод

Калькулятор рейтинга состава ФИФА 22

Каждый, кто играет в FIFA 22 Ultimate Team знает что такое ИПК и СБЧ. Именно для этих целей мы создали специальный инструмент, который поможет вам без особых усилий собрать состав ФИФА 22 с необходимым рейтингом под конкретное ИПК. Если вы не знакомы с понятием SBC (ИПК), тогда расскажем вкратце:

SBC означает Squad Building Challenges, на русском же языке — Испытание Подбора Команды (сокращенно ИПК), они находятся на главной вкладке режима Ultimate Team. Это испытания, в которых вам нужно собрать состав, чаще всего из 11 игроков, который должен соответствовать определенным критериям, чтобы получить взамен: набор игроков, форму или же редкую карточку игрока, например кумира.

Что такое калькулятор рейтинга ФИФА 22?

Этот калькулятор используется для решения задач по сборке составов самым быстрым и удобным способом. Он считает один из самых главных параметров, который необходим для создания состава — общий рейтинг команды. Помимо этого, калькулятор покажет вам суммарный рейтинг вашего состава, оценку состава в виде звёзд и создаст краткий список количества игроков, которые необходимы для достижения общего рейтинга и выполнения ИПК. Если вы собрали состав, но ваш общий рейтинг команды не достиг нужной цифры, тогда этот калькулятор именно то, что вам необходимо!

Как вычислить общий рейтинг команды?

  1. Введите в соответствующие поля рейтинги игроков из вашего состава.
  2. Получите результат!

Примечание! Если в ИПК есть заблокированные слоты игроков, то просто укажите 0 на месте рейтинга игрока.

Источник

Рейтинг игроков НХЛ с использованием стандартной и расширенной хоккейной статистики

Дата публикации Jan 16, 2019

Играя в EA sports (EAS) в НХЛ (или «Чел», как он известен) на протяжении многих лет, я часто задавался вопросом, как они получают свои рейтинги игроков. В соответствии с биографией и профилем каждого игрока, общий счет (обычно от 70 до 100) получается из комбинации различных параметров, приписываемых каждому игроку. Например, используются скорость, ускорение, мощность выстрела и точность выстрела (или аналогичные), способность обращаться с клюшкой, выносливость, агрессивность, интенсивность и многое другое. Тем не менее, на самом деле, как вы можете измерить интенсивность или агрессию, или даже довести способность к обработке до такой степени, что вы можете получить ее по сравнению со всеми остальными? Вся концепция рейтинговой системы EAS (для всех их спортивных игр) — это секретный соус, о котором мало что известно. Но это заставило меня задуматься о том, можно ли создать собственную систему рейтинга игроков (назовем это «Рейтинг сигмоидных игроков; SPR»), используя только хорошие старые показатели игрока. В предыдущем посте я произвел модель для прогнозирования зарплаты игрока, используя различныепоказатели эффективности, Здесь я буду использовать тот же набор данных производительности, чтобы получать рейтинги игроков.

Данные наборы

Окончательный набор данных представляет собой комбинацию традиционных и продвинутых показателей игрока. Традиционные статистические данные касаются таких показателей, как цели и результативные передачи (общее количество известно как баллы), плюс-минус, штрафные минуты и время на льду, в то время как расширенные метрики игрока больше касаются поведения игрока и владения шайбой. Используя библиотеку Python Beautifulsoup, я удалил более традиционные статистические данные (такие как цели, голевые передачи, очки и т. Д.) Изwww.Hockey-reference.com,в то время как расширенные метрики были предоставленыwww.corsica.hockey, Усовершенствованная статистика по хоккею с Корсики начинается в 2008 году, поэтому у меня есть данные почти для 2000 игроков, охватывающих 2008–2018 годы. Следует отметить, что я рассмотрел только расширенные статистические данные, в которых ситуация с игрой ровная. Данные были очищены для пропущенных значений и были переданы в Панды для анализа. В то время как я планирую добраться до этого в конечном счете, эта система рейтинга применяется только к фигуристам, а не вратарям. Статистика вратаря очень отличается от статистики фигуристов.

Модельная концепция

Я знаком с несколькими другими игрокамиметоды оценкии моя идея основана на этих умных рейтинговых системах. В основном, каждый берет индивидуальные параметры, применяет вес к каждому и суммирует их. По сути, модель представляет собой суммирование отдельных взвешенных параметров. Сложнее всего определить, какие параметры наиболее важны для использования и какой вес следует придать каждому параметру. Получается из моего предыдущегопослечто можно было определить некоторые из наиболее важных признаков, используя классификатор случайных лесов. Следовательно, я буду использовать некоторые из этих функций. Выбор весов для параметра несколько произвольно. Я мог бы использовать оценки EAS как правду и попытаться предсказать весовые коэффициенты, используя некоторый метод машинного обучения. Хотя это не кажется такой уж плохой идеей, с этими рейтингами так много неизвестного. На самом ли деле они основаны на показателях игрока, или они на самом деле магически рассчитаны с использованием какого-либо устройства для измерения человеческого фактора? Их рейтинги основаны на предыдущем сезоне, или они в среднем за несколько сезонов? Меняется ли их алгоритм на ежегодной основе? Для меня слишком много двусмысленности, чтобы исследовать этот маршрут. Следовательно, я придумал свои веса, которые, на мой взгляд, работают довольно хорошо.

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

Вероятностьпописывается как функция входных переменныхИкс,гдеZявляется многочленным выражением, описываемым константой бета 0, весами w, где входные параметрыИксдля всех включающих параметров от i = 1 до N. Графически это может быть показано на рисунке 1.

Как можно видеть, S-кривая действует как кривая вероятности и асимптотически близка к 0 и 100 и проходит через ось Y на 50. Функция Sigmoid в основном используется в задачах логистической регрессии с машинным обучением для определения дихотомической классификации Зависимая переменная задается набором независимых входных параметров путем преобразования его из журнала пространства шансов в пространство вероятностей.

В то время как у нас уже есть предопределенные веса, и мы не собираемся здесь что-либо классифицировать, мы все же можем использовать передачу полиномиальной комбинации параметров через стандартную функцию Sigmoid Как видно из рис. 1, при приближении значений + ∞ и -∞ чувствительность к оси y уменьшается. По сути, игроки будут иметь рейтинги от 50 до 99,9 (рекурсивно), так как сумма весов каждого игрока должна быть больше нуля.

Словарь терминов расширенной хоккейной статистики

Я предполагаю, что читатель понимает концепцию основных статистических данных по хоккею, таких как очки (голы / голевые передачи), среднее время на льду (за игру), блок-шоты, раздача, вынос, хиты, штрафные очки, Штрафы сняты, Faceoffs Won, Faceoffs Lost. Но, возможно, есть некоторые более продвинутые метрики, которые являются иностранными, и поэтому я кратко объясню их значение.

CF%: CF означает «Corsi For», то есть количество выстрелов, которые команда игрока сгенерировала, когда этот игрок находился на льду, в отличие от «Corsi Against» (CA), количество выстрелов, сгенерированных для команды противника, в то время как игрок был на льду. CF% — это просто CF / (CF + CA).

CFQoC: средний уровень качества соревнования CF%. Чем выше число, тем выше уровень конкуренции. Несколько спорная статистика относительно ее интерпретации, но мне нравится, когда она используется в контексте с OZS (см. Ниже).

CFQoT: это% CF от товарищей по игре. Это показывает, как игрок способствовал общей игре по сравнению с его товарищами по команде. Обычно это хороший показатель, чтобы видеть, сделал ли данный игрок игроков вокруг него лучше.

OZS: наступательная зона начинается. Процент случаев, когда данный игрок начал свою смену в зоне атаки.

ЗОП: Это не аббревиатура, и ей дали имя Вик Феррари, автор хоккейного блога. Это просто символ удачи. Это процент стрельбы плюс процент спасения команды игрока, пока он находится на льду. Ниццастатьяздесь для большего.

xGF%: соотношение ожидаемых целей к ожидаемым целям и. Ожидаемые цели — просто вероятность того, что цель будет забита с данного броска. Это дает оценку качества снимков. Следовательно, xG со значением 0,2 означает, что выстрел должен быть целью в 20% случаев. По сути, игроки с высоким счетом здесь вовлечены в шансы высокого качества.

ДПС: Акции оборонительных точек. Одна из трех метрик, разработанных Hockeyreference.com (другими являются «Очки оскорбительных» и «Очки вратаря»), которые распределяют очки по каждому очку, набранному игроком, используя концепцию предельных целей за и предельных целей против. Получение DPS сложнее, чем для OPS, поэтому защитные форварды и D-мужчины имеют более высокий DPS, чем большинство атакующих форвардов.ссылкадается для получения дополнительной информации

Алгоритм

Фрагмент кода Python (рис. 2) здесь показывает алгоритм и веса, которые я использовал перед суммированием отдельных параметров (GSS_adj) и передачей их через функцию Sigmoid.

Идеи алгоритма довольно сложны, и было бы исчерпывающим попытаться объяснить все это здесь, в посте. Вместо этого вы можете найти больше на моем Githubхранилище, Я скажу несколько вещей, хотя;

1) Я использую очки как меру успеха. Я не делаю различий между целями, первой и второй передачами. Для меня, независимо от того, где вы были и чем занимались, если вы внесли свой вклад в достижение цели, тогда вы продуктивны. То, как цель была забита, зависит от контекста и отличается от цели к цели.

2) Веса рассчитываются таким образом, чтобы в среднем большая часть веса (

50%) в суммированном «GSS_adj» приходилась на баллы (производительность), «defn» составляет около

35% (ответственность), «toi» счета на

8% (выносливость), а остальные параметры составляют остальное (разное).

3) Рассматриваются только игроки с более чем 10 играми в данном сезоне.

4) Рейтинги игрока основаны на статистике, рассчитанной на 82 игры.

Рейтинги

Следующие общие рейтинги (SPR) представляют собой средневзвешенное значение индивидуальных годовых рейтингов за последние три года (2016, 2017, 2018), так что у игрока, сыгравшего все три года, свой индивидуальный годовой рейтинг распределен на 50%, 30% и 20% за предыдущий год, 2 года назад и 3 года назад соответственно.

Для игроков, которые играли только два сезона в последних трех, общий вес рейтинга составляет 60% за самый последний год и 40% за самый старый год. Игрокам только с одним сезоном из трех последних, нет взвешивания. Учитывая Таблицу 1, здесь нет больших сюрпризов для некоторых всплывающих имен. Несколько пропущенных имен: Остон Мэтьюз, Митч Марнер, Натан Маккиннон, Микко Рантанен, Гейб Ландеског и Джонни Годро. Несмотря на то, что в прошлом году у всех были сильные годы, это средневзвешенное значение, поэтому предыдущие годы немного ограничивают общие рейтинги, но их оценки являются респектабельными со значениями от 87 до 90. Учитывая, как они все выступают в этом году, их SPR 2019 года значения будут выше. Стоит отметить, что Мэтт Барзал и Евгений Дадонов сыграли только один сезон

Сравнить с EA Sports

Итак, давайте попробуем немного проверки. Хотя рейтинги EAS не обязательно являются правдой Евангелия, именно это заставило меня в первую очередь создать собственную систему рейтингов, поэтому представляется правильным сравнивать общие рейтинги здесь с рейтингом EAS. Следует повторить, что я не пытаюсь воспроизвести EAS, но нам нужен некоторый эталон для сравнения. На Рис. 4 показаны рейтинги игроков EAS (издание 2018–2019, но рейтинги основаны на сезоне 2017–2018) в зависимости от SPR для каждого игрока с рейтингом EAS более 73 (99% данных). Существует сильная и статистически значимая корреляция (r = 0,87, P-значение = 0) с R2-значением 0,76, что означает, что 76% вариабельности рейтингов EAS объясняется SPR. Среднеквадратическое среднеквадратичное значение равно 2,6, а величина линии наилучшего соответствия равна 0,60, а точка пересечения равна 32,5. Существует небольшая степень гомоскедастичности от малых до больших значений. По существу, SPR имеет тенденцию переоценивать EAS выше

82 (то есть, где линия наилучшего соответствия пересекает линию 1–1) и недооценивает ниже, но в целом, есть хорошая связь.

Другой способ рассмотреть сравнение состоит в том, чтобы исследовать отношения распределений каждой оценки населения. На Рис. 5 показаны графики распределения SPR и EAS вместе с кривыми KDE. Можно видеть, что оба распределения похожи по форме с бимодальной структурой, за исключением того, что SPR является более широким. Мы можем проверить, является ли разница между двумя средними статистически значимыми. Делая это, мы можем выяснить, будут ли дистрибутивы SPR-EAS репрезентативными или нет репрезентативными. Здесь мы устанавливаем порог значимости P-значения на 0,05 (или 5%).

Чем ниже значение P, тем ниже вероятность получения результата, подобного тому, который наблюдался, если нулевая гипотеза была верна (следовательно, это не произошло случайно). Ни одно из двух распределений не подпадает под нормальное распределение.

Однако мы можем использовать Центральную предельную теорему (CLT) и выбирать случайные выборки из каждого распределения. CLT утверждает, что для достаточно большого количества отобранных сэмплов, предполагая, что процесс сэмплирования является случайным, и что каждая отобранная сэмпл независима (т. Е. Рейтинг одного игрока не влияет на другого), результирующее распределение будет нормальным для среднего значения и до который мы можем выполнить проверку гипотезы. Ниже приведен такой пример, где берется 500 случайных выборок (с заменой) из каждого распределения, для которого рассчитывается среднее значение. Этот процесс повторяется

527 (длина наборов данных SPR и EAS) раз, чтобы обеспечить нормальность (рис. 6).

Поскольку у нас есть два нормальных распределения, теперь мы можем выполнить проверку гипотезы. Поскольку различия между этими двумя распределениями не одинаковы, мы проводим T-тест Уэлча. Нулевая гипотеза заключается в том, что между средними рейтингами между рейтингами SPR и EAS нет никакой связи. При выполнении проверки гипотезы, P-значение = 0 (что 2, подразумевая, что мы должны отвергнуть нулевую гипотезу и что существует большая статистически значимая разница между выборочными средними значениями SPR и EAS. Кроме того, был выполнен тест Колмогорова-Смирнова, чтобы увидеть, можно ли считать, что 2 случайных выборки взяты из одного и того же распределения. Это также доказало, что P-значение = 0, что также означает, что оба распределения различны

Что это значит в целом? Даже при том, что мы обнаружили сильную корреляцию между значениями SPR и EAS, распределения, как полагают, сильно отличаются друг от друга. Это хорошо, если они пришли из одного и того же дистрибутива, тогда я могу просто использовать рейтинги EAS, что здесь не главное!

Проблемы с моделью

Есть несколько мест, где модель ломается и может быть улучшена. Модель недооценивает оборонительный стиль защитников по сравнению с EAS. Мне нужно найти способы дать больше кредитов этим игрокам. Они, как правило, имеют хорошие «ответственные» ценности, но, поскольку они не вносят свой вклад в баллы, вполне вероятно, что они упустят это, хотя их общий вклад в команду важен. Другая проблема — проекция с 82 играми. Трудно доказать, чего бы добился игрок, если бы он сыграл всего 48 игр, а затем получил травму и пропустил остаток сезона. Выбор для проецирования до 82 игр таков, что все сравниваются с одинаковой частотой появления. Он работает так же, как вычисление значений «метрики выбора» для ставок за игру. Тем не менее, кто скажет, что данный игрок продолжал бы забивать, бить, забирать и т. Д. С той же скоростью, учитывая продолжительность сезона, и игроки устают или могут замедляться со временем. Для этого можно получить какую-то базовую оценку, учитывая, как статистика игрока меняется со временем. Это то, что я мог бы посмотреть для будущих версий

Вывод

Хотя все очень хорошо предсказывают рейтинг для каждого игрока, следует помнить, что это всего лишь модель. Это ни правильно, ни неправильно, и только дает «предположение» об истине. Здесь есть вещи, которые, я думаю, являются важными функциями, которые составляют хоккеист, учитывая то, что доступно, но этот выбор может не подходить кому-то другому. Тем не менее, мы видели, что использование функции Sigmoid позволяет создать такую модель, и я не удивлюсь, если EAS использует подобный подход. Если вас интересуют полные рейтинги на конец сезона 2017–2018 годов, вы можете найти их как 2018.csv на моем Github.хранилище, Спасибо за чтение!

Источник

Простыми словами о системах Elo, Glicko, Glicko-2 и TrueSkill.

Недавно мне стало интересно, как определяется мой ранг в среднестатистической онлайн-игре, поэтому я полез в Google и тут же нашёл ответ на свой вопрос.

Вот так

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

Рейтинг Elo

Каждый новый игрок в системе Elo получает некое стартовое количество очков, например — 1500. Само количество непринципиально, главное – чтобы счётчик не ушёл в минус. При победе этот счётчик увеличивается, а при поражении — уменьшается, но количество очков, на которое изменяется рейтинг, непостоянное.

Хоть описание статьи и содержит в себе сочетание «простыми словами», я всё-таки должен вставить пару формул. Маленьких и простых, честно!

ЕА здесь — это то количество очков, которое игрок А получит после победы над игроком В; RA и RB — это текущие рейтинги игроков А и В

Рейтинг устроен так, что игрок с высоким рейтингом получит много очков после победы над игроком с низким, тогда как последний после победы над сильным оппонентом получит мало очков. Звучит несправедливо, вот только эти очки не прибавляются к рейтингу Elo, а проходят через ещё один круг подсчётов.

R’A — это новый рейтинг игрока А. К – это максимальное количество очков, которое игрок может получить или потерять за игру (обычно это 16). SA меняется в зависимости от результата игры: 1 при победе, 0 при поражении, 0,5 при ничье

Без паники! На примере всё сразу прояснится. В этом мне поможет игра с открытой (пользователи видят, как изменяется их ранг) Elo-системой — Brawlhalla.

Пример игры с Elo — Brawlhalla

Лично я люблю эту игру, но уж очень мне не нравится тамошняя система подбора игроков в рейтинговой игре. Новичка с рейтингом 1300 может спокойно кинуть к платине с рейтингом в 1800, и тогда на экране будет твориться такое, что можно будет заливать на pornhub в раздел «изнасилований». Платина, разумеется, победит. Какой будет её рейтинг после победы?

1800+16*(1-(1 / (1 + 10^((1300-1800)/400)))) = 1800.85. Как изменится рейтинг новичка? 1300+16*(0-(1 / (1 + 10^((1800-1300)/400)))) = 1299.15. Короче говоря, рейтинги почти не поменяются. Что есть правильно: новичка кинуло к профессионалу, и он, очевидно, проиграл. Но что, если новичок выиграет? Изменим значения в формулах и посчитаем заново, как изменятся рейтинг.

Для платины: 1800+16*(0-(1 / (1 + 10^((1300-1800)/400)))) = 1784.85. Для новичка: 1300+16*(1-(1 / (1 + 10^((1800-1300)/400)))) = 1315.15. Рейтинг игроков изменился на 15,15 (а 16 — максимум) очков! Платина ушла в почти максимальный минус, а новичок — в плюс. Справедливо? Справедливо.

Это – ваш рейтинг. Скачки — сыгранные матчи. Вы получаете и теряете очки, но каждый раз — разное их количество

Рейтинг Glicko

Elo выглядит вполне себе справедливо, да вот не совсем. Допустим, в матче встретились два игрока с рейтингом 1600. Оба должны играть одинаково хорошо, вот только первый играет раз в неделю (или по каким-то причинам вообще не заходил в игру с месяц), а второй играл днями и ночами. Скорее всего, второй игрок победит.

Система Glicko учитывает этот фактор и вводит новый параметр – рейтинговое отклонение, сокращенно – RD (потому что Ratings Deviation). Чем реже игрок заходит в игру, тем выше его RD. Суть системы Glicko заключается в том, что у игрока с высоким RD невозможно точно определить его рейтинг. Система не может определить, насколько хорош игрок, если он редко играет, поэтому задает рейтинги в виде интервалов.

Поскольку игрок в системе Glicko имеет и рейтинг, и RD, то обычно более информативно описать силу игрока в виде интервала (нежели просто указать его значение). Одним из путей является создание 95% доверительного интервала.

Наименьшим значением интервала является рейтинг игрока минус двойной RD, а наивысшим значением является рейтинг игрока плюс двойной RD. Так, например, если чей-либо рейтинг равен 1850 и RD равно 50, то интервал будет простираться между 1750 и 1950. Мы можем сказать тогда, что мы на 95% уверены, что реальная сила игрока лежит между 1750 и 1950. Если у игрока низкий RD, то интервал будет уже, и мы будем на 95% уверены в реальной силе игрока в меньшем интервале значений.

Марк Е. Гликман, профессор Бостонского университета

Зависимость упомянутого RD от времени. Скачки — сыгранные матчи. RDрастёт со временем и падает после очередной игры

Здесь могли находиться формулы расчета рейтинга, но их нет. Хотите их увидеть — они вверху поста. Считается рейтинг Glicko гораздо сложнее рейтинга Elo.

Так что же с той игрой, где у игрока А и В по 1600 очков? Если победит тот, кто играл днями напролёт, то он получит меньшее количество очков, чем если бы победил его оппонент. А после игры RD обоих оппонентов снизится.

Пример игры с Glicko — Planetary Annihilation

Рейтинг Glicko-2

Вводим ещё один параметр! Теперь помимо основного рейтинга и RD появляется рейтинг изменчивости. Здесь система учитывает вероятность вашей победы или проигрыша.

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

Пример игры с модернизированной Glicko-2 — Counter-Strike: Global Offensive

Для меня Global Offensive — это пример игры, где вообще максимально непонятно, как меняется твой ранг. Ты можешь безрезультатно побеждать бесконечное количество игр, но после одного поражения тебя понизят. Valve не разглашает, как именно работает их рейтинговая система, и такой политики придерживаются и многие другие разработчики.

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

С этой информацией армия игроков стала бы фармить, и уже через пару дней игру заполонили бы псевдо-элиты. А пока игроки просто знают, что для повышения нужно побеждать, и это – вся информация, которая и необходима для нормальной игры, не переходящей в задротство. Если интересно, то на DTF уже есть подробная статья про рейтинг в CS (есть даже график, похожий на тот, что я использовал выше, но как-то я не осилил тамошнее объяснение). Однако что-то я отвлекся от темы, скажем — это было небольшое отступление на конкретном примере.

Резюмируя, можно определить, из каких параметров состоит рейтинг Glicko-2. Во-первых, это основной рейтинг, показывающий, насколько хорош игрок. Во-вторых, это RD — показатель, определяющий, насколько точен основной рейтинг. В-третьих, это рейтинг изменчивости, определяющий стабильность игры у игрока. В-четвертых, это период времени, на котором производится расчёт. Ну и, если хотите посмотреть, как считается Glicko-2 — вот так. А может и не так, у меня просто интеллекта не хватило понять описанное (RD вроде есть, рейтинг изменчивости — тоже, а вообще, отстаньте от меня, я гуманитарий).

Рейтинг TrueSkill

Разработан компанией Microsoft для игр сервиса Xbox Live. О работе этой системы в интернете есть даже отдельная презентация, разобраться в которой весьма затруднительно.

В отличие от Glicko-2, имеет всего два параметра. Больше никаких там рейтингов изменчивости, только «мю» и «сигма». Первый определяет скилл игрока, второй — степень неопределённости в этом скилле (что-то похожее на RD).

Мю— вертикальная линия на отметке 25 (это не основной рейтинг, а отметка, указывающая положение диапазона на кривой); сигма — горизонтальная, описывающая конкретный диапазон. Зелёная область — рейтинг игрока (сама кривая) при значении мю в пределах от 15 до 20

Игроки с такой системой начинают на отметке 25 (это мю) при сигме в 25/3. Это означает, что истинный рейтинг новичков колеблется примерно в районе 21-29 очков. Чем больше матчей сыграл игрок, тем меньше диапазон сигма и тем точнее система определяет рейтинг. Крутость игрока определяется его средней эффективностью в нескольких последних матчах.

Посткриптум

Есть ещё какая-то неведомая система Ree, находящаяся в открытом доступе, но информации о ней — кот наплакал. Как я понял, она не используется в видеоиграх напрямую, но позволяет вести учёт рейтинга чего-либо непосредственно на сайте.

Засим откланяюсь. Всем хороших игр и высокого рейтинга.

Часто вижу сообщения вроде «Почему у игрока Х рейтинг Y, ведь статы максимум на Z, где же логика?» 

Логика на месте, все эти цифры берутся не с потолка, потому что в игре есть определенный алгоритм для подсчета рейтингов.

Небольшой ликбез на примере Мюллера из FIFA 16:

player_muller

Характеристики, указанные на карточках, подсчитываются следующим образом:

PACE:
Sprint Speed (*0.55)
Acceleration (*0.45)

SHOOTING:
Finishing (*0.45)
Long shots (*0.2)
Shot power (*0.2)
Positioning (*0.05)
Penalties (*0.05)
Volleys (*0.05)

PASSING:
Short Pass (*0.35)
Vision (*0.2)
Crossing (*0.2)
Long Passing (*0.15)
Curve (*0.05)
Free Kick Accuracy (*0.05)

DRIBBLING:
Dribbling (*0.5)
Ball Control (*0.35)
Agility (*0.1)
Balance (*0.05)

DEFENDING:
Marking (*0.3)
Standing Tackle (*0.3)
Interceptions (*0.2)
Heading Accuracy (*0.1)
Sliding Tackle (*0.1)

PHYSICAL:
Strength (*0.5)
Stamina (*0.25)
Aggression (*0.2)
Jumping (*0.05)

Считаем:

PAC = 34.2 + 42.9 = 77
SHO = 40 + 16 + 14.6 + 4.7 + 4.5 + 4.2 = 84
PAS = 29 + 17 + 15.8 + 11.6 + 4 + 3 = 80
DRI = 39 + 28.4 + 7.5 + 4 = 79
DEF = 9.6 + 12.3 + 11.6 + 8.2 + 4.4 = 46
PHY = 34 + 22.5 + 11.4 + 4 = 72

Все сходится.

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

В нашем случае:

LF/CF/RF

Ball Control (*0.15)
Dribbling (*0.14)
Attack Positioning (*0.13)
Finishing (*0.11)
Short Passing (*0.09)
Reactions (*0.09)
Vision (*0.08)
Shot Power (*0.05)
Acceleration (*0.05)
Sprint Speed (*0.05)
Long Shots (*0.04)
Heading (*0.02)

Считаем:
12.2 + 10.9 + 12.2 + 9.8 + 7.5 + 8.2 + 6.8 + 3.7 + 3.8 + 3.9 + 3.2 + 1.6 = 84

Цифра на карточке явно больше, но здесь в дело вступает так называемая «международная репутация» (посмотреть ее значения можно на sofifa.com), которая может прибавлять к общему рейтингу до 3 пунктов. У Мюллера она составляет 4 звезды, что дает прибавку +2:

84 + 4* Int. Rep = 84 + 2 = 86

Опять же, все сходится, никакого обмана или взятых с потолка цифр нет.

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

На соревнованиях часто определяют места участников, исходя из суммы баллов за выступление. Бывает так, что разные участники набирают одинаковое количество баллов. В такой ситуации на одном месте оказывается несколько человек. В этом задании научимся определять места SQL запросом.

Проанализируем покупки клиентов. Для каждого товара найдем самую дешевую цену, по которой он продавался:

SELECT pi.product_id,
       min (pi.price) AS min_price
  FROM purchase_item pi
 GROUP BY pi.product_id
 ORDER BY min_price

Обрати внимание на строки 5 и 6. Товары продавались по одной цене.

Попробуем ввести рейтинг самых дешевых товаров. Воспользуемся функцией row_number() для проставления номеров в рейтинге:

SELECT pi.product_id,
       row_number () over (order by min (pi.price)) AS position,
       min (pi.price) AS min_price
  FROM purchase_item pi
 GROUP BY pi.product_id
 ORDER BY min_price

Смотрим на строки 5 и 6

Так дело не пойдет. Чем продукт 2 хуже продукта 3? У них должно быть одинаковое место в рейтинге.

В SQL есть специальная функция ранжирования, которая проставит одинаковое место (ранг) для продуктов с одинаковой стоимостью. Она называется rank.

Заменим row_number() на rank() и посмотрим на результат:

SELECT pi.product_id,
       rank () over (order by min (pi.price)) AS position,
       min (pi.price) AS min_price
  FROM purchase_item pi
 GROUP BY pi.product_id
 ORDER BY min_price

Продукты 2 и 3 теперь занимают одинаковую позицию в рейтинге.

Обрати внимание, что после 5 позиции в рейтинге сразу идет 7-я, т.к. на пятом месте располагаются два товара.

Добавить комментарий