Procházet zdrojové kódy

增加江苏绝对误差准确率

jyyw před 11 měsíci
rodič
revize
3e659a2991

+ 4 - 4
pom.xml

@@ -10,8 +10,8 @@
     </parent>
     <groupId>com.syjy</groupId>
     <artifactId>calculation-spring-boot-starter</artifactId>
-    <version>0.0.35</version>
-    <!--    <version>0.0.35-SNAPSHOT</version>-->
+    <version>0.0.38</version>
+    <!--    <version>0.0.38-SNAPSHOT</version>-->
     <name>calculation</name>
     <description>Demo project for Spring Boot</description>
     <properties>
@@ -48,7 +48,7 @@
             <version>1</version>
         </dependency>
 
-        <!-- 发布时候放开-->
+        <!--发布时候放开-->
         <!--        <dependency>-->
         <!--            <groupId>com.alibaba.cloud</groupId>-->
         <!--            <version>2.2.0.RELEASE</version>-->
@@ -178,4 +178,4 @@
         </plugins>
     </build>
 
-</project>
+</project>

+ 42 - 0
src/main/java/com/syjy/calculate/function/PointA.java

@@ -0,0 +1,42 @@
+package com.syjy.calculate.function;
+
+import com.googlecode.aviator.AviatorEvaluator;
+import com.googlecode.aviator.runtime.function.AbstractFunction;
+import com.googlecode.aviator.runtime.type.AviatorDecimal;
+import com.googlecode.aviator.runtime.type.AviatorObject;
+import com.googlecode.aviator.runtime.type.Sequence;
+import com.syjy.calculate.entity.FormulaParam;
+
+import java.math.BigDecimal;
+import java.util.Map;
+
+/**
+ * 计算准确率 :绝对误差 1 -(real - forecast)/cap
+ *
+ * @author zcl
+ * @version 1.0
+ * @since 2022/9/8 9:30
+ */
+public class PointA extends AbstractFunction {
+    @Override
+    public AviatorObject call(Map<String, Object> env, AviatorObject arg1, AviatorObject arg2, AviatorObject arg3, AviatorObject arg4) {
+        // 获取参数
+        FormulaParam formulaParam = CommonUtil.getFormulaParam(env, arg1, arg2, arg3, arg4, null);
+        BigDecimal result = BigDecimal.ZERO;
+        // 将参数转为集合
+        Sequence seq = CommonUtil.getSeq(formulaParam.getFirst(), env);
+        // 循环集合
+        for (Object obj : seq) {
+            Map<String, Object> map = (Map<String, Object>) obj;
+            String exp = "1-math.abs((" + formulaParam.getSecond() + "-" + formulaParam.getThird() + ")/" + formulaParam.getFourth() + ")";
+            result = new BigDecimal(String.valueOf(AviatorEvaluator.execute(exp, map)));
+            break;
+        }
+        return new AviatorDecimal(result);
+    }
+
+    @Override
+    public String getName() {
+        return "pointA";
+    }
+}

+ 57 - 56
src/main/java/com/syjy/calculate/listener/ApplicationListenerImpl.java

