private static void FindBest(int numberOfCharacters, int expectedLength) { Func<string, FitnessResult> calcFitness = x => { string result = Run(x); return new FitnessResult { Value = (uint)(expectedLength * 2 - result.Length) }; }; var geneticSolver = new GeneticSolver(300) { UseFastSearch = true }; var best = geneticSolver.GetBestGenetically(numberOfCharacters, "ASCP", calcFitness); string finalString = Run(best.Genes); Console.WriteLine(best + " generatates final string with length " + finalString.Length); finalString.Length.ShouldBeGreaterThanOrEqualTo((int)(.8m*expectedLength)); }