ELO * 10

08.10.2009 12:21
Ну ладно, а теперь — пост, который не соберет осмысленных комментариев.

Настоящее геймдизайнерское задание: адаптировать рейтинг Эло (ELO) (или создать что-то свое Эло-подобное) для партий из 10-и игроков, о каждом из которых известно, какое место он занял.

Ну, например, для 10-и бегунов в одном забеге.


fillest
осмысленный комментарий
Yada yada yada yada
LXj
Амагад, рейтинговые рейды? Хотя при кросс-сервер пагах полезно, да.

Здесь то, кто какое место занял, не поможет. Нужна информация типа «perfomed/underperfomed». Ну то есть одно дело, когда в Наксе у самого низкого дпсера 2500 dps, и совсем другое -- когда 900. Третье -- когда дпсер ещё и сорвал агро. Или когда ретропал специально не давал баффы другим милишникам, чтобы быть в топе. Или когда топовый дпс не выбегает из огня. Ну хотя последние два фактора должны быть отражаться на позиции игрока by design, да.

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

Опять же при первых траях нового контента или при фановых рейдах (например, гильдия договорилась, что в определённый день все приходят на рейд с пивом) все будут терять рейтинг

Автор ответил:
>Здесь то, кто какое место занял, не поможет. Нужна информация типа «perfomed/underperfomed». Ну то есть одно дело, когда в Наксе у самого низкого дпсера 2500 dps, и совсем другое -- когда 900.

Это, на самом-то деле, не важно. Можно вместо места брать отношение плохого к хорошему, ну или «время добега», а не место. Задача не сильно от этого меняется, если чё.

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

Блондин
Через разбиение на пары, разумеется. Десятый проиграл девять раз, первый — девять раз выиграл. В данном конкретном случае пар получится 45.

Автор ответил:
Неизящно как-то 45 раз пересчитывать.
scaith
А какие сведения есть о том, как выступила команда в целом?

Автор ответил:
А кто сказал, кто команда соревновалось с кем-то? =)

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

То есть сведений, как выступила команда в целом может и не быть.

Блондин
> > > Неизящно как-то 45 раз пересчитывать.
Угу. Куда изящней — ежегодно менять схему начисления рейтинга и устраивать по этому поводу эпический срач, как это делают в Формуле-1.
Хотя… в принципе… надо обдумать вариант, когда все сравниваются с вторым. Тогда количество пересчетов всегда будет N-1, где N — число «бегунов».

Автор ответил:
Почему со вторым, а не с тем, который посередине?
ничего не понял. нужно по рейтингам отдельных игроков вычислить рейтинг партии, или, зная результаты игроков в партии (что бы это ни значило), вычислить для каждого из них рейтинг?

Автор ответил:
да
Блондин
> > > Почему со вторым, а не с тем, который посередине?
Для изящности. Второй — будет практически гарантированно, а если брать того что посередине — то нужно еще придумывать методику определения того, кто посередине. Посередине по времени или по номеру? А если бегунов четное число — то округлять вверх или вниз? А сошедших с дистанции при определении середины учитывать? А как? И так далее.
Таким образом мерять нужно в сравнении или с первым, или со вторым. Но если мерять с первым — разброс рейтингов окажется выше, что не есть хорошо.
Задание неоднозначно:
Игроки могут друг на друга влиять?
Если нет, то просто от занятого места и нормировать.
add:
Наверное просто про бегунов плохой пример. Так-то понятно, что они, скорее всего, могут влиять друг на друга в комп играх.
Iga
Можно все то же самое, только взвешенное по всем количество очков считать.
То есть вместо (Ra-Rb) юзать (Ra-Rb) + (Ra-Rc) + (Ra-Rd) и т.д.
На первый взгляд то же самое и получится. При игре со слабыми — Ea в районе 1, при игре с сильными — в районе нуля. Смешанные ситуации — посерединке.
DankoSedin
N — количество бегунов
1. Результат забега : Scur = Lcur/(Lmax — Lmin)
2. Вероятный результат : Ecurr = 1/(1+ (10 в степени (рейтинг текущего игрока минус сумма рейтингов остальных деленная на (N-1) ) ) ) )
Новый рейтинг — по старой формуле. Коэффициенты масштабирования — подобрать по вкусу(например 400 в формуле вероятного результата).
Вот такой он рейтинг Эло для N бегунов.
Есть сомнение в (рейтинг текущего минус (сумма рейтингов остальных деленная на N-1)) вместо нее думаю можно подобрать какую-нибудь другую функцию, по идее это должна быть «мера» на пространстве рейтингов.

