24 #include <boost/serialization/export.hpp> 25 #include <boost/archive/text_iarchive.hpp> 26 #include <boost/archive/text_oarchive.hpp> 27 #include <boost/archive/xml_iarchive.hpp> 28 #include <boost/archive/xml_oarchive.hpp> 43 #include <eigen3/Eigen/Core> 47 using namespace Eigen;
51 ModelParametersRBFN::ModelParametersRBFN(
const Eigen::MatrixXd& centers,
const Eigen::MatrixXd& widths,
const Eigen::MatrixXd& weights)
58 #ifndef NDEBUG // Variables below are only required for asserts; check for NDEBUG to avoid warnings. 59 int n_basis_functions = centers.rows();
60 int n_dims = centers.cols();
62 assert(n_basis_functions==widths_.rows());
63 assert(n_dims ==widths_.cols());
64 assert(n_basis_functions==weights_.rows());
65 assert(1 ==weights_.cols());
67 all_values_vector_size_ = 0;
68 all_values_vector_size_ += centers_.rows()*centers_.cols();
69 all_values_vector_size_ += widths_.rows() *widths_.cols();
70 all_values_vector_size_ += weights_.rows()*weights_.cols();
84 if ( inputs.rows()==inputs_cached_.rows() && inputs.cols()==inputs_cached_.cols() )
87 if ( (inputs.array()==inputs_cached_.array()).all() )
90 kernel_activations = kernel_activations_cached_;
96 ENTERING_REAL_TIME_CRITICAL_CODE
99 bool normalized_basis_functions=
false;
100 bool asymmetric_kernels=
false;
101 BasisFunction::Gaussian::activations(centers_,widths_,inputs,kernel_activations,
102 normalized_basis_functions,asymmetric_kernels);
104 EXITING_REAL_TIME_CRITICAL_CODE
109 inputs_cached_ = inputs;
110 kernel_activations_cached_ = kernel_activations;
115 template<
class Archive>
116 void ModelParametersRBFN::serialize(Archive & ar,
const unsigned int version)
121 ar & BOOST_SERIALIZATION_NVP(centers_);
122 ar & BOOST_SERIALIZATION_NVP(widths_);
123 ar & BOOST_SERIALIZATION_NVP(weights_);
124 ar & BOOST_SERIALIZATION_NVP(all_values_vector_size_);
125 ar & BOOST_SERIALIZATION_NVP(caching_);
135 selected_values_labels = set<string>();
136 selected_values_labels.insert(
"centers");
137 selected_values_labels.insert(
"widths");
138 selected_values_labels.insert(
"weights");
146 selected_mask.fill(0);
152 size = centers_.rows()*centers_.cols();
153 if (selected_values_labels.find(
"centers")!=selected_values_labels.end())
154 selected_mask.segment(offset,size).fill(1);
158 size = widths_.rows()*widths_.cols();
159 if (selected_values_labels.find(
"widths")!=selected_values_labels.end())
160 selected_mask.segment(offset,size).fill(2);
164 size = weights_.rows()*weights_.cols();
165 if (selected_values_labels.find(
"weights")!=selected_values_labels.end())
166 selected_mask.segment(offset,size).fill(3);
177 for (
int i_dim=0; i_dim<centers_.cols(); i_dim++)
179 values.segment(offset,centers_.rows()) = centers_.col(i_dim);
180 offset += centers_.rows();
183 for (
int i_dim=0; i_dim<widths_.cols(); i_dim++)
185 values.segment(offset,widths_.rows()) = widths_.col(i_dim);
186 offset += widths_.rows();
189 values.segment(offset,weights_.rows()) = weights_;
190 offset += weights_.rows();
197 if (all_values_vector_size_ != values.size())
199 cerr << __FILE__ <<
":" << __LINE__ <<
": values is of wrong size." << endl;
204 int size = centers_.rows();
205 int n_dims = centers_.cols();
206 for (
int i_dim=0; i_dim<n_dims; i_dim++)
210 if ( !(centers_.col(i_dim).array() == values.segment(offset,size).array()).all() )
213 centers_.col(i_dim) = values.segment(offset,size);
216 for (
int i_dim=0; i_dim<n_dims; i_dim++)
220 if ( !(widths_.col(i_dim).array() == values.segment(offset,size).array()).all() )
223 widths_.col(i_dim) = values.segment(offset,size);
227 weights_ = values.segment(offset,size);
241 bool normalized_basis_functions =
false;
242 return new UnifiedModel(centers_, widths_, weights_,normalized_basis_functions);
UnifiedModel class header file.
UnifiedModel * toUnifiedModel(void) const
Convert these model parameters to unified model parameters.
FunctionApproximator class header file.
void kernelActivations(const Eigen::Ref< const Eigen::MatrixXd > &inputs, Eigen::MatrixXd &kernel_activations) const
Get the kernel activations for given inputs.
ModelParameters * clone(void) const
Return a pointer to a deep copy of the ModelParameters object.
int getParameterVectorAllSize(void) const
Get the size of the parameter values vector when it contains all available parameter values...
std::string toString(void) const
Returns a string representation of the object.
BasisFunction header file.
BOOST_CLASS_EXPORT_IMPLEMENT(DmpBbo::ModelParametersRBFN)
For boost::serialization.
#define RETURN_STRING_FROM_BOOST_SERIALIZATION_XML(name)
Macro to convert the boost XML serialization of an object into a string.
ModelParametersRBFN class header file.
The unified model, which can be used to represent the model of all other function approximators...
void setParameterVectorAll(const Eigen::VectorXd &values)
Set all available parameter values with one vector.
void getParameterVectorAll(Eigen::VectorXd &all_values) const
Return a vector that returns all available parameter values.
Base class for all model parameters of function approximators.
void setParameterVectorModifierPrivate(std::string modifier, bool new_value)
Turn certain modifiers on or off, see Parameterizable::setParameterVectorModifier().
Model parameters for the Radial Basis Function Network (RBFN) function approximator.
Header file to generate strings from boost serialized files.
void getParameterVectorMask(const std::set< std::string > selected_values_labels, Eigen::VectorXi &selected_mask) const
Get a mask for selecting parameters.
void getSelectableParameters(std::set< std::string > &selected_values_labels) const
Return all the names of the parameter types that can be selected.
Header file for serialization of Eigen matrices.