DMP_BBO library
FunctionApproximator.hpp
Go to the documentation of this file.
1 
27 #ifndef _FUNCTIONAPPROXIMATOR_H_
28 #define _FUNCTIONAPPROXIMATOR_H_
29 
30 #include "Parameterizable.hpp"
31 
32 #include <boost/serialization/nvp.hpp>
33 
34 #include <string>
35 #include <vector>
36 #include <eigen3/Eigen/Core>
37 
38 namespace DmpBbo {
39 
40 // Forward declarations
41 class MetaParameters;
42 class ModelParameters;
43 class UnifiedModel;
44 
49 {
50 
51 public:
52 
61  FunctionApproximator(const MetaParameters *const meta_parameters, const ModelParameters *const model_parameters=NULL);
62 
66  FunctionApproximator(const ModelParameters *const model_parameters);
67 
68  virtual ~FunctionApproximator(void);
69 
73  virtual FunctionApproximator* clone(void) const = 0;
74 
79  virtual void train(
80  const Eigen::Ref<const Eigen::MatrixXd>& inputs,
81  const Eigen::Ref<const Eigen::MatrixXd>& targets) = 0;
82 
89  void train(
90  const Eigen::Ref<const Eigen::MatrixXd>& inputs,
91  const Eigen::Ref<const Eigen::MatrixXd>& targets,
92  std::string save_directory,
93  bool overwrite=false);
94 
102  void reTrain(
103  const Eigen::Ref<const Eigen::MatrixXd>& inputs,
104  const Eigen::Ref<const Eigen::MatrixXd>& targets);
105 
115  void reTrain(
116  const Eigen::Ref<const Eigen::MatrixXd>& inputs,
117  const Eigen::Ref<const Eigen::MatrixXd>& targets,
118  std::string save_directory,
119  bool overwrite=false);
120 
129  virtual void predict(
130  const Eigen::Ref<const Eigen::MatrixXd>& inputs,
131  Eigen::MatrixXd& outputs) = 0;
132 
142  virtual void predict(
143  const Eigen::Ref<const Eigen::MatrixXd>& inputs,
144  Eigen::MatrixXd& outputs,
145  Eigen::MatrixXd& variances)
146  {
147  predict(inputs, outputs);
148  variances.fill(0);
149  }
150 
160  virtual void predict(
161  const Eigen::Ref<const Eigen::MatrixXd>& inputs,
162  Eigen::MatrixXd& outputs,
163  std::vector<Eigen::MatrixXd>& variances)
164  {
165  predict(inputs, outputs);
166  for (unsigned int i=0; i<variances.size(); i++)
167  variances[i].fill(0);
168  }
169 
170 
181  virtual void predictVariance(
182  const Eigen::Ref<const Eigen::MatrixXd>& inputs,
183  Eigen::MatrixXd& variances)
184  {
185  variances.fill(0);
186  }
187 
191  bool isTrained(void) const
192  {
193  return (model_parameters_!=NULL);
194  }
195 
199  int getExpectedInputDim(void) const;
200 
205  int getExpectedOutputDim(void) const;
206 
210  virtual std::string getName(void) const = 0;
211 
212  void getSelectableParameters(std::set<std::string>& selected_values_labels) const;
213  void setSelectedParameters(const std::set<std::string>& selected_values_labels);
219  void getParameterVectorSelectedMinMax(Eigen::VectorXd& min, Eigen::VectorXd& max) const;
220  int getParameterVectorSelectedSize(void) const;
221  void setParameterVectorSelected(const Eigen::VectorXd& values, bool normalized=false);
222  void getParameterVectorSelected(Eigen::VectorXd& values, bool normalized=false) const;
223 
224  void getParameterVectorMask(const std::set<std::string> selected_values_labels, Eigen::VectorXi& selected_mask) const;
225  int getParameterVectorAllSize(void) const;
226  void getParameterVectorAll(Eigen::VectorXd& values) const;
227  void setParameterVectorAll(const Eigen::VectorXd& values);
228 
233  UnifiedModel* getUnifiedModel(void) const;
234 
244  friend std::ostream& operator<<(std::ostream& output, const FunctionApproximator& function_approximator) {
245  output << function_approximator.toString();
246  return output;
247  }
248 
252  std::string toString(void) const;
253 
254 
258  const MetaParameters* getMetaParameters(void) const;
259 
263  const ModelParameters* getModelParameters(void) const;
264 
265  void setParameterVectorModifierPrivate(std::string modifier, bool new_value);
266 
278  static void generateInputsGrid(const Eigen::VectorXd& min, const Eigen::VectorXd& max, const Eigen::VectorXi& n_samples_per_dim, Eigen::MatrixXd& inputs_grid);
279 
292  virtual bool saveGridData(const Eigen::VectorXd& min, const Eigen::VectorXd& max, const Eigen::VectorXi& n_samples_per_dim, std::string directory, bool overwrite=false) const;
293 
294 protected:
295 
299  void setModelParameters(ModelParameters* model_parameters);
300 
301 
309 
310 
311 private:
312 
318  MetaParameters* meta_parameters_;
319 
326  ModelParameters* model_parameters_;
327 
328  bool checkModelParametersInitialized(void) const;
329 
332 
338  template<class Archive>
339  void serialize(Archive & ar, const unsigned int version)
340  {
341  // serialize base class information
342  ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Parameterizable);
343 
344  ar & BOOST_SERIALIZATION_NVP(meta_parameters_);
345  ar & BOOST_SERIALIZATION_NVP(model_parameters_);
346  }
347 
348 };
349 
350 }
351 
352 
354 #include <boost/serialization/assume_abstract.hpp>
356 
358 #include <boost/serialization/export.hpp>
359 BOOST_CLASS_IMPLEMENTATION(DmpBbo::FunctionApproximator,boost::serialization::object_serializable);
360 
361 #endif // _FUNCTIONAPPROXIMATOR_H_
362 
Parameterizable class header file.
friend class boost::serialization::access
Give boost serialization access to private members.
virtual bool saveGridData(const Eigen::VectorXd &min, const Eigen::VectorXd &max, const Eigen::VectorXi &n_samples_per_dim, std::string directory, bool overwrite=false) const
Generate a grid of inputs, and output the response of the basis functions and line segments for these...
virtual void train(const Eigen::Ref< const Eigen::MatrixXd > &inputs, const Eigen::Ref< const Eigen::MatrixXd > &targets)=0
Train the function approximator with corresponding input and target examples.
void getParameterVectorSelectedMinMax(Eigen::VectorXd &min, Eigen::VectorXd &max) const
Get the minimum and maximum of the selected parameters in one vector.
friend std::ostream & operator<<(std::ostream &output, const FunctionApproximator &function_approximator)
Print to output stream.
void setParameterVectorSelected(const Eigen::VectorXd &values, bool normalized=false)
Set all the values of the selected parameters with one vector.
void reTrain(const Eigen::Ref< const Eigen::MatrixXd > &inputs, const Eigen::Ref< const Eigen::MatrixXd > &targets)
Re-train the function approximator with corresponding input and target examples.
static void generateInputsGrid(const Eigen::VectorXd &min, const Eigen::VectorXd &max, const Eigen::VectorXi &n_samples_per_dim, Eigen::MatrixXd &inputs_grid)
Generate a input samples that lie on a grid (much like Matlab&#39;s meshgrid) For instance, if min = [2 6], and max = [3 8], and n_samples_per_dim = [3 5] then this function first makes linearly spaces samples along each dimension, e.g.
Class for providing access to a model&#39;s parameters as a vector.
bool isTrained(void) const
Determine whether the function approximator has already been trained with data or not...
void setParameterVectorAll(const Eigen::VectorXd &values)
Set all available parameter values with one vector.
void getParameterVectorSelected(Eigen::VectorXd &values, bool normalized=false) const
Get the values of the selected parameters in one vector.
virtual void predictVariance(const Eigen::Ref< const Eigen::MatrixXd > &inputs, Eigen::MatrixXd &variances)
Query the function approximator to get the variance of a prediction This function is not implemented ...
int getExpectedOutputDim(void) const
The expected dimensionality of the output data.
Base class for all function approximators.
void setParameterVectorModifierPrivate(std::string modifier, bool new_value)
Turn certain modifiers on or off, see Parameterizable::setParameterVectorModifier().
virtual void predict(const Eigen::Ref< const Eigen::MatrixXd > &inputs, Eigen::MatrixXd &outputs)=0
Query the function approximator to make a prediction.
virtual void predict(const Eigen::Ref< const Eigen::MatrixXd > &inputs, Eigen::MatrixXd &outputs, std::vector< Eigen::MatrixXd > &variances)
Query the function approximator to make a prediction, and also to predict its variance.
The unified model, which can be used to represent the model of all other function approximators...
int getParameterVectorAllSize(void) const
Get the size of the parameter values vector when it contains all available parameter values...
BOOST_SERIALIZATION_ASSUME_ABSTRACT(DmpBbo::FunctionApproximator)
Tell boost serialization that this class has pure virtual functions.
Base class for all model parameters of function approximators.
virtual FunctionApproximator * clone(void) const =0
Return a pointer to a deep copy of the FunctionApproximator object.
Base class for all meta-parameters of function approximators.
UnifiedModel * getUnifiedModel(void) const
Return a representation of this function approximator&#39;s model as a unified model. ...
void setSelectedParameters(const std::set< std::string > &selected_values_labels)
Determine which subset of parameters is represented in the vector returned by Parameterizable::getPar...
const MetaParameters * getMetaParameters(void) const
Accessor for FunctionApproximator::meta_parameters_.
virtual void predict(const Eigen::Ref< const Eigen::MatrixXd > &inputs, Eigen::MatrixXd &outputs, Eigen::MatrixXd &variances)
Query the function approximator to make a prediction, and also to predict its variance.
virtual std::string getName(void) const =0
Get the name of this function approximator.
void getParameterVectorMask(const std::set< std::string > selected_values_labels, Eigen::VectorXi &selected_mask) const
Get a mask for selecting parameters.
const ModelParameters * getModelParameters(void) const
Accessor for FunctionApproximator::model_parameters_.
std::string toString(void) const
Returns a string representation of the object.
int getParameterVectorSelectedSize(void) const
Get the size of the vector of selected parameters, as returned by getParameterVectorSelected(.
void setModelParameters(ModelParameters *model_parameters)
Accessor for FunctionApproximator::model_parameters_.
FunctionApproximator(void)
Default constructor.
void getSelectableParameters(std::set< std::string > &selected_values_labels) const
Return all the names of the parameter types that can be selected.
int getExpectedInputDim(void) const
The expected dimensionality of the input data.
BOOST_CLASS_IMPLEMENTATION(DmpBbo::FunctionApproximator, boost::serialization::object_serializable)
Don&#39;t add version information to archives.
void getParameterVectorAll(Eigen::VectorXd &values) const
Return a vector that returns all available parameter values.