diff --git a/src/feature_creation/feature_space/FeatureSpace.cpp b/src/feature_creation/feature_space/FeatureSpace.cpp index b9c7717080ad29864ac56edd005691c5ee40dc22..c89598eeddc65ddc5b6a59b6060b27272b99d1a2 100644 --- a/src/feature_creation/feature_space/FeatureSpace.cpp +++ b/src/feature_creation/feature_space/FeatureSpace.cpp @@ -983,9 +983,9 @@ void FeatureSpace::project_generated(std::shared_ptr<LossFunction> loss, std::ve int worst_score_ind = std::max_element(scores_sel.begin(), scores_sel.end()) - scores_sel.begin(); double worst_score = scores_sel[worst_score_ind]; - #pragma omp parallel firstprivate(worst_score, worst_score_ind, loss, scores_sel_all) + #pragma omp parallel firstprivate(worst_score, worst_score_ind, scores_sel_all) { - loss = loss_function_util::copy(loss); + std::shared_ptr<LossFunction> loss_copy = loss_function_util::copy(loss); std::vector<node_ptr> phi_sel_private(phi_sel); std::vector<double> scores_sel_private(scores_sel); int index_base = _phi.size() + _n_sis_select * (omp_get_thread_num() + _mpi_comm->size()); @@ -995,7 +995,7 @@ void FeatureSpace::project_generated(std::shared_ptr<LossFunction> loss, std::ve std::shared_ptr<NLOptimizer> reparam_optimizer; if(_reparam_residual) { - std::vector<double> prop_vec(loss->prop_project()); + std::vector<double> prop_vec(loss_copy->prop_project()); reparam_optimizer = nlopt_wrapper::get_optimizer(_project_type, _task_sizes, prop_vec, _max_phi, _max_param_depth); } else @@ -1037,7 +1037,7 @@ void FeatureSpace::project_generated(std::shared_ptr<LossFunction> loss, std::ve node_value_arrs::clear_temp_reg_thread(); std::vector<double> scores(generated_phi.size()); - project_funcs::project_loss_no_omp(loss, generated_phi, scores.data()); + project_funcs::project_loss_no_omp(loss_copy, generated_phi, scores.data()); std::vector<int> inds = util_funcs::argsort<double>(scores);