Это пакет, содержащий реализации нескольких рейтинговых систем для многопользовательских соревнований: Glicko all-pairs, BAR BT-all-pairs, Codeforces, Topcoder, TrueSkill-SPb и новую систему Elo-MMR. Все по лицензии MIT, за исключением содержимого deprecated/cpp/trueskill.
Рейтинговые системы оценивают навыки игроков, участвующих в общей деятельности. Алгоритм Elo-MMR был разработан для действий, в которых в соревновательных соревнованиях ранжируется умеренное или большое количество игроков, а результаты не могут быть стандартизированы для разных соревнований по любой из следующих причин:
Каждое мероприятие включает в себя новые задачи, такие как гонки с препятствиями, скалолазание и академические олимпиады.
Участники оцениваются относительно других на одном и том же мероприятии, возможно, судейской коллегией с некоторой степенью субъективности, как в соревнованиях по бальным танцам, фигурному катанию и гимнастике.
Участники активно взаимодействуют с другими на одном мероприятии, как и в большинстве настольных игр.
В таких условиях часто бывает полезно количественно оценить, насколько хорош игрок. Рейтинги можно использовать для отслеживания прогресса игрока в программе тренировок, постановки мотивационных целей, прогнозирования вероятных чемпионов или создания пригласительных мероприятий только для новичков или только для экспертов. Три свойства Elo-MMR делают его особенно подходящим для этих целей:
Массовая многопользовательская игра: алгоритм быстр и численно стабилен, даже с тысячами или миллионами участников с индивидуальным рейтингом.
Совместимость со стимулами: чем лучше вы участвуете в соревнованиях, тем выше будет ваш рейтинг.
Надежный ответ: одно очень плохое (или очень хорошее) событие не может сильно изменить ваш рейтинг.
Примечание: теоретически Эло-MMR можно применять и в командных соревнованиях, но необходимы дополнительные исследования, чтобы определить наилучшие способы сделать это.
Сначала установите Rust. В каталоге multi-skill/
выполните команду
RUST_LOG=debug cargo run --release --bin rate mmr-fast codeforces
ОБНОВЛЕНИЕ: теперь также можно запустить систему рейтингов из файла конфигурации. Вот пример: (этот файл конфигурации устарел, мы обновим его в ближайшее время.)
RUST_LOG=debug cargo run --release --bin rate file: ../experiments/codeforces/mmr-fast-acc.json
Чтобы протестировать новую функцию контрольных точек, попробуйте
RUST_LOG=debug cargo run --release --bin rate_from_configs ../experiments/testing/mmr-cf-1to10.json ../experiments/testing/mmr-cf-11to20.json
который создает файлы контрольных точек состояния в каталоге experiments/testing/
.
RUST_LOG=debug
устанавливает переменную среды для вывода дополнительной информации на терминал во время выполнения. Обратите внимание, что переменные среды в Windows устанавливаются по-разному.
cargo run
компилирует и запускает проект Rust.
--release
создает сборку выпуска, компиляция которой занимает больше времени, но выполняется быстрее, чем сборка для разработки.
--bin rate
выбирает точку входа multi-skill/src/bin/rate.rs
.
mmr-fast
— это аргумент командной строки, определяющий систему рейтингов. Попробуйте mmr
для более медленной, но более точной версии Elo-MMR.
codeforces
— это аргумент командной строки, определяющий набор данных.
За ним может следовать необязательный целочисленный аргумент, указывающий, сколько конкурсов нужно обработать.
Он извлекает данные из конкурсов Codeforces, указанных в data/codeforces/contest_ids.json
. Если конкурс еще не сохранен в cache/codeforces/
, он загружается туда через онлайн-API Codeforces. Наконец, полученные рейтинги навыков всех участников сохраняются в data/codeforces/ratings_output.csv
.
Обратите внимание, что ваш первый запуск Codeforces будет медленнее, поскольку результаты конкурса берутся из API Codeforces. Он может даже выйти из строя, если Codeforces.com выйдет из строя или решит, что вы использовали слишком большую пропускную способность; Если это произойдет, подождите несколько минут и повторите попытку.
Соревнования сохраняются в формате JSON, турнирная таблица указана в порядке от первого до последнего места. Вот пример файла конкурса, в котором угловые скобки и многоточия следует заменить вашими собственными данными:
{
"name": <str, human-readable name of the contest>,
"time_seconds": <int, seconds since the Unix epoch>,
"standings": [[<str, player 0's name>, <int, low rank>, <int, high rank>],
[<str, player 1's name>, <int, low rank>, <int, high rank>],
...]]
"weight": <optional float, defaults to 1 if not included>,
"perf_ceiling": <optional float, defaults to infinity if not included>
}
Низкий и высокий ранги имеют индекс 0 и будут различаться для игроков, участвующих в ничьей. Они указывают круг игроков, с которыми этот игрок сыграл вничью. Например, если наверху есть ничья из трех игроков, каждый из игроков 0, 1 и 2 будет иметь низкий ранг 0 и высокий ранг 2.
Если вы запускали указанную выше команду Codeforces хотя бы несколько секунд, вы загрузили несколько примеров конкурсных файлов в cache/codeforces/
, которые вы можете использовать в качестве ссылки.
Имея в виду этот формат файла, вы можете проводить свои собственные конкурсы следующим образом:
Пронумеруйте свои файлы последовательными целыми числами, первый конкурс сохраняется в 0.json
, второй в 1.json
и так далее.
Поместите файлы в cache/{dataset_name}/
.
Наконец, запустите ту же команду, но с заменой codeforces
на {dataset_name}
.
Пожалуйста, ознакомьтесь с полным текстом статьи, опубликованной на Веб-конференции 2021. Если вы используете этот ящик в своих исследованиях, рассмотрите возможность цитирования нашей статьи.