@@ -1,56 +1,57 @@
-package com.syjy.calculate.listener;
-
-import com.googlecode.aviator.AviatorEvaluator;
-import com.googlecode.aviator.Options;
-import com.googlecode.aviator.runtime.JavaMethodReflectionFunctionMissing;
-import com.syjy.calculate.function.*;
-import com.syjy.calculate.repository.CalculationFormulaRepository;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.context.event.ApplicationStartedEvent;
-import org.springframework.context.ApplicationListener;
-import org.springframework.stereotype.Component;
-
-/**
- * 监听项目启动
- *
- * @author zcl
- * @version 1.0
- * @since 2022/9/9 10:34
- */
-@Component
-public class ApplicationListenerImpl implements ApplicationListener<ApplicationStartedEvent> {
-
-    @Autowired
-    private CalculationFormulaRepository calculationFormulaRepository;
-
-    @Override
-    public void onApplicationEvent(ApplicationStartedEvent event) {
-        // 初始化表
-        calculationFormulaRepository.initTable();
-        // 启用基于反射的方法查找和调用
-        AviatorEvaluator.setFunctionMissing(JavaMethodReflectionFunctionMissing.getInstance());
-        AviatorEvaluator.setOption(Options.ALWAYS_PARSE_FLOATING_POINT_NUMBER_INTO_DECIMAL, true);
-        AviatorEvaluator.addFunction(new DoubleList());
-        AviatorEvaluator.addFunction(new GetBeginOfDay());
-        AviatorEvaluator.addFunction(new MeanAbsoluteError());
-        AviatorEvaluator.addFunction(new Pass());
-        AviatorEvaluator.addFunction(new PointS());
-        AviatorEvaluator.addFunction(new PointU());
-        AviatorEvaluator.addFunction(new RootMeanSquaredErrorA());
-        AviatorEvaluator.addFunction(new RootMeanSquaredErrorC());
-        AviatorEvaluator.addFunction(new RootMeanSquaredErrorR());
-        AviatorEvaluator.addFunction(new RootMeanSquaredErrorS());
-        AviatorEvaluator.addFunction(new RootMeanSquaredErrorSouthernPowerGrid());
-        AviatorEvaluator.addFunction(new SumDifferenceAbsolute());
-        AviatorEvaluator.addFunction(new SumDifferenceSquare());
-        AviatorEvaluator.addFunction(new DevianceElectric());
-        AviatorEvaluator.addFunction(new ManyDayThreeDayDeviationElectricity());
-
-        // |预测-可用|/预测
-        AviatorEvaluator.defineFunction("errorBandwidth", "lambda (a,b) -> math.abs((a - b)/a) end");
-        // (实际-预测)²
-        AviatorEvaluator.defineFunction("differenceSquare", "lambda (a,b) -> math.pow((a - b), 2) end");
-        // |实际-预测|
-        AviatorEvaluator.defineFunction("differenceAbsolute", "lambda (a,b) -> math.abs(a - b) end");
-    }
-}
+package com.syjy.calculate.listener;
+
+import com.googlecode.aviator.AviatorEvaluator;
+import com.googlecode.aviator.Options;
+import com.googlecode.aviator.runtime.JavaMethodReflectionFunctionMissing;
+import com.syjy.calculate.function.*;
+import com.syjy.calculate.repository.CalculationFormulaRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.context.event.ApplicationStartedEvent;
+import org.springframework.context.ApplicationListener;
+import org.springframework.stereotype.Component;
+
+/**
+ * 监听项目启动
+ *
+ * @author zcl
+ * @version 1.0
+ * @since 2022/9/9 10:34
+ */
+@Component
+public class ApplicationListenerImpl implements ApplicationListener<ApplicationStartedEvent> {
+
+    @Autowired
+    private CalculationFormulaRepository calculationFormulaRepository;
+
+    @Override
+    public void onApplicationEvent(ApplicationStartedEvent event) {
+        // 初始化表
+        calculationFormulaRepository.initTable();
+        // 启用基于反射的方法查找和调用
+        AviatorEvaluator.setFunctionMissing(JavaMethodReflectionFunctionMissing.getInstance());
+        AviatorEvaluator.setOption(Options.ALWAYS_PARSE_FLOATING_POINT_NUMBER_INTO_DECIMAL, true);
+        AviatorEvaluator.addFunction(new DoubleList());
+        AviatorEvaluator.addFunction(new GetBeginOfDay());
+        AviatorEvaluator.addFunction(new MeanAbsoluteError());
+        AviatorEvaluator.addFunction(new Pass());
+        AviatorEvaluator.addFunction(new PointA());
+        AviatorEvaluator.addFunction(new PointS());
+        AviatorEvaluator.addFunction(new PointU());
+        AviatorEvaluator.addFunction(new RootMeanSquaredErrorA());
+        AviatorEvaluator.addFunction(new RootMeanSquaredErrorC());
+        AviatorEvaluator.addFunction(new RootMeanSquaredErrorR());
+        AviatorEvaluator.addFunction(new RootMeanSquaredErrorS());
+        AviatorEvaluator.addFunction(new RootMeanSquaredErrorSouthernPowerGrid());
+        AviatorEvaluator.addFunction(new SumDifferenceAbsolute());
+        AviatorEvaluator.addFunction(new SumDifferenceSquare());
+        AviatorEvaluator.addFunction(new DevianceElectric());
+        AviatorEvaluator.addFunction(new ManyDayThreeDayDeviationElectricity());
+
+        // |预测-可用|/预测
+        AviatorEvaluator.defineFunction("errorBandwidth", "lambda (a,b) -> math.abs((a - b)/a) end");
+        // (实际-预测)²
+        AviatorEvaluator.defineFunction("differenceSquare", "lambda (a,b) -> math.pow((a - b), 2) end");
+        // |实际-预测|
+        AviatorEvaluator.defineFunction("differenceAbsolute", "lambda (a,b) -> math.abs(a - b) end");
+    }
+}

+ 22 - 9
src/main/resources/application.yml

@@ -1,3 +1,16 @@
+## ## 204部署
+server:
+  port: 9089
+spring:
+  datasource:
+    type: com.alibaba.druid.pool.DruidDataSource
+    druid:
+      # 数据源配置
+      username: root
+      password: '!QAZ2root'
+      url: jdbc:mysql://192.168.1.205:3306/ipfcst-v3?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&characterSetResults=UTF-8&autoReconnect=true&rewriteBatchedStatements=true&serverTimezone=Asia/Shanghai
+      driver-class-name: com.mysql.cj.jdbc.Driver
+
 #server:
 #  port: 9089
 #spring:
@@ -16,14 +29,14 @@
 #      url: jdbc:kingbase://192.168.1.204:54321/ipfcstV3
 #      driver-class-name: com.kingbase.Driver
 
-#logging:
-#  file:
-#    name: ./logs/calculate.log
-#
-#calculate:
-#  service:
-#    enabled: true
-#    version: 0.0.35
-#    dbType: mysql
+logging:
+  file:
+    name: ./logs/calculate.log
+
+calculate:
+  service:
+    enabled: true
+    version: 0.0.38
+    dbType: mysql
 
 version: @project.version@

binární
src/main/resources/sql/t_calculation_formula.xlsx


binární
src/main/resources/各省准确率.xlsx