diff --git a/src/main/java/cn/mesalab/config/ApplicationConfig.java b/src/main/java/cn/mesalab/config/ApplicationConfig.java index 531f0ff..97b8322 100644 --- a/src/main/java/cn/mesalab/config/ApplicationConfig.java +++ b/src/main/java/cn/mesalab/config/ApplicationConfig.java @@ -44,7 +44,7 @@ public class ApplicationConfig { public static final String HBASE_ZOOKEEPER_CLIENT_PORT= ConfigUtils.getStringProperty("hbase.zookeeper.client.port"); - public static final Double BASELINE_KALMAN_Q = ConfigUtils.getDoubleProperty("baseline.kalman.q"); + public static final Double BASELINE_KALMAN_P = ConfigUtils.getDoubleProperty("baseline.kalman.p"); public static final Double BASELINE_KALMAN_R = ConfigUtils.getDoubleProperty("baseline.kalman.r"); public static final Integer LOG_WRITE_COUNT = ConfigUtils.getIntProperty("log.write.count"); diff --git a/src/main/java/cn/mesalab/service/BaselineGeneration.java b/src/main/java/cn/mesalab/service/BaselineGeneration.java index 1f2acc7..5a700e8 100644 --- a/src/main/java/cn/mesalab/service/BaselineGeneration.java +++ b/src/main/java/cn/mesalab/service/BaselineGeneration.java @@ -121,7 +121,7 @@ public class BaselineGeneration { // 获取IP列表 List destinationIps = DruidData.getServerIpList(allFromDruid); ThreadFactory generationThreadFactory = new ThreadFactoryBuilder() - .setNameFormat("baseline-load-data-%d").build(); + .setNameFormat("baseline-generate-%d").build(); ThreadPoolExecutor generationExecutor = new ThreadPoolExecutor( threadNum, threadNum, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(1024), generationThreadFactory, diff --git a/src/main/java/cn/mesalab/service/algorithm/KalmanFilter.java b/src/main/java/cn/mesalab/service/algorithm/KalmanFilter.java index 11a40c3..69ae1de 100644 --- a/src/main/java/cn/mesalab/service/algorithm/KalmanFilter.java +++ b/src/main/java/cn/mesalab/service/algorithm/KalmanFilter.java @@ -20,7 +20,6 @@ public class KalmanFilter { private double mdelt; private double Gauss; private double kalmanGain; - private final static double Q = ApplicationConfig.BASELINE_KALMAN_Q; private final static double R = ApplicationConfig.BASELINE_KALMAN_R; public KalmanFilter() { @@ -28,9 +27,7 @@ public class KalmanFilter { } public void initial(){ - // TODO 调整 - pdelt = 1; - mdelt = 1; + pdelt = ApplicationConfig.BASELINE_KALMAN_P; } private ArrayList smoothSeries; @@ -40,20 +37,18 @@ public class KalmanFilter { //第一个估计值 predict = oldValue; current = value; - //高斯噪声方差 - Gauss = Math.sqrt(pdelt * pdelt + mdelt * mdelt) + Q; //估计方差 - kalmanGain = Math.sqrt((Gauss * Gauss)/(Gauss * Gauss + pdelt * pdelt)) + R; + kalmanGain = pdelt/(pdelt + R); //估计值 estimate = (int) (kalmanGain * (current - predict) + predict); //新的估计方差 - mdelt = Math.sqrt((1-kalmanGain) * Gauss * Gauss); + mdelt = (1-kalmanGain) * pdelt ; return estimate; } - public void forcast(List historicalSeries, Integer length){ + // 滤波 int oldvalue = (historicalSeries.stream().mapToInt(Integer::intValue).sum())/historicalSeries.size(); smoothSeries = new ArrayList(); for(int i = 0; i < historicalSeries.size(); i++){ @@ -62,6 +57,7 @@ public class KalmanFilter { smoothSeries.add(oldvalue); } + // 平均 forecastSeries = new ArrayList<>(); Integer partitonNum = historicalSeries.size()/length; for(int i = 0; i