public IEnumerable <Individual> Cross(Individual individual1, Individual individual2) { var midpoint = GeometricCalculator.GetMidpoint(individual1.Semantics, individual2.Semantics); bool triedBackPropagation1; var child1 = GenerateChildren(individual1, individual2, midpoint, out triedBackPropagation1); bool triedBackPropagation2; var child2 = GenerateChildren(individual2, individual1, midpoint, out triedBackPropagation2); if (!triedBackPropagation1 && !triedBackPropagation2 && Fallback != null) { return(Fallback.Cross(individual1, individual2)); } return(new[] { child1, child2 }); }