DMP_BBO library
Public Member Functions | Protected Member Functions | Friends | List of all members

Model parameters for the Locally Weighted Projection Regression (LWPR) function approximator. More...

#include <ModelParametersLWPR.hpp>

Inheritance diagram for ModelParametersLWPR:
Inheritance graph
[legend]
Collaboration diagram for ModelParametersLWPR:
Collaboration graph
[legend]

Public Member Functions

 ModelParametersLWPR (LWPR_Object *lwpr_object)
 Initializing constructor. More...
 
std::string toString (void) const
 Returns a string representation of the object. More...
 
ModelParametersclone (void) const
 Return a pointer to a deep copy of the ModelParameters object. More...
 
int getExpectedInputDim (void) const
 The expected dimensionality of the input data. More...
 
void getSelectableParameters (std::set< std::string > &selected_values_labels) const
 Return all the names of the parameter types that can be selected. More...
 
void getParameterVectorMask (const std::set< std::string > selected_values_labels, Eigen::VectorXi &selected_mask) const
 Get a mask for selecting parameters. More...
 
void getParameterVectorAll (Eigen::VectorXd &all_values) const
 Return a vector that returns all available parameter values. More...
 
int getParameterVectorAllSize (void) const
 Get the size of the parameter values vector when it contains all available parameter values. More...
 
UnifiedModeltoUnifiedModel (void) const
 Convert these LWPR model parameters to unified model parameters. More...
 
- Public Member Functions inherited from ModelParameters
virtual int getExpectedOutputDim (void) const
 The expected dimensionality of the output data. More...
 
template<class Archive >
void serialize (Archive &ar, const unsigned int version)
 Serialize class data members to boost archive. More...
 
- Public Member Functions inherited from Parameterizable
virtual ~Parameterizable (void)
 Destructor.
 
