tl; dr: Я хочу предсказать завершение копирования файла. Каковы хорошие методы с учетом времени начала и текущего прогресса?
Во-первых, я понимаю, что это совсем не простая проблема и что предсказывать будущее сложно. Для контекста я пытаюсь предсказать завершение копирования длинного файла.
Текущий подход:
На данный момент я использую довольно наивную формулу, которую придумал сам: (ETC означает расчетное время завершения)
ETC = currTime + elapsedTime * (totalSize - sizeDone) / sizeDone
Это работает при предположении, что оставшиеся файлы be copy будет делать это со средней скоростью копирования до сих пор, что может быть или не быть реалистичным предположением (здесь речь идет о ленточных архивах).
Другая идея:
Следующая моя идея заключалась в том, чтобы вести учет прогресса за последние n секунд (или минут, учитывая, что эти архивы должны занимать часы) и просто сделайте что-нибудь вроде:
ETC = currTime + currAvg * (totalSize - sizeDone)
Это своего рода противоположность первому методу:
Наконец,
мне вспоминаются предметы по технике управления, которые я изучал в универе, цель которых, по сути, состоит в том, чтобы попытаться создать систему, которая быстро реагирует на внезапные изменения, но не является нестабильной и безумной.
С учетом сказанного, я мог бы подумать и о другом варианте - вычислить среднее значение обоих из вышеперечисленных, возможно, с каким-то взвешиванием:
Я действительно прошу: