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.

Configuration Parameters

  • 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.

Supported Operand Types

Supported Param classes are: ParamInt, ParamDbl

Dictionary

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:

# preferred:
rec("sbx")
recs("sbx")  # takes vector IDs, returns list of Recombinators

# long form:
dict_recombinators$get("sbx")

References

Deb, Kalyanmoy, Agrawal, Bhushan R, others (1995). “Simulated binary crossover for continuous search space.” Complex systems, 9(2), 115--148.

Super classes

miesmuschel::MiesOperator -> miesmuschel::Recombinator -> miesmuschel::RecombinatorPair -> RecombinatorSimulatedBinaryCrossover

Methods

Inherited methods


Method new()

Initialize the RecombinatorSimulatedBinaryCrossover object.

Usage

RecombinatorSimulatedBinaryCrossover$new(keep_complement = TRUE)

Arguments

keep_complement

(logical(1))
Whether the operation should keep both resulting individuals (TRUE), or only the first and discard the complement (FALSE). Default TRUE. The $keep_complement field will reflect this value.


Method clone()

The objects of this class are cloneable with this method.

Usage

RecombinatorSimulatedBinaryCrossover$clone(deep = FALSE)

Arguments

deep

Whether to make a deep clone.

Examples

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