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
7
8#include "../pop/population.h"
9
10namespace py = pybind11;
11namespace nl = nlohmann;
12namespace br = Brush;
13
14template<br::ProgramType PT>
15void bind_selection(py::module& m, string name)
16{
17 using Class = br::Sel::Selection<PT>;
18
19 // TODO: make selection a non-templated class
20 py::class_<Class> sel(m, name.data() );
21
22 sel.def(py::init<>())
23 .def(py::init(
24 [](string type, bool survival){ Class s(type, survival); return s; })
25 )
26 .def("select", [](Class &self,
27 std::vector<br::Pop::Individual<PT>>& individuals,
28 const Parameters& params) {
29
30 // auto sel = Class("nsga2", false);
31 auto pop = br::Pop::Population<PT>();
32
33 pop.init(individuals, params);
34
35 vector<br::Pop::Individual<PT>> pool;
36 pool.resize(0);
37
38 for (int island = 0; island < params.num_islands; ++island)
39 {
40 vector<size_t> selected = self.select(pop, island, params);
41
42 for (size_t idx : selected) {
43 pool.push_back(pop[idx]);
44 }
45 }
46
47 return pool;
48 })
49 .def("survive", [](Class &self,
50 std::vector<br::Pop::Individual<PT>>& individuals,
51 const Parameters& params) {
52
53 // auto sel = Class("nsga2", false);
54 auto pop = br::Pop::Population<PT>();
55
56 pop.init(individuals, params);
57
58 vector<br::Pop::Individual<PT>> pool;
59 pool.resize(0);
60
61 for (int island = 0; island < params.num_islands; ++island)
62 {
63 vector<size_t> selected = self.survive(pop, island, params);
64
65 for (size_t idx : selected) {
66 pool.push_back(pop[idx]);
67 }
68 }
69
70 return pool;
71 })
72 .def("migrate", [](Class &self,
73 std::vector<br::Pop::Individual<PT>>& individuals,
74 const Parameters& params) {
75
76 auto pop = br::Pop::Population<PT>();
77
78 pop.init(individuals, params);
79 pop.migrate(); // this will modify island indexes inplace
80
81 vector<br::Pop::Individual<PT>> pool;
82 pool.resize(0);
83
84 for (int island = 0; island < params.num_islands; ++island)
85 {
86 vector<size_t> selected = pop.get_island_indexes(island);
87
88 for (size_t idx : selected) {
89 pool.push_back(pop[idx]);
90 }
91 }
92 return pool;
93 })
94 ;
95}
void bind_selection(py::module &m, string name)
< nsga2 selection operator for getting the front
Definition bandit.cpp:3
interfaces with selection operators.
Definition selection.h:25