Système de classement

Salut les horloges qui font Tric Trac !
Aujourd'hui, je vais bien vous faire des nœuds dans la tête avec ma requête.
Avec un groupe d'amis, comme beaucoup d'entre vous, on se fait souvent des soirées jeux. On gagne, on perd, on rigole bien. Mais récemment, on a eu envie de comparer nos kikis, pour voir. Alors bien sûr, on a pas baissé nos pantalons, non, on a décidé de se faire un tableau des scores pour toutes nos parties futures.
Le truc, c'est qu'on joue à plein de jeux différent, avec des scores différent en fin de partie (variant beaucoup d'un jeu à l'autre). En plus de quoi, nous ne sommes pas toujours les mêmes joueurs.
Tout cela m'ammène à une chose : existe-t-il un programme, tableau Excel ou autre pour créer ce système de classement qui intégrera de nombreux critères pour faire les choses bien.
- Classer les joueurs qui ont le plus gros scores.
- Pondérer les scores selon le jeu joué.
- Prendre en compte la durée des jeux (un Citadelle rapportera moins de point au classement qu'un Diplomatie).
- Prendre en compte le nombre de partie joué par les joueurs afin de ne pas pénaliser ceux qui jouent peu.
- Faire des classements pour chaque jeux indépendamment en plus d'un classement général.[/list]
Il y a certainement d'autres idées à explorer. C'est une liste de souhait mais si un outil permet de faire le minimum (à savoir : faire un classement basique).
Et vous, comment vous faites ? Loin de moi la volonté d'ajouter de la compétition à nos soirées jeux, c'est juste pour un ami qui a besoin de savoir que je suis le meilleur.
Voilà voilà, merci !

bah, j'ai une solution un peu lourde... :pouicboulet:
tu rentres toutes tes données sur Excel de façon ordonnées, tu choisis tes coefficients, tu fais un TCD... et hop!!
j'en ai plein pour mes données du taff!! :roll:
mais ya surement plus simple :china:

J'ai déjà essayé, j'ai fait intervenir des techniques d'IA et tout, et au final ça n'a pas marché. Trop de jeux différents, trop de premières parties dont l'issue est souvent un peu aléatoire, voire trop d'aléatoire dans les jeux eux-mêmes. En plus, sur les jeux interactifs, ça induisait une espèce de meta-game pas vraiment souhaitée (genre « je te bloque toi parce que tu es premier au classement »).
Sinon dans l'absolu, ce qui fonctionne le mieux c'est encore le système ELO, qu'il faut généraliser pour les jeux à n joueurs. Le plus simple c'est de considérer que le premier au classement d'un jeu a battu tous les autres, et on peut aussi ajouter que le deuxième joueur a battu les suivants, etc. Ça marche mieux si on fait un classement ELO par jeu, sinon on peut s'amuser à ajouter des coefficients suivant la durée du jeu, la part de hasard, le nombre de parties jouées, l'écart de score, etc.

Un autre algorithme intéressant est le TrueSkill, on trouve pas mal de références sur le Net mais c'est assez compliqué (j'ai bloqué sur les factor graphs :$). On trouve des implémentations toutes faites ceci dit, il y a peut-être matière à creuser, je n'ai pas eu l'occasion d'essayer.

La méthode la plus répandue c'est le classement ELO, notamment utilisé pour les joueurs d'échecs.
Edit : grillé par skand1sk

micha dit:bah, j'ai une solution un peu lourde... :pouicboulet:
tu rentres toutes tes données sur Excel de façon ordonnées, tu choisis tes coefficients, tu fais un TCD... et hop!!
j'en ai plein pour mes données du taff!! :roll:
mais ya surement plus simple :china:

Oui, c'est effectivement la première idée qui m'est venu en tête. Puis quand je suis rentré dans les détails, je me suis rendu compte que j'étais complètement dépassé pour faire un tableau Excel bien construis. Je profitais aussi de ce topic pour demander si quelqu'un avait déjà fait ce type de tableau et s'il souhaitais le partager. :)
scand1sk dit:J'ai déjà essayé, j'ai fait intervenir des techniques d'IA et tout, et au final ça n'a pas marché. Trop de jeux différents, trop de premières parties dont l'issue est souvent un peu aléatoire, voire trop d'aléatoire dans les jeux eux-mêmes. En plus, sur les jeux interactifs, ça induisait une espèce de meta-game pas vraiment souhaitée (genre « je te bloque toi parce que tu es premier au classement »).

