Parent-centric crossover (PCX)#

parent_centric_crossover() creates an offspring around each target, from two more parents chosen at random. pymoo (PCX) and DESDEO (ParentCentricCrossover) provide the same operator. pymoo replaces values outside the bounds by random values, while moocore and DESDEO clip them.

KS test results#

moocore

pymoo

desdeo

moocore

0.233

0.736

pymoo

0.233

0.343

desdeo

0.736

0.343

All implementations produce the same distribution of offspring.

Performance over number of parents#

../../_images/crossover_bench-parent_centric-nparents-time.png

moocore is the fastest for every number of parents. With 10 000 parents, it takes 4.0 ms, while DESDEO and pymoo take 3.7 and 12 times as long.

Performance over number of variables#

../../_images/crossover_bench-parent_centric-nvars-time.png

moocore is the fastest for every number of variables. With 1000 variables, pymoo and DESDEO take 2.1 and 3.8 times as long.