R/RecombinatorSimulatedBinaryCrossover.R
dict_recombinators_sbx.RdNumeric Values between two individuals are recombined via component-wise independent simulated binary crossover. See Deb (1995) for more details.
This operator is applied to all components; It is common to apply the operator to only some randomly
chosen components, in which case the rec("cmpmaybe") operator should
be used; see examples.
n :: numeric
Non-negative distribution index of the polynomial distribution for each component.
Generally spoken, the higher n, the higher the probability of creating near parent values.
This may either be a scalar in which case it is applied to all input components, or a vector,
in which case it must have the length of the input components and applies to components in
order in which they appear in the priming ParamSet. Initialized to 1.
This Recombinator can be created with the short access form rec()
(recs() to get a list), or through the the dictionary
dict_recombinators in the following way:
Deb, Kalyanmoy, Agrawal, Bhushan R, others (1995). “Simulated binary crossover for continuous search space.” Complex systems, 9(2), 115--148.
Other recombinators:
OperatorCombination,
Recombinator,
RecombinatorPair,
dict_recombinators_cmpmaybe,
dict_recombinators_convex,
dict_recombinators_cvxpair,
dict_recombinators_maybe,
dict_recombinators_null,
dict_recombinators_proxy,
dict_recombinators_sequential,
dict_recombinators_swap,
dict_recombinators_xonary,
dict_recombinators_xounif
miesmuschel::MiesOperator -> miesmuschel::Recombinator -> miesmuschel::RecombinatorPair -> RecombinatorSimulatedBinaryCrossover
new()Initialize the RecombinatorSimulatedBinaryCrossover object.
RecombinatorSimulatedBinaryCrossover$new(keep_complement = TRUE)set.seed(1)
rsbx = rec("cmpmaybe", rec("sbx"), p = 0.5)
p = ps(x = p_dbl(-5, 5), y = p_dbl(-5, 5), z = p_dbl(-5, 5))
data = data.frame(x = 0:5, y = 0:5, z = 0:5)
rsbx$prime(p)
rsbx$operate(data)
#> x y z
#> 1 0.9300156 0.8165730 1.1034343
#> 2 0.1363989 -0.6438016 -0.9527477
#> 3 2.9338327 2.0000000 3.2245560
#> 4 1.8695625 3.0000000 2.0645745
#> 5 4.1347257 4.0000000 4.0000000
#> 6 4.8106904 5.0000000 5.0000000
rsbx = rec("sbx", n = c(0.5, 1, 10))
rsbx$prime(p)
rsbx$operate(data)
#> x y z
#> 1 0.677709 1.3239541 1.00512292
#> 2 -0.373207 0.0474655 -0.03940287
#> 3 1.628915 1.8187197 1.93821398
#> 4 2.562859 3.1239061 2.99402833
#> 5 4.364866 3.9907939 3.91392295
#> 6 4.607338 4.9068185 4.94728532