Calcul des points : la faille

726 messages normal

Affichage de 261 à 280 sur 726 éléments
05/11/2009 21:11
#261
BlackShark 5954 messages

niconoe :

attention black, n c'est le nombre de posts hein, pas le nombre de score différants :)


Je l'avais pas compris comme ça, pour moi n signifiait le nombre de scores différents et x désignait n-i+1 où i est la position du joueur.
En relisant le passage où je te proposais les 3 possibilités il y a eu un énorme quiproquo entre nous deux. Sur ce message, je n'ai lu que la première phrase. dead :

niconoe :

Je n'ai gardé que la 1ere possibilité, c'est ce que je souhaite oui.
En fait, n va servir à définir a dans l'expression ax+b, ce qui va faire pencher la pente vers l'axe vertical, et ce de moins en moins vite.
n sera, je pense, égal au nombre de posts, identique ou non, sur un score. Cela permettra de donner plus de points à ceux qui sont 1er ex-aequo entre 20 et ceux 1er ex-aequo entre 2.


Pour reprendre le système où je suis passé totalement à côté, je vois un petit soucis.
Tu as bien dis que \"n sera, je pense, égal au nombre de posts, identique ou non, sur un score\" puis tu dis que \"On calcule ensuite f(n-i+1) où i est la position du joueur.\"
Cela veut donc dire que pour 100 posts, on a f(100)points pour le premier pour 100 scores différents et f(100)points pour le premier avec 100 scores égaux. Je ne vois aucune différence entre les premiers avec ou sans égalités, alors qu'on souhaitait que les scores max' soit réduits. J'ai peut-être loupé une étape ou alors j'ai mal compris/lu un passage ?

NintendoPlayers :

Y'a-t-il au moins une personne qui obtienne les mêmes résultats que BlackShark? aww


Pour NP, Hraesvelg et Doraki vous avez très probablement loupé un épisode en route. lapogne36 a très bien rappelé la formule de base pour f(x) et on réfléchit à ce qu'il faut mettre pour \"a\" et \"b\". Si vous avez suivi comment je choisis n et x ensuite, vous devrez retrouver mes résultats qui ne sont pas dû au hasard. ;)

Doraki :

En plus, ton listing pour 100 joueurs avec 100 scores ne ressemble pas du tout à une droite.


Tant mieux car elle doit ressembler à la courbe proposée à niconoe, et plus précisément à celle que j'ai donné à la calculatrice.

lapogne36 :

hum juste pour savoir si je comprends un peu la fonction ou pas, \"en gros\" (je sais que c'est un peu moins que ça), pour calculer le score du premier c'est \"assez proche\" (oui je sais que c'est pas exactement ça mais c'est pour simplifier) de la droite y=100ln(2n)*x+100ln(2n)+100


A la base j'ai fabriqué une fonction pour qu'elle corresponde comme l'a demandé niconoe, avec la particularité que la limite en + l'infini était égale à 0. Après cela dépend du nombre de posts, plus il est grand plus il se rapprochera de la valeur pour la droite en effet.

lapogne36 :

et pour la valeur x à utiliser pour le premier on prend x=(place dans le mauvais sens du premier en ne considérant tous les scores égalités que comme 1 seul place) ? (enfin en gros ça donne x=10 pour 91 égalités et 9 autres scores et x=100 pour 100 scores différents)


Je n'ai pas raisonné comme ça car ça voudrait dire que pour ton système on mettrait x=10 pour un 1er, et x=9 pour un 92ème, et ça voudrait donc dire qu'un 92ème a quasi autant de points qu'un premier.
Moi j'ai raisonné en choisissant n le nombre de posts différents puis x=100 pour un 1er (et plus globalement x=n-i+1 pour un joueur à la i-ème place) que ce soit pour des égalités et des scores différents, et le résultat change car c'est le nombre de posts différents qui va faire \"croitre\" la pente de la droite y=ax+b et qui va pousser à rendre f(100) plus grand dans le cas avec des scores différents comparé au cas avec que des scores à égalités.

lapogne36 :

au fait blackshark les valeurs \"32\", \"60\" et \"2*25²\" c'est choisit avec précision ou c'est juste (comme je le pense) des valeurs \"qui ont l'air de convenir\" ?


