2008-11-11 3 views
8

J'ai une partie dans laquelle vous pouvez marquer de -40 à +40 à chaque match. Les utilisateurs sont autorisés à jouer n'importe quel nombre de matchs. Je veux calculer un score total qui prend implicitement en compte le nombre de matches joués.Comment puis-je calculer un score de jeu global correct basé sur un nombre variable de matches?

Le calcul de la moyenne n'est pas juste. Par exemple, si Peter joue quatre matchs et obtient 40 points sur chaque match, il aura le même score total que Janne qui n'a joué qu'un match avec 40 points. Additionner les scores de match n'est pas juste non plus. Peter joue 2 jeux (40 points sur chaque match), score total 80. joue 8 jeux Janne (10 points sur chaque match), score total 80.

est-il un (simple) et de manière équitable pour calculer la score total? J'ai lu à propos du système Glicko Elo & pour les cotes d'échecs, mais les deux sont basés sur un historique de notation des joueurs et le classement des adversaires.

+0

Est-ce à partir d'un livre de texte mathématiques? –

+0

Il ne ressort pas clairement de votre description s'il s'agit d'un jeu solo ou si les gens jouent les uns contre les autres. – akaihola

Répondre

3

Cela dépend ce que vous voulez accentuer, mais je pense que c'est à la fois simple et efficace:

score moyen + parties jouées

Vous pouvez pondérer les variables un peu (par exemple 2 * parties jouées, si vous voulez avoir plus d'impact) - mais la relation de base semble raisonnable. Dans votre premier exemple, Peter aurait 44 ans et Jane 40. Mais si Peter commençait à perdre des points, Jane pourrait rattraper son retard.

+0

Merci Phil, c'est exactement ce que je cherchais. Le meilleur score total devrait être donné au joueur ayant la somme de points la plus élevée avec le nombre de parties le plus bas. –

+0

Heh. Peut-être que SO devrait fonctionner de cette façon aussi. Réponse acceptée, mais pas de votes.Seulement sur SO, hein ;-) – philsquared

+0

Je me sens comme c'est trop arbitraire, avoir à tirer ces poids hors de l'air. Je suis partial à ma méthode peut-être trop mathématique: utiliser l'extrémité inférieure d'un intervalle de confiance moyen. C'est comme une estimation pessimiste de ce que sera la vraie moyenne après suffisamment de jeux. – dreeves

1

Rendre la formule non linéaire par rapport au nombre de jeux.

Soit G le nombre de jeux, et S la somme de tous les jeux scores, puis, TotalScore = G^2 * S

Jouez avec jusqu'à ce que vous trouviez quelque chose qui semble logique.

0

