public GeneticAlgorithm <T> Create(IMutator <T> mutator, ICrossOver <T> crossOver, IPopulationCreator <T> populationCreator, Func <T[], int> fitnessFunction) => new GeneticAlgorithm <T>(mutator, crossOver, populationCreator, PopulationSize, MutationProbability, maxGenerations, eliteSize, solutionPrecision, fitnessFunction);
internal GeneticAlgorithm( IMutator <T> mutator, ICrossOver <T> crossOver, IPopulationCreator <T> populationCreator, int populationSize, double mutationProbability, int maxGenerations, int eliteSize, double solutionPrecision, Func <T[], int> fitnessFunction) { this.mutator = mutator; this.crossOver = crossOver; this.populationCreator = populationCreator; this.populationSize = populationSize; this.mutationProbability = mutationProbability; this.fitnessFunction = fitnessFunction; this.maxGenerations = maxGenerations; this.eliteSize = eliteSize; this.solutionPrecision = solutionPrecision; }