Auteur Sujet: [Maths] Explication d'une formule  (Lu 5531 fois)

0 Membres et 1 Invité sur ce sujet

Diyo

[Maths] Explication d'une formule
« le: 17 Mars 2008, 14:42:23 »
Il y a des matheux dans la salle?

Je travaille actuellement sur un script permettant de définir un niveau d'expérience, comme dans les RPG. En cherchant un peu, je suis tombé sur une formule mais je ne parviens pas à comprendre son fonctionnement.

Total d'XP requis pour passer au niveau supérieur =XP_cumulé + (niveau_inférieur* 1000)

Ainsi:

- le niveau 1 nécessite 0 points d'XP
- le niveau 2  nécessite 1000 points d'XP ( 1000 + 0)
- 3 -> 3000 (2000 + 1000)
- 4 -> 6000 (3000 + 3000)
- 5 -> 10000 (4000 + 6000)
- 6 -> 15000 (5000 + 10000)
etc...

Jusque là rien de compliqué.
La formule qui me pose problème, c'est celle permettant de récupérer le niveau du joueur:

floor(sqrt(0.25 + total_xp * 0.002) + 0.5)
C'est en php. "floor" arrondit à l'entier inférieur et sqrt correspond à "racine carré". A priori, ça fonctionne sans problème:
- Pour un total d'expérience de 4500 la formule retourne le niveau 3.
- Pour un total d'expérience de 14999, la formule retourne le niveau 5.
- Pour un total d'expérience de 15001, la formule retourne le niveau 6.
- Pour un total d'expérience de 979700, la formule retourne le niveau 44.

Ce que j'aimerais comprendre, c'est: pourquoi? O_O'
D'où sortent ces 0.25, 0.002 et 0.5?

Selon moi, les 0.25 et 0.5 c'est parce qu'on part du niveau 1 et non du niveau 0. La racine carré de 0.25 étant 0.5, la formule ajoute 1 pour ajouter un niveau quelque soit le total d'expérience. Vous pouvez me confirmer ça?

Par contre, ce 0.002.... aucune piste...

Quelqu'un? =}
« Modifié: 17 Mars 2008, 15:07:59 par Diyo »

Diyo

Re : [Maths] Explication d'une formule
« Réponse #1 le: 17 Mars 2008, 15:19:52 »
4 x 0.002 = 0.008
^^'

(EDIT: Vilain El Nounourso qui supprime ses messages se rendant compte de ses erreurs!)



Citer
[15:02] <@Grabouh> le 0.25 et le 0.5, c'est bien pour partir de 1
[15:02] <@Diyo> ceci dit, si ce n'était que ça, y aurait juste un "+1" à la fin
[15:02] <@Grabouh> non, pour garder la rigidité de la formule ils ont fait comme ça
[15:02] <@Grabouh> je pense
[15:03] <@Grabouh> ah je pense savoir
[15:04] <@Grabouh> tous les carrés des nombres finissant par 5 finissent par 25
[15:04] <@Grabouh> donc toutes les racines carrées des nombres finissant par 25 finissent par 5
[15:05] <@Grabouh> à partir de là
[15:06] <@Grabouh> le "XP actuel * 0.002" est relié à 0.25
[15:06] <@Grabouh> de façon à ce que le nombre entier obtenu change
[15:07] <@Grabouh> lorsque "(XP actuel * 0.002) + 0.25" arrive sur une racine carrée qui tombe pile sur "X.5"
[15:07] <@Grabouh> en fait la formule joue sur les carrés de nombres finissant par 5
[15:07] <@Grabouh> et tout le reste est calculé pour obtenir un nombre entier
[15:08] <@Grabouh> sinon le 0.002, c'est le coefficient
[15:08] <@Diyo> oui mais pourquoi 0.002?
[15:08] <@Diyo> ah
[15:08] <@Diyo> c'est à dire?
[15:08] <@Grabouh> tu le diminue pour que ce soit plus lent
[15:08] <@Grabouh> tu l'augmentes pour que ce soit plus rapide
[15:09] <@Grabouh> MAIS
[15:09] <@Grabouh> quoique
[15:09] <@Grabouh> non, pas MAIS
[15:09] <@Grabouh> je réfléchis là, pour pas dire de bêtises
[15:09] <@Grabouh> si, MAIS
[15:10] <@Grabouh> si tu le changes, c'est tout ton système d'XP requis qui change
[15:10] <@Diyo> oui voilà
[15:11] <@Diyo> là, on part sur une base de niveau_inférieur*1000 + le total cumulé
[15:11] <@Diyo> ce 0.002 doit venir de ce 1000
[15:12] <@Grabouh> oui
[15:12] <@Diyo> 0.002*1000 ça fait 2
[15:12] <@Grabouh> voilà
[15:13] <@Diyo> si c'était 2000, faudrait 0.001?
[15:13] <@Grabouh> voilà
[15:13] <@Grabouh> attends
[15:13] <@Diyo> le 2, c'est l'augmentation d'un niveau en fait?
[15:13] <@Grabouh> 2000 pour passer niveau 2 c'est ça ?
[15:13] <@Diyo> oui, avec un système se basant sur 2000 plutot que 1000
[15:14] <@Grabouh> ok
[15:14] <@Grabouh> bah il te faudrait 0.001 oui
[15:14] <@Grabouh> oui, le 2 est le passage au nombre entier suivant
[15:14] <@Grabouh> et concrètement donc, une augmentation de niveau

