Wie schätzen die download-Zeit bleibt (genau)?
Sicher, Sie könnten teilen Sie die Verbleibende Größe der Datei durch die aktuelle download-Geschwindigkeit, aber wenn Sie Ihre download-Geschwindigkeit schwankt (und das wird es), das nicht produzieren ein sehr schönes Ergebnis. Was ist ein besserer Algorithmus für die Herstellung glatter countdowns?
InformationsquelleAutor mpen | 2010-05-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schrieb ich einen Algorithmus vor Jahren Vorhersagen der verbleibenden Zeit in ein disk-imaging-und multicasting-Programm, das verwendet einen gleitenden Durchschnitt mit einem reset, wenn der aktuelle Durchsatz ging außerhalb einer vordefinierten Palette. Es würde die Dinge glatt, es sei denn, etwas drastisches passiert ist, dann wäre es schnell anpassen und dann wieder auf einen gleitenden Durchschnitt wieder. Siehe Beispiel-Diagramm hier:
Die Dicke Blaue Linie in diesem Beispiel-Diagramm ist der tatsächliche Durchsatz über die Zeit. Beachten Sie die niedrigen Durchsatz während der ersten Hälfte der übertragung und es springt dramatisch in die zweite Hälfte. Die orange Linie ist der Durchschnitt der Gesamtbevölkerung. Beachten Sie, dass es nie passt bis weit genug, um jemals geben eine genaue Vorhersage, wie lange es dauern wird, um abzuschließen. Die graue Linie ist ein gleitender Durchschnitt (also der Mittelwert der letzten N Daten-Punkte - in diesem Graphen N ist 5, aber in Wirklichkeit, N möglicherweise müssen größer sein, um glatt genug). Er erholt sich schneller, aber dauert noch eine Weile, um sich anzupassen. Es dauert mehr Zeit, je größer N ist. Also, wenn Ihre Daten ist ziemlich laut, dann N werden größer und die recovery-Zeit wird länger sein.
Die grüne Linie ist der Algorithmus, den ich verwendet. Es geht gerade wie ein moving average, aber wenn die Daten bewegt sich außerhalb eines vordefinierten Bereichs (vorgegeben durch das Licht, dünne, Blaue und gelbe Linien), Sie setzt die moving average und springt sofort an. Der vordefinierte Bereich kann auch basierend auf der Standardabweichung, so kann es anpassen, wie lauten die Daten automatisch. Ich warf gerade diese Werte in das Excel-Diagramm für die Antwort also es ist nicht perfekt, aber Sie bekommen die Idee.
Daten könnte erfunden sein, um diesen Algorithmus nicht ein guter Prädiktor für die Verbleibende Zeit obwohl. Die Quintessenz ist, dass Sie brauchen, um eine Allgemeine Vorstellung, wie Sie erwarten, die Daten zu Verhalten und suchen Sie sich ein Algorithmus entsprechend. Mein Algorithmus funktionierte gut für Daten-sets war ich zu sehen, so hielten wir es verwenden.
Ein weiterer, wichtiger Tipp ist, dass Entwickler in der Regel ignorieren, setup-und teardown-mal in Ihrem Fortschritt bars und Zeit Schätzung ermittelt werden. Dies führt in der ewigen 99% oder 100% progress bar, der sitzt nur dort für eine lange Zeit (während die caches geleert werden oder andere Aufräumarbeiten passiert) oder wild-nach ersten Schätzungen werden beim Scannen von Verzeichnissen oder andere setup-Arbeit findet, die ihm die Zeit aber nicht angerechnet keine prozentualen Fortschritt, die wirft alles ab. Sie können führen Sie mehrere tests, die setup-und teardown-Zeiten und kommen mit einer Schätzung, wie lange diese Zeiten sind durchschnittlich oder basierend auf der Größe der Aufgabe und fügen Sie die Zeit, um den Fortschritt bar. Zum Beispiel, die ersten 5% der Arbeit ist die setup-Arbeit und die letzten 10% ist die ZERLEGUNG der Arbeit und dann die 85% in der Mitte ist der download oder was auch immer wiederholenden Prozess Ihre tracking. Dies kann helfen, eine Menge zu.
InformationsquelleAutor rcronk
Einer exponential moving average ist ideal für diese. Es bietet eine Möglichkeit, sich zu glätten Ihr Durchschnitt, so dass jedes mal, wenn Sie eine neue Probe, die älteren Proben werden immer weniger wichtig für den gesamten Durchschnitt. Sie sind immer noch angesehen, aber Ihre Bedeutung sinkt exponentiell ab-daher auch der name. Und da es ein "verschieben" der Durchschnitt, Sie müssen nur zu halten eine einzelne Nummer um.
Im Rahmen der Messung der download-Geschwindigkeit würde die Formel so Aussehen:
SMOOTHING_FACTOR
ist eine Zahl zwischen 0 und 1. Je höher diese Zahl ist, desto schneller ältere Proben werden verworfen. Wie Sie sehen können, in der Formel, wennSMOOTHING_FACTOR
1 Sie werden einfach mit dem Wert Ihrer letzten Beobachtung. WennSMOOTHING_FACTOR
0averageSpeed
ändert sich nie. Also, wollen Sie etwas dazwischen, und in der Regel einen niedrigen Wert, um menschenwürdige glätten. Ich habe festgestellt, dass 0.005 bietet eine ziemlich gute Glättung-Wert für eine Durchschnittliche download-Geschwindigkeit.lastSpeed
wird der zuletzt gemessene download-Geschwindigkeit. Sie erhalten diesen Wert durch ausführen einer timer jede Sekunde oder so zu berechnen, wie viele bytes heruntergeladen haben, seit Sie das Letzte mal lief es.averageSpeed
ist natürlich die Zahl, die Sie verwenden möchten, berechnen Sie Ihre geschätzten verbleibenden Zeit. Initialisieren Sie diese, um die erstenlastSpeed
mess-Sie bekommen.Unklar über die Verbleibende Zeit für den download. In der Lage für die Berechnung der Durchschnittlichen Geschwindigkeit von Bewegten Probenahme .
InformationsquelleAutor Ben Dolman
ja, Sie bekommen es
+1 das ist heiß!
InformationsquelleAutor TiansHUo
Ich denke, das beste, was Sie tun können, ist, teilen die restlichen Datei-Größe, indem die Durchschnittliche download-Geschwindigkeit (Download bisher teilte mit, wie lange Sie schon herunterladen). Dies wird ein wenig schwanken zu beginnen, aber Sie werden immer mehr und stabiler, je länger Sie herunterladen.
Die download-Zeit wird tendenziell unendlich, wenn die Verbindung bleibt unterbrochen.
Ja... ich glaube nicht, ich mag diese Lösung. Es legt zu viel Wert auf download-Geschwindigkeiten von Stunden. Was besonders stört mich, dass die ersten paar Sekunden der download sind in der Regel ziemlich instabil, wie es Rampen bis (torrents anschließen, um mehr Samen) oder verlangsamt (Shaw ' s powerboost nachlässt), und so denke ich sollte nicht diskontiert werden komplett.
Dies ist die einfachste Lösung. Umgesetzt wird der gleitende Durchschnitt könnte genauer sein, aber erfordert, dass Sie die Spur der Geschwindigkeit, und aktualisieren Sie es in einer konsistenten Art und Weise.
InformationsquelleAutor Andreas Brinck
In Erweiterung zu Ben Dolman Antwort, Sie könnte auch die Berechnung der schwankenden innerhalb des Algorithmus. Es werden mehr glatt, sondern es wird auch Vorhersagen, die Durchschnittliche Geschwindigkeit.
Etwas wie dieses:
Fluktuation oder nicht, es wird so stabil wie die anderen, mit den richtigen Werten für die Vorhersage und depencySpeed; Sie haben zu spielen mit ihm ein wenig abhängig von Ihrer internet-Geschwindigkeit.
Diese Einstellungen sind perfekt für eine Durchschnittliche Geschwindigkeit von 600 kB/s und es schwankt von 0 bis 1MB.
InformationsquelleAutor Tim
Fand ich Ben Dolman Antwort sehr hilfreich, aber für jemanden wie mich, die nicht so Mathe geneigt kam, dauerte es noch etwa eine Stunde vollständig implementieren diese in meinem code. Hier ist ein einfacher Weg, zu sagen, die gleiche Sache in python, wenn es irgendwelche Ungenauigkeiten lassen Sie mich wissen, aber in meinen Tests sehr gut funktioniert:
InformationsquelleAutor Spencer