Brush C++ API
A flexible interpretable machine learning framework
Loading...
Searching...
No Matches
bind_selection.h
Go to the documentation of this file.
1#include "module.h"
2
3// TODO: figure out why im having symbol errors (if i dont include the cpp here as well)
12
13#include "../pop/population.cpp"
14#include "../pop/population.h"
15
16namespace py = pybind11;
17namespace nl = nlohmann;
18namespace br = Brush;
19
20template<br::ProgramType PT>
21void bind_selection(py::module& m, string name)
22{
23 using Class = br::Sel::Selection<PT>;
24
25 // TODO: make selection a non-templated class
26 py::class_<Class> sel(m, name.data() );
27
28 sel.def(py::init<>())
29 .def(py::init(
30 [](string type, bool survival){ Class s(type, survival); return s; })
31 )
32 .def("select", [](Class &self,
33 std::vector<br::Pop::Individual<PT>>& individuals,
34 const Parameters& params) {
35
36 // auto sel = Class("nsga2", false);
37 auto pop = br::Pop::Population<PT>();
38
39 pop.init(individuals, params);
40
41 vector<br::Pop::Individual<PT>> pool;
42 pool.resize(0);
43
44 for (int island = 0; island < params.num_islands; ++island)
45 {
46 vector<size_t> selected = self.select(pop, island, params);
47
48 for (size_t idx : selected) {
49 pool.push_back(pop[idx]);
50 }
51 }
52
53 return pool;
54 })
55 .def("survive", [](Class &self,
56 std::vector<br::Pop::Individual<PT>>& individuals,
57 const Parameters& params) {
58
59 // auto sel = Class("nsga2", false);
60 auto pop = br::Pop::Population<PT>();
61
62 pop.init(individuals, params);
63
64 vector<br::Pop::Individual<PT>> pool;
65 pool.resize(0);
66
67 for (int island = 0; island < params.num_islands; ++island)
68 {
69 vector<size_t> selected = self.survive(pop, island, params);
70
71 for (size_t idx : selected) {
72 pool.push_back(pop[idx]);
73 }
74 }
75
76 return pool;
77 })
78 .def("migrate", [](Class &self,
79 std::vector<br::Pop::Individual<PT>>& individuals,
80 const Parameters& params) {
81
82 auto pop = br::Pop::Population<PT>();
83
84 pop.init(individuals, params);
85 pop.migrate(); // this will modify island indexes inplace
86
87 vector<br::Pop::Individual<PT>> pool;
88 pool.resize(0);
89
90 for (int island = 0; island < params.num_islands; ++island)
91 {
92 vector<size_t> selected = pop.get_island_indexes(island);
93
94 for (size_t idx : selected) {
95 pool.push_back(pop[idx]);
96 }
97 }
98 return pool;
99 })
100 ;
101}
void bind_selection(py::module &m, string name)
< nsga2 selection operator for getting the front
Definition bandit.cpp:4
interfaces with selection operators.
Definition selection.h:25