El Nounourso

Re : [Maths] Explication d'une formule
« Réponse #2 le: 17 Mars 2008, 15:21:16 »
Exact, mais là je crois que j'ai trouvé ^^'

4 x (4-1) = 0,002 x 6000
5 x (5-1) = 0,002 x 10000
6 x (6-1) = 0,002 x 15000

Je sais pas si ça t'aide mais on dirait que ça répond à cette logique...

Faustt

Re : [Maths] Explication d'une formule
« Réponse #3 le: 17 Mars 2008, 16:06:49 »
Euh........sinon Pi c'est toujours 3,14 ou ça a augmenté depuis l'euro ?... :huh:

Manu974

Re : [Maths] Explication d'une formule
« Réponse #4 le: 17 Mars 2008, 16:26:04 »
Je cherche...ca doit pas etre sorcier...
[* It's always better on holidays, so much better on holidays... [*

Diyo

Re : [Maths] Explication d'une formule
« Réponse #5 le: 17 Mars 2008, 16:52:26 »
Avec Grabouh, on a réussi à plus ou moins décortiquer la formule. Ce n'est pas encore d'une grande limpidité mais c'est déjà pas mal. Si quelqu'un a des explications plus claires qui permettraient à mon cerveau de faire "TILT", je suis preneur.

Et je rajoute un petit problème:

Quelle est la formule permettant de trouver le nombre de points d'expérience nécessaires pour passer au niveau suivant?

Exemple: Je suis au niveau 6 avec 17338 points. Combien me manque-t-il de points pour passer au niveau 7 et surtout comment les trouve-t-on? =}

Starrynight

Re : Re : [Maths] Explication d'une formule
« Réponse #6 le: 17 Mars 2008, 17:15:27 »
Et je rajoute un petit problème:

Quelle est la formule permettant de trouver le nombre de points d'expérience nécessaires pour passer au niveau suivant?

Exemple: Je suis au niveau 6 avec 17338 points. Combien me manque-t-il de points pour passer au niveau 7 et surtout comment les trouve-t-on? =}
Simple : tu es au niveau i, tu connais donc le nombre de points XP qu'il faut au niveau i+1 (on va le noter XP(i+1)) par la formule que tu donnes au début :

XP(i+1)=XP(i) + 1000*i
Tu as x points, pour atteindre XP(i+1), il te manque donc XP(i+1)-x

Si je reprends avec ton exemple : tu es au niveau 6 avec 17338 points. XP pour le niveau 7 est de 21000 (15000+6000). Il te manque donc 21000-17338=3662 points.

Lisez les news.

"Je m’intéresse à l’avenir car c’est là que j’ai décidé de passer le restant de mes jours" (Woody Allen)

Diyo

Re : Re : Re : [Maths] Explication d'une formule
« Réponse #7 le: 17 Mars 2008, 17:45:58 »
XP pour le niveau 7 est de 21000
Oui mais voilà, comment tu l'as ce 21000? Pareil pour le 15000 du niveau 6? Il y a bien une formule qui permet de connaître ces valeurs sans avoir à faire un calcul niveau par niveau.

Manu974

Re : [Maths] Explication d'une formule
« Réponse #8 le: 17 Mars 2008, 18:37:34 »
ouais yen a  (et certainement pas qu'une)...
et c'est justement avec cette formule que tu peux trouver la réciproque (edit touver le niveau avec le nombre de points d'XP)
tout le probleme est de trouver cette formule justement...(et c'est le moins evident a fait faut resoudre une equation fonctionnelle (chose que j'ai appris a faire que dans des cas particuliers et avec des polynomes))...
[* It's always better on holidays, so much better on holidays... [*

Manu974

Re : [Maths] Explication d'une formule
« Réponse #9 le: 17 Mars 2008, 18:57:10 »
une des formules (je garantis pas son unicité) est en fait hypra simple...
En esperant la formule sous forme d'un polynome du second degrés, on voit que le polynome 500 X² -500 X convient...(pour la determination de ce polynome c'est une autre histoire (pas trop compliquée))
remplace X par ce que tu veux et en theorie c'est bon...(en tout ca marche pour 2 3 4 5 6 7 et 44)

