RLPark 1.0.0
Reinforcement Learning Framework in Java
|
00001 package rlpark.plugin.rltoys.algorithms.representations.tilescoding; 00002 00003 import java.util.ArrayList; 00004 import java.util.List; 00005 00006 import rlpark.plugin.rltoys.algorithms.representations.discretizer.DiscretizerFactory; 00007 import rlpark.plugin.rltoys.algorithms.representations.tilescoding.hashing.Identity; 00008 import rlpark.plugin.rltoys.math.ranges.Range; 00009 import rlpark.plugin.rltoys.math.vector.BinaryVector; 00010 00011 public class TileCodersNoHashing extends TileCoders { 00012 private static final long serialVersionUID = -5352847170450739533L; 00013 private final List<Identity> identities = new ArrayList<Identity>(); 00014 00015 public TileCodersNoHashing(int inputSize, double min, double max) { 00016 this(buildRanges(inputSize, min, max)); 00017 } 00018 00019 public TileCodersNoHashing(Range... ranges) { 00020 this(createDefaultDiscretizer(ranges), ranges.length); 00021 } 00022 00023 public TileCodersNoHashing(DiscretizerFactory discretizerFactory, int nbInputs) { 00024 super(discretizerFactory, nbInputs); 00025 } 00026 00027 @Override 00028 protected int computeVectorSize() { 00029 int vectorSize = 0; 00030 for (int i = 0; i < tileCoders.size(); i++) { 00031 TileCoder tileCoder = tileCoders.get(i); 00032 Identity identity = identities.get(i); 00033 vectorSize += identity.memorySize() * tileCoder.nbTilings(); 00034 } 00035 return vectorSize; 00036 } 00037 00038 @Override 00039 protected void activateIndexes(double[] inputs, BinaryVector vector) { 00040 int indexOffset = 0; 00041 for (int i = 0; i < tileCoders.size(); i++) { 00042 TileCoder tileCoder = tileCoders.get(i); 00043 Identity identity = identities.get(i); 00044 int[] activeTiles = tileCoder.updateActiveTiles(identity, inputs); 00045 for (int j = 0; j < activeTiles.length; j++) { 00046 activeTiles[j] += indexOffset; 00047 indexOffset += identity.memorySize(); 00048 } 00049 setFeatureOn(vector, activeTiles); 00050 } 00051 } 00052 00053 @Override 00054 protected void addTileCoder(TileCoder tileCoder) { 00055 super.addTileCoder(tileCoder); 00056 identities.add(new Identity(tileCoder.tilings()[0])); 00057 } 00058 }