46 lines
1.8 KiB
Java
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()); // прогноз
|
|
}
|
|
}
|
|
}
|