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)
这是基于这样的假设,即要复制的剩余文件将以迄今为止的平均复制速度进行,这可能是也可能不是一个现实的假设(在这里处理磁带存档).
另一个想法:
我的下一个想法是记录最后n秒(或分钟,因为这些档案应该花费数小时)的进度,并且只做以下事情:
ETC = currTime + currAvg * (totalSize - sizeDone)
Run Code Online (Sandbox Code Playgroud)
这与第一种方法相反:
最后
我想起了我在大学所做的控制工程课程,其目标主要是试图让系统对突然变化做出快速反应,但不是不稳定和疯狂.
话虽如此,我能想到的另一个选择是计算上述两者的平均值,也许是通过某种加权:
我真正要求的是:
如果您认为预测的准确性很重要,那么建立预测模型的方法如下:
我猜测你现在的模型和"最后n秒的平均值" 的线性组合对于手头的问题表现得非常好.可以使用线性回归(R中的单线程)拟合线性组合的最佳权重.
研究统计学习方法的一个很好的资源是Hastie,Tibshirani和Friedman 的统计学习要素.我不能高度推荐这本书.
最后,你的第二个想法(过去n秒的平均值)试图测量瞬时速度.对此更强大的技术可能是使用卡尔曼滤波器,其目的恰恰如下:
其目的是使用随时间观察的测量值,包含噪声(随机变化)和其他不准确度,并产生更接近测量值的真实值及其相关计算值的值.
使用卡尔曼滤波器而不是固定的n秒滑动窗口的主要优点是它具有自适应性:当测量值大约稳定时,它会自动使用较长的平均窗口.