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);
53 || params.
scorer.compare(
"multi_log")==0
54 || params.
scorer.compare(
"average_precision_score")==0 )
57 for (
int i = 0; i<epsilon.size(); ++i)
59 VectorXf case_errors(island_pool.size());
60 for (
int j = 0; j<island_pool.size(); ++j)
62 case_errors(j) = pop.
individuals.at(island_pool[j])->error(i);
67 epsilon(i) =
mad(case_errors);
70 assert(epsilon.size() == N);
73 vector<size_t> starting_pool;
74 for (
int i = 0; i < island_pool.size(); ++i)
76 starting_pool.push_back(island_pool[i]);
78 assert(starting_pool.size() == P);
80 vector<size_t> selected(P,0);
82 for (
unsigned int i = 0; i<P; ++i)
94 vector<size_t> choices(N);
95 std::iota(choices.begin(), choices.end(),0);
99 for (
unsigned i = 0; i<N; ++i)
101 vector<size_t> choice_indices(N-i);
102 std::iota(choice_indices.begin(),choice_indices.end(),0);
104 size_t idx = *
r.select_randomly(
105 choice_indices.begin(), choice_indices.end(),
106 sample_weights.begin(), sample_weights.end());
108 cases.push_back(choices.at(idx));
109 choices.erase(choices.begin() + idx);
111 sample_weights.erase(sample_weights.begin() + idx);
117 std::iota(cases.begin(),cases.end(),0);
118 r.shuffle(cases.begin(),cases.end());
120 vector<size_t> pool = starting_pool;
121 vector<size_t> winner;
126 float epsilon_threshold;
129 epsilon_threshold = 0;
133 float minfit = std::numeric_limits<float>::max();
136 for (
size_t j = 0; j<pool.size(); ++j)
137 if (pop.
individuals.at(pool[j])->error(cases[h]) < minfit)
138 minfit = pop.
individuals.at(pool[j])->error(cases[h]);
141 epsilon_threshold = minfit+epsilon[cases[h]];
144 for (
size_t j = 0; j<pool.size(); ++j)
147 <= epsilon_threshold)
148 winner.push_back(pool[j]);
153 pass = (winner.size()>1 && h<cases.size());
155 if(winner.size() == 0)
157 if(h >= cases.size())
158 winner.push_back(*
r.select_randomly(
159 pool.begin(), pool.end()) );
167 assert(winner.size()>0);
170 selected.at(i) = *
r.select_randomly(
171 winner.begin(), winner.end() );
174 if (selected.size() != island_pool.size())