Arg, ça me refroidis tout d'un coup si tu as poussé la recherche jusqu'à des techniques mathématiques spécifiques et que ça n'a pas été fructueux. Et c'est vrai que pour la question du jeu dans le jeu avec cet nouvel notion de classement, ça peut apporter du mauvais à l'ambiance de nos soirées. Je te l'accorde.
scand1sk dit:Sinon dans l'absolu, ce qui fonctionne le mieux c'est encore le système ELO, qu'il faut généraliser pour les jeux à n joueurs. Le plus simple c'est de considérer que le premier au classement d'un jeu a battu tous les autres, et on peut aussi ajouter que le deuxième joueur a battu les suivants, etc. Ça marche mieux si on fait un classement ELO par jeu, sinon on peut s'amuser à ajouter des coefficients suivant la durée du jeu, la part de hasard, le nombre de parties jouées, l'écart de score, etc.

Je ne connaissais pas du tout le système ELO, je vais de suite y jeter un œil suivant vos deux recommandations. Merci scand1sk et Kerquist. Si vous avez des exemples (tableaux, programmes) qui s'appliquent aux jeux de société, ça m'intéresse évidemment !
scand1sk dit:Un autre algorithme intéressant est le TrueSkill, on trouve pas mal de références sur le Net mais c'est assez compliqué (j'ai bloqué sur les factor graphs :$). On trouve des implémentations toutes faites ceci dit, il y a peut-être matière à creuser, je n'ai pas eu l'occasion d'essayer.

Là, je crois que si je tape ça sur Google, je vais perdre tout mes repères avec la réalité. Ça me fait ça quand j'aborde trop de notions mathématiques d'un coup. :P
Je suis preneur pour tout autres suggestions ! Encore merci à tous !

Le système ELO est relativement simple. Chaque joueur a un score, généralement de 1000 en moyenne. Un joueur qui n'a jamais joué peut être initialisé à 1000. À l'issue de chaque partie, le gagnant voit son score augmenter et le perdant diminuer. L'idée est qu'un joueur bien classé va gagner peu de points à vaincre un joueur mal classé, et vice versa. L'objectif est que la différence entre les scores de deux joueurs traduise la probabilité de victoire du meilleur joueur selon une loi statistique logistique.
TrueSkill va un peu plus loin en ajoutant une notion d'incertitude au score de chaque joueur, ce qui fait intervenir des réseaux Bayésiens. Bref, revenons à Elo.
Soit A le score ELO du premier joueur avant la partie, B le score du deuxième joueur. Le résultat d'une partie est compris entre 0 et 1 : 1 = victoire, 0 = défaite, 0,5 = match nul. Le résultat attendu pour le joueur A se calcule par la formule :
EA = 1 / (1 + 10^((B-A)/400))
(Idem pour le joueur B en inversant A et B)
Suite à cette partie, on a constaté un résultat réel (0, 0,5 ou 1) que l'on note SA. On met alors à jour le score A' du joueur :
A' = A + K × (SA - EA)
K est un coefficient que l'on peut personnaliser comme on veut. Au échecs, on utilise généralement K = 32. On peut le diminuer pour un "petit jeu" et l'augmenter pour un "gros jeu".
Un petit exemple, un joueur au rating de 1500 bat un joueur au rating de 1000 :
On a donc A = 1500, B = 1000, SA = 1, SB = 0.
EA = 0,947 (proche de 1, donc une victoire très probable)
EB = 0,053 (proche de 0, donc une défaite très probable)
Les nouveaux scores avec K = 32 :
A' = 1502
B' = 998.
À l'inverse, si B gagne (SA = 0, SB = 1), les nouveaux scores seront
A' = 1470
B' = 1030

Ce qui est drôle, c'est que ce genre de topic fleurit régulièrement sur le forum.
ça rassure, ça veut dire qu'on est un certain nombre de malades à être tenté par la chose :lol:
Pour répondre : j'ai mis en place un système ELO multijoueurs multijeux. ça marchotte, sans plus, notamment compte tenu des réserves émises fort justement (comme d'habitude) par scand1sk.
Deux soucis "techniques" de cette méthode :
- elle donne un poids de facto plus important aux jeux avec beaucoup de joueurs
- la différenciation "objective" des pondérations entre les jeux n'est pas évidente (partant du principe qu'une victoire à 6 nimmt ne doit pas avoir la même valeur qu'une victoire à Antiquity)
Quand je dis que ça marchotte, c'est que le #1 du classement à l'époque où je l'ai arrêté était objectivement le meilleur d'entre nous. Pour le reste, c'est un peu flou et très circonstanciel.
Si cela t'intéresse, on peut échanger par MP

