Brush C++ API
A flexible interpretable machine learning framework
|
Class representing the variation operators in Brush. More...
#include <variation.h>
Public Member Functions | |
Variation ()=default | |
Default constructor. | |
Variation (Parameters ¶ms, SearchSpace &ss) | |
Constructor that initializes the Variation object with parameters and search space. | |
~Variation () | |
Destructor. | |
void | init (Parameters ¶ms, SearchSpace &ss) |
Initializes the Variation object with parameters and search space. | |
std::optional< Individual< T > > | cross (const Individual< T > &mom, const Individual< T > &dad) |
Performs crossover operation on two individuals. | |
std::optional< Individual< T > > | mutate (const Individual< T > &parent) |
Performs mutation operation on an individual. | |
void | vary (Population< T > &pop, int island, const vector< size_t > &parents) |
Handles variation of a population. | |
Private Attributes | |
SearchSpace | search_space |
Parameters | parameters |
Class representing the variation operators in Brush.
The Variation class is responsible for performing individual-level variations and handling the variation of a population in Brush. It contains methods for crossing individuals, mutating individuals, and varying a population.
Definition at line 53 of file variation.h.
|
default |
Default constructor.
|
inline |
Constructor that initializes the Variation object with parameters and search space.
params | The parameters for the variation operator. |
ss | The search space for the variation operator. |
Definition at line 66 of file variation.h.
|
inline |
Destructor.
Definition at line 74 of file variation.h.
std::optional< Individual< T > > Brush::Var::Variation< T >::cross | ( | const Individual< T > & | mom, |
const Individual< T > & | dad ) |
Performs crossover operation on two individuals.
Stochastically swaps subtrees between root and other, returning a new program.
mom | The first parent individual. |
dad | The second parent individual. |
The spot where the cross will take place in the root
parent is sampled based on attribute get_prob_change
of each node in the tree. After selecting the cross spot, the program will iterate through the other
parent searching for all compatible sub-trees to replace.
Due to the stochastic behavior, it may come to a case where there is no candidate to replace the spot node. In this case, the method returns std::nullopt
(and has overloads so it can be used in a boolean context).
If the cross succeeds, the child program can be accessed through the .value()
attribute of the std::optional
. TODO: update this documentation (it doesnt take the program but the individual. also update mutation documentation) This means that, if you use the cross as auto opt = mutate(parent, SS)
, either opt==false
or opt.value()
contains the child.
T | the program type |
root | the root parent |
other | the donating parent |
std::optional
that may contain the child program of type T
Definition at line 345 of file variation.cpp.
|
inline |
Initializes the Variation object with parameters and search space.
params | The parameters for the variation operator. |
ss | The search space for the variation operator. |
Definition at line 82 of file variation.h.
std::optional< Individual< T > > Brush::Var::Variation< T >::mutate | ( | const Individual< T > & | parent | ) |
Performs mutation operation on an individual.
Stochastically mutate a program.
parent | The parent individual. |
Types of mutation:
Every mutation has a probability (weight) based on global parameters. The spot where the mutation will take place is sampled based on attribute get_prob_change
of each node in the tree. Inside each type of mutation, when a new node is inserted, it is sampled based on terminal_weights
.
Due to the stochastic behavior, and the several sampling steps, it may come to a case where the search space does not hold any possible modification to do in the program. In this case, the method returns std::nullopt
(and has overloads so it can be used in a boolean context).
If the mutation succeeds, the mutated program can be accessed through the .value()
attribute of the std::optional
.
This means that, if you use the mutation as auto opt = mutate(parent, SS)
, either opt==false
or opt.value()
contains the child program.
T | program type |
parent | the program to be mutated |
SS | a search space |
std::optional
that may contain the child program of type T
Definition at line 486 of file variation.cpp.
void Brush::Var::Variation< T >::vary | ( | Population< T > & | pop, |
int | island, | ||
const vector< size_t > & | parents ) |
Handles variation of a population.
pop | The population to be varied. |
island | The island index. |
parents | The indices of the parent individuals. |
p | The parameters for the variation operator. |
Definition at line 578 of file variation.cpp.
|
private |
Definition at line 119 of file variation.h.
|
private |
Definition at line 118 of file variation.h.