Brush C++ API
A flexible interpretable machine learning framework
Toggle main menu visibility
Loading...
Searching...
No Matches
bind_selection.h
Go to the documentation of this file.
1
#include "
module.h
"
2
3
#include "
../selection/selection.h
"
4
#include "
../selection/selection_operator.h
"
5
#include "
../selection/nsga2.h
"
6
#include "
../selection/lexicase.h
"
7
8
#include "
../pop/population.h
"
9
10
namespace
py = pybind11;
11
namespace
nl
=
nlohmann
;
12
namespace
br
=
Brush
;
13
14
template
<br::ProgramType PT>
15
void
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
}
bind_selection
void bind_selection(py::module &m, string name)
Definition
bind_selection.h:15
Brush::Pop::Individual
Definition
individual.h:15
Brush::Pop::Population
Definition
population.h:12
lexicase.h
module.h
Brush
< nsga2 selection operator for getting the front
Definition
bandit.cpp:3
nlohmann
Definition
utils.h:30
nsga2.h
population.h
selection.h
selection_operator.h
Brush::Parameters
Definition
params.h:20
Brush::Parameters::num_islands
int num_islands
Definition
params.h:45
Brush::Sel::Selection
interfaces with selection operators.
Definition
selection.h:25
src
bindings
bind_selection.h
Generated by
1.17.0