MUQ  0.4.3
muq::Modeling::FlannCache Class Reference

Create a cache of model evaluations (input/output pairs) More...

#include <FlannCache.h>

Inheritance diagram for muq::Modeling::FlannCache:

Detailed Description

Create a cache of model evaluations (input/output pairs)

Caches the input/output pairs for a muq::Modeling::WorkPiece that has one input and one output.

Definition at line 103 of file FlannCache.h.

Public Member Functions

 FlannCache (std::shared_ptr< ModPiece > function)
 
 ~FlannCache ()
 
int InCache (Eigen::VectorXd const &input) const
 Determine if an entry is in the cache. More...
 
std::vector< Eigen::VectorXd > Add (std::vector< Eigen::VectorXd > const &inputs)
 Add new points to the cache. More...
 
void Add (std::vector< Eigen::VectorXd > const &inputs, std::vector< Eigen::VectorXd > const &results)
 Add new points to the cache given the result. More...
 
const Eigen::VectorXd at (unsigned int const index) const
 Get an input point from the cache. More...
 
Eigen::VectorXd at (unsigned int const index)
 Get an input point from the cache. More...
 
Eigen::VectorXd const & OutputValue (unsigned int index) const
 Returns the model for a specific cache index. More...
 
Eigen::VectorXd Add (Eigen::VectorXd const &input)
 Add a new point to the cache. More...
 
unsigned int Add (Eigen::VectorXd const &input, Eigen::VectorXd const &result)
 Add a new point to the cache given the result. More...
 
void Remove (Eigen::VectorXd const &input)
 Remove point from the cache. More...
 
size_t NearestNeighborIndex (Eigen::VectorXd const &point) const
 The index of the nearest neighbor. More...
 
void NearestNeighbors (Eigen::VectorXd const &point, unsigned int const k, std::vector< Eigen::VectorXd > &neighbors) const
 Find the \(k\) nearest neighbors. More...
 
unsigned int Size () const
 Get the size of the cache. More...
 
Eigen::VectorXd Centroid () const
 Get the centroid of the cache. More...
 
std::shared_ptr< ModPieceFunction () const
 Get the underlying function. More...
 
- Public Member Functions inherited from muq::Modeling::ModPiece
 ModPiece (std::vector< int > const &inputSizes, std::vector< int > const &outputSizes)
 
 ModPiece (Eigen::VectorXi const &inputSizes, Eigen::VectorXi const &outputSizes)
 
virtual ~ModPiece ()=default
 
virtual double GetRunTime (const std::string &method="Evaluate") const override
 Get the average run time for one of the implemented methods. More...
 
virtual void ResetCallTime () override
 Resets the number of call and times. More...
 
virtual unsigned long int GetNumCalls (const std::string &method="Evaluate") const override
 get the number of times one of the implemented methods has been called. More...
 
virtual std::vector< Eigen::VectorXd > const & Evaluate (std::vector< Eigen::VectorXd > const &input)
 Evaluate the ModPiece. More...
 
virtual std::vector< Eigen::VectorXd > const & Evaluate (ref_vector< Eigen::VectorXd > const &input)
 
 VARIADIC_TO_REFVECTOR (Evaluate, Eigen::VectorXd, std::vector< Eigen::VectorXd > const &)
 
virtual Eigen::VectorXd const & Gradient (unsigned int const outputDimWrt, unsigned int const inputDimWrt, std::vector< Eigen::VectorXd > const &input, Eigen::VectorXd const &sensitivity)
 Compute the Gradient \(J^Tv\). More...
 
virtual Eigen::VectorXd const & Gradient (unsigned int const outputDimWrt, unsigned int const inputDimWrt, ref_vector< Eigen::VectorXd > const &input, Eigen::VectorXd const &sensitivity)
 
Eigen::VectorXd const & Gradient (unsigned int outWrt, unsigned int inWrt, Eigen::VectorXd const &last, Eigen::VectorXd const &sens)
 
