R/RecombinatorSimulatedBinaryCrossover.R
dict_recombinators_sbx.Rd
Numeric 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