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.
la source
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 Factor
qui 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, leK Factor
est 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:
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.
la source
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:
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.
la source