on gère avec un excel un classement ELO simplifié où tout le monde débute à 100 et met en jeu 10% max de ses points à chaque partie. (formule à la fin) . On l'applique sur un groupe de 5-6 personnes et les personnes gravitant autour (famille, amis de passages).
- un coefficient sur chaque jeu est appliqué (dépend des critères poids et temps de BGG)
=> Ex : un "Gros jeu" comme TTA fera mettre en jeu à tout le monde 10% des points et un petit Dominion 4% des points.
- pour les première partie, on applique un coef supplémentaire de 50% si personne n'y a joué ou de 33,33% si au moins 1 joueur ne connait pas le jeu.
=> Ex : si un joueur ne connait pas TTA lors d'une partie, tout le monde met en jeu 3,33% des points
- on compte toutes les parties "valides". Ne sont pas valides :
-- les parties à 2 (c'est un choix)
-- les parties ou au moins 2 membres cores (ceux qui se réunissent le plus souvent) ont participé => cela evite les abus, genre je joue avec ma femme et mon fils et je me fait un max de points .
On peut qualifier la variance comme élevée mais globalement c'est un système pour donner un tout petit peu de piment dans les parties, créer un peu de meta-game.
Attention, ces histoires de classement doivent être pris avec beaucoup de decontractitude pour éviter la mauvaise ambiance.

le détail de la formule est chaque joueur participant à une partie est
TotalPoints*(1 - coefJeux*10%) + TotalPointsEnJeu * (NbJoueur - PositionPartie)/NbJoueur

En effet :déja discuté dans un topic lançé par Pingouin si je ne m'abuse. Depuis la dernière fois, on a ajouté les premières parties qu'on ne comptait pas avant.
Ce qu'il y a de bien avec ce système c'est qu'il traduit toujours le joueur le plus en forme et pas forcément le meilleur de tous les temps etc , ce qui est l'effet recherché

fbdog dit:cela evite les abus, genre je joue avec ma femme et mon fils et je me fait un max de points .

mortel !
je n'avais pas pensé à ça :lol:

pingouin dit:
fbdog dit:cela evite les abus, genre je joue avec ma femme et mon fils et je me fait un max de points .

mortel !
je n'avais pas pensé à ça :lol:

un joueur y a pensé pour nous ;)
le plus drôle est qu'il reportait toutes les parties qu'il gagnait mais ommettait les quelques unes qu'il perdait ;)

Ouah, c'est gentil de vous investir autant dans cette problématique. Et désolé si ce topic est récurrent, mais malheureusement la fonction recherche du forum Tric Trac n'existe plus et le contenu de forum n'est pas référencé par Google. D'habitude, c'est la première chose que je fais avant de poser une question. ;)
Alors, scand1sk, tes explications sont très clair et je t'en remercie. Je peux commencer à essayer à concocter quelque chose. Le petit écart sur TrueSkill est intriguant, j'ai même cru à un moment que tu parlais une autre langue, Bayésiens ? Parce que je suis curieux, ça me donne envie d'en savoir plus. :P
Pour ceux que ça peut intéresser, en fouillant, j'avais aussi trouvé cette page qui expliquait assez bien le fonctionnement et la formule pour une association de jeux : http://clan-myrmidon.clicforum.fr/t63-L ... nt-ELO.htm. Mais les explications de scand1sk sont plus précises.
Par contre, je n'arrive pas à trouver une application de cette méthode quand il y a plus de deux joueurs. Est-ce possible ? Comment ?
La contribution de fbdog apporte plein de nouvelle idées, c'est génial mais la mise en place semble tout de suite plus complexe (prendre en compte les particularités de chaque jeu). J'ai cru comprendre que tu avais mis en place ce système : c'est simple à gérer au quotidien ?
Merci merci !

c'est pas trop compliqué, mais il faut connaitre un peu excel.
En gros, il y a une feuille excel avec tous les jeux joués et leur coefficient (un pourcentage calculé )
Puis une feuille excel, avec toutes les parties :
=> à chaque nouvelle partie, on ajoute la référence au jeu, la position de chaque joueur à l'issue de la partie => le score et le nouveau classement est calculé automatiquement.

Le problème de ne pas coefficienter les jeux est que tu va avoir vite des déséquilibres et un désintérêt pour le classement. En gros, cela signifierait que l'effort est le même de gagner une partie de 7W de 30-40 minutes et un jeu de gestion de 2 heures.
De toute façon, démarre au plus simple et ajoute les contraintes au fur et à mesure.
Au début, nous c’était plusieurs leagues par type de jeu (jeux de gestion, jeux de cartes)
puis une seule league
puis les coef des jeux
puis le cap des "joueurs cores" pour valider une partie
et plus recemment les premières parties qui comptent tout de suite mais avec un plus faible coef
Bien programmé dans excel (ou php etc), çela fonctionne tout seul.

