Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 计算当前速度的算法(不仅仅是平均速度)?_Algorithm - Fatal编程技术网

Algorithm 计算当前速度的算法(不仅仅是平均速度)?

Algorithm 计算当前速度的算法(不仅仅是平均速度)?,algorithm,Algorithm,通常,人们希望确定由许多步骤组成的某些过程(计算、下载、网络传输、渲染等)的当前速度,这些步骤的持续时间是可以测量的。但是,当仅进行最后一次测量时,显示不稳定,因此通常的方法是在某个时间段内平滑。另一方面,当速度突然变化时,这会导致显示“滞后”,因此显示的速度变化平稳,而底层过程却非常突然地改变了它的速度 给定此类步骤的长序列测量(例如,转移块、计算迭代),我想 显示当前速度 尽可能长的平均,但是 在速度变化期间不平均 从图形上看,这意味着我要计算带噪波的分段线性曲线的当前斜率,同时自动检测

通常,人们希望确定由许多步骤组成的某些过程(计算、下载、网络传输、渲染等)的当前速度,这些步骤的持续时间是可以测量的。但是,当仅进行最后一次测量时,显示不稳定,因此通常的方法是在某个时间段内平滑。另一方面,当速度突然变化时,这会导致显示“滞后”,因此显示的速度变化平稳,而底层过程却非常突然地改变了它的速度

给定此类步骤的长序列测量(例如,转移块、计算迭代),我想

  • 显示当前速度
  • 尽可能长的平均,但是
  • 在速度变化期间不平均
从图形上看,这意味着我要计算带噪波的分段线性曲线的当前斜率,同时自动检测线段端点(斜率/速度变化)


我可以自己提出算法,我也可以应用几何曲线拟合的一些知识,但我想知道,对于这个(似乎非常常见的)特殊问题,是否有非平凡的解决方案?任何突出的参考文献、教科书示例、开源实现?

由于我收到的评论指出了明显的解决方案,我将在这里描述我当前的想法,我想对照文献/现有的好实现进行检查:

  • 定义平均时间的最短期限(例如,5秒)
  • 定义这样一个最长时间(例如,1分钟)
  • 在此过程中:
    • 将新测量值推入FIFO
    • 如果年龄超过上述最长时间,则从FIFO中弹出旧测量值
    • 每次显示更新时
      • 用最小周期初始化显示周期(并从该周期计算速度)
      • 当显示周期小于FIFO时,放大显示周期,并且下一个样本“匹配”显示周期内的速度
      • 更新显示

"匹配"是关键,;从数学上讲,人们想知道所讨论的样本来自同一分布的概率。假设正态分布可能是最好的,但我甚至想到了一些非单峰的例子。

不是一个完整的解决方案,但无论如何可能有用:

您可以对一些累积样本进行线性回归。这将为您提供当前速度以及下一个采样的预期值,前提是速度和噪波没有改变

如果下一个样本位于预期范围内,则更新回归参数(可以增量完成),从而细化速度值并缩小下一个样本的预期范围

如果样本位于预期范围之外,则可能发生了速度变化,然后重新开始回归(可能包括一些最近的样本,而不是从零开始)


我没有深入研究数学,但也许新的速度决策可以基于降低的相关系数,而不是/除了离群值检查。

获取最后一个已处理任务的数量。将其除以所需时间。这叫做导数。我知道,谢谢,我已经提到了“斜率”,它与一阶导数密切相关。在处理计算机离散世界时,最接近瞬时速度的方法是测量两个连续单位之间的时间,不同的是瞬时速度,单位为每时间单位(最有可能是毫秒或纳秒)。为了不影响性能,您可以选择每N个处理单元测量一次。关键短语是“带噪声的分段线性曲线的当前斜率”,其他一些评论显然没有意识到这一点。事实上,这里留给您的问题是,我们在第一位求平均值的原因是——如何区分(a)与(b)由于潜在趋势的实际变化而导致的峰值相对应的虚假“峰值”?由于我们无法预测未来,我们通常要做的权衡是你所说的延迟。