Автор ответил:
А если в забеге все игроки с одинаковым рейтингом, а один — с сильно заниженным?
DankoSedin
Iga опередил :(
Iga
DankoSedin — зато ты развернуто написал :)
DankoSedin
> > >А если в забеге все игроки с одинаковым рейтингом, а один — с сильно заниженным?
В вике про это написано достаточно четко :"Чем реже проигрывает шахматист, тем точнее можно оценить его рейтинг. Наиболее точно рейтинг можно получить на основе турниров, в которых играют примерно равные по силам игроки."
Странно ожидать, что детская болезнь излечится при подобной адаптации. То что было справедливым для 2х игроков, по прежнему будет справедливо и для 10х.
Или я не правильно понял вопрос?

Автор ответил:
Не удалось подловить, ок. =)
Плясать надо от определения; если я правильно понимаю, вся эта идея с рейтингом должна отвечать единственному инварианту — определять (со статистической точностью) вероятность того, что один игрок выиграет у другого, т.е. это f(x,y). В случае 10 бегунов это должна быть функция от 10 переменных, которая выдавала бы в ответ 10! вероятностей, т.к. ей приходилось бы отвечать на вопрос, с какой вероятностью произошёл бы любой исход забега — а исходов именно что 10!.
Поскольку чётко сформулированная задача выглядит, мягко говоря, страшновато (если бы я хотел заниматься такими задачами, я бы таки пошёл на мехмат, а не в гейм-дизайн подался), то единственное, что остаётся — делать систему, _аналогичную_ рейтингу Эло. То есть нам надо составить более лёгкое требование к такой функции, например, вероятности по каждому игроку, что он придёт первым в составе такой группы.
Эту математическую задачу уже можно было бы сесть и решать, если бы я не предполагал, что речь идёт об рейдах ) а рейды — это не система с раздельными дорожками, а командная игра всё-таки. Так что на этот случай задачу необходимо сформулировать следующим образом: какова вероятность того, что команда с указанными рейтингами преодолеет препятствие с указанным рейтингом?

В-общем, здесь уже можно брать бумажку и начинать всё это рассчитывать, но мне уже лень.

Автор ответил:
>если бы я хотел заниматься такими задачами, я бы таки пошёл на мехмат, а не в гейм-дизайн подался.

А ты, типа, пошел учиться на геймдизайнера вместо мехмата? =) Я пока не встречал «гемдизайнерской» задачи, которая требовала математики уровня выше школьного.

>команда с указанными рейтингами преодолеет препятствие с указанным рейтингом

Ага, свёл все к известной задаче. I See What You Did There!

DankoSedin
> > >какова вероятность того, что команда с указанными рейтингами преодолеет препятствие с указанным рейтингом
имхо, ключевая фраза. Итого игроков по прежнему два: препятсвие и комманда его штурмующая :)
Lazy
Почему никто не пишет, что рейтинг Эло нелинейный, через это трудный для сравнения на глазок? Может лучше линейный сделать, а?
> если бы я хотел заниматься такими задачами, я бы таки пошёл на мехмат, а не в гейм-дизайн подался.
А ты, типа, пошел учиться на геймдизайнера вместо мехмата? =) Я пока не встречал «гемдизайнерской» задачи, которая требовала математики уровня выше школьного.

Ну вот составить функцию по первой формулировке — вполне нетривиальная задача. Но поскольку на ММ я так и не пошёл, по поводу того, его ли это уровень, сказать ничего не могу :)

