29 std::remove_if(island_pool.begin(), island_pool.end(),
30 [&pop](
size_t idx) { return pop.individuals.at(idx) == nullptr; }),
35 if (island_pool.empty())
43 unsigned int N = pop.
individuals.at(island_pool.at(0))->error.size();
46 unsigned int P = island_pool.size();
49 ArrayXf epsilon = ArrayXf::Zero(N);
59 || params.
scorer.compare(
"multi_log")==0
60 || params.
scorer.compare(
"average_precision_score")==0
61 || params.
scorer.compare(
"roc_auc")==0 )
64 for (
int i = 0; i<epsilon.size(); ++i)
66 VectorXf case_errors(island_pool.size());
67 for (
int j = 0; j<island_pool.size(); ++j)
69 case_errors(j) = pop.
individuals.at(island_pool[j])->error(i);
74 epsilon(i) =
mad(case_errors);
77 assert(epsilon.size() == N);
80 vector<size_t> starting_pool;
81 for (
int i = 0; i < island_pool.size(); ++i)
83 starting_pool.push_back(island_pool[i]);
85 assert(starting_pool.size() == P);
87 vector<size_t> selected(P,0);
89 for (
unsigned int i = 0; i<P; ++i)
101 vector<size_t> choices(N);
102 std::iota(choices.begin(), choices.end(),0);
106 for (
unsigned i = 0; i<N; ++i)
108 vector<size_t> choice_indices(N-i);
109 std::iota(choice_indices.begin(),choice_indices.end(),0);
111 size_t idx = *r.select_randomly(
112 choice_indices.begin(), choice_indices.end(),
113 sample_weights.begin(), sample_weights.end());
115 cases.push_back(choices.at(idx));
116 choices.erase(choices.begin() + idx);
118 sample_weights.erase(sample_weights.begin() + idx);
124 std::iota(cases.begin(),cases.end(),0);
125 r.shuffle(cases.begin(),cases.end());
127 vector<size_t> pool = starting_pool;
128 vector<size_t> winner;
133 float epsilon_threshold;
136 epsilon_threshold = 0;
140 float minfit = std::numeric_limits<float>::max();
143 for (
size_t j = 0; j<pool.size(); ++j)
144 if (pop.
individuals.at(pool[j])->error(cases[h]) < minfit)
145 minfit = pop.
individuals.at(pool[j])->error(cases[h]);
148 epsilon_threshold = minfit+epsilon[cases[h]];
151 for (
size_t j = 0; j<pool.size(); ++j)
154 <= epsilon_threshold)
155 winner.push_back(pool[j]);
160 pass = (winner.size()>1 && h<cases.size());
162 if(winner.size() == 0)
164 if(h >= cases.size())
165 winner.push_back(*r.select_randomly(
166 pool.begin(), pool.end()) );
174 assert(winner.size()>0);
177 selected.at(i) = *r.select_randomly(
178 winner.begin(), winner.end() );
181 if (selected.size() != island_pool.size())