26 py::class_<Class> vary(m, name.data() );
29 Class variation(p, ss, d);
31 .def(
"mutate", &Class::mutate, py::return_value_policy::automatic)
32 .def(
"cross", &Class::cross, py::return_value_policy::automatic)
33 .def(
"vary_pop", [](Class &self,
36 if (individuals.size() != params.
pop_size) {
37 string msg =
"Individual vector has different number of "
38 "individuals than pop_size. When calling "
39 "variation, they should be the same. popsize is "+
41 "individuals is "+
to_string(individuals.size());
43 throw std::runtime_error(msg);
48 pop.init(individuals, params);
50 vector<br::Pop::Individual<PT>> pool;
53 for (
int island = 0; island < params.
num_islands; ++island)
57 vector<size_t> parents = pop.get_island_indexes(island);
61 pop.add_offspring_indexes(island);
63 self.vary(pop, island, parents);
66 vector<size_t> indices = pop.get_island_indexes(island);
67 int start = indices.size()/2;
68 for (
unsigned i = start; i<indices.size(); ++i)
71 pool.push_back(pop[indices.at(i)]);