template<typename... Args>
Eigen::VectorXd const & Gradient (unsigned int wrtOut, unsigned int wrtIn, Args const &... args)
 
Eigen::VectorXd const & ApplyHessian (unsigned int outWrt, unsigned int inWrt1, unsigned int inWrt2, Eigen::VectorXd const &last, Eigen::VectorXd const &sens, Eigen::VectorXd const &vec)
 
template<typename... Args>
Eigen::VectorXd const & ApplyHessian (unsigned int wrtOut, unsigned int wrtIn1, unsigned int wrtIn2, Args const &... args)
 
virtual Eigen::MatrixXd const & Jacobian (unsigned int const outputDimWrt, unsigned int const inputDimWrt, std::vector< Eigen::VectorXd > const &input)
 Compute the Jacobian of this ModPiece. More...
 
virtual Eigen::MatrixXd const & Jacobian (unsigned int const outputDimWrt, unsigned int const inputDimWrt, ref_vector< Eigen::VectorXd > const &input)
 
template<typename... Args>
Eigen::MatrixXd const & Jacobian (unsigned int outWrt, unsigned int inWrt, Args const &... args)
 
template<typename... Args>
Eigen::MatrixXd JacobianByFD (unsigned int outWrt, unsigned int inWrt, Args const &... args)
 
template<typename... Args>
Eigen::MatrixXd ApplyJacobianByFD (unsigned int outWrt, unsigned int inWrt, Args const &... args)
 
virtual Eigen::VectorXd const & ApplyJacobian (unsigned int const outputDimWrt, unsigned int const inputDimWrt, std::vector< Eigen::VectorXd > const &input, Eigen::VectorXd const &vec)
 Apply the Jacobian of this ModPiece to a vector. More...
 
virtual Eigen::VectorXd const & ApplyJacobian (unsigned int const outputDimWrt, unsigned int const inputDimWrt, ref_vector< Eigen::VectorXd > const &input, Eigen::VectorXd const &vec)
 
Eigen::VectorXd const & ApplyJacobian (unsigned int outWrt, unsigned int inWrt, Eigen::VectorXd const &last, Eigen::VectorXd const &sens)
 
template<typename... Args>
Eigen::VectorXd const & ApplyJacobian (unsigned int wrtOut, unsigned int wrtIn, Args const &... args)
 
virtual Eigen::VectorXd GradientByFD (unsigned int const outputDimWrt, unsigned int const inputDimWrt, std::vector< Eigen::VectorXd > const &input, Eigen::VectorXd const &sensitivity)
 
virtual Eigen::VectorXd GradientByFD (unsigned int const outputDimWrt, unsigned int const inputDimWrt, ref_vector< Eigen::VectorXd > const &input, Eigen::VectorXd const &sensitivity)
 
virtual Eigen::MatrixXd JacobianByFD (unsigned int const outputDimWrt, unsigned int const inputDimWrt, std::vector< Eigen::VectorXd > const &input)
 
virtual Eigen::MatrixXd JacobianByFD (unsigned int const outputDimWrt, unsigned int const inputDimWrt, ref_vector< Eigen::VectorXd > const &input)
 
virtual Eigen::VectorXd ApplyJacobianByFD (unsigned int const outputDimWrt, unsigned int const inputDimWrt, std::vector< Eigen::VectorXd > const &input, Eigen::VectorXd const &vec)
 
virtual Eigen::VectorXd ApplyJacobianByFD (unsigned int const outputDimWrt, unsigned int const inputDimWrt, ref_vector< Eigen::VectorXd > const &input, Eigen::VectorXd const &vec)
 
virtual Eigen::VectorXd const & ApplyHessian (unsigned int const outWrt, unsigned int const inWrt1, unsigned int const inWrt2, std::vector< Eigen::VectorXd > const &input, Eigen::VectorXd const &sens, Eigen::VectorXd const &vec)
 
