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> 39 #include <unordered_map> 41 #include <boost/serialization/base_object.hpp> 42 #include <boost/serialization/nvp.hpp> 43 #include <boost/serialization/vector.hpp> 47 using namespace Eigen;
52 MetaParametersLWR::MetaParametersLWR(
int expected_input_dim,
const std::vector<Eigen::VectorXd>& centers_per_dim,
double intersection_height,
double regularization,
bool asymmetric_kernels)
55 n_bfs_per_dim_(VectorXi::Zero(0)),
56 centers_per_dim_(centers_per_dim),
57 intersection_height_(intersection_height),
58 regularization_(regularization),
59 asymmetric_kernels_(asymmetric_kernels)
61 assert(expected_input_dim==(
int)centers_per_dim_.size());
62 for (
unsigned int dd=0; dd<centers_per_dim_.size(); dd++)
63 assert(centers_per_dim_[dd].size()>0);
64 assert(intersection_height_>0 && intersection_height_<1);
65 assert(regularization>=0.0);
68 MetaParametersLWR::MetaParametersLWR(
int expected_input_dim,
const Eigen::VectorXi& n_bfs_per_dim,
double intersection_height,
double regularization,
bool asymmetric_kernels)
71 n_bfs_per_dim_(n_bfs_per_dim),
72 centers_per_dim_(
std::vector<
Eigen::VectorXd>(0)),
73 intersection_height_(intersection_height),
74 regularization_(regularization),
75 asymmetric_kernels_(asymmetric_kernels)
77 assert(expected_input_dim==n_bfs_per_dim_.size());
78 for (
int dd=0; dd<n_bfs_per_dim_.size(); dd++)
79 assert(n_bfs_per_dim_[dd]>0);
80 assert(intersection_height_>0 && intersection_height_<1);
81 assert(regularization>=0.0);
87 n_bfs_per_dim_(VectorXi::Constant(1,n_bfs)),
88 centers_per_dim_(
std::vector<
Eigen::VectorXd>(0)),
89 intersection_height_(intersection_height),
90 regularization_(regularization),
91 asymmetric_kernels_(asymmetric_kernels)
93 assert(expected_input_dim==n_bfs_per_dim_.size());
94 for (
int dd=0; dd<n_bfs_per_dim_.size(); dd++)
95 assert(n_bfs_per_dim_[dd]>0);
96 assert(intersection_height_>0 && intersection_height_<1);
97 assert(regularization>=0.0);
103 if (centers_per_dim_.size()>0)
115 assert(min.size()==n_dims);
116 assert(max.size()==n_dims);
118 vector<VectorXd> centers_per_dim_local(n_dims);
119 if (!centers_per_dim_.empty())
121 centers_per_dim_local = centers_per_dim_;
126 for (
int i_dim=0; i_dim<n_dims; i_dim++)
127 centers_per_dim_local[i_dim] = VectorXd::LinSpaced(n_bfs_per_dim_[i_dim],min[i_dim],max[i_dim]);
131 vector<VectorXd> widths_per_dim_local(n_dims);
132 for (
int i_dim=0; i_dim<n_dims; i_dim++)
134 VectorXd cur_centers = centers_per_dim_local[i_dim];
135 int n_centers = cur_centers.size();
136 VectorXd cur_widths(n_centers);
154 for (
int cc=0; cc<n_centers-1; cc++)
156 double w = sqrt(pow(cur_centers[cc+1]-cur_centers[cc],2)/(-8*log(intersection_height_)));
159 cur_widths[n_centers-1] = cur_widths[n_centers-2];
161 widths_per_dim_local[i_dim] = cur_widths;
164 VectorXd digit_max(n_dims);
166 for (
int i_dim=0; i_dim<n_dims; i_dim++)
168 n_centers = n_centers*centers_per_dim_local[i_dim].size();
169 digit_max[i_dim] = centers_per_dim_local[i_dim].size();
171 VectorXi digit = VectorXi::Zero(n_dims);
173 centers.resize(n_centers,n_dims);
174 widths.resize(n_centers,n_dims);
177 while (digit[0]<digit_max(0))
179 for (
int i_dim=0; i_dim<n_dims; i_dim++)
181 centers(i_center,i_dim) = centers_per_dim_local[i_dim][digit[i_dim]];
182 widths(i_center,i_dim) = widths_per_dim_local[i_dim][digit[i_dim]];
188 for (
int i_dim=n_dims-1; i_dim>0; i_dim--)
190 if (digit[i_dim]>=digit_max[i_dim])
200 template<
class Archive>
201 void MetaParametersLWR::serialize(Archive & ar,
const unsigned int version)
206 ar & BOOST_SERIALIZATION_NVP(n_bfs_per_dim_);
207 ar & BOOST_SERIALIZATION_NVP(centers_per_dim_);
208 ar & BOOST_SERIALIZATION_NVP(intersection_height_);
209 ar & BOOST_SERIALIZATION_NVP(regularization_);
210 ar & BOOST_SERIALIZATION_NVP(asymmetric_kernels_);
#define RETURN_STRING_FROM_BOOST_SERIALIZATION_XML(name)
Macro to convert the boost XML serialization of an object into a string.
Header file to generate strings from boost serialized files.
Header file for serialization of Eigen matrices.