Mnt que tu as cette formule qui te donne une bijection sur R+, il "suffit" de trouver la bijection reciproque...
« Modifié: 17 Mars 2008, 19:02:54 par Manu974 »
[* It's always better on holidays, so much better on holidays... [*

Diyo

Re : [Maths] Explication d'une formule
« Réponse #10 le: 17 Mars 2008, 19:00:46 »
Citer
une des formules (je garantis pas son unicité) est en fait hypra simple...
En esperant la formule sous forme d'un polynome du second degrés, on voit que le 500 X² -500 X convient
remplace X par ce que tu veux et en theorie c'est bon...
x serait quoi en l'espèce?

EDIT: Ah! Le niveau. Bonne piste =} Merci Manu.



Sinon, avec ce qu'a présenté El Nounourso, j'ai trouvé une solution.

Avec la formule de base on a le niveau actuel d'un joueur:

x = floor(sqrt(0.25 + total_xp * 0.002) + 0.5)
Le niveau supérieur est donc y = x+1

On a donc les deux niveaux dont on a besoin pour trouver le nombre de points nécessaires pour passer au niveau suivant.

Or, le total de points nécessaires pour atteindre un niveau est (Merci El Nounourso):

Citer
x * y = 0,002 * z

On a x, on a y, manque plus que z =}

Soit:

z = (x * y) / 0.002
Ainsi, pour quelqu'un qui est niveau 30 , ça donne:

z = (30 * 31) / 0.002
Soit un total de 465.000 points d'expérience pour atteindre le niveau 31. Ensuite, suffit de faire le calcul proposé par Starry.

CQFMD (Ce Qu'il Fallait Mal Démontrer).


Je suis toujours open pour des explications plus claires, plus précises et/ou des solutions plus rapides/simples.

« Modifié: 17 Mars 2008, 19:02:57 par Diyo »

Starrynight

Re : [Maths] Explication d'une formule
« Réponse #11 le: 17 Mars 2008, 19:02:25 »
A vos marques, prêts, partez.

Si je reprends l'écriture que j'ai utilisé plus haut :
Pour connaître XP au niveau i+1, j'utilise la formule XP(i+1) = XP(i) + 1000*i

Ca, c'est une suite, donc si je veux connaître XP au rang n en fonction de n et de X(1), j'ai la formule :
XP(n)=XP(1)+1000*[Somme(k=1..n-1) de k]

Sachant que XP(1)=0, j'ai donc XP(n)=1000*[Somme(k=1..n-1) de k]

Exemple avec n=6 XP(6)=1000*[Somme(k=1..5) de k]=1000*(1+2+3+4+5)=1000*15=15000 On retombe bien sur nos pattes.


Maintenant, comme le rappelle si gentiment El Nounourso, les maths me disent que [Somme(k=1..n-1) de k]=n*(n-1)/2

D'où XP(n) = 1000*n*(n-1)/2
0,002*XP(n) = n*(n-1)
0,002*XP(n)+0,25 = n*(n-1)+0,25 = n²-n+0,25 = (n-0,5)²  (pour rappel (a-b)² = a² - 2*a*b +b²)
sqrt(0,002*XP(n)+0,25) = n-0,5 (je m'en fous de la racine négative, les indices sont positifs)
sqrt(0,002*XP(n)+0,25) + 0,5 = n

Voici l'explication de la formule qui t'intriguait. Elle me donne bien l'indice en solution
Le floor ne servant qu'à prendre la partie entière afin d'avoir toujours un entier en sortie.

CQFD


Tain, quand je vois comment j'ai lutté pour sortir ce raisonnement en fait simple, je me dis que les maths ça s'oublie vite :S
« Modifié: 17 Mars 2008, 22:14:21 par Starrynight »

Lisez les news.

"Je m’intéresse à l’avenir car c’est là que j’ai décidé de passer le restant de mes jours" (Woody Allen)

Manu974

Re : [Maths] Explication d'une formule
« Réponse #12 le: 17 Mars 2008, 19:27:50 »
héhé Starry +1  :ph34r:
(il retrouve ma fomule)
et en plus il trouve le retour sans passer par l'affreux calcul de la bijection reciproque (j'ai la flemme de lancer maple)...
[* It's always better on holidays, so much better on holidays... [*

Scalix

Re : [Maths] Explication d'une formule
« Réponse #13 le: 17 Mars 2008, 19:48:36 »
Mon dieu, ce topic me donne une nausée post-traumatique....

Oui je sais, je post pour rien ; mais ça me tenait à cœur d'exprimer ostensiblement mon dégoût pour les mathématiques =]

Manu974

Re : [Maths] Explication d'une formule
« Réponse #14 le: 17 Mars 2008, 20:04:28 »
honte a toi...
(encore un post inutile, mais maintenant que la questio est résolue que ce topic finisse aux archives et qu'on erige une statue pour starry :-) )
[* It's always better on holidays, so much better on holidays... [*