RLPark 1.0.0
Reinforcement Learning Framework in Java

Filters.java

Go to the documentation of this file.
00001 package rlpark.plugin.rltoys.math.vector.filters;
00002 
00003 import rlpark.plugin.rltoys.math.vector.MutableVector;
00004 import rlpark.plugin.rltoys.math.vector.RealVector;
00005 import rlpark.plugin.rltoys.math.vector.SparseVector;
00006 import rlpark.plugin.rltoys.math.vector.implementations.PVector;
00007 import rlpark.plugin.rltoys.utils.NotImplemented;
00008 
00009 public class Filters {
00010   interface FilteredOperation {
00011     MutableVector operate();
00012 
00013     MutableVector sparseOperate(int[] indexes, int nbActive);
00014   }
00015 
00016   private static MutableVector operate(FilteredOperation operation, RealVector filter) {
00017     if (filter instanceof SparseVector) {
00018       SparseVector sfilter = (SparseVector) filter;
00019       return operation.sparseOperate(sfilter.nonZeroIndexes(), sfilter.nonZeroElements());
00020     }
00021     return operation.operate();
00022   }
00023 
00024   public static MutableVector minToSelf(final MutableVector result, final RealVector other, RealVector filter) {
00025     FilteredOperation minOperation = new FilteredOperation() {
00026       @Override
00027       public MutableVector sparseOperate(int[] indexes, int nbActive) {
00028         for (int i = 0; i < nbActive; i++) {
00029           int index = indexes[i];
00030           result.setEntry(index, Math.min(result.getEntry(index), other.getEntry(index)));
00031         }
00032         return result;
00033       }
00034 
00035       @Override
00036       public MutableVector operate() {
00037         int dimension = result.getDimension();
00038         for (int index = 0; index < dimension; index++)
00039           result.setEntry(index, Math.min(result.getEntry(index), other.getEntry(index)));
00040         return result;
00041       }
00042     };
00043     return operate(minOperation, filter);
00044   }
00045 
00046   public static MutableVector maxToSelf(final MutableVector result, final RealVector other, RealVector filter) {
00047     FilteredOperation maxOperation = new FilteredOperation() {
00048       @Override
00049       public MutableVector sparseOperate(int[] indexes, int nbActive) {
00050         for (int i = 0; i < nbActive; i++) {
00051           int index = indexes[i];
00052           result.setEntry(index, Math.max(result.getEntry(index), other.getEntry(index)));
00053         }
00054         return result;
00055       }
00056 
00057       @Override
00058       public MutableVector operate() {
00059         int dimension = result.getDimension();
00060         for (int index = 0; index < dimension; index++)
00061           result.setEntry(index, Math.max(result.getEntry(index), other.getEntry(index)));
00062         return result;
00063       }
00064     };
00065     return operate(maxOperation, filter);
00066   }
00067 
00068   public static MutableVector maxToSelf(final MutableVector result, final double other, RealVector filter) {
00069     FilteredOperation maxOperation = new FilteredOperation() {
00070       @Override
00071       public MutableVector sparseOperate(int[] indexes, int nbActive) {
00072         for (int i = 0; i < nbActive; i++) {
00073           int index = indexes[i];
00074           result.setEntry(index, Math.max(result.getEntry(index), other));
00075         }
00076         return result;
00077       }
00078 
00079       @Override
00080       public MutableVector operate() {
00081         int dimension = result.getDimension();
00082         for (int index = 0; index < dimension; index++)
00083           result.setEntry(index, Math.max(result.getEntry(index), other));
00084         return result;
00085       }
00086     };
00087     return operate(maxOperation, filter);
00088   }
00089 
00090   public static MutableVector minToSelf(final MutableVector result, final double other, RealVector filter) {
00091     FilteredOperation maxOperation = new FilteredOperation() {
00092       @Override
00093       public MutableVector sparseOperate(int[] indexes, int nbActive) {
00094         for (int i = 0; i < nbActive; i++) {
00095           int index = indexes[i];
00096           result.setEntry(index, Math.min(result.getEntry(index), other));
00097         }
00098         return result;
00099       }
00100 
00101       @Override
00102       public MutableVector operate() {
00103         int dimension = result.getDimension();
00104         for (int index = 0; index < dimension; index++)
00105           result.setEntry(index, Math.min(result.getEntry(index), other));
00106         return result;
00107       }
00108     };
00109     return operate(maxOperation, filter);
00110   }
00111 
00112   public static MutableVector boundAbsToSelf(final MutableVector result, final double other, RealVector filter) {
00113     FilteredOperation maxOperation = new FilteredOperation() {
00114       @Override
00115       public MutableVector sparseOperate(int[] indexes, int nbActive) {
00116         for (int i = 0; i < nbActive; i++) {
00117           int index = indexes[i];
00118           result.setEntry(index, boundValue(result.getEntry(index)));
00119         }
00120         return result;
00121       }
00122 
00123       @Override
00124       public MutableVector operate() {
00125         int dimension = result.getDimension();
00126         for (int index = 0; index < dimension; index++)
00127           result.setEntry(index, boundValue(result.getEntry(index)));
00128         return result;
00129       }
00130 
00131       public double boundValue(double value) {
00132         return Math.min(Math.abs(value), other) * Math.signum(value);
00133       }
00134     };
00135     return operate(maxOperation, filter);
00136   }
00137 
00138   public static MutableVector mapMultiplyToSelf(final PVector result, final double d, RealVector filter) {
00139     FilteredOperation mapMultiplySelfOperation = new FilteredOperation() {
00140       @Override
00141       public MutableVector sparseOperate(int[] indexes, int nbActive) {
00142         for (int i = 0; i < nbActive; i++)
00143           result.data[indexes[i]] *= d;
00144         return result;
00145       }
00146 
00147       @Override
00148       public MutableVector operate() {
00149         return result.mapMultiplyToSelf(d);
00150       }
00151     };
00152     return operate(mapMultiplySelfOperation, filter);
00153   }
00154 
00155   public static MutableVector mapDivideToSelf(final PVector result, final double d, RealVector filter) {
00156     FilteredOperation mapDivideSelfOperation = new FilteredOperation() {
00157       @Override
00158       public MutableVector sparseOperate(int[] indexes, int nbActive) {
00159         for (int i = 0; i < nbActive; i++)
00160           result.data[indexes[i]] /= d;
00161         return result;
00162       }
00163 
00164       @Override
00165       public MutableVector operate() {
00166         return result.mapMultiplyToSelf(1 / d);
00167       }
00168     };
00169     return operate(mapDivideSelfOperation, filter);
00170   }
00171 
00172   public static MutableVector ebeDivideToSelf(final MutableVector result, final RealVector arg, RealVector filter) {
00173     FilteredOperation mapDivideSelfOperation = new FilteredOperation() {
00174       @Override
00175       public MutableVector sparseOperate(int[] indexes, int nbActive) {
00176         for (int i = 0; i < nbActive; i++) {
00177           int entryIndex = indexes[i];
00178           result.setEntry(entryIndex, result.getEntry(entryIndex) / arg.getEntry(entryIndex));
00179         }
00180         return result;
00181       }
00182 
00183       @Override
00184       public MutableVector operate() {
00185         return result.ebeDivideToSelf(arg);
00186       }
00187     };
00188     return operate(mapDivideSelfOperation, filter);
00189   }
00190 
00191   public static MutableVector powToSelf(final PVector result, final double b, RealVector filter) {
00192     FilteredOperation powSelfOperation = new FilteredOperation() {
00193       @Override
00194       public MutableVector sparseOperate(int[] indexes, int nbActive) {
00195         for (int i = 0; i < nbActive; i++) {
00196           int entryIndex = indexes[i];
00197           double previousValue = result.getEntry(entryIndex);
00198           double resultValue = Math.pow(previousValue, b);
00199           result.setEntry(entryIndex, resultValue);
00200         }
00201         return result;
00202       }
00203 
00204       @Override
00205       public MutableVector operate() {
00206         throw new NotImplemented();
00207       }
00208     };
00209     return operate(powSelfOperation, filter);
00210   }
00211 }
 All Classes Namespaces Files Functions Variables Enumerations
Zephyr
RLPark