RLPark 1.0.0
Reinforcement Learning Framework in Java
|
00001 package rlpark.plugin.rltoys.math.averages; 00002 00003 import zephyr.plugin.core.api.monitoring.annotations.Monitor; 00004 00005 public class IncrementalAverage implements MeanVar { 00006 private static final long serialVersionUID = -5821860314203393858L; 00007 @Monitor 00008 private double mean = 0.0; 00009 @Monitor 00010 private double var = 1.0; 00011 private int n = 0; 00012 private double m2 = 0.0; 00013 00014 // http://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#On-line_algorithm 00015 @Override 00016 public void update(double x) { 00017 n++; 00018 double delta = x - mean; 00019 mean = mean + delta / n; 00020 m2 = m2 + delta * (x - mean); 00021 if (n > 1) 00022 var = variance(1); 00023 } 00024 00025 public int nbSample() { 00026 return n; 00027 } 00028 00029 @Override 00030 public double mean() { 00031 return mean; 00032 } 00033 00034 @Override 00035 public double var() { 00036 return var; 00037 } 00038 00039 public double variance(int ddf) { 00040 assert ddf >= 0; 00041 return m2 / (n - ddf); 00042 } 00043 00044 public double stdError() { 00045 return Math.sqrt(variance(1)); 00046 } 00047 00048 @Override 00049 public MeanVar newInstance() { 00050 return new IncrementalAverage(); 00051 } 00052 }