Partage
  • Partager sur Facebook
  • Partager sur Twitter

Formule pour tendre vers X sans jamais l'atteindre

Sujet résolu
6 novembre 2020 à 12:27:08

Bonjour à tous,

Je travaille sur un jeu et je recherche une formule.

Pour vous mettre dans le contexte, un personnage (P1) a un logement. Il peut y ajouter des objets pour le protéger des pillages.

Le pilleur (P2), quant à lui, a des points de compétences en pillage

Imaginons que P1 installe une porte qui protège a X%

Et P2 à Y points de compétence en pillage.

Je cherche donc une formule qui, en fonction du nombre de points de compétence en pillage, se rapproche de X sans jamais l'atteindre.

Par exemple, la porte protège a 80%. 10 points en pillage donne 10% de chance de passer la porte, 20 points donne 19%, ..... 100 points donne 78.9%, 500 points donne 79.9% etc.

J'imagine qui faut utiliser les logarithmes mais je ne sais pas quelle est la formule adaptée. Ça m'apprendra à ne pas écouter les cours de math...

Merci à vous pour les réponses que vous m'apporterez :D

-
Edité par tonin2310 6 novembre 2020 à 12:27:41

  • Partager sur Facebook
  • Partager sur Twitter
6 novembre 2020 à 13:12:31

La vrai question n'est pas de trouver une fonction qui tend vers X, mais qui tend vers X de la manière que tu veux. Des fonctions qui tendent vers X, il y en a une infinité. Il faudrait que tu soit plus précis sur ce que tu recherche. Une bonne étape serai de faire un graphe approximatif des valeurs que tu souhaites.

De plus je viens de regarder les valeurs de tes exemple et c'est un peu paradoxal: Tu dis que si une porte protège à 80%, alors quand le nombre de point de pillage de l'assaillant tend vers +inf, ses chances de passer la porte tendent vers 80% pars des valeurs inférieures. Je suis censé conclure que la chance de passer une défense est majorée par sa protection ? Alors autant mettre un objet à 0% de protection, histoire que ses chances tendent vers 0 et qu'il ne puisse pas rentrer.

Je pense que c'est une faute d’inattention et que dans ta tête tu voulais dire 1-80% = 20%. Tu peux donc essayer avec la fonction f(x) = a * (1 - 1/(e^(x/b))) avec a qui correspond à la valeur vers laquelle la fonction tend et b qui, plus il est haut, plus il ralentit la convergence de la fonction. ICI

Enfin: non. Ce ne sont pas les fonction logarithmiques qui risquent de t'aider de manière simple car elles tendent toutes vers l'infini, et très lentement, donc c'est pas pratique pour ce genre de situation.

-
Edité par NiwdEE 6 novembre 2020 à 13:28:31

  • Partager sur Facebook
  • Partager sur Twitter

"Si ce n'est pas dur, ce n'est pas intéressant"

6 novembre 2020 à 13:26:57

Une autre proposition.

Je choisi un nombre arbitraire, 5 dans mon cas, mais tu peux choisir 10, ou 1 ou 1000, comme tu veux.  

X est le niveau de protection : la formule donnant Z devra donner un nombre qui ne dépasse jamais X.

Y est le niveau de compétence du pilleur ... c'est un nombre etre 0 et .... 1 000 000 par exemple, mais il n'y a pas de limite.

ma formule : Z = X * (Y)/(Y+5)

  • Partager sur Facebook
  • Partager sur Twitter
6 novembre 2020 à 14:32:19

Déjà, merci à vous deux pour vos réponses.

@NiwdEE

Je me suis effectivement mal exprimé, même moi, je ne comprends plus ma phrase :honte:. Donc oui, 20% de protection donc jusqu'à 80% de chance de passer et vice-versa.

Les maths, c'est vraiment pas mon fort. Du coup, pour la formule que tu m'as donné, f(x) = a * (1 - 1/(e^(x/b))). En utilisant les nombres du dessus, 20% de protection donc 80% de chance de passer et 15 points de compétence, f(x) = 80 * (1 - 1/(e^(x/15)))

Je ne vois pas du tout ce que je peux faire du x pour avoir ce que je veux. Est-ce que je dois mettre un nombre aléatoire ?

Ou alors f(15) = 80 * (1 - 1/(e^(15/b)))avec b comme nombre aléatoire ?

@tbc92

Super formule :D Elle fait ce que je recherche :D Je n'ai plus qu'à définir le nombre qui me convient ;)

Encore merci à vous deux et j'attends de tes nouvelles NiwdEE :)

  • Partager sur Facebook
  • Partager sur Twitter
6 novembre 2020 à 18:55:54

En l'occurrence, le a représente bien les chances de passer l’obstacle mais c'est un pourcentage, c'est donc 80/100 = 0.80 qu'il faut mettre en facteur (enfin tout dépend de comment tu code ton aléatoire mais en maths, une proba c'est entre 0 et 1). Et b c'est comme tu veux. Tu peux tester avec les valeur que tu veux et il sert simplement à faire converger f(x) un peu moins vite.

C'est donc ta 2e interprétation de f(x) qui est correcte avec f(x) qui correspond à la probabilité de passer l'obstacle sachant qu'on a x points de compétence.

Enfin, faire un teste aléatoire, il y a deux méthodes:

Avec des nombres réels:

Générer un nombre entre 0 et 1 (réel hein).

Avec des entiers:

Générer un nombre entre 0 et 10^n et le diviser par 10^n avec n le nombre maximal de chiffre après la virgule(s'il existe).

Si ce nombre est inférieur à la probabilité on considère le test passé.

  • Partager sur Facebook
  • Partager sur Twitter

"Si ce n'est pas dur, ce n'est pas intéressant"

8 novembre 2020 à 7:25:59

Okay, super. Merci pour ton explication intéressante et surtout compréhensible. Je vais étudier les deux formules même si elles font, pour mon cas, l'affaire l'une comme l'autre.
  • Partager sur Facebook
  • Partager sur Twitter