Algorithme ELO pour gérer les personnes qui ne jouent pas souvent


9

J'utilise l'algorithme ELO pour classer les joueurs dans une compétition de pong en cours. La plupart des joueurs jouent tous les jours, mais nous avons un joueur qui n'a pas joué depuis un mois. Mon algorithme ne suit actuellement que les scores des 30 derniers jours, et en conséquence, ce joueur monte rapidement dans les rangs, bien qu'il n'ait jamais joué. Il a perdu un tas de ses premiers matchs, mais a remporté la plupart de ses derniers matchs, ce qui signifie que ses pertes chutent dans les charts et son score augmente en conséquence.

De toute évidence, mon plan d'abaisser les scores après 30 jours ne fonctionne pas. Quelles autres méthodes puis-je utiliser pour pénaliser les joueurs qui ne jouent pas souvent?

La seule chose que j'ai trouvée jusqu'à présent est de réduire les points en fonction du pourcentage basé sur les jours d'inactivité (par exemple, si un utilisateur n'a pas joué depuis une semaine, ses points ne valent que 70% de la normale, et il devrait jouer X fois pour récupérer jusqu'à 100% de points).

Cependant, cela semble trop arbitraire. Quelqu'un a-t-il de meilleures idées ou suggestions pour gérer les joueurs inactifs dans un environnement autrement actif?

Merci d'avance.

Réponses:


18

Il semble que vous stockiez les points attribués pour chaque match, puis que vous «expiriez» ces ajustements de points au fil du temps. Ce qui, comme vous l'avez remarqué, est ouvert à une exploitation facile.

