RLPark 1.0.0
Reinforcement Learning Framework in Java

Vectors.java

Go to the documentation of this file.
00001 package rlpark.plugin.rltoys.math.vector.implementations;
00002 
00003 
00004 import rlpark.plugin.rltoys.math.vector.MutableVector;
00005 import rlpark.plugin.rltoys.math.vector.RealVector;
00006 import rlpark.plugin.rltoys.utils.NotImplemented;
00007 import rlpark.plugin.rltoys.utils.Utils;
00008 
00009 public class Vectors {
00010   static public boolean equals(RealVector a, RealVector b) {
00011     return equals(a, b, 0);
00012   }
00013 
00014   static public double diff(RealVector a, RealVector b) {
00015     double diff = 0;
00016     for (int i = 0; i < a.getDimension(); ++i)
00017       diff = Math.max(diff, Math.abs(a.getEntry(i) - b.getEntry(i)));
00018     return diff;
00019   }
00020 
00021   static public boolean equals(RealVector a, RealVector b, double margin) {
00022     if (a == b)
00023       return true;
00024     if (a != null && b == null || a == null && b != null)
00025       return false;
00026     if (a.getDimension() != b.getDimension())
00027       return false;
00028     for (int i = 0; i < a.getDimension(); i++) {
00029       final double diff = Math.abs(a.getEntry(i) - b.getEntry(i));
00030       if (diff > margin)
00031         return false;
00032     }
00033     return true;
00034   }
00035 
00036   public static boolean checkValues(RealVector v) {
00037     final double[] data = (v instanceof SVector) ? ((SVector) v).values : v.accessData();
00038     final int nbChecks = (v instanceof SVector) ? ((SVector) v).nonZeroElements() : v.getDimension();
00039     for (int i = 0; i < nbChecks; i++)
00040       if (!Utils.checkValue(data[i]))
00041         return false;
00042     return true;
00043   }
00044 
00045   static public MutableVector absToSelf(MutableVector v) {
00046     if (v instanceof SVector) {
00047       absToSelf(((SVector) v).values, ((SVector) v).nbActive);
00048       return v;
00049     }
00050     if (v instanceof PVector) {
00051       absToSelf(((PVector) v).data, v.getDimension());
00052       return v;
00053     }
00054     throw new NotImplemented();
00055   }
00056 
00057   static public void absToSelf(double[] data, int length) {
00058     for (int i = 0; i < length; i++)
00059       data[i] = Math.abs(data[i]);
00060   }
00061 
00062   static public double l1Norm(RealVector v) {
00063     if (v instanceof BVector)
00064       return ((BVector) v).nonZeroElements();
00065     double[] data;
00066     int length;
00067     if (v instanceof SVector) {
00068       SVector sv = (SVector) v;
00069       data = sv.values;
00070       length = sv.nonZeroElements();
00071     } else {
00072       data = v.accessData();
00073       length = data.length;
00074     }
00075     double sum = 0.0;
00076     for (int i = 0; i < length; i++)
00077       sum += Math.abs(data[i]);
00078     return sum;
00079   }
00080 
00081   public static double infNorm(RealVector v) {
00082     if (v instanceof BVector)
00083       return ((BVector) v).nonZeroElements() > 0 ? 1 : 0;
00084     double[] data;
00085     int length;
00086     if (v instanceof SVector) {
00087       SVector sv = (SVector) v;
00088       data = sv.values;
00089       length = sv.nonZeroElements();
00090     } else {
00091       data = v.accessData();
00092       length = data.length;
00093     }
00094     double max = 0.0;
00095     for (int i = 0; i < length; i++)
00096       max = Math.max(max, Math.abs(data[i]));
00097     return max;
00098   }
00099 
00100   public static MutableVector toBinary(MutableVector result, RealVector v) {
00101     assert result.getDimension() == v.getDimension();
00102     result.clear();
00103     if (v instanceof SVector) {
00104       SVector sv = (SVector) v;
00105       for (int i = 0; i < sv.nonZeroElements(); i++)
00106         result.setEntry(sv.activeIndexes[i], 1);
00107       return result;
00108     }
00109     double[] data = v.accessData();
00110     for (int i = 0; i < data.length; i++)
00111       if (data[i] != 0)
00112         result.setEntry(i, 1);
00113     return result;
00114   }
00115 
00116   public static boolean isNull(RealVector v) {
00117     for (double value : v.accessData())
00118       if (value != 0)
00119         return false;
00120     return true;
00121   }
00122 
00123   public static MutableVector maxToSelf(MutableVector result, RealVector other) {
00124     for (int i = 0; i < result.getDimension(); i++)
00125       result.setEntry(i, Math.max(result.getEntry(i), other.getEntry(i)));
00126     return result;
00127   }
00128 
00129   public static MutableVector positiveMaxToSelf(MutableVector result, RealVector other) {
00130     if (other instanceof SVector)
00131       return positiveMaxToSelf(result, (SVector) other);
00132     return maxToSelf(result, other);
00133   }
00134 
00135   private static MutableVector positiveMaxToSelf(MutableVector result, SVector sother) {
00136     for (int position = 0; position < sother.nonZeroElements(); position++) {
00137       final int index = sother.activeIndexes[position];
00138       result.setEntry(index, Math.max(result.getEntry(index), sother.values[position]));
00139     }
00140     return result;
00141   }
00142 
00143   public static RealVector bufferedCopy(RealVector source, RealVector target) {
00144     if (source == null) {
00145       if (target != null)
00146         if (target instanceof BVector)
00147           ((BVector) target).clear();
00148         else
00149           ((MutableVector) target).clear();
00150       return target;
00151     }
00152     RealVector result = target != null ? target : source.copy();
00153     if (result instanceof BVector)
00154       ((BVector) result).set((BVector) source);
00155     else
00156       ((MutableVector) result).set(source);
00157     return result;
00158   }
00159 }
 All Classes Namespaces Files Functions Variables Enumerations
Zephyr
RLPark