2020-09-12 14:48:52 +04:00

46 lines
1.8 KiB
Java

package ru.ulstu.tsMethods.exponential;
import ru.ulstu.models.TimeSeries;
import ru.ulstu.tsMethods.Param;
import ru.ulstu.tsMethods.TimeSeriesMethod;
public class NoTrendNoSeason extends TimeSeriesMethod {
public NoTrendNoSeason(TimeSeries originalTimeSeries, int countForecast) {
this.originalTimeSeries = originalTimeSeries;
this.countForecast = countForecast;
if (originalTimeSeries.isEmpty()) {
throw new RuntimeException("Time series must not empty");
}
}
@Override
protected void init() {
super.init();
modelTimeSeries.addValue(originalTimeSeries.getValues().get(0));
forecastTimeSeries.addValue(originalTimeSeries.getValues().get(0));
parameters.put(Param.ALPHA, 1.0);
}
public void setAlpa(double value) {
parameters.put(Param.ALPHA, value);
}
@Override
public void createModel() {
init();
double e;
//выполняется проход модели по сглаживанию и прогнозированию countPointForecast точек
for (int t = 0; t < originalTimeSeries.getValues().size() - 1 + countForecast; t++) {
// пока не дошли до конца ряда - сглаживаем, иначе строим прогноз
if (t < originalTimeSeries.getValues().size()) {
e = originalTimeSeries.getValues().get(t).getValue() - forecastTimeSeries.getForecast().getValues().get(t).getValue();
} else {
e = 0;
}
modelTimeSeries.addValue(modelTimeSeries.getLastValue(), modelTimeSeries.getValues().get(t).getValue() + parameters.get(Param.ALPHA) * e); // уровень
forecastTimeSeries.addValue(modelTimeSeries.getLastValue()); // прогноз
}
}
}