RLPark 1.0.0
Reinforcement Learning Framework in Java

IncrementalAverage.java

Go to the documentation of this file.
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 }
 All Classes Namespaces Files Functions Variables Enumerations
Zephyr
RLPark