virtual Eigen::VectorXd const & ApplyHessian (unsigned int const outWrt, unsigned int const inWrt1, unsigned int const inWrt2, ref_vector< Eigen::VectorXd > const &input, Eigen::VectorXd const &sens, Eigen::VectorXd const &vec)
 
virtual Eigen::VectorXd ApplyHessianByFD (unsigned int const outWrt, unsigned int const inWrt1, unsigned int const inWrt2, std::vector< Eigen::VectorXd > const &input, Eigen::VectorXd const &sens, Eigen::VectorXd const &vec)
 
virtual Eigen::VectorXd ApplyHessianByFD (unsigned int const outWrt, unsigned int const inWrt1, unsigned int const inWrt2, ref_vector< Eigen::VectorXd > const &input, Eigen::VectorXd const &sens, Eigen::VectorXd const &vec)
 
void EnableCache ()
 
void DisableCache ()
 
bool CacheStatus () const
 
virtual void SetWarnLevel (unsigned int newLevel)
 
- Public Member Functions inherited from muq::Modeling::WorkPiece
 WorkPiece ()
 Create a muq::Modeling::WorkPiece with no fixed number of inputs and outputs and variable input/output types. More...
 
 WorkPiece (int const num, WorkPiece::Fix const fix=WorkPiece::Fix::Inputs)
 Create a muq::Modeling::WorkPiece with either a fixed number of inputs or outputs and variable input/output types. More...
 
 WorkPiece (int const numIns, int const numOuts)
 Create a muq::Modeling::WorkPiece with a fixed number of inputs and outputs but variable input/output types. More...
 
 WorkPiece (std::vector< std::string > const &types, WorkPiece::Fix const fix=WorkPiece::Fix::Inputs)
 Create a muq::Modeling::WorkPiece with either a fixed number of inputs with specified types or a fixed number of outputs with specified types. More...
 
 WorkPiece (std::map< unsigned int, std::string > const &types, WorkPiece::Fix const fix=WorkPiece::Fix::Inputs)
 Create a muq::Modeling::WorkPiece where either some of the inputs have specified types or some of the outputs have specified types. More...
 
 WorkPiece (std::map< unsigned int, std::string > const &types, int const num, WorkPiece::Fix const fixTypes=WorkPiece::Fix::Inputs, WorkPiece::Fix const fixNum=WorkPiece::Fix::Inputs)
 Create a muq::Modeling::WorkPiece where either some of the inputs have specified types or some of the outputs have specified types and either the number of inputs or the number of outputs is fixed. More...
 
 WorkPiece (std::vector< std::string > const &types, int const num)
 Create a muq::Modeling::WorkPiece with a fixed number of inputs with specified types and a fixed number of outputs (of uknown type) More...
 
 WorkPiece (int const num, std::vector< std::string > const &types)
 Create a muq::Modeling::WorkPiece with a fixed number of outputs with specified types and a fixed number of inputs (of uknown type) More...
 
 WorkPiece (std::map< unsigned int, std::string > const &inTypes, int const numIns, int const numOuts)
 Create a muq::Modeling::WorkPiece where some of the inputs are known and we know the input and output numbers. More...
 
 WorkPiece (int const numIns, std::map< unsigned int, std::string > const &outTypes, int const numOuts)
 Create a muq::Modeling::WorkPiece where some of the outputs are known and we know the input and output numbers. More...
 
 WorkPiece (std::vector< std::string > const &inTypes, std::vector< std::string > const &outTypes)
 Create a muq::Modeling::WorkPiece with a fixed number of inputs and outputs with specified types. More...
 
 WorkPiece (std::map< unsigned int, std::string > const &inTypes, std::vector< std::string > const &outTypes)
 Create a muq::Modeling::WorkPiece where some of the inputs are known and all of the outputs have specified types. More...
 
 WorkPiece (std::map< unsigned int, std::string > const &inTypes, int const num, std::vector< std::string > const &outTypes)
 Create a muq::Modeling::WorkPiece where some of the inputs are known with a known number of inputs and all of the outputs have specified types. More...
 
 WorkPiece (std::vector< std::string > const &inTypes, std::map< unsigned int, std::string > const &outTypes)
 Create a muq::Modeling::WorkPiece where some of the outputs and all of the inputs have specified types. More...
 
 WorkPiece (std::vector< std::string > const &inTypes, std::map< unsigned int, std::string > const &outTypes, int const num)
 Create a muq::Modeling::WorkPiece where some of the outputs with a known number of outputs and all of the inputs have specified types. More...
 
 WorkPiece (std::map< unsigned int, std::string > const &inTypes, std::map< unsigned int, std::string > const &outTypes)
 Create a muq::Mdoeling::WorkPiece where some of the inputs and some of the outputs have specified types. More...
 
 WorkPiece (std::map< unsigned int, std::string > const &inTypes, int const numIn, std::map< unsigned int, std::string > const &outTypes)
 Create a muq::Mdoeling::WorkPiece where some of the inputs and some of the outputs have specified types with a fixed number of inputs. More...
 
 WorkPiece (std::map< unsigned int, std::string > const &inTypes, std::map< unsigned int, std::string > const &outTypes, int const numOut)
 Create a muq::Mdoeling::WorkPiece where some of the inputs and some of the outputs have specified types with a fixed number of outputs. More...
 
 WorkPiece (std::map< unsigned int, std::string > const &inTypes, int const numIn, std::map< unsigned int, std::string > const &outTypes, int const numOut)
 Create a muq::Mdoeling::WorkPiece where some of the inputs and some of the outputs have specified types with a fixed number of inputs and outputs. More...
 