Dans une implémentation ELO standard, votre score ELO est pour toujours; il ne «décroît» pas avec le temps, car le fait que des points quittent le système de classement de cette manière entraînera finalement une déflation globale du score (c'est-à-dire que 1500 ne signifiera plus la «moyenne»).

N'oubliez pas que les classements ELO ne sont pas des «points» dans la façon dont les joueurs pensent généralement à eux; ils sont une tentative de classer le niveau de compétence d'un joueur par rapport aux autres joueurs, ils ne sont pas une récompense. Ces points ne doivent pas être retirés à titre de punition pour le joueur, car ils sont le seul outil dont vous disposez pour essayer de faire correspondre des joueurs contre des adversaires de niveau de compétence similaire. La seule chose qui devrait affecter ces valeurs - jamais - ce sont les victoires et les pertes contre d'autres joueurs classés.

L'approche adoptée par la plupart des jeux qui veulent empêcher les joueurs d'atteindre un score élevé puis de disparaître, pour ne plus jamais jouer, est d'avoir une exigence d'activité pour l'affichage du classement; si un joueur n'a pas joué à un jeu depuis 30 jours (ou peu importe), il n'apparaît tout simplement pas dans les classements tant qu'il ne l'a pas fait. Lorsque le joueur revient et joue un autre match avec classement, il revient avec son classement ELO complet, exactement comme s'il n'était jamais parti. Si leur niveau de compétence a changé par rapport aux autres joueurs actifs dans l'intervalle, le jeu le remarquera rapidement et ajustera leur classement, grâce au processus standard de gagner et de perdre des matchs contre des adversaires.


1
+1, bien que ce soit la bonne explication de la raison de l'échec, je laisserais simplement tomber l'ELO à la place et opterais pour quelque chose de complètement différent. (Je ne sais pas quoi, sinon je l'aurais posté ^^)
o0 '.

4
@Lohoris Ce serait un choix de développement parfaitement judicieux. Si le but n'est pas de maintenir une comparaison significative des niveaux objectifs de compétence des gens les uns par rapport aux autres (c'est-à-dire à des fins de mise en relation), ELO n'est pas un excellent choix à utiliser comme mécanisme de notation. Et il y a même des jeux qui utilisent un système comme ELO sous le capot pour le matchmaking, tout en utilisant un système de «points» entièrement différent à des fins d'affichage, ce qui leur permet de récompenser les gens qui jouent plus fréquemment. StarCraft 2 le fait, par exemple.
Trevor Powell

4

Des algorithmes comme Elo et TrueSkill déterminent les compétences d'un joueur en fonction du résultat de chaque jeu joué, sans égard au temps qui passe. Cependant, les deux algorithmes sont livrés avec un facteur "d'incertitude" - dans le cas d'Elo, il y en a un K Factorqui est généralement fixé à un niveau élevé pour les nouveaux joueurs, de sorte que leur note Elo convergera rapidement sur leur "vraie" note de compétence. Après un temps défini ou un nombre défini de jeux, le K Factorest normalement réduit, de sorte que la note change moins entre les jeux.

Ce que vous voyez est probablement un comportement Elo typique (selon votre implémentation Elo): votre joueur a joué moins de jeux que ses concurrents, ce qui fait de lui un "nouveau joueur" avec un plus haut K Factor; puisqu'il gagne ses parties, l'algorithme le voit comme un joueur plus qualifié et lui attribue un rang plus élevé!

Notez que les algorithmes de classement sont généralement utilisés uniquement pour les comparaisons entre les joueurs, et non pour déterminer le résultat des compétitions, compte tenu de leur comportement. Étant donné que vous souhaitez récompenser la participation, je recommanderais de marquer les joueurs dans la compétition d'une autre manière. Quelques suggestions:

  • Marquez les joueurs en fonction du nombre de victoires.
  • Attribuez des valeurs de points aux victoires / pertes, par exemple 2 points pour une victoire, 1 point pour une perte.
  • Ne comptez que les meilleurs jeux X du joueur dans une semaine / un mois donné.
  • Exiger que les joueurs jouent un nombre minimum de parties pour se "qualifier".

Notez qu'aucune de ces solutions ne donnera un résultat complètement "équitable", car les joueurs qui jouent plus auront un score plus élevé que les joueurs qui ne le font pas. La seule façon d'assurer l'équité est que les joueurs jouent un nombre identique de parties.


Je pense qu'il est juste que les joueurs qui jouent plus (tout en ayant le même ratio moyen de victoires / défaites) aient un score plus élevé que les joueurs qui ne jouent pas autant ...
David Gouveia

3
@davidluzgouveia - ce n'est pas strictement la définition de "juste". Lorsque vous marquez des joueurs dans un tournoi, le résultat est "juste" si aucun joueur n'a un avantage qu'un autre joueur n'a pas (sans égard aux compétences). Cela dit, je pense que le cas dont nous parlons est une compétition occasionnelle entre amis; la notation consiste davantage à encourager la participation qu'à gagner.
Blair Holloway

Oui, c'est une compétition occasionnelle plutôt qu'un tournoi strict. Je suis évidemment d'accord avec le commentaire de David, c'est pourquoi je cherche une solution ici. Merci pour votre contribution!
Jemaclus

0

Je ne connais pas l'algorithme ELO, mais qu'en est-il au lieu de pénaliser les gens qui ne jouent pas souvent, vous récompensez les gens qui jouent souvent? Par exemple, si vous avez fait quelque chose comme:

Score = (Wins / Losses) * (Total Games Played) * Some_Scale_Factor

Ensuite, les gens qui jouent souvent finiraient probablement par jouer plus de jeux et avoir plus de chances d'atteindre un score plus élevé.

Et une autre chose que vous voudrez peut-être changer est d'empêcher la purge des anciens scores d'avoir un impact sur le score total du joueur. C'est la principale raison pour laquelle ce joueur monte dans les rangs (et aussi pourquoi il finira par tomber complètement hors des charts).

De plus, les gens qui jouent sérieusement pendant un certain temps et réalisent un excellent palmarès ne seront probablement pas heureux de savoir que leurs réalisations finiront par disparaître et disparaître. Ce système est sérieusement décourageant.

Ceci est facilement résolu simplement en gardant un cache du "nombre total de parties jouées" et du "rapport gagnant / perdant" de chaque joueur, même après avoir supprimé les scores eux-mêmes.

Avec ces informations, vous pouvez facilement déduire le nombre de victoires et de pertes du joueur et les mettre à jour en conséquence chaque fois qu'il rejoue.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.