RLPark 1.0.0
Reinforcement Learning Framework in Java
|
00001 package rlpark.plugin.rltoys.math.normalization; 00002 00003 import rlpark.plugin.rltoys.math.ranges.Range; 00004 import zephyr.plugin.core.api.monitoring.annotations.Monitor; 00005 00006 public class MinMaxNormalizer implements Normalizer { 00007 private static final long serialVersionUID = 4495161964136798707L; 00008 public final static double MIN = -1; 00009 public final static double MAX = 1; 00010 private int nbUpdate = 0; 00011 private final Range targetRange; 00012 @Monitor 00013 private final Range valueRange = new Range(); 00014 00015 public MinMaxNormalizer() { 00016 this(new Range(MIN, MAX)); 00017 } 00018 00019 public MinMaxNormalizer(Range range) { 00020 this.targetRange = range; 00021 } 00022 00023 @Override 00024 public double normalize(double x) { 00025 if (valueRange.length() == 0 || nbUpdate == 0) 00026 return 0; 00027 double scaled = Math.max(0.0, Math.min(1.0, (x - valueRange.min()) / valueRange.length())); 00028 return scaled * targetRange.length() + targetRange.min(); 00029 } 00030 00031 public float normalize(float x) { 00032 return (float) normalize((double) x); 00033 } 00034 00035 @Override 00036 public void update(double x) { 00037 valueRange.update(x); 00038 nbUpdate++; 00039 } 00040 00041 @Override 00042 public MinMaxNormalizer newInstance() { 00043 return new MinMaxNormalizer(targetRange); 00044 } 00045 00046 public void reset() { 00047 valueRange.reset(); 00048 nbUpdate = 0; 00049 } 00050 00051 public Range targetRange() { 00052 return targetRange; 00053 } 00054 }