diff options
| author | yinjiangyi <[email protected]> | 2021-08-04 15:57:12 +0800 |
|---|---|---|
| committer | yinjiangyi <[email protected]> | 2021-08-04 15:57:12 +0800 |
| commit | d60d5f5e43fda0cb0c0352f155f882b113ab6b85 (patch) | |
| tree | 625590aa4fc5c09627575e37074eac458758aa24 /src | |
| parent | d562d3db99d02c81f0335fd2634d2c6ad118fdab (diff) | |
修改滤波器参数
Diffstat (limited to 'src')
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<String> 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<Integer> 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<Integer> historicalSeries, Integer length){ + // 滤波 int oldvalue = (historicalSeries.stream().mapToInt(Integer::intValue).sum())/historicalSeries.size(); smoothSeries = new ArrayList<Integer>(); 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<length; i++){ diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 1ee2d0c..b1494c5 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -49,8 +49,8 @@ baseline.historical.ratio.threshold=0.1 baseline.historical.sparse.fill.percentile=0.95 baseline.rational.percentile=0.95 #Kalman Filter -baseline.kalman.q=0.000001 -baseline.kalman.r=0.002 +baseline.kalman.p=0.000001 +baseline.kalman.r=4 # 每更新1000个记录打印log |
