Несколько лет назад я написал алгоритм для прогнозирования времени, оставшегося в программе для создания образов и многоадресной рассылки дисков, которая использовала скользящее среднее значение со сбросом, когда текущая пропускная способность вышла за пределы предварительно определенного диапазона. Он будет сохранять гладкость, если не произойдет ничего резкого, затем быстро адаптируется и снова возвращается к скользящей средней. Смотрите пример диаграммы здесь:
Толстая синяя линия в этом примере диаграммы - это фактическая пропускная способность во времени. Обратите внимание на низкую пропускную способность в течение первой половины передачи, а затем она резко возрастает во второй половине. Оранжевая линия - это общее среднее значение. Обратите внимание, что он никогда не настраивается достаточно далеко, чтобы когда-либо дать точный прогноз того, сколько времени потребуется, чтобы закончить. Серая линия - это скользящее среднее (т. Е. Среднее из последних N точек данных - на этом графике N равно 5, но на самом деле N может потребоваться увеличить для достаточного сглаживания). Это восстанавливается быстрее, но все еще требуется время, чтобы приспособиться. Это займет больше времени, чем больше N. Так что если ваши данные довольно шумные, то N должно быть больше, а время восстановления будет больше.
Зеленая линия - алгоритм, который я использовал. Он идет как скользящее среднее, но когда данные выходят за пределы заранее определенного диапазона (обозначенного светлыми тонкими синими и желтыми линиями), он сбрасывает скользящее среднее и сразу же поднимается вверх. Предопределенный диапазон также может быть основан на стандартном отклонении, чтобы он мог регулировать уровень шума данных автоматически. Я просто бросил эти значения в Excel, чтобы составить схему этого ответа, чтобы он не был идеальным, но вы поняли.
Данные могут быть придуманы так, чтобы этот алгоритм не был хорошим предиктором оставшегося времени. Суть в том, что вам нужно иметь общее представление о том, как вы ожидаете, что данные будут вести себя, и выбрать соответствующий алгоритм. Мой алгоритм работал хорошо для наборов данных, которые я видел, поэтому мы продолжали использовать его.
Еще один важный совет: разработчики обычно игнорируют время настройки и завершения в своих индикаторах выполнения и расчетах оценки времени. Это приводит к вечному индикатору выполнения на 99% или 100%, который просто сидит там в течение длительного времени (во время очистки кэшей или выполнения другой работы по очистке), или к предварительным оценкам, когда происходит сканирование каталогов или другая работа по настройке, накапливается время. но не получая никакого процента прогресса, который отбрасывает все. Вы можете запустить несколько тестов, которые включают в себя время установки и разборки, и оценить, сколько времени в среднем это время или на основе размера задания, и добавить это время в индикатор выполнения. Например, первые 5% работы - это работа по настройке, а последние 10% - это работа по разборке, а затем 85% в середине - это загрузка или повторяющийся процесс отслеживания. Это тоже может очень помочь.