virtual ~WorkPiece ()
 Default destructor. More...
 
std::vector< boost::any > const & Evaluate (std::vector< boost::any > const &ins)
 Evaluate this muq::Modeling::WorkPiece. More...
 
std::vector< boost::any > const & Evaluate (ref_vector< boost::any > const &ins)
 Evaluate this muq::Modeling::WorkPiece using references to the inputs. More...
 
std::vector< boost::any > const & Evaluate ()
 Evaluate this muq::Modeling::WorkPiece in the case that there are no inputs. More...
 
template<typename... Args>
std::vector< boost::any > const & Evaluate (Args... args)
 Evalaute this muq::Modeling::WorkPiece using multiple arguments. More...
 
std::string const & Name ()
 Get the (unique) name of this work piece. More...
 
void SetName (std::string const &newName)
 Set the name of this work piece. More...
 
std::string InputType (unsigned int inputNum, bool const demangle=true) const
 Get the input type (if we know it) for a specific input. More...
 
int InputSize (unsigned int inputNum) const
 Get the length of a vector valued input with fixed size. More...
 
void SetInputSize (unsigned int inputNum, int newSize)
 
std::string OutputType (unsigned int outputNum, bool const demangle=true) const
 Get the output type (if we know it) for a specific output. More...
 
std::map< unsigned int, std::string > OutputTypes () const
 Get the output types. More...
 
std::map< unsigned int, std::string > InputTypes () const
 Get the input types. More...
 
unsigned int ID () const
 Get the unique ID number. More...
 

Additional Inherited Members

- Static Public Member Functions inherited from muq::Modeling::WorkPiece
static ref_vector< const boost::any > ToRefVector (std::vector< boost::any > const &anyVec)
 Create vector of references from a vector of boost::any's. More...
 
static ref_vector< const Eigen::VectorXd > ToRefVector (std::vector< Eigen::VectorXd > const &anyVec)
 
- Public Attributes inherited from muq::Modeling::ModPiece
const Eigen::VectorXi inputSizes
 
const Eigen::VectorXi outputSizes
 
- Public Attributes inherited from muq::Modeling::WorkPiece
int numInputs
 The number of inputs. More...
 
int numOutputs
 The number of outputs. More...
 

