void Dmp::train(const Trajectory& trajectory, string save_directory, bool overwrite) { // Set tau, initial_state and attractor_state from the trajectory set_tau(trajectory.duration()); set_initial_state(trajectory.initial_y()); set_attractor_state(trajectory.final_y()); VectorXd fa_input_phase; MatrixXd f_target; computeFunctionApproximatorInputsAndTargets(trajectory, fa_input_phase, f_target); // Some checks before training function approximators assert(!function_approximators_.empty()); for (unsigned int dd=0; dd<function_approximators_.size(); dd++) { // This is just boring stuff to figure out if and where to store the results of training string save_directory_dim; if (!save_directory.empty()) { if (function_approximators_.size()==1) save_directory_dim = save_directory; else save_directory_dim = save_directory + "/dim" + boost::lexical_cast<string>(dd); } // Actual training is happening here. VectorXd fa_target = f_target.col(dd); if (function_approximators_[dd]->isTrained()) function_approximators_[dd]->reTrain(fa_input_phase,fa_target,save_directory_dim,overwrite); else function_approximators_[dd]->train(fa_input_phase,fa_target,save_directory_dim,overwrite); } }