après c'est sympa en fin d'années on a des stats, sur les jeux sur lesquels chacun a été le plus performant, le nombre parties jouées, gagnées.

ToneLune dit:
Par contre, je n'arrive pas à trouver une application de cette méthode quand il y a plus de deux joueurs. Est-ce possible ? Comment ?

J'ai mis ça en place pour notre jeu online Comtes&Conquêtes :
http://www.comtes-et-conquetes.fr
en étant identifié sur le jeu on a accès au classement :
http://www.comtes-et-conquetes.fr/prive ... classement
En gros il faut classer les joueurs dans la partie, et ensuite considérer chaque "duel" :
si un joueur A est mieux classé qu'un joueur B, il l'a battu, sinon c'est le contraire.
Pour chaque joueur, on fait donc un calcul de gain/perte contre chaque adversaire, et son gain total de la partie est la somme de ces gains individuels.
On peut ajuster en faisant un ratio selon le nombre de joueurs (et donc de duels) pour arriver à un gain moyen identique quel que soit le nombre de joueurs.

:idea:
Hum, mais du coup ça veut dire que des fois vous jouez la deuxième place dans un jeu? Ca dénature pas un peu les jeux ça?
Faut jouer pour la première place jusqu'au bout théoriquement, non? Est-ce qu'il y a une espèce d'"éthique" qui régule ça?

viking dit::idea:
Hum, mais du coup ça veut dire que des fois vous jouez la deuxième place dans un jeu? Ca dénature pas un peu les jeux ça?
Faut jouer pour la première place jusqu'au bout théoriquement, non? Est-ce qu'il y a une espèce d'"éthique" qui régule ça?

c'est un très bon débat et j'étais un Nazi de cette philosophie avant d'épouser ce classement.
Ma vision a un peu évoluée depuis pour plusieurs raisons :
- Force est de constater que beaucoup de joueurs vont s’enorgueillir d'une seconde place selon le contexte
- les jeux de gestion / kubenboa encouragent un classement via des points de victoires et des critères pour départager les égalités
- parfois la victoire semble parfois pliée avant la fin. Que faire alors ? arrêter de jouer ou essayer de jouer au mieux jusqu'à la fin et de grappiller une place ou deux.
Ne nous trompons pas: être premier rapporte le gros du pactole. Etre second quelques miettes. Pour être au top du classement, il faut quand même gagner souvent. Pour rester au top, il faut continuer à gagner et alterner avec des secondes places.
Du coup, j'ai pris plus de recul. Je joue donc pour optimiser ma performance avec pour objectif premier : gagner sinon finir bien classé.
(attention, je joue surtout pour passer un super moment avec mes potes et pour déconnecter)
Un autre problème : la prise de risque. Les parties notées vont favoriser les stratégies classiques.
Dans la pratique, je trouve que cela ne change rien ou vraiment pas grand chose. On tente des stratégies, car on les soupçonne gagnantes et que bien souvent la clé se trouve dans le contre-courant du jeu des autres. A chacun de jouer selon ses envies.
Et puis, comme je le disais, il faut relativiser le classement. Il est la pour un peu plus de fun, pour durcir la tension, multiplier les vannes, pour enorgueillir un ptit peu(mais pas trop) un joueur qui a une bonne période. Il ne faut pas que çela monte à la tête non plus.

pingouin dit:Ce qui est drôle, c'est que ce genre de topic fleurit régulièrement sur le forum.
ça rassure, ça veut dire qu'on est un certain nombre de malades à être tenté par la chose :lol:
Pour répondre : j'ai mis en place un système ELO multijoueurs multijeux. ça marchotte, sans plus, notamment compte tenu des réserves émises fort justement (comme d'habitude) par scand1sk.
Deux soucis "techniques" de cette méthode :
- elle donne un poids de facto plus important aux jeux avec beaucoup de joueurs
- la différenciation "objective" des pondérations entre les jeux n'est pas évidente (partant du principe qu'une victoire à 6 nimmt ne doit pas avoir la même valeur qu'une victoire à Antiquity)
Quand je dis que ça marchotte, c'est que le #1 du classement à l'époque où je l'ai arrêté était objectivement le meilleur d'entre nous. Pour le reste, c'est un peu flou et très circonstanciel.
Si cela t'intéresse, on peut échanger par MP

