Il s'agit d'un package contenant des implémentations de plusieurs systèmes de notation pour les compétitions multi-joueurs : Glicko toutes paires, BAR BT-toutes paires, Codeforces, Topcoder, TrueSkill-SPb et le nouveau système Elo-MMR. Le tout sous licence MIT à l'exception du contenu de deprecated/cpp/trueskill.
Les systèmes de notation évaluent les compétences des joueurs qui participent à une activité commune. L'algorithme Elo-MMR a été conçu pour les activités dans lesquelles un nombre modéré à important de joueurs sont classés lors d'événements compétitifs, et les résultats ne peuvent pas être standardisés entre différents événements pour l'une des raisons suivantes :
Chaque événement propose de nouveaux défis, comme des courses d'obstacles, de l'escalade et des olympiades académiques.
Les concurrents sont évalués par rapport aux autres lors du même événement, peut-être par un panel de juges avec un certain degré de subjectivité, comme dans les compétitions de salle de bal, de patinage artistique et de gymnastique.
Les participants interagissent fortement avec les autres lors du même événement, comme dans la plupart des jeux de société.
Dans ces contextes, il est souvent utile de quantifier la qualité d’un joueur. Les notes pourraient être utilisées pour suivre les progrès d'un joueur au cours d'un programme d'entraînement, définir des objectifs de motivation, prédire les champions potentiels ou créer des événements sur invitation réservés aux débutants ou aux experts. Trois propriétés d’Elo-MMR le rendent particulièrement adapté à ces objectifs :
Massivement multijoueur : l'algorithme est rapide et numériquement stable, même avec des milliers ou des millions de participants classés individuellement.
Compatible avec les incentives : plus vous réussissez dans les compétitions, plus votre note sera élevée.
Réponse robuste : un événement très mauvais (ou très bon) ne peut pas trop changer votre note.
Remarque : en théorie, Elo-MMR peut également être appliqué dans les compétitions par équipes, mais des recherches supplémentaires sont nécessaires pour déterminer les meilleures façons d'y parvenir.
Tout d’abord, installez Rust. Depuis le répertoire multi-skill/
, exécutez la commande
RUST_LOG=debug cargo run --release --bin rate mmr-fast codeforces
MISE À JOUR : il est désormais également possible d'exécuter le système de notation à partir d'un fichier de configuration. Voici un exemple : (ce fichier de configuration est obsolète, nous le mettrons à jour sous peu.)
RUST_LOG=debug cargo run --release --bin rate file: ../experiments/codeforces/mmr-fast-acc.json
Pour tester la nouvelle fonctionnalité de points de contrôle, essayez
RUST_LOG=debug cargo run --release --bin rate_from_configs ../experiments/testing/mmr-cf-1to10.json ../experiments/testing/mmr-cf-11to20.json
qui produit des fichiers de point de contrôle d'état dans le répertoire experiments/testing/
.
RUST_LOG=debug
définit une variable d'environnement pour imprimer des informations supplémentaires sur le terminal pendant l'exécution. Notez que les variables d'environnement sont définies différemment sous Windows.
cargo run
compile et exécute un projet Rust.
--release
crée une version de version, qui prend plus de temps à compiler mais s'exécute plus rapidement qu'une version de développement.
--bin rate
sélectionne le point d'entrée multi-skill/src/bin/rate.rs
.
mmr-fast
est un argument de ligne de commande spécifiant le système de notation. Essayez mmr
pour une version plus lente mais plus précise d'Elo-MMR.
codeforces
est un argument de ligne de commande spécifiant l'ensemble de données.
Un argument entier facultatif peut suivre, pour spécifier le nombre de concours à traiter.
Il extrait les données des concours Codeforces spécifiés dans data/codeforces/contest_ids.json
. Si un concours n'est pas déjà stocké dans cache/codeforces/
, alors il y est téléchargé via l'API en ligne Codeforces. Enfin, les évaluations de compétences résultantes de tous les candidats sont enregistrées dans data/codeforces/ratings_output.csv
.
Veuillez noter que votre première exécution de Codeforces sera plus lente, car les classements du concours sont extraits de l'API Codeforces. Il peut même échouer si Codeforces.com subit un temps d'arrêt ou décide que vous avez utilisé trop de bande passante ; si cela se produit, veuillez attendre quelques minutes pour réessayer.
Les concours sont stockés au format JSON, avec les classements classés de la première à la dernière place. Voici un exemple de fichier de concours, où les crochets et les points de suspension doivent être remplacés par vos propres données :
{
"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>
}
Les classements bas et haut sont indexés sur 0 et seront différents pour les joueurs impliqués dans une égalité. Ils précisent l'éventail de joueurs avec lesquels ce joueur est à égalité. Par exemple, s’il y a égalité à trois en haut, les joueurs 0, 1 et 2 auront chacun un rang bas de 0 et un rang élevé de 2.
Si vous avez exécuté la commande Codeforces ci-dessus pendant au moins quelques secondes, vous aurez alors téléchargé quelques exemples de fichiers de concours dans cache/codeforces/
, que vous pourrez utiliser comme référence.
En gardant ce format de fichier à l'esprit, vous pouvez organiser vos propres concours comme suit :
Numérotez vos fichiers avec des entiers consécutifs, le premier concours étant sauvegardé dans 0.json
, le second dans 1.json
, et ainsi de suite.
Placez vos fichiers dans cache/{dataset_name}/
.
Enfin, exécutez la même commande, mais avec codeforces
remplacé par {dataset_name}
.
Veuillez consulter l'article complet publié lors de la Web Conference 2021. Si vous utilisez cette caisse dans vos recherches, veuillez envisager de citer notre article.