An evolutionary operator is used to create new offspring genomes based on
parent genomes. There are a variety of means by which this can be done. The
number of parents required, as well as the number of offspring produced are
dependent on the operator. This interface defines key characteristics that
all operators must share.
Most operators do not modify the parents. However, some mutation operators do
require that the children and parent array be the same. If the children and
parent arrays are the same, then the parent will be mutated.