J'avais donné la piste de la fonction gaussienne dans l'allure de la partie exponentielle, celle-ci vient de là, et c'est toujours de cette fonction que vient le \"2\" de \"2*25²\". Ensuite le \"60\" et le 25 correspondent à l'espérance et à la variance de la fonction gaussienne, donc je les ai choisi de telles sortes qu'on ait f(1) = b-a et qu'on ait une courbe qui prennent la forme souhaitée. Pour le \"32\" il a été posé de telle sorte que f(l'espérance) (autrement dit f(60)) soit égal à 1/2 * (a*60+b) histoire que la courbe ressemble un peu plus à celle de niconoe.
Donc c'est un peu de calcul et un peu du bidouillage. lol
05/11/2009 21:33
#262
lapogne36 51 messages

BlackShark :



Je n'ai pas raisonné comme ça car ça voudrait dire que pour ton système on mettrait x=10 pour un 1er, et x=9 pour un 92ème, et ça voudrait donc dire qu'un 92ème a quasi autant de points qu'un premier.


hum pas nécessairement si en prenant i la place du joueur, tu poses x=(n+1)-i, alors il est clair que les valeurs de x seront de n pour le premier (le maximum possible) et 1 pour le dernier (le minimum possible)
avec 91 égalités et 9 autres scores, on aurait donc les 91 premiers avec x=100, tandis que le 92ème aurait x=9, etc...
sinon avec ce genre de système et une droite y=100ln(10n)x+100ln(10n)+100, on aurait (approximativement encore un fois, la flemme de prendre en compte le morceau qui tend vers 0 >< ) pour 100 joueurs le premier avec 70.000 points (\"à peu près\") et avec la même chose mais 91 égalités, environ 7700 points (je le répète encore une fois : dans mon exemple j'ai posé n=(nb de scores différents du premier)+1

on remarque aussi que si l'on appliquait exactement cette fonction, les scores globaux des premiers diminuerait d'environ 30%, des deuxième de 15%, des troisièmes de 0% (je crois ?), enfin bref les scores entre premiers seront plus serré, mais l'écart va vite augmenter par derrière, bref ce qu'on attend de la formule de calcul des points ^^
05/11/2009 21:50
#263
BlackShark 5954 messages

lapogne36 :

hum pas nécessairement si en prenant i la place du joueur, tu poses x=(n+1)-i, alors il est clair que les valeurs de x seront de n pour le premier (le maximum possible) et 1 pour le dernier (le minimum possible)
avec 91 égalités et 9 autres scores, on aurait donc les 91 premiers avec x=100, tandis que le 92ème aurait x=9, etc...


Bah si n représente le nombre de scores différents le premier à x=10+1-1=10 et non x=100.
Si tu veux qu'on associe x=100 aux premiers et x=9 pour le 92ème il faut que n représente le nombre de posts. Et dans ce cas là on aurait f(100) points pour un premier avec des scores avec ou sans égalités. (A moins qu'un truc ne m'échappe ?)

Si tu as des idées derrière la tête n'hésites pas à les exposer avec des exemples, ça parlera à tous et ça se trouve cela clora peut-être ce topic. lol
05/11/2009 23:38
#264
lapogne36 51 messages
hum j'avais commencé à rédiger un beau texte mais il semble qu'il y ait quelque chose qui ne va pas dans la fonction actuelle, c'est le morceau 100ln(10n)x, car en prenant :

m : nombre de scores
n : nombres de scores différents du premier + 1
i : la place du joueur
x=(m+1)-i

alors le problème vient du morceau logarithmique c'est elle qui oriente la fonction et permet + ou - de déterminer le score du premier, cette valeur devrait donc être à peu près proportionnelle à n, or actuellement on a une forme logarithmique, ainsi quand n est divisé par 10, la pente n'est réduite que de moitié => mauvais

là j'ai pas trop le temps mais d'ici demain je vais réfléchir à quelque chose pour remplace ça, un truc du genre 100n à la place de 100ln(10n) a l'air d'avoir ses chances de marcher mais ça me semble trop beau pour être vrai

de plus je signale que pour que ta fonction soit globalement valable par rapport à la distance de la droite, il faut remplacer (x-60)² par (x-m/2)²

enfin bref là ça me prend un peu la tête d'y réfléchir de suite, je ferais ça demain ^^
06/11/2009 08:08
#265
BlackShark 5954 messages

lapogne36 :

alors le problème vient du morceau logarithmique c'est elle qui oriente la fonction et permet + ou - de déterminer le score du premier, cette valeur devrait donc être à peu près proportionnelle à n, or actuellement on a une forme logarithmique, ainsi quand n est divisé par 10, la pente n'est réduite que de moitié => mauvais

là j'ai pas trop le temps mais d'ici demain je vais réfléchir à quelque chose pour remplace ça, un truc du genre 100n à la place de 100ln(10n) a l'air d'avoir ses chances de marcher mais ça me semble trop beau pour être vrai


\"n\" croit plus rapidement que \"ln(n)\" donc si tu choisis d'enlever la partie logarithmique pour mettre un truc proportionnel à n, tu vas avoir une pente qui va croître encore plus rapidement. Du point de vue de l'écart premiers-égalités/premiers-scores-différents cela parait intéressant, mais il ne faut pas oublier que ça va influer sur les écarts entre \"premiers sur 99 scores différents\" et \"premiers sur 100 scores différents\" alors qu'on me reprochait déjà de rapporter trop de points pour les premiers aux gros scores, ça risque d'empirer le cas.


lapogne36 :

de plus je signale que pour que ta fonction soit globalement valable par rapport à la distance de la droite, il faut remplacer (x-60)² par (x-m/2)²


L'idée est intéressante mais je te préviens qu'en déplaçant l'espérance tu vas devoir modifier les valeurs de \"32\" et \"25\", sinon tu t'exposes à te retrouver avec des valeurs négatives pour les premières valeurs de x ou à avoir une fonction f décroissante au début... aww Tu vas au moins devoir mettre des valeurs en fonctions de m à la place de \"32\" et \"26\".

lapogne36 :

enfin bref là ça me prend un peu la tête d'y réfléchir de suite, je ferais ça demain ^^


Bon courage. :p

06/11/2009 17:30
#266
lapogne36 51 messages
après de nombreux tests (très) fastidieux, j'en arrive à une fonction qui devrait ressembler à ça :

m : nb de posts
n : nb de posts différents du 1er + 1
i : place du joueur

alors f(i) = [f(x)-g(x)]*C avec :

x = (m+1)-i

f(x) = n^(10/9)x + n^(10/9) + 100

g(x) = [n^(10/9)x * exp(-(x-m/2)²/(10m))]/2

C = [1 + 1000/(m+50) ]* 1/2

en gras c'est ce qui me fait réfléchir le plus, à savoir :

n^(10/9) qui donne un certain score qui sert surtout pour le dernier du classement, il faudrait trouver une autre fonction de n qui fasse que les derniers sur peu de joueurs aient \"quelques points\", et que ça soit un score négligeable pour un dernier sur 100 joueurs par exemple

1000/(m+50) : alors là j'atteins l'apothéose de la recherche pourrie, c'est une partie qui est censée limiter les écarts entre 100 scores différents et 50 scores différents (par exemple), mais en prenant m à la place de m+50, le scores des premiers sur des records à faible nombre de posts, on abtient des absurdité (en gros ils gagnent plus que d'autres 1er qui sont avec plus de posts), et prendre quelque chose comme m+1000 à la place fait que la limitation d'écart recherchée est quasi inexistante, donc il faut trouver un juste milieu

