Dans de nombreuses applications, nous avons une barre de progression pour le téléchargement d'un fichier, pour une tâche de compression, pour une recherche, etc. Nous utilisons tous souvent des barres de progression pour faire savoir aux utilisateurs que quelque chose est en train de se passer. Nous utilisons tous souvent des barres de progression pour indiquer aux utilisateurs que quelque chose est en train de se passer. Et si nous connaissons certains détails, comme la quantité de travail effectuée et la quantité restante, nous pouvons même donner une estimation du temps, souvent en extrapolant à partir du temps qu'il a fallu pour atteindre le niveau de progression actuel.
(source : <a href="http://jameslao.com/wp-content/uploads/2008/01/winrar-progress-bar.png" rel="noreferrer">jameslao.com </a>)
Mais nous avons également vu des programmes dont l'affichage du temps restant "ETA" est tout simplement comique. Il prétend qu'une copie de fichier sera effectuée en 20 secondes, puis une seconde plus tard il dit que cela va prendre 4 jours, puis il clignote à nouveau pour être de 20 minutes. Ce n'est pas seulement inutile, c'est déroutant ! La raison pour laquelle l'ETA varie autant est que le taux de progression lui-même peut varier et que les calculs du programmeur peuvent être trop sensibles.
Apple contourne ce problème en évitant toute prédiction précise et en ne donnant que de vagues estimations !
(source : <a href="https://download.autodesk.com/esd/mudbox/help2009/images/MED/DaliSP1/English/Install_licensing/install_progress_MAC.png" rel="noreferrer">autodesk.com </a>)
C'est aussi ennuyeux, ai-je le temps de faire une petite pause, ou ma tâche va-t-elle être terminée dans 2 secondes ? Si la prédiction est trop floue, il est inutile de faire une prédiction.
Des méthodes faciles mais erronées
En tant que première passe de calcul de l'ETA, nous pouvons probablement créer une fonction telle que si p est le pourcentage fractionnel de ce qui est déjà fait, et t est le temps que cela a pris jusqu'à présent, nous produisons t*(1-p)/p comme estimation du temps que cela va prendre pour finir. Ce simple ratio fonctionne "bien" mais il est aussi terrible, surtout à la fin du calcul. Si votre vitesse de téléchargement lente maintient une copie qui avance lentement pendant la nuit, et finalement le matin, quelque chose se produit et la copie commence à aller à pleine vitesse à 100X plus rapide, votre ETA à 90% fait peut dire "1 heure", et 10 secondes plus tard vous êtes à 95% et l'ETA dira "30 minutes" qui est clairement une estimation honteusement pauvre. dans ce cas "10 secondes" est une estimation beaucoup, beaucoup, beaucoup mieux.
Lorsque cela se produit, vous pouvez penser à modifier le calcul pour utiliser récent la vitesse, et non la vitesse moyenne, pour estimer l'ETA. Vous prenez le taux de téléchargement moyen ou le taux d'achèvement sur les 10 dernières secondes, et vous utilisez ce taux pour prévoir le temps d'achèvement. Cette méthode fonctionne très bien dans l'exemple précédent du téléchargement pendant la nuit qui s'accélère à la fin, puisqu'elle donne une très bonne estimation de l'achèvement final à la fin. Mais cela présente encore de gros problèmes cela fait rebondir votre ETA de manière sauvage lorsque votre taux varie rapidement sur une courte période de temps, et vous obtenez l'affichage rapide de la honte de la programmation "terminé en 20 secondes, terminé en 2 heures, terminé en 2 secondes, terminé en 30 minutes".
La vraie question :
Quelle est la meilleure façon de calculer le temps estimé d'achèvement d'une tâche, compte tenu de l'historique du calcul ? Je ne cherche pas de liens vers des boîtes à outils GUI ou des bibliothèques Qt. Je m'interroge sur la algorithme pour générer les estimations de temps de réalisation les plus saines et les plus précises.
Avez-vous eu du succès avec les formules mathématiques ? Une sorte de moyenne, peut-être en utilisant la moyenne du taux sur 10 secondes avec le taux sur 1 minute avec le taux sur 1 heure ? Une sorte de filtrage artificiel du type "si ma nouvelle estimation varie trop par rapport à l'estimation précédente, atténuez-la, ne la laissez pas trop rebondir" ? Une sorte d'analyse fantaisiste de l'historique où vous intégrez la progression par rapport à l'avancement du temps pour trouver l'écart type du taux afin de donner des mesures d'erreurs statistiques sur l'achèvement ?
Qu'avez-vous essayé, et qu'est-ce qui fonctionne le mieux ?
0 votes
Duplicata de stackoverflow.com/questions/798800/