Classement des joueurs utilisant Elo avec plus de deux joueurs

16

Je voudrais utiliser Elo pour suivre le classement des joueurs entre les matchs d'un certain jeu, mais le jeu peut être joué avec jusqu'à quatre joueurs dans un match. J'ai vu des jeux comme Carcassonne utiliser Elo avec plus de deux joueurs, mais je ne connais pas Elo au-delà d'un match 1-1.

De l' article de wikipedia, les équations à deux joueurs que je voudrais étendre sont:

E a = 1 / (1 + 10 (R b - R a ) / 400 )

E b = 1 / (1 + 10 (R a - R b ) / 400 )

R x nouveau = R x ancien + 32 * (W - E x ), où W = 1 si X gagne et W = 0 si X perd.

Comment le calcul pour E x et W changerait-il pour plus de deux joueurs?

fbrereto
la source
Je serais prudent d'utiliser un système de style Elo pour les jeux avec plus de deux joueurs, car de nombreux facteurs peuvent concourir à en faire moins que de purs jeux d'adresse - les joueurs s'associent aux joueurs perçus comme les plus forts, etc. Si vous mélangez les scores des matchs avec différents nombres de joueurs, je suggère fortement de supprimer les pondérations (c'est-à-dire le '32' dans la formule de mise à jour pour R) pour les jeux avec plus de joueurs.
Steven Stadnicki
@StevenStadnicki merci pour la recommandation. Je ne sais pas cependant comment la baisse de la constante de poids résout les problèmes que vous mentionnez. Peux-tu élaborer?
fbrereto
En réduisant le poids des matchs multijoueurs, vous dites intrinsèquement qu'ils ne sont pas aussi importants pour le classement d'un joueur que les matchs à deux joueurs; essentiellement, vous dites qu'ils sont moins représentatifs de la qualité réelle du joueur. Magic fait quelque chose de similaire à cela avec leur structure de tournoi, où différents niveaux de tournoi ont des valeurs K différentes pour représenter le poids à accorder pour déterminer la note d'un joueur.
Steven Stadnicki

Réponses:

10

Comme suggéré par le lien supérieur dans ma recherche Google, vous pouvez calculer les modifications individuelles de la note Elo d'un joueur (vos valeurs R), puis les additionner pour fournir la variation totale à appliquer à la note de chaque joueur.

c'est-à-dire si vous avez 4 joueurs (A, B, C, D), calculez la modification de la note de A (R-sub-a-sub-new) à partir de leurs scores contre B, C et D, puis ajustez la note de A en le total des valeurs R calculées.

fnord
la source
J'ai emprunté cette voie et cela semble bien fonctionner jusqu'à présent, merci.
fbrereto
3
On dirait que voici les formules de cette idée: sradack.blogspot.ru/2008/06/…
dbf
1

J'ai trouvé un article avec le code source PHP d'une méthode similaire à la réponse de fnord ici: http://elo-norsak.rhcloud.com/3.php J'ai créé une implémentation php plus générale ici: https://github.com/ FigBug / Multiplayer-ELO Je l'utilise avec mon groupe de jeux de société, et jusqu'à présent il semble bien fonctionner.

Le calcul de Ex et W resterait le même. Au lieu d'utiliser un K de 32, utilisez un K de 32 / (#players - 1). Ensuite, regardez chaque permutation de 2 joueurs et calculez (32 / (#players - 1) * (W - Ex)). Alors RxNew est égal à RxOld + Sum de toutes les valeurs que vous venez de calculer.

FigBug
la source
2
Il est généralement recommandé d'inclure un résumé de votre méthode / recommandation dans le corps d'une réponse, plutôt que de vous fier entièrement à des liens externes. Les liens ont l'habitude de se rompre au fil du temps, ce qui peut laisser votre réponse manquer de détails cruciaux lorsque quelqu'un essaie de le rechercher dans des années.
DMGregory
Merci pour votre code pratique, c'est utile! Juste une suggestion à votre réalisation - il vaut peut-être mieux ne pas arrondir les résultats intermédiaires, eloChange += round($K * ($S - $EA));mais arrondir uniquement après tous les calculs lors du réglageeloPost
FlameStorm
-1

J'ai récemment écrit ce post sur le sujet. J'espère que ça aide. Je vais bientôt ajouter également le code dans un autre article.

Voici un aperçu de ce que cela implique:

Une décision que vous devez prendre est de savoir si vous avez une sorte de sous-match ou non. Par exemple: dans le baby-foot, vous verrez que dans un match 2 contre 2, il y a toujours deux joueurs face à face directement et deux indirectement. Cela signifie: les deux défenseurs n'interagissent jamais vraiment, ce ne sont que les paires attaquant-défenseur. L'alternative est un scénario comme Dota qui est en 5v5 et il n'y a pas de véritables correspondances 1v1 individuelles et prévisibles dans le cadre de la vraie correspondance.

Premier cas: pas de structure de sous-correspondance:

Dans ce cas, vous pouvez simplement faire la moyenne de la note de tous les joueurs impliqués et l'utiliser comme note d'équipe pour cette équipe. Donc, pour R_a et R_b, vous utiliseriez simplement la somme des notes de tous les joueurs de cette équipe, divisée par le nombre de joueurs. Une fois que vous avez calculé la mise à jour pour l'équipe, vous mettez à jour chaque note des membres de l'équipe avec la mise à jour.

Deuxième cas: sous-matchs:

Dans ce cas, vous vous divisez en sous-matchs et les pesez les uns contre les autres. Vous calculez donc E_a et E_b pour chaque paire, puis les pesez. Par exemple: Pour 5v5 avec une sous-structure 1v1, vous calculez les 5 valeurs E_a pour les 5 paires. Ensuite, vous calculez un terme pondéré pour chaque joueur en fonction du sous-match dont il fait partie. Donc, si le joueur 1 fait partie du sous-match 1, vous calculez quelque chose comme 0,6 * E_a1 + 0,1 * E_a2 + 0,1 * E_a3 + 0,1 * E_a4 + 0,1 * E_a5 (où E_a1 est E_a pour la sous-correspondance dans laquelle le joueur est impliqué).

Les paramètres ici peuvent être librement choisis, mais vous pouvez les optimiser une fois que vous avez quelques données. Essayez de trouver un système de pondération pour lequel les notes des joueurs ne fluctuent pas autant. Cela peut être fait automatiquement en calculant la variance des valeurs, puis en minimisant celle-ci pour un ensemble donné de résultats de correspondance en adaptant les poids. J'espère que ceci est utile.

Pascal Kraft
la source