Рейтинг гравців, використовуючи Elo з більш ніж двома гравцями


16

Я хотів би використовувати Elo для відстеження рейтингів гравців між матчами певної гри, проте в гру можна грати до чотирьох гравців. Я бачив такі ігри, як Каркассон використовує 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 старий + 32 * (W - E x ), де W = 1, якщо X виграє, а W = 0, якщо X програє.

Як би змінилося обчислення для E x і W, отриманих більше двох гравців?


Я б з обережністю використовував систему Elo-стилю для ігор з більш ніж двома гравцями, оскільки багато факторів можуть спричинити їх менше, ніж чисті ігри майстерності - гравці, що збираються на сприйнятих найсильніших гравців і т. Д. Якщо ви змішуєте бали з матчів з різною кількістю гравців, я настійно пропоную скинути зважування (тобто "32" у формулі оновлення для R) для ігор з більшою кількістю гравців.
Стівен Стадницький

@StevenStadnicki дякую за рекомендацію. Однак мені незрозуміло, як скидання вагової константи вирішує вказані вами проблеми. Чи можете ви докладно?
fbrereto

Відмовляючись від ваги для багатокористувацьких матчів, ви по суті заявляєте, що вони не так важливі для рейтингу гравця, як двома гравцями; по суті, ви говорите, що вони менш представлені наскільки хороший гравець насправді. Magic робить щось подібне до цього зі своєю структурою турнірів, де різні рівні турніру мають різні K-значення, щоб представити, яку вагу їм слід надати при визначенні рейтингу гравця.
Стівен Стадницький

Відповіді:


10

Як пропонує головне посилання в моєму пошуку Google, ви можете обчислити окремі зміни в рейтингу гравців Elo (ваші R значення), а потім підсумувати їх, щоб забезпечити загальну зміну, яка застосовується до рейтингу кожного гравця.

тобто якщо у вас є 4 гравці (A, B, C, D), обчисліть зміну рейтингу A (R-sub-a-sub-new) з їх балів проти B, C і D, а потім відрегулюйте рейтинг A за підрахована загальна R-величина.


Я пішов цим маршрутом і, здається, поки добре працює, дякую.
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 + Сумі всіх щойно обчислених значень.


2
Як правило, є хорошою практикою включати резюме свого методу / рекомендації в основу відповіді, а не покладатися повністю на зовнішні посилання. Посилання мають звичку розриватися з часом, що може залишати вашу відповідь пропущеною важливою деталлю, коли хтось намагається роздивитись її вже роками.
DMGregory

Дякуємо за Ваш практичний код, це корисно! Лише одна пропозиція до вашої реалізації - можливо, краще не округляти проміжні результати, eloChange += round($K * ($S - $EA));а робити округлення лише після всіх обчислень при встановленніeloPost
FlameStorm

-1

Нещодавно я написав цей пост на цю тему. Я сподіваюся, що це допомагає. Незабаром я також додам код в інший пост.

Ось контур того, що це тягне за собою:

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

Випадок перший: Відсутня структура відповідності:

У цьому випадку ви можете просто оцінити рейтинг всіх учасників та використовувати його як командний рейтинг для цієї команди. Отже, для 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 для підрозділу, в якому гравець бере участь).

Параметри можна вибирати вільно, але ви можете їх оптимізувати, як тільки матимете деякі дані. Спробуйте знайти схему зважування, для якої рейтинги гравців не так сильно коливаються. Це можна зробити автоматично, обчисливши дисперсію для значень, а потім мінімізуючи їх для заданого набору результатів відповідності, адаптуючи ваги. Я сподіваюся, що це корисно.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.