Рейтинг игроков с помощью Elo более чем с двумя игроками

16

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

Из статьи википедии я хотел бы расширить уравнения для двух игроков:

E a = 1 / (1 + 10 (R b - R a ) / 400 )

E b = 1 / (1 + 10 (R a - R b ) / 400 )

R x new = R x old + 32 * (W - E x ), где W = 1, если X выигрывает, и W = 0, если X проигрывает.

Как изменится вычисление для E x и W, учитывая более двух игроков?

fbrereto
источник
Я бы с осторожностью использовал систему в стиле Эло для игр с более чем двумя игроками, так как многие факторы могут привести к тому, что они превратятся в чистые игры на ловкость - игроки объединяются в команду с самыми сильными игроками и т. Д. Если вы смешиваете результаты матчей с разным количеством игроков я настоятельно рекомендую сбросить весовые коэффициенты (т. е. «32» в формуле обновления для R) для игр с большим количеством игроков.
Стивен Стадницкий,
@StevenStadnicki спасибо за рекомендацию. Однако мне неясно, как сброс постоянной веса решает проблемы, о которых вы упомянули. Можете ли вы уточнить?
fbrereto
Сбрасывая вес для многопользовательских матчей, вы по сути говорите, что они не так важны для рейтинга игрока, как для двух игроков; по сути, вы говорите, что они менее представительны, насколько хорош игрок на самом деле. Магия делает что-то похожее с этой структурой турниров, где разные уровни турниров имеют разные значения K, чтобы показать, какой вес им следует придавать при определении рейтинга игрока.
Стивен Стадницки,

Ответы:

10

Как подсказывает верхняя ссылка в моем поиске Google, вы можете рассчитать индивидуальные изменения в рейтинге Эло игрока (ваши значения R), а затем суммировать их, чтобы получить общее изменение, применимое к рейтингу каждого игрока.

т.е. если у вас 4 игрока (A, B, C, D), рассчитайте изменение рейтинга A (R-sub-a-sub-new) по их оценкам против B, C и D, а затем скорректируйте рейтинг A по сумма рассчитанных R-значений.

Fnord
источник
Я пошел по этому пути, и похоже, что пока он работает хорошо, спасибо.
fbrereto
3
Похоже, вот формулы для этой идеи: sradack.blogspot.ru/2008/06/…
dbf
1

Я нашел документ с PHP исходного кода метода аналогично ответу Fnord здесь: http://elo-norsak.rhcloud.com/3.php я создал более общую реализацию цели PHP здесь: https://github.com/ FigBug / Multiplayer-ELO Я использую его со своей группой по настольным играм, и пока, похоже, она работает хорошо.

Расчет Ex и W останется прежним. Вместо того, чтобы использовать K из 32, используйте K из 32 / (#players - 1). Затем посмотрите на каждую перестановку 2 игроков и рассчитайте (32 / (#players - 1) * (W - Ex)). Тогда RxNew равно RxOld + Sum всех значений, которые вы только что рассчитали.

FigBug
источник
2
Как правило, рекомендуется включать в текст ответа краткое описание вашего метода / рекомендации, а не полагаться исключительно на внешние ссылки. Ссылки имеют обыкновение ломаться со временем, что может привести к тому, что ваш ответ упустит важные детали, если кто-то попытается найти его спустя годы.
DMGregory
Спасибо за ваш практический код, это полезно! Только одно предложение для вашей реализации - может быть, лучше не округлять промежуточные результаты, eloChange += round($K * ($S - $EA));а делать округление только после всех вычислений при установкеeloPost
FlameStorm
-1

Я недавно написал этот пост на тему. Я надеюсь, что это помогает. Я скоро также добавлю код в другой пост.

Вот краткое описание того, что это влечет за собой:

Одно из решений, которое вы должны принять, - это если у вас какой-то суб-матч или нет. Например: в настольном футболе вы увидите, что в игре 2 на 2 всегда есть два игрока лицом друг к другу, а два - косвенно. Это означает: два защитника никогда не взаимодействуют, это только пары атакующий-защитник. Альтернативой является сценарий, подобный Dota, который имеет формат 5 на 5, и в нем нет реальных индивидуальных, предсказуемых матчей 1 на 1 в рамках настоящего матча.

Вариант 1: нет структуры под-соответствия:

В этом случае вы можете просто усреднить рейтинг всех вовлеченных игроков и использовать его в качестве рейтинга команды для этой команды. Поэтому для R_a и R_b вы просто используете сумму рейтингов всех игроков этой команды, деленную на количество игроков. После того, как вы вычислили обновление для команды, вы обновите рейтинг каждого члена команды с помощью обновления.

Случай два: под-матчи:

В этом случае вы разбиваетесь на подспички и взвешиваете их друг против друга. Таким образом, вы вычисляете E_a и E_b для каждой пары, а затем взвешиваете их. Например: для 5v5 с подструктурой 1v1 вы вычисляете 5 значений E_a для 5 пар. Затем вы вычисляете взвешенный термин для каждого отдельного игрока на основе подматча, частью которого он является. Таким образом, если игрок 1 является частью подматрицы 1, вы вычисляете что-то вроде 0,6 * E_a1 + 0,1 * E_a2 + 0,1 * E_a3 + 0,1 * E_a4 + 0,1 * E_a5 (где E_a1 - E_a для подстрока, в котором участвует игрок).

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

Паскаль Крафт
источник