|
@@ -4,6 +4,7 @@ import com.googlecode.aviator.AviatorEvaluator;
|
|
|
import com.googlecode.aviator.runtime.RuntimeUtils;
|
|
|
import com.googlecode.aviator.runtime.function.AbstractFunction;
|
|
|
import com.googlecode.aviator.runtime.type.AviatorDecimal;
|
|
|
+import com.googlecode.aviator.runtime.type.AviatorJavaType;
|
|
|
import com.googlecode.aviator.runtime.type.AviatorObject;
|
|
|
import com.googlecode.aviator.runtime.type.Sequence;
|
|
|
import java.math.BigDecimal;
|
|
@@ -19,27 +20,32 @@ import java.util.Map;
|
|
|
*/
|
|
|
public class RootMeanSquaredErrorS extends AbstractFunction {
|
|
|
@Override
|
|
|
- public AviatorObject call(Map<String, Object> env, AviatorObject arg1) {
|
|
|
+ public AviatorObject call(Map<String, Object> env, AviatorObject arg1, AviatorObject arg2, AviatorObject arg3) {
|
|
|
// 获取参数
|
|
|
Object first = arg1.getValue(env);
|
|
|
+ String second = ((AviatorJavaType) arg2).getName();
|
|
|
+ String third = ((AviatorJavaType) arg3).getName();
|
|
|
+ // 拼接参数
|
|
|
+ String sumExp = "sumDifferenceSquare(list" + "," + second + "," + third + ")";
|
|
|
// 获取Σ(实际-预测)²
|
|
|
- BigDecimal sumDifferenceSquare = new BigDecimal(String.valueOf(AviatorEvaluator.execute("sumDifferenceSquare(list)",env)));
|
|
|
+ BigDecimal sumDifferenceSquare = new BigDecimal(String.valueOf(AviatorEvaluator.execute(sumExp, env)));
|
|
|
Map<String, Object> map = new HashMap<>();
|
|
|
- map.put("sumDifferenceSquare",sumDifferenceSquare);
|
|
|
+ map.put("sumDifferenceSquare", sumDifferenceSquare);
|
|
|
// 求开根号的结果
|
|
|
- BigDecimal sqrtSum = new BigDecimal(String.valueOf(AviatorEvaluator.execute("math.sqrt(sumDifferenceSquare)",map)));
|
|
|
- map.put("sqrtSum",sqrtSum);
|
|
|
+ BigDecimal sqrtSum = new BigDecimal(String.valueOf(AviatorEvaluator.execute("math.sqrt(sumDifferenceSquare)", map)));
|
|
|
+ map.put("sqrtSum", sqrtSum);
|
|
|
// 将参数转为集合
|
|
|
Sequence seq = RuntimeUtils.seq(first, env);
|
|
|
BigDecimal size = new BigDecimal(seq.hintSize());
|
|
|
- map.put("size",size);
|
|
|
+ map.put("size", size);
|
|
|
// 求开根号的结果
|
|
|
- BigDecimal sqrtSize = new BigDecimal(String.valueOf(AviatorEvaluator.execute("math.sqrt(size)",map)));
|
|
|
- map.put("sqrtSize",sqrtSize);
|
|
|
- map.put("electricCapacity",env.get("electricCapacity"));
|
|
|
- BigDecimal result = new BigDecimal(String.valueOf(AviatorEvaluator.execute("1-sqrtSum/(electricCapacity*sqrtSize)",map)));
|
|
|
+ BigDecimal sqrtSize = new BigDecimal(String.valueOf(AviatorEvaluator.execute("math.sqrt(size)", map)));
|
|
|
+ map.put("sqrtSize", sqrtSize);
|
|
|
+ map.put("electricCapacity", env.get("electricCapacity"));
|
|
|
+ BigDecimal result = new BigDecimal(String.valueOf(AviatorEvaluator.execute("1-sqrtSum/(electricCapacity*sqrtSize)", map)));
|
|
|
return new AviatorDecimal(result);
|
|
|
}
|
|
|
+
|
|
|
@Override
|
|
|
public String getName() {
|
|
|
return "rootMeanSquaredErrorS";
|