基于时间的算法评分

时间:2014-02-14 05:42:42

标签: algorithm math

我们希望创建一种评分算法,该评分算法可以在更短的时间内获得更高的积分,在更长的时间内获得更少的积分需要注意的是,没有真正的范围,因此时间范围可以从100毫秒到10分钟或更长,范围从0到50。

感谢您的帮助。

4 个答案:

答案 0 :(得分:3)

您可以使用以下公式简单地将其设为线性映射

points = 50 * 100/time_in_ms

这会给你:

  • time_in_ms=100ms => 50
  • ...
  • time_in_ms=10min => 0.0083
  • ...
  • time_in_ms=+∞ => 0

如果时间和点的范围发生变化,您可以轻松调整上述等式。

答案 1 :(得分:2)

您可以在应用线性映射之前以某种方式转换延迟,以便更快地提供更快和更慢的点。一种选择是采用到目前为止的时间对数。另一个选项是函数f(x) = Ax/(A + x),它在x = 0时从0快速增加,但随着x增加时向下减速,但从未完全达到它。 (这会增加,你想减少,但你可以用线性函数来解决 - 一个明显的例子是点= A - Ax/(A + x))

例如,如果您设置A=10,那么

f(0) = 10 - 10*0/(10 + 0) = 10, 
f(1) = 10 - 10/11 = 9 1/11, 
f(2) = 10 - 20/12 = 8 1/3, 
f(100) = 10 - 1000/110 = 10/11 

等等。

答案 2 :(得分:0)

我认为你有两个选择:

  1. 如果您真的希望能够为任何时间长度分配点数,请选择一个除以点数的公式,例如:

    points = [max_number_of_points]/[time]
    

    在这里,time应该是您最小的测量单位,以便它永远不会小于零。如果您不希望点数量以该速度减少,请将time除以或乘以某个常数,直到点数分布看起来如您所愿。

  2. 确定,确实存在一个极限,即时间太长以至于任何时间都超过了零点。例如,我怀疑你关心的是时间是1亿年时的点差,而不是1000亿年。因此,以这种方式人为地选择最大时间,将所有较大的时间分配为零点,然后在有限范围内继续使用您的评分算法。

答案 3 :(得分:0)

如果记录集太大,那么这样的事情必须延迟一些。

假设您在一个流中不断获得每个用户的时间,您可以在一段时间内跟踪max值,并且还有另一个系统可以动态地对点进行评分。

在以毫秒计算的现有记录时间段的决定重复间隔之后触发点的计算(可能存储在链表中或可能是动态增长的二维数组。

点计算的逻辑:

我们清楚地将其视为所用时间的反向线性关系。所以你知道时间值等于上面计算的平均值的所有记录在1到50的范围内得到25个。

因此,对于给定的记录假定100毫秒,其中最大值是500毫秒,答案是 50 * (500 - 100 ) / 500