RLPark 1.0.0
Reinforcement Learning Framework in Java
|
00001 package rlpark.plugin.rltoys.math.normalization; 00002 00003 import rlpark.plugin.rltoys.math.averages.IncrementalAverage; 00004 import rlpark.plugin.rltoys.math.averages.MeanVar; 00005 00006 public class IncMeanVarNormalizer implements Normalizer, MeanVar { 00007 private static final long serialVersionUID = -7117059874975759612L; 00008 private final int minNbUpdate; 00009 private final IncrementalAverage average = new IncrementalAverage(); 00010 00011 public IncMeanVarNormalizer() { 00012 this(5); 00013 } 00014 00015 public IncMeanVarNormalizer(int minNbUpdate) { 00016 this.minNbUpdate = minNbUpdate; 00017 } 00018 00019 @Override 00020 final public double normalize(double x) { 00021 if (average.nbSample() < minNbUpdate) 00022 return 0.0; 00023 if (average.var() == 0.0) 00024 return 0.0; 00025 return (x - average.mean()) / Math.sqrt(average.var()); 00026 } 00027 00028 @Override 00029 public void update(double x) { 00030 average.update(x); 00031 } 00032 00033 @Override 00034 public IncMeanVarNormalizer newInstance() { 00035 return new IncMeanVarNormalizer(minNbUpdate); 00036 } 00037 00038 @Override 00039 public double mean() { 00040 return average.mean(); 00041 } 00042 00043 @Override 00044 public double var() { 00045 return average.var(); 00046 } 00047 00048 public IncrementalAverage average() { 00049 return average; 00050 } 00051 }