public class CrossoverDoubleSBX extends CrossoverDoubleElementwise
CrossoverDoubleSBX
is an implementation of the simulated binary
crossover operator proposed by Deb and Kumar, 1995.
The SBX crossover is applied bitwise. In the original work, two offspring are created using
z_1 = 0.5 * [(1 + beta)x + (1 - beta)y]
z_2 = 0.5 * [(1 - beta)x + (1 + beta)y]
.
In this implementation, one offspring is created while the actual bit is set
to z_1
with a probability of 0.5
and to z_2
with a
probability of 0.5
, respectively.
The value beta
is defined as
beta = (2u)^(1 / (nu + 1))
if u <= 0.5
and
beta = (1 / (2 (1 - u)))^(1 / (nu + 1))
otherwise
At this juncture, u
is a random number between (0, 1)
. The
variable nu
influences the crossover with a high value leading to a
higher probability of 'near-parent' solution while a small value leads to a
higher probability of more distant solutions, respectively.
Modifier and Type | Class and Description |
---|---|
protected static interface |
CrossoverDoubleSBX.Nu |
Modifier and Type | Field and Description |
---|---|
protected double |
nu |
normalize, random
Constructor and Description |
---|
CrossoverDoubleSBX(double nu,
NormalizeDouble normalize,
org.opt4j.core.common.random.Rand random)
Constructs a
CrossoverDoubleSBX with a nu value and a random
generator. |
Modifier and Type | Method and Description |
---|---|
Pair<java.lang.Double> |
crossover(double x,
double y)
Performs a crossover with two double values.
|
crossover
crossover
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
getOperatorType
@Inject public CrossoverDoubleSBX(double nu, NormalizeDouble normalize, org.opt4j.core.common.random.Rand random)
CrossoverDoubleSBX
with a nu value and a random
generator.nu
- the nu
valuenormalize
- the normalize operatorrandom
- the random number generatorpublic Pair<java.lang.Double> crossover(double x, double y)
CrossoverDoubleElementwise
crossover
in class CrossoverDoubleElementwise
x
- the first valuey
- the second value