有哪些好方法可以预测长期过程的完成时间?

Cam*_*son 15 language-agnostic algorithm time prediction file-copying

tl; dr:我想预测文件复制完成.考虑到开始时间和当前进度,有哪些好的方法?

首先,我知道这根本不是一个简单的问题,预测未来很难做好.对于上下文,我试图预测长文件副本的完成.

目前的方法:

目前,我正在使用一个我自己提出的相当天真的公式:(ETC代表估计的完成时间)

ETC = currTime + elapsedTime * (totalSize - sizeDone) / sizeDone
Run Code Online (Sandbox Code Playgroud)

这是基于这样的假设,即要复制的剩余文件将以迄今为止的平均复制速度进行,这可能是也可能不是一个现实的假设(在这里处理磁带存档).

  • PRO: ETC将逐渐变化,并随着过程接近完成而变得越来越准确.
  • CON:它对意外事件没有很好的反应,例如文件副本卡住或快速加速.

另一个想法:

我的下一个想法是记录最后n秒(或分钟,因为这些档案应该花费数小时)的进度,并且只做以下事情:

ETC = currTime + currAvg * (totalSize - sizeDone)
Run Code Online (Sandbox Code Playgroud)

这与第一种方法相反:

  • PRO:如果速度变化很快,ETC将快速更新以反映当前的状况.
  • CON:如果速度不一致,ETC可能会跳转很多.

最后

我想起了我在大学所做的控制工程课程,其目标主要是试图让系统对突然变化做出快速反应,但不是不稳定和疯狂.

话虽如此,我能想到的另一个选择是计算上述两者的平均值,也许是通过某种加权:

  • 如果副本具有相当一致的长期平均速度,即使它在本地跳跃一点,也可以对第一种方法进行加权.
  • 如果复制速度不可预测,则更多地对第二种方法进行加权,并且可能会长时间加速/减速,或者长时间停止.

我真正要求的是:

  • 我给出的两种替代方法.
  • 是否以及如何组合几种不同的方法来获得最终预测.

NPE*_*NPE 8

如果您认为预测的准确性很重要,那么建立预测模型的方法如下:

  1. 收集一些真实的测量结果;
  2. 将它们分成三个不相交的集合:训练,验证测试 ;
  3. 提出一些预测模型(你已经有两个加上混合)并使用训练集来拟合它们;
  4. 检查验证集上模型的预测性能,并选择性能最佳的模型;
  5. 使用测试集来评估所选模型的样本外预测误差.

我猜测你现在的模型和"最后n秒的平均值" 的线性组合对于手头的问题表现得非常好.可以使用线性回归(R中的单线程)拟合线性组合的最佳权重.

研究统计学习方法的一个很好的资源是Hastie,Tibshirani和Friedman 的统计学习要素.我不能高度推荐这本书.

最后,你的第二个想法(过去n秒的平均值)试图测量瞬时速度.对此更强大的技术可能是使用卡尔曼滤波器,其目的恰恰如下:

其目的是使用随时间观察的测量值,包含噪声(随机变化)和其他不准确度,并产生更接近测量值的真实值及其相关计算值的值.

使用卡尔曼滤波器而不是固定的n秒滑动窗口的主要优点是它具有自适应性:当测量值大约稳定时,它会自动使用较长的平均窗口.