public override TSolution[] Apply(TSolution[] population) { Selector.BeforeSelection(population); var parents = Selector.Select(population); var children = new TSolution[parents.Length]; for (int i = 0; i < children.Length; i++) { children[i] = new TSolution(); } Crossover.CrossCoordinates(parents, children); Mutator.MutateCoordinates(children); Evaluator.Evaluate(children); Fitter.Fit(children); return(children); }