估计/预测下载完成时间

时间:2009-12-10 15:15:38

标签: algorithm math estimation probability

我们都在“剩下的X分钟”对话框中玩得很开心,这似乎过于简单了,但我们怎样才能改进呢?

实际上,输入是直到当前时间的下载速度集合,我们需要使用它来估计完成时间,可能有一定的确定性,例如“剩余20分钟”,使用一些Y%置信区间。

执行此操作的代码可以放在一个小库中,并在各个项目中使用,所以它真的很难吗?你会怎么做?你对以前的下载速度有什么加权?

或者是否已经有一些开源代码?

编辑:总结:

  1. 通过更好的算法/过滤器等改善预计完成时间。
  2. 提供间隔而不是单次('1h45-2h30分钟'),或仅限制精度('约2小时')。
  3. 说明进展何时停滞 - 虽然如果进展一直停滞然后继续,我们应该能够处理。也许'大约2个小时,目前停滞'

5 个答案:

答案 0 :(得分:12)

更一般地说,我认为您正在寻找一种方法来快速确定传输速度,这通常是通过一小段时间内的平均速度获得的。

问题通常在于,为了被动,时间通常非常小,这会导致yoyo效应。

我会提出一个非常简单的方案,让我们对它进行建模。

考虑曲线速度(y)随时间的推移(x)。

  1. 即时速度,只是读取当前x(x0)的y。

  2. 平均速度不超过Integral(f(x), x in [x0-T,x0]) / T

  3. 我建议的方案是应用过滤器,以便在最后时刻给予更多权重,同时仍然考虑过去的时刻。

  4. 它可以很容易地实现为g(x,x0,T) = 2 * (x - x0) + 2T,它是表面T的简单三角形。

    现在你可以计算Integral(f(x)*g(x,x0,T), x in [x0-T,x0]) / T,这应该有效,因为两个函数都是正的。

    当然,只要在给定的时间间隔内它总是正数并且它在间隔上的积分是T(因此它自己的平均值正好是1),你可以有一个不同的g

    这种方法的优点在于,因为你给予即时事件更多的权重,即使你考虑更大的时间间隔(使平均值更精确,更不容易出现打嗝),你仍可以保持相当的反应性。

    此外,我很少看到但想到会提供更精确的估算,将用于计算平均值的时间与估计的剩余时间相关联:

    • 如果我下载一个5ko文件,它会立即加载,无需估算
    • 如果我下载一个15 Mo文件,大概需要2分钟左右,所以我想估计说每隔5秒钟一次?
    • 如果我下载一个1.5 Go文件,它将需要......大约200分钟(速度相同)...也就是说3小时20分钟...也许每分钟估计就足够了? / LI>

    因此,下载的时间越长,我需要的反应越少,我的平均值就越高。一般来说,我会说一个窗口可以覆盖总时间的2%(可能除了少数的初步估计之外,因为人们喜欢立即反馈)。此外,一次指示整个%的进展就足够了。如果任务很长,我还是准备等待。

答案 1 :(得分:8)

我想知道,状态估算技术会在这里产生好的效果吗?卡尔曼过滤器之类的东西?

基本上,您通过查看当前模型来预测未来,并在每个时间步骤更改模型以反映现实世界的变化。我认为这种技术用于估算笔记本电池剩余的时间,也可能因使用情况,电池使用年限等因素而异。

请参阅http://en.wikipedia.org/wiki/Kalman_filter以获得更深入的算法说明。

过滤器还提供方差度量,可用于表示您对估计值的置信度(尽管如其他答案所述,可能不是向最终用户显示此信息的最佳方法)

是否有人知道这是否实际用于下载(或文件复制)估算?

答案 2 :(得分:4)

不要混淆您的用户,提供超出他们需要的信息。我在考虑置信区间。跳过它。

互联网下载时间变化很大。微波会干扰WiFi。使用情况因时间,星期几,假日和新激动人心的游戏发布而异。服务器现在可能负载很重。如果您将笔记本电脑带到咖啡馆,结果将与在家不同。因此,您可能无法依赖历史数据来预测下载速度的未来。

如果您无法准确估算剩余时间,则不要欺骗您的用户,提供此类估算值。

如果您知道必须下载多少数据,可以提供已完成的百分比

如果您根本不知道,提供“心跳” - 一个移动的用户界面,向用户显示事情正在发挥作用,即使您不知道还有多长时间。

答案 3 :(得分:2)

改善估计的时间本身:直观地说,我猜测网络连接的速度是一系列临时平均速度的随机值 - 事物以一个速度嘀嗒,然后突然变慢或加速。

然后,一个选项可能是将前一组速度加权一些指数,以便最近的值得到最强的加权。这样,随着先前的平均速度进一步进入过去,其对当前平均值的影响减小。

但是,如果速度随机波动,可能值得将指数顶部变平(例如使用Gaussian filter),以避免过大的波动。

总而言之,我正在考虑测量标准偏差(可能仅限于最后N分钟)并使用它来生成应用于输入的高斯滤波器,然后使用标准偏差限制引用的精度

但是,如何将标准偏差计算限制在最后N分钟?你怎么知道使用多长时间?

或者,有模式识别的可能性来检测我们是否达到了稳定的速度。

答案 4 :(得分:0)

我自己也考虑过这个问题。我的答案从计算当前(以及未来)传输速率时的保守开始,并包括更长时间的平均,以获得更稳定的估计。也许低通过滤显示的时间,以便在2分钟到2天之间不会跳跃。

我不认为置信区间会有所帮助。大多数人都无法解释它,它只会显示更多的猜测。