Algorithm 预测长流程的完成时间有哪些好方法?
tl;dr:我想预测文件拷贝完成情况。考虑到开始时间和当前进度,有哪些好方法? 首先,我知道这根本不是一个简单的问题,预测未来很难做好。在上下文中,我试图预测长文件副本的完成情况 当前方法: 目前,我正在使用我自己提出的一个相当幼稚的公式:(ETC代表预计完成时间) 这是基于这样的假设,即要复制的其余文件将以迄今为止的平均复制速度进行复制,这可能是一个现实的假设,也可能不是一个现实的假设(此处处理磁带存档)Algorithm 预测长流程的完成时间有哪些好方法?,algorithm,language-agnostic,time,prediction,file-copying,Algorithm,Language Agnostic,Time,Prediction,File Copying,tl;dr:我想预测文件拷贝完成情况。考虑到开始时间和当前进度,有哪些好方法? 首先,我知道这根本不是一个简单的问题,预测未来很难做好。在上下文中,我试图预测长文件副本的完成情况 当前方法: 目前,我正在使用我自己提出的一个相当幼稚的公式:(ETC代表预计完成时间) 这是基于这样的假设,即要复制的其余文件将以迄今为止的平均复制速度进行复制,这可能是一个现实的假设,也可能不是一个现实的假设(此处处理磁带存档) PRO:ETC将逐渐变化,并随着过程接近完成而变得越来越精确 缺点:它对意外事件的反应
- PRO:ETC将逐渐变化,并随着过程接近完成而变得越来越精确
- 缺点:它对意外事件的反应不好,例如文件副本卡住或快速加速
ETC = currTime + currAvg * (totalSize - sizeDone)
这与第一种方法相反,因为:
- PRO:如果速度变化很快,ETC将快速更新以反映当前情况李>
- CON:如果速度不一致,ETC可能会跳转很多次
- 如果副本具有相当一致的长期平均速度,则对第一种方法的权重更高,即使它在局部有点跳跃
- 如果复制速度不可预测,并且可能会长时间加速/减速,或者长时间完全停止,则对第二种方法的权重更高
- 我给出的两种方法的任何替代方法
- 如果以及如何结合几种不同的方法来获得最终预测
使用卡尔曼滤波器而不是固定的n秒滑动窗口的主要优点是它是自适应的:当测量值比稳定时跳得更多时,它会自动使用更长的平均窗口。我已经实施了两种不同的解决方案来解决此问题:
嗯,糟糕的ETC实现被广泛滥用,这使得我们能够。有时,最好显示事实而不是估计,例如:
- 已复制10个文件中的5个
- 已复制200 MB中的10个
每个用户都知道ETCs通常是没有意义的,然后很难区分有意义的ETC和无意义的ETC,特别是对于没有经验的用户。
这里有两件事要考虑:
- 精确估计
- 如何将其呈现给用户
ETC = currTime + currAvg * (totalSize - sizeDone)
Speed = (10 * x0 + 9 * x1 + 8 * x2 + ... + x9) / (10 * window-time) / 55
real-completion = 0.4
presented-completion = real-completion * factor(real-completion)