Интеллектуальный индикатор выполнения вычислений ETA



во многих приложениях, у нас есть прогресс бар для загрузки файла, для задач сжатия, поиска и т. д. Мы все часто используем индикаторы выполнения, чтобы пользователи знали, что что-то происходит. И если мы знаем некоторые детали, например, сколько работы было сделано и сколько осталось сделать, мы можем даже дать оценку времени, часто экстраполируя от того, сколько времени потребовалось, чтобы добраться до текущего уровня прогресса.



сжатие ETA скриншот http://jameslao.com/wp-content/uploads/2008/01/winrar-progress-bar.png



но мы также видели программы, которые на этот раз оставили "ETA" дисплей просто комично плохо. Он утверждает, что копия файла будет сделана через 20 секунд, затем через секунду он говорит, что это займет 4 дня, затем он снова мерцает, чтобы быть 20 минут. Это не только бесполезно, это сбивает с толку!
Причина, по которой ETA так сильно меняется, заключается в том, что сама скорость прогресса может варьироваться, а математика программиста может быть чрезмерно чувствительный.



Apple обходит это, просто избегая каких-либо точных прогнозов и просто давая расплывчатые оценки!
смутное уклонение Apple http://download.autodesk.com/esd/mudbox/help2009/images/MED/DaliSP1/English/Install_licensing/install_progress_MAC.png



Это тоже раздражает, у меня есть время для быстрого перерыва, или моя задача будет выполнена еще через 2 секунды? Если предсказание слишком нечеткое, бессмысленно делать какое-либо предсказание в все.



легкие, но неправильные методы



как вычисление ETA первого прохода, вероятно, мы все просто делаем функцию, например, если p-это дробный процент, который уже сделан, и t-время, которое потребовалось до сих пор, мы выводим t*(1-p)/p как оценку того, сколько времени это займет, чтобы закончить. Это простое соотношение работает "хорошо", но это также ужасно, особенно в конце вычисления. Если ваша медленная скорость загрузки сохраняет копию медленно продвигается происходит в одночасье, и наконец, утром что-то срабатывает, и копия начинает работать на полной скорости в 100 раз быстрее, ваш ETA на 90% может сказать "1 час", а через 10 секунд вы на 95%, и ETA скажет "30 минут", что явно является смущающе плохой догадкой.. в этом случае" 10 секунд " - это намного, намного, намного лучшая оценка.



когда это произойдет, вы можете подумать, чтобы изменить вычисление для использования последние скорость, а не средняя скорость, чтобы оценить ETA. Вы берете среднюю загрузку скорость или скорость завершения за последние 10 секунд, и использовать эту скорость, чтобы спроектировать, как долго завершение будет. Это довольно хорошо работает в предыдущем примере с ночной загрузкой, который ускорился в конце, так как он даст очень хорошие окончательные оценки завершения в конце. Но это все еще имеет большие проблемы.. это заставляет ваше ETA дико подпрыгивать, когда ваша скорость быстро меняется в течение короткого периода времени, и вы получаете" сделано за 20 секунд, сделано за 2 часа, сделано за 2 секунды, сделано за 30 минут " быстро проявление программирующего стыда.



собственно вопрос:



каков наилучший способ вычисления расчетного времени завершения задачи, учитывая временную историю вычисления? Я не ищу ссылки на GUI toolkits или библиотеки Qt. Я спрашиваю о алгоритм для получения наиболее разумных и точных оценок времени завершения.



У вас был успех с математическими формулами? Какое-то усреднение, возможно, с помощью среднее значение скорости более 10 секунд со скоростью более 1 минуты со скоростью более 1 часа? Какая-то искусственная фильтрация, например: "если моя новая оценка слишком сильно отличается от предыдущей оценки, смягчите ее, не позволяйте ей слишком сильно отскакивать"? Какой-то причудливый анализ истории, где вы интегрируете прогресс в сравнении с продвижением времени, чтобы найти стандартное отклонение скорости, чтобы дать статистические показатели ошибок по завершении?



Что вы пробовали, и что лучше работает?

568   0  

Comments

    Ничего не найдено.