voilà les résultats que l'on obtiendrait sur certains exemples

100 scores différents :

1 : 62342
2 : 61459
3 : 60559
5 : 58710
10 : 53795
25 : 37261
50 : 17345
75 : 12975
100 : 1633

75 scores différents :

1 : 38755
2 : 37930
3 : 37092
10 : 30891
38 : 11359
75 : 1494

50 scores différents :

1 : 19169
5 : 16468
10 : 13170
25 : 6507
50 : 1332

10 scores différents :

1 : 1694
5 : 1343
10 : 1063

1 joueur :

1 : 1046

100 scores, 91 identiques :

1 : 5181
92 : 878
100 : 480



on remarque bien dans ces exemples que les parties dont j'ai parlé précédemment vont encore être à améliorer un petit peu
06/11/2009 17:49
#267
niconoe 3902 messages
ça ne va pas du tout pour 10 joueurs (et donc pour moins de 10 joueurs), le 1er ne gagne que 600 pts de plus que le dernier alors qu'il y a 8 joueurs d'écart !!
aussi, être le dernier sur 50 rapporte autant de points qu'etre le 5ème sur 10 O_O

Je rappelle de plus que le but est de ne pas utiliser la variable \"nb scores différents\" parce qu'elle est galère à calculer du premier coup (sans faire une boucle qui peut s'avérer inutile) et donc que d'utiliser une variable de ce type augmenterait considérablement le temps de chargement de la page d'un gros classement.

