From 86ca9f9fe407f8321eeeef348e2cc86c99d51a4a Mon Sep 17 00:00:00 2001
From: Thomas Purcell <purcell@fhi-berlin.mpg.de>
Date: Thu, 8 Oct 2020 20:43:02 +0200
Subject: [PATCH] update generating phi

Bug prevented getting the full selected feature space when generating it each generation
---
 .../feature_space/FeatureSpace.cpp               | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/src/feature_creation/feature_space/FeatureSpace.cpp b/src/feature_creation/feature_space/FeatureSpace.cpp
index e6b38d94..0b90a1fd 100644
--- a/src/feature_creation/feature_space/FeatureSpace.cpp
+++ b/src/feature_creation/feature_space/FeatureSpace.cpp
@@ -500,7 +500,7 @@ void FeatureSpace::project_generated(double* prop, int size, std::vector<node_pt
             while((ii < inds.size()) && (scores[inds[ii]] < -1.0))
                 ++ii;
 
-            while((ii < inds.size()) && (scores[inds[ii]] < worst_score))
+            while((ii < inds.size()) && ((scores[inds[ii]] < worst_score) || (phi_sel_private.size() < _n_sis_select)))
             {
                 double cur_score = scores[inds[ii]];
                 if((valid_feature_against_selected(generated_phi[inds[ii]]->value_ptr(), node_value_arrs::N_SELECTED - _n_sis_select)) && valid_feature_against_private_selected(generated_phi[inds[ii]]->value_ptr(), phi_sel_private))
@@ -529,10 +529,18 @@ void FeatureSpace::project_generated(double* prop, int size, std::vector<node_pt
             worst_score_ind = std::max_element(scores_sel.begin(), scores_sel.end()) - scores_sel.begin();
             for(int sc = 0; sc < scores_sel_private.size(); ++sc)
             {
-                if((scores_sel_private[sc] < scores_sel[worst_score_ind]) && valid_feature_against_private_selected(phi_sel_private[sc]->value_ptr(), phi_sel))
+                if(((phi_sel.size() < _n_sis_select) || (scores_sel_private[sc] < scores_sel[worst_score_ind])) && valid_feature_against_private_selected(phi_sel_private[sc]->value_ptr(), phi_sel))
                 {
-                    scores_sel[worst_score_ind] = scores_sel_private[sc];
-                    phi_sel[worst_score_ind] = phi_sel_private[sc];
+                    if(phi_sel.size() == _n_sis_select)
+                    {
+                        scores_sel[worst_score_ind] = scores_sel_private[sc];
+                        phi_sel[worst_score_ind] = phi_sel_private[sc];
+                    }
+                    else
+                    {
+                        scores_sel.push_back(scores_sel_private[sc]);
+                        phi_sel.push_back(phi_sel_private[sc]);
+                    }
                     worst_score_ind = std::max_element(scores_sel.begin(), scores_sel.end()) - scores_sel.begin();
                 }
             }
-- 
GitLab