11
votes

Comment créez-vous une formule qui a des rendements décroissants?

Je suppose que c'est une question mathématique et non une question de programmation, mais ce qui est un bon moyen de créer une formule qui a des rendements décroissants?

Voici quelques points sur la façon dont je veux que la courbe ressemble à la courbe.

actualMagicFind(magicFind) = // some way to reduced magic find


6 commentaires

Oui, cela s'appelle l'interpolation et il existe une branche d'analyse numérique qui traite de cela.


Cette question devrait être déplacée à Mathoverflow.net car il ne s'agit pas de la programmation


@Luke: Mathoverflow est pour les mathématiques de niveau de recherche. Je pense que cela est limite pour le cas, mais d'accord depuis que @Egervari essaie d'écrire une fonction.


Ne postez pas cela à Mathoverflow. Les gens de Mathoverflow tire cette question comme la saison de la chasse à la caille.


Hah! Je dirai. Le françonverflow est similaire à celui-là.


Je vote pour fermer cette question comme étant hors sujet, car il s'agit de mathématiques, pas de programmation.


3 Réponses :


17
votes

f (x) = f (0) e -rx de

où r est la vitesse de return de diminution composée

Ceci est juste une décroissance exponentielle


9 commentaires

Deux questions, qu'est-ce que e? et est-ce que e au pouvoir de -r?


e est le numéro d'Euler; et tout après la ^ est exponéiée


-rx (étiquette Superscript)


Je ne sais pas comment traduire cela. Prenons l'exemple de la magie de la magie, j'ai dit ci-dessus. Voici quelques exemples: RealMF (0) = 0, RealMF (100) = 100, RealMF (200) = 180, RealMF (300) = 250, RealMF (600) = 350, RealMF (1200) = 450. Dans ce cas, quel est x? J'ai regardé sur Wikipedia et c'est le moment, mais je ne connais pas l'heure cible.


@Egervari: Si vous voulez une courbe "plate" autour de zéro, utilisez la courbe gaussienne F (x) ~ e ^ (- x² / a²). F (x) ~ xe ^ (- RX) produira un comportement comme dans votre commentaire, essayez RealMF (x) = 100x * e ^ (- x / 1000)


@Egervari: Si vous voulez une équation mathématique qui satisfait à ces points, vous devez utiliser Curve Raccord.


x est juste la variable indépendante; Il peut être temps, distance, magie accumulée, etc. basé sur les points de votre courbe définis dans la question; Vous devriez être capable de trouver r. Vous savez déjà que f (0) = 1; Donc, cela simplifie la fonction où vous ne faites que traiter avec f (x) = e ^ -kx. Le deuxième point branché donnera .98 = E ^ - (K * 1.5). Résolez ceci pour K en prenant le Naturallog des deux côtés.


Merci pour tous les conseils. Je suis terminé par ce que je voulais avec une combinaison de toute l'aide ici. MDR. J'ai eu beaucoup de formules dans un match similaire, alors j'imagine que chacun va être différent. Une des formules s'est passée comme ceci, où le ratio était x dans mes premiers exemples: math.pow (math.e, -ratio / 20) * vitesse


Votre math.pow (math.e, truc) peut être remplacé par math.exp (truc) en java. Voir Java.sun. COM / J2SE / 1.5.0 / DOCS / API / Java / Lang / ...



2
votes

Toute fonction exponentielle inverse, telle que F (x) = 1 / (x 2 ) . Modifiez l'exposant pour ajuster la raideur de la courbe.


0 commentaires

4
votes

f (1) = 1
F (1.5) = 0,98
f (2) = 0,95
F (2.5) = .9
f (3) = .8
f (4) = .7
F (5) = .6
f (10) = .5
F (20) = .25

Cela n'a pas de sens: pour 3-5, en ajoutant un chaque fois soustrait .1. Avec une véritable courbe, la sortie ne serait pas comprise entre des entrées uniformément espacées. En d'autres termes, votre courbe n'est pas une courbe, comme vous pouvez le voir par le graphique: https://docs.google.com/spreadsheets/d/1eebrCIBKIIVMyrex1lhrvkrh_hyofjc/edit?usp=sharing

Alors, ignorons simplement votre "courbe"; Il existe plusieurs façons de créer des rendements décroissants. Un de mes favoris est:

f (x) = (x * a) / (x + b) + C

Vous pouvez faire a , b et c tout ce que vous voulez. Avec ce format A + C essentiellement * devient votre sortie maximale possible, C est votre minimum et B contrôle la rapidité des valeurs de sortie et Son efficacité est relative à la valeur du A . Cette courbe augmente bien sûr la sortie lorsque l'entrée augmente, alors que votre exemple veut diminuer la sortie lorsque l'entrée augmente. Pour résoudre ce problème, vous pouvez échanger le numérateur et le dénominateur:

f (x) = (x + b) / (x * a) + C

Ceci rend la valeur de sortie minimale égale à 1 / a + C , la valeur de sortie maximale approche l'infini lorsque la valeur d'entrée s'approche 0. B contrôle à nouveau sur la rapidité. Les échelles de sortie et son efficacité sont relatives à la valeur du A .


Une autre approche serait d'utiliser quelque chose comme ce qui a été mentionné par @pierreten, bien que je ne suis pas sûr de savoir pourquoi il utilise explicitement E :

A ^ (- BX)

Les deux A et B ont un impact profond sur la rapidité des échelles de courbe. Si A est supérieur à 0 et inférieur à 1, la sortie augmentera à mesure que l'entrée augmente, mais aura également l'effet inverse, ce qui signifie qu'il aura des rendements croissants, sans diminuer. Si A est supérieur à 1, vous verrez l'effet souhaité de la sortie diminuer lorsque l'entrée augmente avec des rendements décroissants. Ce qui suit est la chose la plus proche que j'ai trouvée aux chiffres que vous avez décrites:

f (x) = 1,01 ^ (- 6.96607x)
f (0) = 1
f (1) = 0.933
f (3) = 0.812
F (10) = 0.5
F (20) = 0,25

Il existe également plusieurs autres options, mais cela est suffisamment long.


0 commentaires