你如何创造一个收益递减的公式?

ege*_*ari 9 math function

我想这是一个数学问题而不是编程问题,但是什么是创建收益递减的公式的好方法?

以下是我希望曲线看起来如何的一些示例点.

f(1) = 1
f(1.5)= .98
f(2) = .95
f(2.5) = .9
f(3) = .8
f(4) = .7
f(5) = .6
f(10) = .5
f(20) = .25 
Run Code Online (Sandbox Code Playgroud)

请注意,随着输入变高,百分比会迅速下降.有没有办法对具有非常平滑和准确曲线的函数进行建模?

另一种说法是使用一个真实的例子.你知道在暗黑破坏神II中他们有魔法发现吗?魔法发现的回报越来越少.如果你得到100%,真正的魔法发现仍然是100%.但是得到的越多,你的实际魔法发现就会下降.这么多说如果你有1200,你真正的魔法发现可能是450%.所以他们有这样的功能:

actualMagicFind(magicFind) = // some way to reduced magic find
Run Code Online (Sandbox Code Playgroud)

Pie*_*ten 17

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


其中r是复合收益递减率

这只是指数衰减

  • <sup> -rx </ sup>(上标) (3认同)

Joe*_*Zim 7

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

这没有意义:对于 3-5,每次加 1 都会减去 0.1。对于真实曲线,输出不会在任何均匀间隔的输入之间均匀间隔。换句话说,您的曲线不是曲线,如图所示:https://docs.google.com/spreadsheets/d/1EEbRxTyYalPSyQ93rcIbKiIvmYRX1lhRvkRh_HyofJc/edit ?usp=sharing

所以让我们忽略你的“曲线”;有多种方法可以创造收益递减的效果。我最喜欢的之一是:

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

您可以制作ab、 以及c任何您想要的东西。使用这种格式a + c本质上*成为您的最大可能输出,c是您的最小值,并b控制输出值缩放的速度及其有效性相对于 的值a。当然,这条曲线会随着输入的增加而增加输出,而您的示例希望随着输入的增加而减少输出。要解决此问题,您可以交换分子和分母:

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

这使得最小输出值等于1/a + c,当输入值接近 0 时,最大输出值接近无穷大。b再次控制输出缩放的速度及其有效性相对于 的值a


另一种方法是使用 @Pierreten 提到的类似方法,尽管我不确定他为什么明确使用e

a^(-bx)

两者a都会b对曲线缩放的速度产生深远的影响。如果a大于0且小于1,则产出会随着输入的增加而增加,但也会产生相反的效果,这意味着收益会递增,而不是递减。如果a大于 1,那么您将看到输出的预期效果随着输入的增加而减少,且收益递减。以下是我发现的与您描述的数字最接近的内容:

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

还有其他几个选项,但这已经足够长了。