Cela dépend de combien vous voulez pondérer les parties jouées par rapport aux scores. Vous pouvez définir une fonction qui renvoie un poids joué: une fraction relativement petite pour un seul jeu et une partie pour un grand nombre de jeux (par exemple 1 - 1/(2 * #Jeux)) et plusieurs pour le score cumulé.

1

Vous pouvez vérifier les points gagnants et donner des points bonus aux gains consécutifs (+5, +10, +15 ...), donc (-10, + 10, + 10, + 10, -10, + 10) donnerait (-10, + 10, + 15, + 20, -10, + 10). Vous pouvez aussi le faire sans vous soucier des courses, cela donnerait (-10, + 10, + 15, + 20, -10, + 25).

Une autre possibilité serait de définir la valeur du bonus à 0 au début et la décrémenter de 5 si le joueur perd, et l'augmenter de 5 si le joueur gagne.

3

Je pense qu'il n'y a pas de bonne façon de créer un score comme celui-ci dans un seul nombre.

Je suggère de calculer le succès moyen et d'inclure le nombre de jeux. Par exemple

  • Peter scores 40/2 (40 pts en 2 matchs en moyenne)
  • scores Janne (10 pts 10/8 moyenne en 8 jeux)

Vous pouvez rapidement voir si la deuxième le nombre est plus grand, le premier nombre est plus précis.

Sinon, utilisez ELO, mais n'est précis que si chaque joueur joue au moins 10 matches.

1

Vous pouvez définir le score comme étant la moyenne des 10 meilleurs jeux du joueur parmi les 30 derniers (ou d'autres nombres - peut-être que les 10 derniers vous conviendraient).Les joueurs qui n'ont pas encore joué 10 parties pourraient prendre la moyenne des jeux auxquels ils ont joué, mais les pondérer ensuite vers 0, pour compenser le fait que la moyenne de n < 10 a un écart-type plus élevé que le moyenne de 10. Vous ne savez pas quel devrait être le facteur de mise à l'échelle pour chaque n, mais si vous avez des données passées à examiner, vous pouvez déterminer la variation des scores du joueur type et travailler à partir de cela.

Ou déterminer quel score moyen global par partie est (peut-être 0), et ajouter (10-n) de faux scores de ce montant en calculant le score pour un joueur avec moins de 10 jeux.

3

Vous pouvez regarder dans Microsofts TruSkill, j'ai lu à ce sujet il ya quelques mois et j'ai honnêtement oublié la plupart des détails, donc je ne suis pas sûr que ce soit super approprié, mais ça pourrait être une bonne source d'inspiration.

+0

Malheureusement le lien est maintenant mort –

1

Un autre point de départ pourrait être l'article wikipedia sur le système de classement d'échecs ELO

4

Une autre approche serait d'utiliser la statistique bayésienne. Modéliser la probabilité que chaque équipe gagne en tant que distribution bêta et calculer la probabilité qu'un échantillon d'une distribution soit plus grand qu'un échantillon de l'autre. Cette approche est utilisée pour tester les médicaments contre le cancer. Il prend en compte non seulement quel médicament a un meilleur taux de réponse mais également quel médicament a plus de données. Comparer deux joueurs ou deux équipes est exactement analogue.

Cela peut sembler plus compliqué que c'est, mais il y a free software pour faire ces calculs, et dans certains cas, les calculs sont assez faciles à faire à la main.

Voir an introduction to random inequalities et les détails sur beta distribution inequalities.

+0

C'est vraiment intelligent. Mais comment transformer cela en une métrique simple, c'est-à-dire un nombre pour chaque joueur qui donne son score? – dreeves

2

Je recommande que le score de jeu soit la fin inférieure d'un intervalle de confiance de 95%. Dans la limite où vous jouez beaucoup de parties, votre score de jeu approche votre score moyen, mais il est toujours strictement inférieur. C'est comme utiliser un score moyen, mais être sceptique à l'égard des personnes qui n'ont joué que quelques parties et qui ont peut-être eu de la chance. En d'autres termes, c'est une estimation pessimiste de ce que sera la vraie moyenne après que suffisamment de parties aient été jouées.

Comment calculer l'intervalle de confiance de 95% sans enregistrer la liste complète des scores: Computing a mean confidence interval without storing all the data points

Alternativement, si vous garder une trace du nombre de matchs joués, la somme des scores de la personne, et la somme de les places de leurs scores, vous pouvez calculer l'erreur type comme suit:

SE = sqrt((ss - s^2/n)/(n-1)/n) 

au lieu de prendre la peine avec l'on pouvait IC à 95%, juste laisser le score du jeu soit:

s/n - SE 

Notez que ce qui précède est l'infini négatif quand une seule partie a été jouée. Cela implique que vous donneriez à quelqu'un qui a joué à un seul jeu le score le plus bas possible en tant que Score de Jeu.

Une autre idée consiste à afficher explicitement l'intervalle de confiance lors du classement des personnes (triées par le bas). Ensuite, les gens joueraient plus à la fois pour réduire leur CI ainsi que pour augmenter leur moyenne. Enfin, il peut être judicieux de pondérer davantage les jeux les plus récents de sorte qu'un mauvais jeu isolé se dégrade plus rapidement. La façon de le faire serait de choisir un facteur de remise de d supérieur à 1 et de donner au i un poids de d^(i-1). (Bien que je ne suis plus sûr de savoir comment appliquer l'idée intervalle de confiance).

PS: Je développé cette idée ici: How to calculate mean based on number of votes/scores/samples/etc?

+0

Cela semble très utile. Je remplacerais probablement la partie «score moyen» de ma proposition par quelque chose comme ça. Cependant, je garderais le terme «nombre de jeux». Ça ne me dérangerait pas de voir le forumula que vous aviez en tête aussi. – philsquared

+0

Merci d'avoir posté le forumula. Je pense que cela améliorerait les choses en pondérant davantage la moyenne au profit de succès répétés. – philsquared

+0

Pour se raccrocher à la «désintégration des vieux jeux» ... vous décrivez essentiellement une moyenne mobile pondérée, et en fait, les CI classiques s'y cassent. Vous pourriez cependant construire un intervalle crédible bayésien, mais ce serait un peu compliqué. Faire du bayesian peut aussi se débarrasser du problème du "jeu unique". –

1

construire un graphe, chaque personne représentée par un sommet. Chaque arête du graphique représente une série de correspondances entre deux joueurs. Maintenant, appliquez un certain type d'algorithme de classement de page pour vous donner un ensemble de poids sur les sommets. Cela devrait vous donner votre classement.

Maintenant, la partie difficile est de choisir les poids de bord utilisés dans pagerank. Pour le bord dirigé (u, v) - du sommet u au sommet v - j'attribuerais personnellement un poids égal au nombre de points que le joueur a gagné contre le joueur v.

Vous pouvez ajouter des sommets à votre graphique chaque fois, mais rappelez-vous que le classement des pages favorise les anciens sommets (c'est-à-dire ceux qui ont joué le plus de jeux!). Quoi qu'il en soit pour une référence:

http://dbpubs.stanford.edu:8090/pub/1999-66

Une autre idée est d'utiliser les notations ELO, et d'essayer d'amorcer en attribuant tout le monde le même score pour commencer, puis propager un score en avant. Je ne peux pas dire que c'est entièrement satisfaisant.

Questions connexes