Bonjour amis de la statistique,
J'ai moi aussi regardé un système de classement pour nos parties entre collègues.
J'ai commencé par reprendre le système développé sur Yucata, qui est une sorte de TrueSkill (en simplifié je pense), dans lequel on marque des points TS en fonction de sa place dans la partie (la somme des gains/pertes s'annule à peu près) et de l'écart de TS avant la partie entre le joueur et la moyenne des joueurs de la partie.
J'ai aussi repris la formule de Boîte à Jeux, qui propose un ELO de type Echec, adapté à un classement multijoueurs (résolution des duels entre chaque joueur de la partie).
J'ai fait une rapide comparaison entre les deux approches, qui restent assez proches dans les résultats (en prenant des paramètres proches), mais BaJ me semble plus discriminant avec les paramètres utilisés (les écarts d'ELO sont plus significatifs).
J'ai donc plutôt favorisé le système ELO de BaJ.
La BdD des parties représente :
26 joueurs (tous n'ont pas joué toutes les parties ; les parties sont entre 3 et 8 joueurs)
220 parties
75 jeux différents (environ la moitié n'ont été joué qu'une fois ; les jeux les plus joués l'ont été environ 20 fois)
Paramètres de la formule ELO :
K=30 ; 50 ou 80 selon la difficulté du jeu Facile, Moyen ou Difficile (le gain/perte max de la première partie d'un jeu est de K/2)
S = 1 ; 0 ; 0,5 selon une Victoire, Défaite ou Egalité
F = 2000 (amplitude de l'effet de l'écart d'ELO dans les duels: plus F est élevé, moins l'effet est grand)
ELO init = 1000
Dans la formule ELO = K * (S - 1/(10^(-D/F)+1))
Le résultat d'une partie est rentré sous la forme des positions des joueurs dans la partie (avec des égalités possibles : jusqu'à 4 premiers ex aequo).
La feuille génère un tableau de résultat des duels par joueur, pour tous ses duels avec les autres joueurs de la partie (Victoire, Defaite, Egalité).
Puis un tableau de résultat de gain/perte d'ELO par joueur, pour tous ses duels avec les autres joueurs (formule d'ELO avec prise en compte de l'écart d'ELO entre les 2 joueurs et facteur de difficulté du jeu). Pour chaque jeu, la moyenne de gain/perte de la partie est calculée par joueur.
2 tableaux récapitulatifs des résultats de gain/perte d'ELO moyen des parties.
Cela permet de générer un classement ELO évolutif des joueurs (un peu biaisé par le fait qu'on considère tous les jeux joué chronologiquement).
Ensuite, je peux sélectionner toutes les parties d'un jeu et refaire le calcul de gain/perte d'ELO pour ce jeu seulement (dans un autre fichier), pour établir un classement ELO par joueur, pour ce jeu.
J'établis différents classements : sur le ELO évolutif, sur le nombre de victoire, sur le nombre de parties terminées mieux qu'à la moitié du classement, etc.
Je n'ai pas encore bien couvert toutes les analyses de "sensibilité" de ce classement, mais pour reprendre le commentaire de "pingouin", il ne peut pas être complètement mauvais puisqu'il me place en 1ère position 8)
C'est sous excel (mais c'est assez peu optimisé !!), car je ne maîtrise ni les macros, ni le calcul matriciel sous excel : je passe par une assez grande décomposition du calcul en de multiples tableaux (e.g. il y a plus de 1500 colonnes pour générer les tableaux de duels et de gain/perte des 26 joueurs ! bon, je pourrais facilement diviser par 2 en combinant les 2 étapes, mais j'ai construit en décomposant).
Cela rend délicat le changement de périmètre (ajout de joueur), qui nécessite un peu de travail…(je n'imagine pas que la structure soit pertinente pour une BdD de 100 joueurs, même si excel accepte beaucoup de colonnes...)
Je peux transmettre les 2 fichiers excel à ceux que cela intéressent et je suis moi-même intéressé par des exemples de réalisation, comme celui mentionné par "pingouin" (petit appel du pied sur la banquise…)
Ce que j'aimerai améliorer, notamment, c'est la simplification de la procédure (soit par macro, soit par calcul matriciel). Je n'ai pas implanté de facteur de pondération sur le nombre de parties jouées (des idées ?). J'imagine aussi un système plus variable que 3 niveaux de difficulté, basé sur une élasticité à l'indice de difficulté des jeux proposé par BGG ?).
Voila, voila, pour faire un peu avancer un schmilblick
plastic77
PS : je ne crois pas qu'un tel classement vienne pourrir la pratique des jeux par un calcul à 3 bandes pour optimiser sa place ; les joueurs ont généralement bien d'autres raisons de "déjouer", e.g. pour pourrir un tel parce qu'il m'a embêté !! si on joue, c'est parce qu'on est encore un enfant...