J'ai peur pour finir avec ta formule lapogne qu'on atteigne un nombre de points inférieur ou égal à 0 dans certains rares cas..., ce qui n'est pas tip-top...
06/11/2009 17:55
#268
Nitnek5091 519 messages
Mais pourquoi vous ne gardez pas le même système que maintenant en changeant juste la place par le nombre de personnes qu'on double?
(désolé si vous avez déjà répondu)
06/11/2009 18:03
#269
niconoe 3902 messages
Parce que le systeme de maintenant est au points pour des petits classements mais pas au points pour de nouveaux gros classement où il est accusé de donner trop de points aux gros jeux
2èmement, je ne veux pas compter le nombre de personne qu'on double ni le nombre de posts différents ou autre encore, parce que c'est du traitement inutile et long et couteux en temps, donc il faut l'éviter.
06/11/2009 18:19
#270
BlackShark 5954 messages
Malheureusement pour différencier les records avec que des égalités et les records avec que des scores différents, je ne vois pas comment on peut se passer du \"nombre de scores différents\", c'est justement ça qui les différencie. hidden
06/11/2009 18:46
#271
lapogne36 51 messages
si tu veux moins avantager les max scores facile (ce qui est à la base de ce topic), pas d'autre solution que au minimum de compter le nombre de scores différents du 1er (j'ai l'impression que ça reste bien moins pire que de compter tous les scores différents 2 à 2, j'avoue que les tester comme ça ça serait vraiment la misère à programmer -_-)
06/11/2009 19:13
#272
niconoe 3902 messages
justement, en créant une fonction où x varie en fonction de la position du joueur, les égalités et inégalités sont gérées...
Ta fonction est vraiment très bien black, remplace juste ton n par le nombre de posts et tu verras qu'il y aura des différences notables
06/11/2009 19:15
#273

niconoe :

ça ne va pas du tout pour 10 joueurs (et donc pour moins de 10 joueurs), le 1er ne gagne que 600 pts de plus que le dernier alors qu'il y a 8 joueurs d'écart !!
aussi, être le dernier sur 50 rapporte autant de points qu'etre le 5ème sur 10 O_O

Je rappelle de plus que le but est de ne pas utiliser la variable \"nb scores différents\" parce qu'elle est galère à calculer du premier coup (sans faire une boucle qui peut s'avérer inutile) et donc que d'utiliser une variable de ce type augmenterait considérablement le temps de chargement de la page d'un gros classement.

J'ai peur pour finir avec ta formule lapogne qu'on atteigne un nombre de points inférieur ou égal à 0 dans certains rares cas..., ce qui n'est pas tip-top...[/
:


niconoe, je ne sais pas si la formule est bien ou pas, je ne l'ai regardé en détails, mais il vaudrait mieux que tu compares le nb de points du premier et du dernier avec un rapport et non avec une différence, c'est nettement plus juste comme raisonnement.
           

BlackShark :

Malheureusement pour différencier les records avec que des égalités et les records avec que des scores différents, je ne vois pas comment on peut se passer du \"nombre de scores différents\", c'est justement ça qui les différencie. hidden

J'en profite pour rappeller la formule que j'avais posté
Elle ne dépend pas du nombre de scores différents
Soit
P=place du joueur
N=nombre de personnes que l'on bat
E-->la partie entière
f(N,P)=100*(N+1)*0,9^((P-1)/2)
Puis on prend la partie entière: E(f)

                     
Je pense que c'est au moins une bonne base pour démarrer et faites part des choses à améliorer sur cette formule(elle peut être couplée avec celle de BlackShark).
06/11/2009 19:26
#274
BlackShark 5954 messages
Petite précision, je ne l'ai jamais dis explicitement avant mais quand je disais \"scores différents\" je parlais de \"scores différents du premier\", pour moi la base du problème était vraiment le nombre de personnes à faire le score max'.

niconoe :

justement, en créant une fonction où x varie en fonction de la position du joueur, les égalités et inégalités sont gérées...
Ta fonction est vraiment très bien black, remplace juste ton n par le nombre de posts et tu verras qu'il y aura des différences notables


Justement je ne comprends pas où il y a des différences car ce sont exactement les mêmes calculs. Si \"n\" représente le nombre de posts et x=n+1-i avec i la position du joueur, on a f(100) pour un premier avec des scores avec que des égalités, et on a f(100) avec que des scores différents, et les deux f(100) sont calculés avec le même \"n\".
Il y a peut-être un truc qui m'échappe. :s

