R/MutatorSequential.R
dict_mutators_sequential.RdMutator that wraps multiple other Mutators given during construction and uses them for mutation in sequence.
This operator has the configuration parameters of the Mutators that it wraps: The configuration parameters of the operator given to the mutators construction
argument are prefixed with "mutator_1", "mutator_2", ... up to "mutator_#", where # is length(mutators).
Supported Param classes are the set intersection of supported classes of the Mutators given in mutators.
This Mutator can be created with the short access form mut()
(muts() to get a list), or through the the dictionary
dict_mutators in the following way:
Other mutators:
Mutator,
MutatorDiscrete,
MutatorNumeric,
OperatorCombination,
dict_mutators_cmpmaybe,
dict_mutators_erase,
dict_mutators_gauss,
dict_mutators_maybe,
dict_mutators_null,
dict_mutators_proxy,
dict_mutators_unif
Other mutator wrappers:
OperatorCombination,
dict_mutators_cmpmaybe,
dict_mutators_maybe,
dict_mutators_proxy
miesmuschel::MiesOperator -> miesmuschel::Mutator -> MutatorSequential
prime()See MiesOperator method. Primes both this operator, as well as the wrapped operators
given to mutator and mutator_not during construction.
param_set(ParamSet)
Passed to MiesOperator$prime().
invisible self.
set.seed(1)
# dataset:
# - x1 is mutated around +- 10
# - x2 influences sdev of mutation of x1
ds = data.frame(x1 = 0, x2 = c(.01, 0.1, 1))
p = ps(x1 = p_dbl(-10, 10), x2 = p_dbl(0, 10))
# operator that only mutates x1, with sdev given by x2
gauss_x1 = mut("combine",
operators = list(
x1 = mut("gauss", sdev_is_relative = FALSE),
x2 = mut("null")
),
adaptions = list(x1.sdev = function(x) x$x2)
)
gauss_x1$prime(p)
gauss_x1$operate(ds) # see how x1[1] changes little, x1[3] changes a lot
#> x1 x2
#> 1 -0.006264538 0.01
#> 2 0.018364332 0.10
#> 3 -0.835628612 1.00
# operator that mutates x1 with sdev given by x2, as well as x2. However,
# the value that x2 takes after mutation does not influence the value that
# the mutator of x1 "sees" -- although x2 is mutated to extreme values,
# mutation of x1 happens as in `gauss_x1`.
gauss_x1_x2 = mut("combine",
operators = list(
x1 = mut("gauss", sdev_is_relative = FALSE),
x2 = mut("gauss", sdev = 100)
),
adaptions = list(x1.sdev = function(x) x$x2)
)
gauss_x1_x2$prime(p)
gauss_x1_x2$operate(ds) # see how x1 changes in similar ways to above
#> x1 x2
#> 1 0.01595281 10
#> 2 -0.08204684 10
#> 3 0.73832471 10
# operator that mutates sequentially: first x2, and then x1 with sdev given
# by x2. The value that x2 takes after mutation *does* influence the value
# that the mutator of x1 "sees": x1 is mutated either to a large degree,
# or not at all.
gauss_x2_then_x1 = mut("sequential", list(
mut("combine",
operators = list(
x1 = mut("null"),
x2 = mut("gauss", sdev = 100)
)
),
mut("combine",
operators = list(
x1 = mut("gauss", sdev_is_relative = FALSE),
x2 = mut("null")
),
adaptions = list(x1.sdev = function(x) x$x2)
)
))
gauss_x2_then_x1$prime(p)
gauss_x2_then_x1$operate(ds)
#> x1 x2
#> 1 0.000000 0
#> 2 -6.212406 10
#> 3 -10.000000 10