virtual int getParameterVectorSelectedSize (void) const
 Get the size of the vector of selected parameters, as returned by getParameterVectorSelected(. More...
 
virtual void getParameterVectorSelected (Eigen::VectorXd &values, bool normalized=false) const
 Get the values of the selected parameters in one vector. More...
 
virtual void getParameterVectorSelectedNormalized (Eigen::VectorXd &values) const
 Get the normalized values of the selected parameters in one vector. More...
 
void getParameterVectorSelectedMinMax (Eigen::VectorXd &min, Eigen::VectorXd &max) const
 Get the minimum and maximum of the selected parameters in one vector. More...
 
void getParameterVectorAllMinMax (Eigen::VectorXd &min, Eigen::VectorXd &max) const
 Get the minimum and maximum values of the current parameter vector. More...
 
void getParameterVectorSelectedRanges (Eigen::VectorXd &ranges) const
 Get the ranges of the selected parameters, i.e. More...
 
virtual void setParameterVectorSelected (const Eigen::VectorXd &values, bool normalized=false)
 Set all the values of the selected parameters with one vector. More...
 
virtual void setParameterVectorSelectedNormalized (const Eigen::VectorXd &values)
 Set all the values of the selected parameters with one vector of normalized values. More...
 
virtual void setSelectedParameters (const std::set< std::string > &selected_values_labels)
 Determine which subset of parameters is represented in the vector returned by Parameterizable::getParameterVectorSelected. More...
 
void setSelectedParametersOne (std::string selected)
 Set the parameters that are currently selected. More...
 
void setParameterVectorModifier (std::string modifier, bool new_value)
 Turn certain modifiers on or off. More...
 
void setVectorLengthsPerDimension (const Eigen::VectorXi &lengths_per_dimension)
 The vector (VectorXd) with parameter values can be split into different parts (as vector<VectorXd>; this function specifices the length of each sub-vector. More...
 
Eigen::VectorXi getVectorLengthsPerDimension (void) const
 Get the specified length of each vector in each dimension. More...
 
void getParameterVectorSelected (std::vector< Eigen::VectorXd > &values, bool normalized=false) const
 Get the values of the selected parameters in one vector. More...
 
void setParameterVectorSelected (const std::vector< Eigen::VectorXd > &values, bool normalized=false)
 Set all the values of the selected parameters with a vector of vectors. More...
 

Protected Member Functions

void setParameterVectorAll (const Eigen::VectorXd &values)
 Set all available parameter values with one vector. More...
 

Friends

class FunctionApproximatorLWPR
 
class boost::serialization::access
 Give boost serialization access to private members. More...
 

Detailed Description

Model parameters for the Locally Weighted Projection Regression (LWPR) function approximator.

Definition at line 43 of file ModelParametersLWPR.hpp.

Constructor & Destructor Documentation

ModelParametersLWPR ( LWPR_Object *  lwpr_object)

Initializing constructor.

Initialize the LWPR model parameters with an LWPR object from the external library.

Parameters
[in]lwpr_objectLWPR object from the external library

Definition at line 50 of file ModelParametersLWPR.cpp.

51 :
52  lwpr_object_(lwpr_object)
53 {
54  countLengths();
55 }

Member Function Documentation

string toString ( void  ) const
virtual

Returns a string representation of the object.

Returns
A string representation of the object.

Implements ModelParameters.

Definition at line 88 of file ModelParametersLWPR.cpp.

89 {
90  RETURN_STRING_FROM_BOOST_SERIALIZATION_XML("ModelParametersLWPR");
91 
92  /*
93  output << "{ \"ModelParametersLWPR\": { \"lwpr_object_xml_string\": \"";
94 
95  // Write file
96  string filename("/tmp/lpwrfile_serialize.xml");
97  lwpr_object_->writeXML(filename.c_str());
98 
99  // Read file into string stream (through file stream)
100  ifstream t(filename);
101  stringstream strstream;
102  strstream << t.rdbuf();
103 
104  // Get the string and remove newlines
105  string str = strstream.str();
106  str.erase(std::remove(str.begin(), str.end(), '\n'), str.end());
107 
108  // Output the XML string to the current output stream
109  output << str;
110 
111  output << " \" } }";
112  */
113 };
#define RETURN_STRING_FROM_BOOST_SERIALIZATION_XML(name)
Macro to convert the boost XML serialization of an object into a string.
ModelParameters * clone ( void  ) const
virtual

Return a pointer to a deep copy of the ModelParameters object.

Returns
Pointer to a deep copy

Implements ModelParameters.

Definition at line 82 of file ModelParametersLWPR.cpp.

83 {
84  LWPR_Object* lwpr_object_clone = new LWPR_Object(*lwpr_object_);
85  return new ModelParametersLWPR(lwpr_object_clone);
86 }
ModelParametersLWPR(LWPR_Object *lwpr_object)
Initializing constructor.
int getExpectedInputDim ( void  ) const
virtual

The expected dimensionality of the input data.

Returns
Expected dimensionality of the input data

Implements ModelParameters.

Definition at line 117 of file ModelParametersLWPR.cpp.

118 {
119  return lwpr_object_->nIn();
120 }
void getSelectableParameters ( std::set< std::string > &  selected_values_labels) const
virtual

Return all the names of the parameter types that can be selected.

Parameters
[out]selected_values_labelsNames of the parameter types that can be selected

Implements Parameterizable.

Definition at line 122 of file ModelParametersLWPR.cpp.

123 {
124  selected_values_labels = set<string>();
125  selected_values_labels.insert("centers");
126  selected_values_labels.insert("widths");
127  selected_values_labels.insert("slopes");
128  selected_values_labels.insert("offsets");
129 }
void getParameterVectorMask ( const std::set< std::string >  selected_values_labels,
Eigen::VectorXi &  selected_mask 
) const
virtual

Get a mask for selecting parameters.

Parameters
[in]selected_values_labelsLabels of the selected parameter values
[out]selected_maskA mask indicating indices of selected parameters. 0 indicates not selected, >0 indicates selected.

For instance, if the parameters consists of centers, widths and slopes the parameter values vector will be something like

    centers     widths    slopes
[ 100 110 120 10 10 10 0.4 0.7 0.4 ]

In this case, if selected_values_labels contains "centers" and "slopes", the mask will be:

    centers     widths    slopes
[   1   1   1  0  0  0   3   3   3 ]

The '0' indicates that these parameters are not selected. The other ones have different numbers so that they may be discerned from one another (as required in Parameterizable::getParameterVectorSelectedMinMax for instance.

Implements Parameterizable.

Definition at line 134 of file ModelParametersLWPR.cpp.

135 {
136  selected_mask.resize(getParameterVectorAllSize());
137  selected_mask.fill(0);
138 
139  int offset = 0;
140  int size;
141 
142  // Centers
143  size = n_centers_;
144  if (selected_values_labels.find("centers")!=selected_values_labels.end())
145  selected_mask.segment(offset,size).fill(1);
146  offset += size;
147 
148  // Widths
149  size = n_widths_;
150  if (selected_values_labels.find("widths")!=selected_values_labels.end())
151  selected_mask.segment(offset,size).fill(2);
152  offset += size;
153 
154  // Offsets
155  size = n_offsets_;
156  if (selected_values_labels.find("offsets")!=selected_values_labels.end())
157  selected_mask.segment(offset,size).fill(3);
158  offset += size;
159 
160  // Slopes
161  size = n_slopes_;
162  if (selected_values_labels.find("slopes")!=selected_values_labels.end())
163  selected_mask.segment(offset,size).fill(4);
164  offset += size;
165 
166  assert(offset == getParameterVectorAllSize());
167 }
int getParameterVectorAllSize(void) const
Get the size of the parameter values vector when it contains all available parameter values...

Here is the call graph for this function:

void getParameterVectorAll ( Eigen::VectorXd &  values) const
virtual

Return a vector that returns all available parameter values.

Parameters
[out]valuesAll available parameter values in one vector.
Remarks
Contrast this with Parameterizable::getParameterVectorSelected, which return only the SELECTED parameter values. Selecting parameters is done with Parameterizable::setSelectedParameters

Implements Parameterizable.

Definition at line 169 of file ModelParametersLWPR.cpp.

170 {
171  values.resize(getParameterVectorAllSize());
172  int ii=0;
173 
174  for (int iDim = 0; iDim < lwpr_object_->model.nOut; iDim++)
175  for (int iRF = 0; iRF < lwpr_object_->model.sub[iDim].numRFS; iRF++)
176  for (int j = 0; j < lwpr_object_->nIn(); j++)
177  values[ii++] = lwpr_object_->model.sub[iDim].rf[iRF]->c[j];
178 
179  for (int iDim = 0; iDim < lwpr_object_->model.nOut; iDim++)
180  for (int iRF = 0; iRF < lwpr_object_->model.sub[iDim].numRFS; iRF++)
181  for (int j = 0; j < lwpr_object_->nIn(); j++)
182  values[ii++] = lwpr_object_->model.sub[iDim].rf[iRF]->D[j*lwpr_object_->model.nInStore+j];
183 
184  for (int iDim = 0; iDim < lwpr_object_->model.nOut; iDim++)
185  for (int iRF = 0; iRF < lwpr_object_->model.sub[iDim].numRFS; iRF++)
186  for (int j = 0; j < lwpr_object_->model.sub[iDim].rf[iRF]->nReg; j++)
187  values[ii++] = lwpr_object_->model.sub[iDim].rf[iRF]->beta[j];
188 
189  for (int iDim = 0; iDim < lwpr_object_->model.nOut; iDim++)
190  for (int iRF = 0; iRF < lwpr_object_->model.sub[iDim].numRFS; iRF++)
191  values[ii++] = lwpr_object_->model.sub[iDim].rf[iRF]->beta0;
192 
193  assert(ii == getParameterVectorAllSize());
194 
195 };
int getParameterVectorAllSize(void) const
Get the size of the parameter values vector when it contains all available parameter values...

Here is the call graph for this function:

int getParameterVectorAllSize ( void  ) const
inlinevirtual

Get the size of the parameter values vector when it contains all available parameter values.

Returns
The size of the parameter vector

For instance, if the parameters consists of centers, widths and slopes the parameter values vector will be something like

    centers     widths    slopes
[ 100 110 120 10 10 10 0.4 0.7 0.4 ]

then getParameterVectorAllSize() will return 9

Implements Parameterizable.

Definition at line 68 of file ModelParametersLWPR.hpp.

69  {
70  return n_centers_ + n_widths_ + n_slopes_ + n_offsets_;
71  }

Here is the call graph for this function:

UnifiedModel * toUnifiedModel ( void  ) const
virtual

Convert these LWPR model parameters to unified model parameters.

Returns
Unified model parameter representation
Remarks
Currently only works if input and output dimensionality are 1
Todo:
Convert for input dim >1

Implements ModelParameters.

Definition at line 228 of file ModelParametersLWPR.cpp.

229 {
230  if (lwpr_object_->nIn()!=1)
231  {
232  //cout << "Warning: Can only call toUnifiedModel() when input dim of LWPR is 1" << endl;
233  return NULL;
234  }
235  if (lwpr_object_->model.nOut!=1)
236  {
237  //cout << "Warning: Can only call toUnifiedModel() when output dim of LWPR is 1" << endl;
238  return NULL;
239  }
240 
241  int i_in = 0;
242  int i_out = 0;
243 
244  int n_basis_functions = lwpr_object_->model.sub[i_out].numRFS;
245  VectorXd centers(n_basis_functions);
246  VectorXd widths(n_basis_functions);
247  VectorXd offsets(n_basis_functions);
248  VectorXd slopes(n_basis_functions);
249 
250  vector<double> tmp;
251 
252  for (int iRF = 0; iRF < lwpr_object_->model.sub[i_out].numRFS; iRF++)
253  {
254  LWPR_ReceptiveFieldObject rf = lwpr_object_->getRF(i_out,iRF);
255 
256  tmp = rf.center();
257  centers[iRF] = tmp[i_in];
258 
259  offsets[iRF] = rf.beta0();
260 
261  tmp = rf.slope();
262  slopes[iRF] = tmp[i_in];
263  tmp = rf.beta();
264 
265  vector<vector<double> > D = rf.D();
266  widths[iRF] = sqrt(1.0/D[i_in][i_in]);
267 
268  }
269 
270 
271  vector<double> norm_out = lwpr_object_->normOut();
272  vector<double> norm_in = lwpr_object_->normIn();
273  //cout << " centers=" << centers.transpose() << endl;
274  //cout << " widths=" << widths.transpose() << endl;
275  //cout << " offsets=" << offsets.transpose() << endl;
276  //cout << " slopes=" << slopes.transpose() << endl;
277  //cout << " norm_out[i_out]=" << norm_out[i_out] << endl;
278  //cout << " norm_in[i_in]=" << norm_out[i_in] << endl;
279 
280  offsets /= norm_out[i_out];
281  slopes /= norm_out[i_out];
282  centers /= norm_in[i_in];
283  widths /= norm_in[i_in];
284 
285  //cout << " centers=" << centers.transpose() << endl;
286  //cout << " widths=" << widths.transpose() << endl;
287  //cout << " offsets=" << offsets.transpose() << endl;
288  //cout << " slopes=" << slopes.transpose() << endl;
289 
290  //bool asymmetric_kernels=false;
291  bool normalized_basis_functions=true;
292  bool lines_pivot_at_max_activation=true;
293 
294  return new UnifiedModel(centers,widths,slopes,offsets,
295  normalized_basis_functions, lines_pivot_at_max_activation);
296 }
void setParameterVectorAll ( const Eigen::VectorXd &  values)
protectedvirtual

Set all available parameter values with one vector.

Parameters
[in]valuesAll available parameter values in one vector.
Remarks
Contrast this with Parameterizable::setParameterVectorSelected, which sets only the SELECTED parameter values. Selecting parameters is done with Parameterizable::setSelectedParameters

Implements Parameterizable.

Definition at line 197 of file ModelParametersLWPR.cpp.

197  {
198  if (getParameterVectorAllSize() != values.size())
199  {
200  cerr << __FILE__ << ":" << __LINE__ << ": values is of wrong size." << endl;
201  return;
202  }
203 
204  int ii=0;
205  for (int iDim = 0; iDim < lwpr_object_->model.nOut; iDim++)
206  for (int iRF = 0; iRF < lwpr_object_->model.sub[iDim].numRFS; iRF++)
207  for (int j = 0; j < lwpr_object_->nIn(); j++)
208  lwpr_object_->model.sub[iDim].rf[iRF]->c[j] = values[ii++];
209 
210  for (int iDim = 0; iDim < lwpr_object_->model.nOut; iDim++)
211  for (int iRF = 0; iRF < lwpr_object_->model.sub[iDim].numRFS; iRF++)
212  for (int j = 0; j < lwpr_object_->nIn(); j++)
213  lwpr_object_->model.sub[iDim].rf[iRF]->D[j*lwpr_object_->model.nInStore+j] = values[ii++];
214 
215  for (int iDim = 0; iDim < lwpr_object_->model.nOut; iDim++)
216  for (int iRF = 0; iRF < lwpr_object_->model.sub[iDim].numRFS; iRF++)
217  for (int j = 0; j < lwpr_object_->model.sub[iDim].rf[iRF]->nReg; j++)
218  lwpr_object_->model.sub[iDim].rf[iRF]->beta[j] = values[ii++];
219 
220  for (int iDim = 0; iDim < lwpr_object_->model.nOut; iDim++)
221  for (int iRF = 0; iRF < lwpr_object_->model.sub[iDim].numRFS; iRF++)
222  lwpr_object_->model.sub[iDim].rf[iRF]->beta0 = values[ii++];
223 
224  assert(ii == getParameterVectorAllSize());
225 };
int getParameterVectorAllSize(void) const
Get the size of the parameter values vector when it contains all available parameter values...

Here is the call graph for this function:

Friends And Related Function Documentation

friend class boost::serialization::access
friend

Give boost serialization access to private members.

Definition at line 99 of file ModelParametersLWPR.hpp.


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