serialbuscontroler :


J'en profite pour rappeller la formule que j'avais posté
Elle ne dépend pas du nombre de scores différents
Soit
P=place du joueur
N=nombre de personnes que l'on bat
E-->la partie entière
f(N,P)=100*(N+1)*0,9^((P-1)/2)
Puis on prend la partie entière: E(f)
                     
Je pense que c'est au moins une bonne base pour démarrer et faites part des choses à améliorer sur cette formule(elle peut être couplée avec celle de BlackShark).


Calculer le nombre de personne que l'on bat c'est encore pire algorithmiquement que de calculer le nombre de scores différents du premier. :p
06/11/2009 19:36
#275
niconoe 3902 messages
dans ce cas, il faut conserver n = nombre de posts différent entre eux, et il faudra que je trouve algorithmiquement comment trouver ce n magique sans boucle, ce qui me parait impossible mais, j'ai pas franchement planché sur ce problème...
06/11/2009 20:05
#276
lapogne36 51 messages
et il n'y a vraiment pas moyen juste de savoir la place de la première personne à ne pas avoir la place \"1\" ?
06/11/2009 20:43
#277
BlackShark 5954 messages

niconoe :

dans ce cas, il faut conserver n = nombre de posts différent entre eux, et il faudra que je trouve algorithmiquement comment trouver ce n magique sans boucle, ce qui me parait impossible mais, j'ai pas franchement planché sur ce problème...


Comme lapogne36 je trouverais intéressant de s'intéresser uniquement du nombre de scores différents du premier. Si sur 100 scores on a 80 égalités, c'est pas si important de connaître si le 86ème et le 87ème sont à égalité ou non, au vu des calculs algorithmiques qui seront nécessaires.

Si n représente le nombre de scores différents du premier on pourrait attribuer le score du premier dans une variable v0 et on ferait une boucle while où on comparerait le score du 1er avec celui du 2ème puis comparé à celui du 3ème etc et on arreterait les comparaisons dès qu'on voit qu'un joueur à un score différent du premier (ou si on a visité l'ensemble des joueurs qui ont posté leur score).

On pourrait faire un truc comme ça algorithmiquement :
v0 = score du premier
k=1
while (\"score du k+1ème est égal au score du 1er\" et \"kk=k+1
EndWhile

Cette boucle comporterait k opérations avec k le nombre d'égalités pour la première place. Dans le pire des cas on aurait n-1 comparaisons de scores.
06/11/2009 20:43
#278
niconoe 3902 messages
non, pour ça, il faut d'abord faire le classement temporairement pour savoir qui sont les 1ers...
07/11/2009 08:49
#279
Pour calculer le nb de personnes que l'on bat, j'ai 2 solutions:
1/niconoe sait calculer n.
Donc avoir un mini-classement, en supprimant virtuellement les places égales ou inférieur à celui du joueur devrait être possible

b=nombre de personne(s) battue(s)
p=place du joueur
n=nb de records postés
On a p< b      
2/Une autre solution très différente:
Est ce que ce serait possible d'avoir un classement inverse mais qui n'est pas visible par les joueurs?
(le classement inverse  ressemble à ceci

classement classique visible   //    classement virtuel inverse
1er                        //         9ème
1er                        //         9 ème
1er                        //         9ème
4ème                       //        8ème
5ème                      // 7ème
6ème   //  5ème
6ème  //   5ème
8ème  //  1er
8ème  //  1er
8ème  //  1er
8ème  //  1er)
 
Et dans ce cas:
nombre de personnes battues= place du classement inverse -1
07/11/2009 15:44
#280
Arcade 1789 messages
dans les deux cas faudrait recalculer des classements invisible mais bien réel, donc stocker des donnée, avoir un temps de calcul pour l'affichage de chaque page..

Y'a vraiment pas moyen de trouver une formule \"normalement calculée\" qui gère mieux les égalités? niconoe y était presque arrivé je crois, le seul problème était les différence de points trop élevé sur les gros jeux par rapport aux petits, et je pensais que BlackShark avait corrigé ce problème, alors qu'est-ce qui ne va pas maintenant?
Affichage de 261 à 280 sur 726 éléments
Vous devez être connecté pour répondre à ce sujet.
Choisir un thème

Défaut

Gaming

Nintendo

Sega

Sony

Xbox

Capcom

Bandai Namco

EA

Ubisoft

Square Enix

Licences