ddo
Ретинг в рейде из 10 человек можно начислять как и в ЭЛО, т.е. по предсказанию — если занял место ниже, чем должен был, то рейтинг понижается и наоборот. Реализовать это достаточно просто, небольшая формула. Предсказание на рейд можно считать так:
Способ раз (если известен рейтинг игроков): Считается сумма всех рейтингов участников и делится на их количество. Получаем средний рейтинг группы. Затем смотрим на сколько личный рейтинг отличается от среднего и на основе этого считаем вероятность победы.
Формула — (личн/общий)*(100%/Кол-во участников)
Пример для 10 человек:
рейтинг — вероятность победы
350 — 18,2%
100 — 5,2%
120 — 6,25%
30 — 1,6%
500 — 26%
60 — 3,1%
340 — 17,7%
100 — 5,2%
20 — 1%
300 — 15,6%
Сумма 1920, средний 192
Способ два (если известны места): Способ хуже, ибо один игрок до этого мог сходить только в 2 рейда, а другой в 22 и придется брать то место, которое он чаще всего занимал, а лучше среднее значение. А дальше как и в способе раз суммируем средние места игроков, вычисляем среднее значение для группы и смотрим вероятность на победу по той же формуле.
Но лучше брать более достоверный параметр, чем места. Скажем экспу игрока, или его очки за ПвП. Ибо один мог всегда биться с самыми сильными и быть последнем, а другой со слабыми и быть первым, а выдача экспы или ПвП очков это обычно учитывает. А если не учитывает, то должна =)
ddo
В формуле неточность, вместо «общего» значения нужно брать «среднее». Пример посчитан верно =) Правильная формула звучит так:
(личн/сред)*(100%/Кол-во участников)
LXj
У примера с бегунами такая особенность: хоть бегун бежит в партии, хоть сам по себе -- он всегда пробежит с одним и тем же результатом. Ну то есть на самом деле не всегда, ибо после тренировки результат будет улучшаться.

Так зачем тогда рассматривать команду? Начнём с того, что лучший рейтинг бегуна -- это как раз время, за которое он пробегает стометровку. Вот это время и будет его рейтингом. Поскольку он бегает много стометровок, то мы результат будем усреднять, причём новые результаты брать с бОльшим весом, чем предыдущие.

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

Ну и вторая проблема -- результат команды на самом-то деле влияет на результат бегуна. То есть не бегуна, а уже рейдера. Понятно ведь, что в плохой команде хороший рейдер будет прогрессировать с гораздо меньшим успехом, а плохого могут успешно протащить хоть и мёртвым грузом в хорошей команде. Соответственно, если средний рейтинг команды сильно отличается от рейтинга игрока, то нужно вводить дополнительный поправочный коэффициент для результата в данном конкретном забеге.

(Кстати, мне тут ещё пришла в голову идея, связанная с инстансами. Почему бы игроку не позволить ходить в любой рейд/героик чаще, чем раз в неделю/день? Ну там потренироваться или помочь друзьям. Рейтинг постараться поднять, опять же. Естественно, идя во второй раз, он уже не имеет никаких прав на лут)

Автор ответил:
>Так зачем тогда рассматривать команду?

Я вообще не знаю, зачем все рейды принялись рассматривать. =) Изначальная постановка задачи: «есть 10 человек, известно, в каком порядке они победили». Ни про время, ни про рейды ничего не было.

+0.5 LX. Он почти попал, но занудно, аж жуть.

Фейл, как всегда, в задани — рейтин эло, рейтинг бегунов и рейтиг партии показывают совершенно разные вещи.

1. Эло показывает, насколько качественно один игрок «мочит» другого. Тут вся колбасня в том, что они пытаются многомерный «скил игрока» к одномерному объекту свести без комплексных чисел и прикрыться мат. статом., что работает, только пока турниры раз в пол. года и нет возможности этот рейтинг задрочить.

2. Рейтинг бегунов — насколько каждый быстро, собственно, бежит в вакууме. Взаимодействия и многомерности ноль, все примитивно, поэтому он давно успешно заменяется временем.

3. Рейтинг в партии вообще хрен знает что показывает, типо «долю каждого в общем выигреше», что ли? Этим давно и довольно безуспешно занимается теоретический менеджмент. Тут ключевая проблема, что участникам в большинстве случаев гораздо проще не повышать свою долю участия, а понижать долю «противника», так что нормальные практики стараются увлечения такими рейтингами избегать.

В ммо на это стоит забить в особенности, так как там и так поводов для бурления говн достаточно.

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

Ну и система эта будет в первую очередь, конечно же, нужна для PUGов, особенно кросс-серверных. Ибо оценить игрока до его включения в группу сложно, даже с ачивментами. Тут опять же остаётся проблема с новыми игроками и новыми альтами, но при правильной системе «tier’ов» pve-контента её можно решить.

LXj
> Понятно, что не за банальный дпс.

В смысле, за него тоже, но это не всегда главное

scaith
> А кто сказал, кто команда соревновалось с кем-то?

Если команда ни с кем не соревновалась, то напрашивается очевидный вывод — это не команда (как, действительно, в случае с бегунами). В таком случае очевидно, что пришедший первым выиграл у всех, пришедший последним — проиграл всем. Тогда, если задача звучит «адаптировать Эло-рейтинг под забеги X бегунов», то это задача как разбить забег на пары, к которым применить пересчет рейтинга по известным правилам.

Если это не подходит се… по смыслу, то есть 10 бегунов все же выполняют общую задачу (ну, эстафету бегут там), то задача определить оценку деятельности для каждого игрока хотя бы в виде success/fail. И мест для такой характеристики явно недостаточно.

ddo
Либо я не так понял задачу, либо лыжня асфальтированная =)
Рейтинг Эло соревновательный, т.е. никакого командного взаимодействия. На основе него можно расчитать вероятность каждого участника победить (занять первое место). Сам рейтинг увеличивается или уменьшается в зависимости от занятого в итоге места относительно расчитанного. Сама формула расчета простая:
Rnew = Rcurrent — (Pactual — Pplan)*Knorm, где
Rnew — новый рейтинг, Rcurrent — текущий рейтинг, Pactual — занятое место, Plan — планируемое по расчетам место, Knorm — нормировочный коэффициент
Расчет планируемого места уже приводил выше, по формуле (сначала нужно расчитать вероятность победить каждого участника, а затем расставить их по ранжиру — получатся места)
ВерПобеды = (Rcurrent/Rср.группы)/Кол-во участников, где
Rср.группы — средний рейтинг всей группы.
Формулу расчета нового рейтинга можно расширить,чтобы она учитывала не один параметр(занятое место), но и другие:
Rnew = Rcurrent — (Pactual — Pplan)*Knorm — … — (Nparam.actual — Nparam.plan)*Nkoeff,
для каждого параметра N необходимо заранее вычислять планируемое значение(скажем, среднее значение набитых до этого фрагов).
По-моему, вполне работоспособный вариант, и при этом простой =)
Каждый из 10 игроков «вкладывает» процент своего текущего рейтинга в общий банк. По результатм забега\партии в зависимости от места банк распределяется между участниками.
LXj
Если придерживаться ELO, то можно модифицировать формулу таким образом, чтобы рейтинг игрока, который всегда занимает 1-е место, стремился к 1000, игрока, который занимает 2-е место -- стремился к 900 и т. д.
А вариант «Спиздить из шахмат» не рассматривается? Там вобще-то турнир считается не через парные встречи.
Olexiy
Отличный рейтинг сделан, например, на ТопКодер — соревнования для программистов, в каждом участвуют ~1500 людей.

Вкратце: есть рейтинг (матожидание силы) и волятилити (дисперсия силы).
Вдлинце: http://www.topcoder.com/wiki/display/tc/Algorithm+Competition+Rating+System

И последнее — Эло не надо писать большими, это фамилия.

Автор ответил:
Нет, это Electric Light Orchestra!
Чтобы комментировать, надо войти или сначала зарегистрироваться.
А если у вас есть OpenID, это еще проще: