我想这是一个数学问题,而不是一个编程问题,但是什么是创建收益递减的公式的好方法?
以下是我希望曲线看起来如何的一些示例点。
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
请注意,随着输入变高,百分比会迅速下降。有没有办法对具有非常平滑和准确的曲线的函数进行建模,并说明这一点?
另一种说法是使用一个真实的例子。你知道在暗黑破坏神II中他们有魔法发现吗?魔法发现的回报越来越少。如果你得到100%,真正的魔法发现仍然是100%。但是得到的越多,你的实际魔法发现就会下降。这么多说如果你有1200,你真正的魔法发现可能是450%。所以他们有这样的功能:
actualMagicFind(magicFind) = // some way to reduced magic find
答案 0 :(得分:16)
其中r是复合递减收益率
这只是指数衰减
答案 1 :(得分:4)
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。使用实曲线,输出不会在任何均匀间隔的输入之间均匀分布。换句话说,曲线不是曲线,如图所示:https://docs.google.com/spreadsheets/d/1EEbRxTyYalPSyQ93rcIbKiIvmYRX1lhRvkRh_HyofJc/edit?usp=sharing
所以,让我们忽略你的曲线&#34 ;;有几种方法可以创造递减收益。我最喜欢的一个是:
f(x) = (x*a) / (x+b) + c
您可以根据需要设置a
,b
和c
。使用此格式a + c
*基本上*成为您的最大可能输出,c
是您的最小值,b
控制输出值缩放的速度及其有效性相对于{{1 }}。当输入增加时,此曲线当然会增加输出,而您的示例希望在输入增加时减小输出。要解决此问题,您可以交换分子和分母:
a
这使得最小输出值等于f(x) = (x+b) / (x*a) + c
,当输入值接近0时,最大输出值接近无穷大。1/a + c
再次控制输出的缩放速度及其相对于价值b
。
另一种方法是使用类似@Pierreten所提到的内容,但我不确定为什么他明确使用a
:
e
a^(-bx)
和a
都会对曲线的缩放速度产生深远的影响。如果b
大于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
还有其他一些选项,但这已足够长了。
答案 2 :(得分:1)
任何反指数函数,例如f(x) = 1/(x2)。修改指数以调整曲线的陡度。