KrisLibrary  1.0.0
DensityEstimator.h
1 #ifndef PLANNING_DENSITY_ESTIMATOR_H
2 #define PLANNING_DENSITY_ESTIMATOR_H
3 
4 #include <KrisLibrary/math/vector.h>
5 #include <KrisLibrary/geometry/GridSubdivision.h>
6 #include "PointLocation.h"
7 
18 {
19 public:
20  virtual ~DensityEstimatorBase () {}
21  virtual void Clear()=0;
22  virtual void Add(const Math::Vector& x,void* data)=0;
23  virtual void Remove(const Math::Vector& x,void* data)=0;
24  virtual double Density(const Config& x)=0;
25  virtual void* RandomNear(const Math::Vector& x) { return NULL; }
26  virtual void* Random() { return NULL; }
27  virtual void Random(Math::Vector& x) { }
28 };
29 
44 {
45 public:
47  GridDensityEstimator(const std::vector<int>& mappedDims,Math::Real h);
48  GridDensityEstimator(const std::vector<int>& mappedDims,const Math::Vector& h);
49  void Randomize(int numSourceDims,int numMapped,const Vector& hsource);
50  void Randomize(int numSourceDims,int numMapped,Real h);
51  virtual void Clear();
52  virtual void Add(const Math::Vector& x,void* data);
53  virtual void Remove(const Math::Vector& x,void* data);
54  virtual double Density(const Config& x);
55  virtual void* RandomNear(const Math::Vector& x);
56  virtual void* Random();
57 
58  std::vector<int> mappedDims;
59  Math::Vector h;
61 
62  //temporary
63  Math::Vector temp;
64  std::vector<Geometry::GridSubdivision::ObjectSet*> flattenedBuckets;
65 };
66 
75 {
76 public:
77  MultiGridDensityEstimator(int numDims,int numMappedDims,Real h);
78  MultiGridDensityEstimator(int numDims,int numMappedDims,const Math::Vector& h);
79  void Randomize();
80  virtual void Clear();
81  virtual void Add(const Math::Vector& x,void* data);
82  virtual void Remove(const Math::Vector& x,void* data);
83  virtual double Density(const Config& x);
84  virtual void* RandomNear(const Math::Vector& x);
85  virtual void* Random();
86 
87  int numDims,numMappedDims;
88  Math::Vector h;
89  std::vector<GridDensityEstimator> grids;
90 };
91 
96 {
97 public:
98  enum KernelType { KernelUniform, KernelGaussian, KernelTriangular};
99  KernelDensityEstimator(Math::Real kernelRadius,Math::Real kernelTruncationFactor=3.0);
100  virtual void Clear();
101  virtual void Add(const Math::Vector& x,void* data);
102  virtual void Remove(const Math::Vector& x,void* data);
103  virtual double Density(const Config& x);
104  virtual void* RandomNear(const Math::Vector& x);
105  virtual void* Random();
106  virtual void Random(Math::Vector& x);
107 
108  KernelType kernelType;
109  Math::Real kernelRadius,kernelTruncationFactor;
110  std::vector<Math::Vector> pointList;
111  std::vector<void*> dataList;
112  std::shared_ptr<PointLocationBase> pointLocation;
113 };
114 
115 
116 #endif
An ND grid with a list of arbitrary objects (given by void pointers)
Definition: GridSubdivision.h:230
Vector Config
an alias for Vector
Definition: RobotKinematics3D.h:14
A multiple-grid based density estimator that attempts to avoid data fragmentation by collecting histo...
Definition: DensityEstimator.h:74
A grid-based (n-d projected histogram) density estimator.
Definition: DensityEstimator.h:43
A base class for density estimators. Each point in an N dimensional space is attached to some data po...
Definition: DensityEstimator.h:17
a Kernel Density Estimation density estimator.
Definition: DensityEstimator.h:95