Здесь нужно учесть две вещи:
- точная оценка
- как представить ее пользователю
1.При оценке
Помимо статистического подхода, один простой способ получить хорошую оценку текущей скорости при удалении некоторого шума или пиков - использовать взвешенный подход.
Вы уже экспериментировалив случае скользящего окна идея заключается в том, чтобы взять довольно большое скользящее окно, но вместо простого среднего значения, придавая больший вес более поздним мерам, поскольку они более показательны для эволюции (немного похоже на производную).
Пример. Предположим, у вас есть 10 предыдущих окон (самое последнее x0, самое последнее x9), тогда вы можете вычислить скорость:
Speed = (10 * x0 + 9 * x1 + 8 * x2 + ... + x9) / (10 * window-time) / 55
Если вы правильно оценили вероятную скорость, тогдаВы близки, чтобы получить хорошее примерное время.
2.На презентации
Главное, что здесь следует помнить, это то, что вам нужен приятный пользовательский опыт, а не научный фронт.
Исследования показали, что пользователи очень плохо реагировали на замедлениеи очень позитивно для ускорения.Таким образом, хороший индикатор прогресса / расчетное время должен сначала быть консервативным в представленных оценках (резервируя время для потенциального замедления).
Простой способ получить такой коэффициент - это процентзавершения, которое вы используете для настройки предполагаемого оставшегося времени.Например:
real-completion = 0.4
presented-completion = real-completion * factor(real-completion)
Где factor
таково, что factor([0..1]) = [0..1]
, factor(x) <= x
и factor(1) = 1
.Например, кубическая функция обеспечивает хорошее ускорение к времени завершения.Другие функции могут использовать экспоненциальную форму 1 - e^x
и т. Д. *