Constructor & Destructor Documentation

◆ FlannCache()

FlannCache::FlannCache ( std::shared_ptr< ModPiece function)

If we pass a nullptr (default), then only construct a cache of points (no outputs)

Parameters
[in]functionThe function whose input/output pairs we want to cache

Definition at line 5 of file FlannCache.cpp.

References centroid, function, and muq::Modeling::ModPiece::inputSizes.

◆ ~FlannCache()

FlannCache::~FlannCache ( )

Definition at line 15 of file FlannCache.cpp.

Member Function Documentation

◆ Add() [1/4]

Eigen::VectorXd FlannCache::Add ( Eigen::VectorXd const &  input)

Add a new point to the cache.

Parameters
[in]inputThe entry we would like to add to the cache (if it is not there already)
Returns
The function result at that point

Definition at line 43 of file FlannCache.cpp.

References Add().

◆ Add() [2/4]

unsigned int FlannCache::Add ( Eigen::VectorXd const &  input,
Eigen::VectorXd const &  result 
)

Add a new point to the cache given the result.

Parameters
[in]inputThe entry we would like to add to the cache (if it is not there already)
[in]resultThe result of the function
Returns
Returns the index of the added point

Definition at line 55 of file FlannCache.cpp.

References function, InCache(), kdTree, outputCache, and UpdateCentroid().

◆ Add() [3/4]

std::vector< Eigen::VectorXd > FlannCache::Add ( std::vector< Eigen::VectorXd > const &  inputs)

Add new points to the cache.

Parameters
[in]inputsThe points to add
Returns
The function evaluation at each input point

Definition at line 146 of file FlannCache.cpp.

References InCache(), kdTree, and outputCache.

Referenced by Add(), and EvaluateImpl().

◆ Add() [4/4]

void FlannCache::Add ( std::vector< Eigen::VectorXd > const &  inputs,
std::vector< Eigen::VectorXd > const &  results 
)

Add new points to the cache given the result.

Parameters
[in]inputsThe points to add
[in]resultsThe function evaluation at each input point

Definition at line 165 of file FlannCache.cpp.

References Add(), InCache(), kdTree, and outputCache.

◆ at() [1/2]

Eigen::VectorXd FlannCache::at ( unsigned int const  index)

Get an input point from the cache.

Parameters
[in]indexThe point to returnn
Returns
The input point associated with the index

Definition at line 184 of file FlannCache.cpp.

References kdTree.

◆ at() [2/2]

const Eigen::VectorXd FlannCache::at ( unsigned int const  index) const

Get an input point from the cache.

Parameters
[in]indexThe point to returnn
Returns
The input point associated with the index

Definition at line 179 of file FlannCache.cpp.

References kdTree.

◆ Centroid()

Eigen::VectorXd FlannCache::Centroid ( ) const

Get the centroid of the cache.

Returns
The cache centroid

Definition at line 197 of file FlannCache.cpp.

References centroid.

◆ EvaluateImpl()

void FlannCache::EvaluateImpl ( ref_vector< Eigen::VectorXd > const &  inputs)
overrideprivatevirtual

Implements muq::Modeling::ModPiece.

Definition at line 17 of file FlannCache.cpp.

References Add(), InCache(), outputCache, and muq::Modeling::ModPiece::outputs.

◆ Function()

std::shared_ptr< ModPiece > FlannCache::Function ( ) const

Get the underlying function.

Returns
The function whose output we are storing

Definition at line 199 of file FlannCache.cpp.

◆ InCache()

int FlannCache::InCache ( Eigen::VectorXd const &  input) const

Determine if an entry is in the cache.

Parameters
[in]inputCheck if this input is in the cache
Returns
-1: the input vector does not have an entry in the cache, otherise: return the index of the input in the cache

Definition at line 28 of file FlannCache.cpp.

References kdTree, and Size().

Referenced by Add(), EvaluateImpl(), and Remove().

◆ NearestNeighborIndex()

size_t FlannCache::NearestNeighborIndex ( Eigen::VectorXd const &  point) const

The index of the nearest neighbor.

Parameters
[in]pointWe want the index of the nearest neighbor that is closest to this point.
Returns
The index of the nearest neighbor

Definition at line 91 of file FlannCache.cpp.

References kdTree, and Size().

◆ NearestNeighbors()

void FlannCache::NearestNeighbors ( Eigen::VectorXd const &  point,
unsigned int const  k,
std::vector< Eigen::VectorXd > &  neighbors 
) const

Find the \(k\) nearest neighbors.

Parameters
[in]pointThe point whose nearest neighbors we want to find
[in]kWe want to find this many nearest neighbors
[out]neighborsA vector of the \fk \( nearest neighbors @param[out] result The output corresponding to the \)@_fakenlk \( nearest neighbors */ void NearestNeighbors(Eigen::VectorXd const& point, unsigned int const k, std::vector<Eigen::VectorXd>& neighbors, std::vector<Eigen::VectorXd>& result) const; Find the \)@_fakenlk \( nearest neighbors (don't bother getting the result too) /** @param[in] point The point whose nearest neighbors we want to find @param[in] k We want to find this many nearest neighbors @param[out] neighbors A vector of the \fk\) nearest neighbors

Definition at line 104 of file FlannCache.cpp.

References nlohmann::detail::dtoa_impl::k, kdTree, outputCache, and Size().

◆ OutputValue()

Eigen::VectorXd const & FlannCache::OutputValue ( unsigned int  index) const

Returns the model for a specific cache index.

Definition at line 189 of file FlannCache.cpp.

References outputCache.

◆ Remove()

void FlannCache::Remove ( Eigen::VectorXd const &  input)

Remove point from the cache.

Parameters
[in]inputThe entry we would like to remove from the cache

Definition at line 76 of file FlannCache.cpp.

References InCache(), kdTree, and outputCache.

◆ Size()

unsigned int FlannCache::Size ( ) const

Get the size of the cache.

Returns
The size of the cache

Definition at line 141 of file FlannCache.cpp.

References kdTree, and outputCache.

Referenced by InCache(), NearestNeighborIndex(), NearestNeighbors(), and UpdateCentroid().

◆ UpdateCentroid()

void FlannCache::UpdateCentroid ( Eigen::VectorXd const &  point)
private

Update the centroid when a new point is added to the cache.

Parameters
[in]pointThe new point

Definition at line 193 of file FlannCache.cpp.

References centroid, and Size().

Referenced by Add().

Member Data Documentation

◆ centroid

Eigen::VectorXd muq::Modeling::FlannCache::centroid
private

The centroid of the input addPoints.

The centroid is

\begin{equation} \bar{x} = \frac{1}{N} \sum_{i=1}^N x_i, \end{equation}

where \(N\) is the cache size.

Note: the centroid is not necessarily in the cache.

Definition at line 249 of file FlannCache.h.

Referenced by Centroid(), FlannCache(), and UpdateCentroid().

◆ function

std::shared_ptr<ModPiece> muq::Modeling::FlannCache::function
private

The function whose input/outputs we are caching.

Definition at line 234 of file FlannCache.h.

Referenced by Add(), and FlannCache().

◆ kdTree

std::shared_ptr<DynamicKDTreeAdaptor<> > muq::Modeling::FlannCache::kdTree
private

The nearest neighbor index, used to perform searches.

Definition at line 237 of file FlannCache.h.

Referenced by Add(), at(), InCache(), NearestNeighborIndex(), NearestNeighbors(), Remove(), and Size().

◆ outputCache

std::vector<Eigen::VectorXd> muq::Modeling::FlannCache::outputCache
private

Definition at line 229 of file FlannCache.h.

Referenced by Add(), EvaluateImpl(), NearestNeighbors(), OutputValue(), Remove(), and Size().


The documentation for this class was generated from the following files: