ELO * 10
Настоящее геймдизайнерское задание: адаптировать рейтинг Эло (ELO) (или создать что-то свое Эло-подобное) для партий из 10-и игроков, о каждом из которых известно, какое место он занял.
Ну, например, для 10-и бегунов в одном забеге.
Здесь то, кто какое место занял, не поможет. Нужна информация типа «perfomed/underperfomed». Ну то есть одно дело, когда в Наксе у самого низкого дпсера 2500 dps, и совсем другое -- когда 900. Третье -- когда дпсер ещё и сорвал агро. Или когда ретропал специально не давал баффы другим милишникам, чтобы быть в топе. Или когда топовый дпс не выбегает из огня. Ну хотя последние два фактора должны быть отражаться на позиции игрока by design, да.
Но в любом случае надо учитывать, что рейды -- это командное занятие. Хилер, которому дали лечить танка будет всегда ниже хилера, который лечит рейд (или наоборот в зависимости от энкаунтера). Да что там, дпс у разнвых классов будет разным в зависимости от энкаунтера. Ну хотя при разнообразии энкаунтеров это должно сглаживаться, да.
Опять же при первых траях нового контента или при фановых рейдах (например, гильдия договорилась, что в определённый день все приходят на рейд с пивом) все будут терять рейтинг
Это, на самом-то деле, не важно. Можно вместо места брать отношение плохого к хорошему, ну или «время добега», а не место. Задача не сильно от этого меняется, если чё.
Я специально привел в пример бегунов, чтобы на рейдах не циклились.
Если брать 10 бегунов, то нам известно время лучшего и поставил ли он мировой рекорд. Если брать игру на выживание, то известно, что первый выжил, а остальные все умерли в таком-то порядке.
То есть сведений, как выступила команда в целом может и не быть.
Угу. Куда изящней — ежегодно менять схему начисления рейтинга и устраивать по этому поводу эпический срач, как это делают в Формуле-1.
Хотя… в принципе… надо обдумать вариант, когда все сравниваются с вторым. Тогда количество пересчетов всегда будет N-1, где N — число «бегунов».
Для изящности. Второй — будет практически гарантированно, а если брать того что посередине — то нужно еще придумывать методику определения того, кто посередине. Посередине по времени или по номеру? А если бегунов четное число — то округлять вверх или вниз? А сошедших с дистанции при определении середины учитывать? А как? И так далее.
Таким образом мерять нужно в сравнении или с первым, или со вторым. Но если мерять с первым — разброс рейтингов окажется выше, что не есть хорошо.
Игроки могут друг на друга влиять?
Если нет, то просто от занятого места и нормировать.
Наверное просто про бегунов плохой пример. Так-то понятно, что они, скорее всего, могут влиять друг на друга в комп играх.
То есть вместо (Ra-Rb) юзать (Ra-Rb) + (Ra-Rc) + (Ra-Rd) и т.д.
На первый взгляд то же самое и получится. При игре со слабыми — Ea в районе 1, при игре с сильными — в районе нуля. Смешанные ситуации — посерединке.
1. Результат забега : Scur = Lcur/(Lmax — Lmin)
2. Вероятный результат : Ecurr = 1/(1+ (10 в степени (рейтинг текущего игрока минус сумма рейтингов остальных деленная на (N-1) ) ) ) )
Новый рейтинг — по старой формуле. Коэффициенты масштабирования — подобрать по вкусу(например 400 в формуле вероятного результата).
Вот такой он рейтинг Эло для N бегунов.
Есть сомнение в (рейтинг текущего минус (сумма рейтингов остальных деленная на N-1)) вместо нее думаю можно подобрать какую-нибудь другую функцию, по идее это должна быть «мера» на пространстве рейтингов.
В вике про это написано достаточно четко :"Чем реже проигрывает шахматист, тем точнее можно оценить его рейтинг. Наиболее точно рейтинг можно получить на основе турниров, в которых играют примерно равные по силам игроки."
Странно ожидать, что детская болезнь излечится при подобной адаптации. То что было справедливым для 2х игроков, по прежнему будет справедливо и для 10х.
Или я не правильно понял вопрос?
Поскольку чётко сформулированная задача выглядит, мягко говоря, страшновато (если бы я хотел заниматься такими задачами, я бы таки пошёл на мехмат, а не в гейм-дизайн подался), то единственное, что остаётся — делать систему, _аналогичную_ рейтингу Эло. То есть нам надо составить более лёгкое требование к такой функции, например, вероятности по каждому игроку, что он придёт первым в составе такой группы.
Эту математическую задачу уже можно было бы сесть и решать, если бы я не предполагал, что речь идёт об рейдах ) а рейды — это не система с раздельными дорожками, а командная игра всё-таки. Так что на этот случай задачу необходимо сформулировать следующим образом: какова вероятность того, что команда с указанными рейтингами преодолеет препятствие с указанным рейтингом?
В-общем, здесь уже можно брать бумажку и начинать всё это рассчитывать, но мне уже лень.
А ты, типа, пошел учиться на геймдизайнера вместо мехмата? =) Я пока не встречал «гемдизайнерской» задачи, которая требовала математики уровня выше школьного.
>команда с указанными рейтингами преодолеет препятствие с указанным рейтингом
Ага, свёл все к известной задаче. I See What You Did There!
имхо, ключевая фраза. Итого игроков по прежнему два: препятсвие и комманда его штурмующая :)
А ты, типа, пошел учиться на геймдизайнера вместо мехмата? =) Я пока не встречал «гемдизайнерской» задачи, которая требовала математики уровня выше школьного.
Ну вот составить функцию по первой формулировке — вполне нетривиальная задача. Но поскольку на ММ я так и не пошёл, по поводу того, его ли это уровень, сказать ничего не могу :)
Способ раз (если известен рейтинг игроков): Считается сумма всех рейтингов участников и делится на их количество. Получаем средний рейтинг группы. Затем смотрим на сколько личный рейтинг отличается от среднего и на основе этого считаем вероятность победы.
Формула — (личн/общий)*(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 и придется брать то место, которое он чаще всего занимал, а лучше среднее значение. А дальше как и в способе раз суммируем средние места игроков, вычисляем среднее значение для группы и смотрим вероятность на победу по той же формуле.
Но лучше брать более достоверный параметр, чем места. Скажем экспу игрока, или его очки за ПвП. Ибо один мог всегда биться с самыми сильными и быть последнем, а другой со слабыми и быть первым, а выдача экспы или ПвП очков это обычно учитывает. А если не учитывает, то должна =)
(личн/сред)*(100%/Кол-во участников)
Так зачем тогда рассматривать команду? Начнём с того, что лучший рейтинг бегуна -- это как раз время, за которое он пробегает стометровку. Вот это время и будет его рейтингом. Поскольку он бегает много стометровок, то мы результат будем усреднять, причём новые результаты брать с бОльшим весом, чем предыдущие.
Дальше нужно решить две проблемы. Во-первых, бегун может бегать не только стометровки, но и двухсотметровки, и даже трёхсотметровки. Тут нужно решить -- либо вводить универсальную систему оценки, к которой приводить результат забега, либо же плюнуть, и хранить его рейтинг по каждому инстансу, тьфу ты, каждой дистанции. Второй вариант и проще и правильнее (хотя и заставляет вместо одной писькомерки иметь несколько). Таким образом, для каждой дистанции можно хранить количество забегов данного бегуна на этой дистации и его средне-с-весами время
Ну и вторая проблема -- результат команды на самом-то деле влияет на результат бегуна. То есть не бегуна, а уже рейдера. Понятно ведь, что в плохой команде хороший рейдер будет прогрессировать с гораздо меньшим успехом, а плохого могут успешно протащить хоть и мёртвым грузом в хорошей команде. Соответственно, если средний рейтинг команды сильно отличается от рейтинга игрока, то нужно вводить дополнительный поправочный коэффициент для результата в данном конкретном забеге.
(Кстати, мне тут ещё пришла в голову идея, связанная с инстансами. Почему бы игроку не позволить ходить в любой рейд/героик чаще, чем раз в неделю/день? Ну там потренироваться или помочь друзьям. Рейтинг постараться поднять, опять же. Естественно, идя во второй раз, он уже не имеет никаких прав на лут)
Я вообще не знаю, зачем все рейды принялись рассматривать. =) Изначальная постановка задачи: «есть 10 человек, известно, в каком порядке они победили». Ни про время, ни про рейды ничего не было.
Фейл, как всегда, в задани — рейтин эло, рейтинг бегунов и рейтиг партии показывают совершенно разные вещи.
1. Эло показывает, насколько качественно один игрок «мочит» другого. Тут вся колбасня в том, что они пытаются многомерный «скил игрока» к одномерному объекту свести без комплексных чисел и прикрыться мат. статом., что работает, только пока турниры раз в пол. года и нет возможности этот рейтинг задрочить.
2. Рейтинг бегунов — насколько каждый быстро, собственно, бежит в вакууме. Взаимодействия и многомерности ноль, все примитивно, поэтому он давно успешно заменяется временем.
3. Рейтинг в партии вообще хрен знает что показывает, типо «долю каждого в общем выигреше», что ли? Этим давно и довольно безуспешно занимается теоретический менеджмент. Тут ключевая проблема, что участникам в большинстве случаев гораздо проще не повышать свою долю участия, а понижать долю «противника», так что нормальные практики стараются увлечения такими рейтингами избегать.
В ммо на это стоит забить в особенности, так как там и так поводов для бурления говн достаточно.
Ну и система эта будет в первую очередь, конечно же, нужна для PUGов, особенно кросс-серверных. Ибо оценить игрока до его включения в группу сложно, даже с ачивментами. Тут опять же остаётся проблема с новыми игроками и новыми альтами, но при правильной системе «tierов» pve-контента её можно решить.
В смысле, за него тоже, но это не всегда главное
Если команда ни с кем не соревновалась, то напрашивается очевидный вывод — это не команда (как, действительно, в случае с бегунами). В таком случае очевидно, что пришедший первым выиграл у всех, пришедший последним — проиграл всем. Тогда, если задача звучит «адаптировать Эло-рейтинг под забеги X бегунов», то это задача как разбить забег на пары, к которым применить пересчет рейтинга по известным правилам.
Если это не подходит се… по смыслу, то есть 10 бегунов все же выполняют общую задачу (ну, эстафету бегут там), то задача определить оценку деятельности для каждого игрока хотя бы в виде success/fail. И мест для такой характеристики явно недостаточно.
Рейтинг Эло соревновательный, т.е. никакого командного взаимодействия. На основе него можно расчитать вероятность каждого участника победить (занять первое место). Сам рейтинг увеличивается или уменьшается в зависимости от занятого в итоге места относительно расчитанного. Сама формула расчета простая:
Rnew = Rcurrent — (Pactual — Pplan)*Knorm, где
Rnew — новый рейтинг, Rcurrent — текущий рейтинг, Pactual — занятое место, Plan — планируемое по расчетам место, Knorm — нормировочный коэффициент
Расчет планируемого места уже приводил выше, по формуле (сначала нужно расчитать вероятность победить каждого участника, а затем расставить их по ранжиру — получатся места)
ВерПобеды = (Rcurrent/Rср.группы)/Кол-во участников, где
Rср.группы — средний рейтинг всей группы.
Формулу расчета нового рейтинга можно расширить,чтобы она учитывала не один параметр(занятое место), но и другие:
Rnew = Rcurrent — (Pactual — Pplan)*Knorm — … — (Nparam.actual — Nparam.plan)*Nkoeff,
для каждого параметра N необходимо заранее вычислять планируемое значение(скажем, среднее значение набитых до этого фрагов).
По-моему, вполне работоспособный вариант, и при этом простой =)
Вкратце: есть рейтинг (матожидание силы) и волятилити (дисперсия силы).
Вдлинце: http://www.topcoder.com/wiki/display/tc/Algorithm+Competition+Rating+System
И последнее — Эло не надо писать большими, это фамилия.
08.10