Рейтинг игрока для игры со случайными командами

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

Есть ряд проблем, которые я хочу принять во внимание:

  • Новые игроки нуждаются в каком-то предварительном рейтинге, чтобы достичь своего "реального" рейтинга, прежде чем их рейтинг будет таким же, как у опытных игроков.
  • Система должна учитывать, что команда может состоять из сочетания уровней навыков игрока - например. один действительно хороший, один хороший, два посредственных, и один действительно бедный. Поэтому простой "средний" рейтинг игроков, вероятно, не будет достаточным, и его, вероятно, нужно каким-то образом учесть.
  • Рейтинги корректируются после каждой игры, поэтому алгоритм должен основываться на каждой игре, а не на "период рейтинга". Это может измениться, если появится хорошее решение (я знаю, что Glicko использует рейтинговый период).

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

Я просмотрел TrueSkill, Glicko и ELO (это то, что мы сейчас используем). Мне нравится идея TrueSkill/Glicko, где у вас есть отклонение, которое используется для определения того, насколько точна оценка, но ни один из алгоритмов не учитывает случайные команды и, по-видимому, в основном основан на играх 1v1 или FFA.

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

Любые предложения приветствуются!

EDIT: Я ищу алгоритм для установленных игроков + способ ранжировать новичков, а не два вместе взятых. Извините за путаницу.

Нет AI, и игроки играют друг с другом. Игры определяются победой/потерей (нет ничьей).

Ответ 1

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

Я думаю, что вы должны использовать средний рейтинг всех игроков в противостоящей команде как вклад для установления временного рейтинга начинающего игрока, но обрабатывайте его как одну игру, а не как N-игры против N игроков. Каждая игра - это всего лишь один образец данных, и система Elo обрабатывает накопление этих игр, чтобы улучшить оценку ранжирования для отдельного игрока в течение времени, прежде чем переключиться на обычную систему ранжирования.

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

Ответ 2

Во-первых: Очень маловероятно, что вы найдете идеальную систему. Каждая система будет иметь недостаток.

И чтобы ответить на ваш вопрос: Возможно, идеи здесь помогут: Рейтинг Lehman на OkBridge.

Эта рейтинговая система используется (с 1993 года!) на сайте интернет-моста под названием OKBridge. Мост - партнерская игра, которую обычно играют с командой из 2 против другой команды из 2. Система рейтинга была разработана, чтобы оценивать отдельных игроков и удовлетворять тот факт, что многие люди играют с разными партнерами.

Ответ 3

Без какого-либо фона в этой области мне кажется, что системы ранжирования в основном представляют собой статистическую модель. Хорошая модель будет сходиться к последовательному ранжированию с течением времени, и целью было бы сближение как можно быстрее. Мне приходят несколько мыслей, некоторые из которых были затронуты в других сообщениях:

  • Очевидно, что у установленных игроков есть послужной список, а новые игроки этого не делают. Таким образом, неопределенность, вероятно, больше для новых игроков, хотя для непоследовательных игроков это может быть очень высоким. Кроме того, это, вероятно, зависит от того, использует ли игра в первую очередь врожденные навыки или приобретенные навыки. Я бы подумал, что вам нужен параметр "дисперсия" для каждого игрока. Разница может состоять из двух частей: истинного отклонения и "температуры". Температура похожа на моделируемый отжиг, где у вас есть температура, которая охлаждается со временем. Предположительно, температура остынет до нуля после того, как будет проведено достаточно игр.
  • Есть ли несколько аспектов, которые входят в игру? Как в футболе, у вас могут быть хорошие стрелки, хорошие прохожие, парни, у которых хороший контроль мяча и т.д. В принципе, это были бы степени свободы в вашей системе (в моей аналогии с футболом они могут быть или не быть действительно независимыми). Похоже, что точная модель учитывала бы их, конечно, у вас могла бы быть модель черного ящика, которая неявно обрабатывает их. Тем не менее, я бы ожидал, что понимание количества степеней свободы в вашей системе было бы полезно при выборе черного ящика.
  • Как вы делите команды? Ваш алгоритм объединения подразумевает модель того, что делает равные команды. Возможно, вы можете использовать эту модель для создания взвешивания для каждого игрока и/или ожидаемого уровня производительности. Если есть разные аспекты навыков игрока, возможно, вы могли бы дать дополнительные очки для игроков, чья производительность в одном аспекте значительно лучше, чем ожидалось.
  • Действительно ли игра побеждает или проигрывает, или может быть сыграна разница в счете? Поскольку вы не сказали никаких связей, это, вероятно, не применяется, но, по крайней мере, близкий счет может означать более высокую неопределенность в результатах.
  • Если вы создаете модель с нуля, я бы разработал ее с намерением изменить. Как минимум, я бы ожидал, что может быть несколько параметров, которые можно было бы перестраивать, и может даже быть автоматической настройкой. Например, поскольку у вас больше игроков и больше игр, начальная температура и начальные оценки будут лучше известны (при условии, что вы отслеживаете статистику). Но я бы наверняка ожидал, что чем больше игр будет сыграно, тем лучше будет модель, которую вы могли бы построить.

Просто куча случайных мыслей, но это звучит забавно.

Ответ 4

В журнале Game Developer Magazine появилась статья несколько лет назад некоторыми парнями из команды TrueSkill в Microsoft, объясняя некоторые из их аргументов в отношении решений там. Он определенно упомянул командные игры для Xbox Live, поэтому он должен быть хотя бы несколько значимым. У меня нет прямой ссылки на статью, но вы можете заказать обратную проблему здесь: http://www.gdmag.com/archive/oct06.htm

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

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

Надеюсь, что это поможет...

Ответ 5

Если вы заинтересованы в использовании (больше, чем в разработке), вы должны попробовать rankade, нашу систему ранжирования,

Напротив Elo и Glicko (здесь comparison), rankade может управлять любым типом соответствия (один на один, фракция против фракции (две команды, которые могут быть асимметричными), многопользовательские, многофракционные, совлокальные игры, однопользовательские игры и т.д.), поэтому вы можете вставить одно совпадение (без разбивки одного фактического совпадения в нескольких поддельных матчах).

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

Мы принимаем множество спортивных групп/клубов, основанных на случайных командах, здесь dojo.

Ответ 6

как "забил"?

если команда набрат всего 25 очков (десятки всех игроков в команде), вы можете разделить счет игроков на общую сумму команды * 100, чтобы получить процент от того, сколько игрок сделал для команды (или всего очки с обеими командами).

Вы можете рассчитать счет с этими данными, и если процент меньше, чем 90% членов команды (или членов обеих команд): относиться к игроку как к новичку и вычислять счет с другим весовым коэффициентом.

иногда более легкая концепция работает лучше.

Ответ 7

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

Ответ 8

Каждый раз, когда 10 игроков хотят играть, они делятся на две (несколько) даже команды и играть друг с другом.

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