RLPark 1.0.0
Reinforcement Learning Framework in Java

MinMaxNormalizer.java

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