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()); // прогноз } } }