From d60d5f5e43fda0cb0c0352f155f882b113ab6b85 Mon Sep 17 00:00:00 2001 From: yinjiangyi Date: Wed, 4 Aug 2021 15:57:12 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=BB=A4=E6=B3=A2=E5=99=A8?= =?UTF-8?q?=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/mesalab/config/ApplicationConfig.java | 2 +- .../cn/mesalab/service/BaselineGeneration.java | 2 +- .../cn/mesalab/service/algorithm/KalmanFilter.java | 14 +++++--------- src/main/resources/application.properties | 4 ++-- 4 files changed, 9 insertions(+), 13 deletions(-) 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