Алгоритм ELO для роботи з людьми, які не грають часто


9

Я використовую алгоритм ELO, щоб класифікувати гравців у змаганнях з понг. Більшість гравців грають щодня, але у нас є один гравець, який не грав протягом місяця. Наразі мій алгоритм відстежує результати за останні 30 днів, і, як результат, цей гравець стрімко піднімається через ряди, незважаючи на те, що ніколи не грав. Він програв купу своїх перших ігор, але виграв більшість своїх останніх кількох ігор, а це означає, що його втрати знижуються з чартів, і його результат збільшується в результаті.

Очевидно, що мій план знизити бали через 30 днів не спрацьовує. Які інші методи я можу використовувати, щоб штрафувати гравців за те, що вони не грають часто?

Єдине, що я придумав поки що, - це зменшити бали, виходячи з відсотка, який базується на днях бездіяльності (тобто якщо користувач не грав на тиждень, його бали коштують лише 70% від норми, і йому доведеться грати X разів, щоб отримати 100% очок).

Однак це здається занадто довільним. Хтось має кращі ідеї чи пропозиції щодо поводження з неактивними гравцями в іншому активному середовищі?

Заздалегідь спасибі.

Відповіді:


18

Здається, ви зберігаєте очки, присуджені за кожен матч, а потім "закінчуєте" ці коригування балів з часом. Що, як ви помітили, відкрите для легкої експлуатації.

У стандартній реалізації ELO ваш показник ELO назавжди; вона не «занепадає» з часом, оскільки отримання очок таким чином залишає систему ранжування, врешті-решт призведе до загальної дефляції балів (тобто: 1500 більше не буде означати «середнє значення»).

Пам’ятайте, що рейтинг ELO - це не «бали» у тому, як зазвичай ігрові гравці думають про них; вони є спробою оцінити рівень майстерності гравця щодо інших гравців, вони не є винагородою. Ці очки не слід сприймати як покарання гравцеві, тому що вони є єдиним інструментом, який потрібно намагатись зіставити гравців з противниками аналогічного рівня майстерності. Єдине, що завжди повинно впливати на ці цінності - це перемоги та програші проти інших гравців, що займають рейтинг.

Підхід, який застосовують більшість ігор, які хочуть не допустити гравців до досягнення високих балів, а потім зникнути, ніколи більше не грати, - це вимога активності для відображення лідерів; якщо гравець не грав у гру протягом 30 днів (чи що завгодно), він просто не відображається в лідерах до тих пір, поки це не відбудеться. Коли гравець повертається та грає черговий матч з рейтингом, він повертається зі своїм повним рейтингом ELO, точно так, як ніби ніколи не виходив. Якщо рівень їхньої майстерності змінився відносно інших активних гравців у проміжку часу, гра швидко помітить це та відкоригує їхнє ранжування, завдяки стандартному процесу виграшу та програшу матчів проти опонентів.


1
+1, хоча це правильне пояснення того, чому це не вдається, я б просто скинув ELO замість цього і пішов на щось зовсім інше. (Я не знаю що, чи я б це розмістив ^ ^)
o0 '.

4
@Lohoris Це був би абсолютно розумний вибір розробки. Якщо мета не підтримувати змістовного порівняння об'єктивних рівнів майстерності людей відносно один одного (тобто для цілей проведення матчів), то ELO не є чудовим вибором для використання в якості механізму зарахування. І навіть там є кілька ігор, які використовують систему на зразок ELO під кришкою для проведення сватання, використовуючи зовсім іншу систему «очок» для цілей показу, яка дозволяє їм нагороджувати людей за частіші ігри. StarCraft 2 робить це, наприклад.
Тревор Пауелл

4

Такі алгоритми, як Elo та TrueSkill, визначають майстерність гравця на основі результатів кожної гри, не враховуючи проходження часу. Однак обидва алгоритми мають коефіцієнт "невизначеності" - у випадку з Elo існує новий, K Factorякий зазвичай встановлюється високим для нових гравців, так що їхній рейтинг Elo швидко збіжиться на "справжній" рейтинг навичок. Після встановленого часу або встановленої кількості ігор, K Factorнорма зазвичай знижується, так що рейтинг змінюється менше між іграми.

Те, що ви бачите, є, мабуть, типовим поведінкою Elo (залежно від вашої реалізації Elo): ваш гравець зіграв менше ігор, ніж його конкуренти, що робить його «новим гравцем» з вищим K Factor; оскільки він виграє у своїх іграх, алгоритм розглядає його як гравця з більш високою кваліфікацією та присуджує йому вищий рейтинг!

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

  • Оцінка гравців на основі кількості виграшів.
  • Призначте значення очок виграшів / програшів, наприклад 2 бали за виграш, 1 бал за програш.
  • Розраховуйте лише найкращі ігри X гравця за даний тиждень / місяць.
  • Вимагайте від гравців мінімальної кількості ігор, щоб "пройти кваліфікацію".

Зауважте, що жодне з цих рішень не дасть повністю "справедливого" результату, оскільки гравці, які грають більше, матимуть більш високий бал, ніж гравці, які цього не роблять. Єдиний спосіб забезпечити справедливість - це гравці грати однакову кількість ігор.


Я думаю, що справедливо, що гравці, які грають більше (маючи однаковий середній коефіцієнт виграш / програш), повинні мати більш високий бал, ніж гравці, які не грають так багато ...
David Gouveia

3
@davidluzgouveia - це не суворо визначення "справедливого". При забиванні гравців в турнірі результат є "справедливим", якщо жоден гравець не має переваги, ніж інший гравець (без поваги до майстерності). Сказавши це, я думаю, що справа, про яку ми говоримо, - випадкова конкуренція між друзями; зарахування скоріше стосується заохочення участі, ніж відвертого виграшу.
Блер Холлоуей

Так, це випадкові змагання, а не суворий турнір. Я погоджуюся з коментарем Девіда, очевидно, саме тому я шукаю тут рішення. Дякуємо за ваш внесок!
Jemaclus

0

Я не знаю про алгоритм ELO, але як щодо того, щоб замість того, щоб карати людей, які не грають часто, ви нагороджуєте людей, які часто грають? Наприклад, якщо ви зробили свій рейтинг щось на кшталт:

Score = (Wins / Losses) * (Total Games Played) * Some_Scale_Factor

Тоді люди, які часто грають, напевно, в кінцевому підсумку грають більше ігор і мають більше шансів на досягнення більш високого балу.

І ще одне, що ви, можливо, захочете змінити - це не допустити, щоб чистка старих партитур впливала на загальний рахунок гравця. Це головна причина, чому той гравець піднімається в рядах (а також, чому він зрештою повністю відвалиться від чарів).

Крім того, люди, які певний час грають серйозно і досягають чудових результатів, напевно, не будуть щасливі, знаючи, що їхні досягнення з часом зникнуть і зникнуть. Ця система серйозно відлякує.

Це легко виправити, лише зберігаючи кеш "загальних ігор" та "виграш / програш" кожного гравця, навіть після того, як ви видалите самі бали.

За допомогою цієї інформації ви можете легко визначити, скільки виграшів та програшів мав гравець, та оновити їх відповідно кожного разу, коли він знову грає.

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