2009-12-10 47 views
14

我們都對'X分鐘剩餘'對話感到好玩,這似乎太簡單了,但我們應該如何改進?估算/預測下載完成時間

實際上,輸入是直到當前時間的一組下載速度,我們需要使用它來估計完成時間,可能會顯示確定性,例如使用某些Y'剩餘'20分鐘' %置信區間。

這樣做的代碼可以放在一個小庫中,並用於所有項目中,那麼這真的很難嗎?你會怎麼做?您對之前的下載速度有何權重?

還是有一些開源代碼已經在那裏?

編輯:綜述:

  1. 經由更好ALGO /過濾器等等
  2. 提供間隔,而不是單一的時間( '1h45-2h30分鐘')改進估計的完成時間,或者僅僅限制精度( '約2小時')。
  3. 指出進展停滯的時間 - 儘管如果進展一直停滯並繼續下去,我們應該能夠處理這一問題。也許,「約2小時,目前陷入僵局」
+4

強制xkcd參考:http://www.xkcd.com/612/ – jason 2009-12-10 18:53:49

+0

重複http://stackoverflow.com/questions/933242/smart-progress-bar-eta-computation – 2013-08-30 02:03:05

回答

4

不要通過提供比他們需要更多的信息,迷惑你的用戶。我正在考慮置信區間。跳過它。

互聯網下載時間變化很大。微波爐干擾WiFi。使用情況因時段,星期幾,節假日以及新版精彩遊戲的發佈而有所不同。服務器現在可能負載很重。如果您將筆記本電腦帶到咖啡館,結果將會與在家中不同。因此,您可能無法依靠歷史數據來預測下載速度的未來。

如果您無法準確估計剩餘時間,那麼不會對您的用戶提供這樣的估計。

如果您知道必須下載多少數據,您可以提供%完成進度

如果你根本不知道,提供了一個「心跳」 - 一塊移動的用戶界面,顯示用戶的東西正在工作,即使通過你不知道多久仍然存在。

+1

一個非即時的幾乎所有的速度測量(最後5秒?)對於判斷它是否進展都非常有用。 我說不是istant,因爲它發生在我不止一次看到估計的下載速度在每秒Tera/PB的範圍內:) – Agos 2009-12-10 16:04:29

+0

這件事的目的很大程度上是*提高*給用戶的信息。所以,不要告訴謊言,通過給定的過度精確度(「24分鐘4.2秒剩下的」),估計值是準確的,並不是說它不會通過給出單個值而不是間隔等來改變。當然,如果估計器發現輸入太多,它可以表明,而不是。 – 2009-12-14 14:18:57

0

我已經考慮過這個問題了,我自己。我的答案在計算當前(從而未來)傳輸速率時保守,並且包括對較長時期的平均,以獲得更穩定的估計。也許低通濾波顯示的時間,以便在2分鐘和2天之間不會跳轉。

我不認爲置信區間會有幫助。大多數人都無法解讀它,而只會顯示更多猜測的東西。

+0

我認爲一個簡單的信心表示會起作用,就像「20-25分鐘」。至少應該限制提供的價值的精確度 - 「約2小時」而不是「2小時16分鐘」。 – 2009-12-14 14:31:28

8

我想知道,狀態估計技術會在這裏產生好的結果嗎?像卡爾曼濾波器一樣?

基本上,您通過查看當前模型預測未來,並在每個時間步驟更改模型以反映對現實世界的更改。我認爲這種技術用於估算筆記本電腦電池的剩餘時間,這些時間也可能因使用情況,電池使用年限等而有所不同。

請參閱http://en.wikipedia.org/wiki/Kalman_filter以獲得更深入的算法描述。

過濾器還提供了一個變化的措施,這可能是用來表示您估計的信心(allthough,正如其他的答案中提到,它可能不是最好的主意,以展示給最終用戶)

有誰知道這是否真的用於下載(或文件複製)估算?

+0

卡爾曼要求您提供一個模型,它不會構建一個模型。它只是使用你提供的模型和噪聲測量來試圖找出當前(隱藏)狀態。 – 2009-12-10 19:08:50

+0

當然,您需要一個模型,您可以從一個簡單的模型開始,假設下載速率不變,並且過濾器將根據證據調整下載速率的值。 – Yair 2009-12-15 15:44:57

12

更一般地說,我認爲你正在尋找一種方法來給出傳輸速度的即時度量,這通常是通過一段時間內的平均值獲得的。

問題是,一般來說,爲了反應,期間通常非常小,這會導致yoyo效應。

我會提出一個非常簡單的方案,讓我們對它進行建模。

想象隨着時間(x)的曲線速度(y)。

  1. 即時速度,不超過當前x(x0)的讀數y。

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

  3. 我提出的方案是應用過濾器,讓更多的重量,最後時刻,同時還考慮到過去的時刻。

它可以很容易地實現爲g(x,x0,T) = 2 * (x - x0) + 2T這是表面T.

的一個簡單的三角形現在你可以計算Integral(f(x)*g(x,x0,T), x in [x0-T,x0])/T,這應該工作,因爲這兩個功能都始終爲正。

當然你可以有一個不同的g,只要它在給定的時間間隔內總是正數,並且它在區間上的積分是T(所以它自己的平均數恰好是1)。

這種方法的優點是,由於您給予即時事件更多的權重,即使您考慮更大的時間間隔(以便平均值更精確,更不容易出現打嗝),您仍可保持相當的反應性。

而且,我很少見過,但認爲會提供更精確的估計是用於計算平均估計剩餘時間的時間關聯:

  • 如果我下載一個5KO文件,這是怎麼回事如果我下載了一個15Mo的文件,它大約需要2分鐘,所以我想估計說......每5秒鐘一次?
  • 如果我下載一個1.5 Go文件,它會花費大約200分鐘(以相同的速度)......也就是說3h20m ......也許每分鐘估計就足夠了?

因此,下載需要的時間越長,我需要的反應越少,我可以平均得越多。一般來說,我會說一個窗口可以覆蓋總時間的2%(可能除了少數第一次估計,因爲人們欣賞即時反饋)。此外,一次顯示全部進度是足夠的。如果任務很長,我仍然準備等待。

+3

優秀,但積分可能是過度工程。我們只把它稱爲最近幾個樣本的加權平均值。 :-) – 2011-05-24 16:18:17

+4

@Konrad:真的,這是爲了數學的嚴謹性,鼓勵實際的實現來逼近它^^ – 2011-05-24 17:23:59

2

改善估計的時間本身:直覺上,我猜測網絡連接的速度是圍繞一些臨時平均速度的一系列隨機值 - 事物以一種速度跳動,然後突然減慢或加速。

然後,一種選擇可能是通過一些指數權重前一組速度,以便最近的值得到最強的權重。這樣,隨着之前的平均速度進一步進入過去,其對當前平均值的影響減小。

但是,如果速度隨機波動,則可能值得展平指數的頂部(例如通過使用Gaussian filter),以避免太大的波動。總之,我正在考慮測量標準偏差(可能限於最後N分鐘),並使用它來生成應用於輸入的高斯濾波器,然後使用標準限制引用的精度偏差。

但是,如何將標準偏差計算限制爲最後N分鐘?你怎麼知道使用多久?

或者,有模式識別可能性來檢測我們是否已經達到穩定的速度。