|
| Variation ()=default |
| Default constructor.
|
|
| Variation (Parameters ¶ms, SearchSpace &ss, Dataset &d) |
| Constructor that initializes the Variation object with parameters and search space.
|
|
| ~Variation () |
| Destructor.
|
|
void | init () |
| Initializes the Variation object with parameters and search space.
|
|
std::tuple< std::optional< Individual< T > >, VectorXf > | cross (const Individual< T > &mom, const Individual< T > &dad) |
| Performs croearch_spaceover operation on two individuals.
|
|
std::tuple< std::optional< Individual< T > >, VectorXf > | mutate (const Individual< T > &parent, string choice="") |
| Performs mutation operation on an individual.
|
|
void | vary (Population< T > &pop, int island, const vector< size_t > &parents) |
| Handles variation of a population.
|
|
void | update_ss () |
|
void | vary_and_update (Population< T > &pop, int island, const vector< size_t > &parents, const Dataset &data, Evaluation< T > &evaluator) |
| Varies a population and updates the selection strategy based on rewards.
|
|
std::optional< Node > | bandit_sample_terminal (DataType R, VectorXf &context) |
|
std::optional< Node > | bandit_get_node_like (Node node, VectorXf &context) |
|
std::optional< Node > | bandit_sample_op_with_arg (DataType ret, DataType arg, VectorXf &context, int max_args=0) |
|
std::optional< Node > | bandit_sample_op (DataType ret, VectorXf &context) |
|
VectorXf | get_context (const Program< T > &program, Iter spot) |
|
template<
ProgramType T>
class Brush::Var::Variation< T >
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 44 of file variation.h.
Performs croearch_spaceover operation on two individuals.
Stochastically swaps subtrees between root and other, returning a new program.
- Parameters
-
mom | The first parent individual. |
dad | The second parent individual. |
- Returns
- An optional containing the offspring individual if the crossover is successful, or an empty optional otherwise.
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.
- Template Parameters
-
- Parameters
-
root | the root parent |
other | the donating parent |
- Returns
std::optional
that may contain the child program of type T
Definition at line 425 of file variation.cpp.
Performs mutation operation on an individual.
Stochastically mutate a program.
- Parameters
-
parent | The parent individual. |
- Returns
- An optional containing the mutated individual if the mutation is successful, or an empty optional otherwise.
Types of mutation:
- point mutation changes a single node.
- insertion mutation inserts a node as the parent of an existing node, and fills in the other arguments.
- deletion mutation deletes a node.
- subtree mutation inserts a new subtree into the program.
- toggle_weight_on mutation turns a node's weight ON.
- toggle_weight_off mutation turns a node's weight OFF.
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.
- Template Parameters
-
- Parameters
-
parent | the program to be mutated |
SS | a search space |
- Returns
std::optional
that may contain the child program of type T
Definition at line 559 of file variation.cpp.