/// <summary> /// Evaluates a ISudokuChromosome by summing over the fitnesses of its corresponding Sudoku boards. /// </summary> /// <param name="chromosome">a Chromosome that can build Sudokus</param> /// <returns>the chromosome's fitness</returns> public double Evaluate(SudokuCellsChromosome chromosome) { List <double> scores = new List <double>(); var sudokus = chromosome.GetSudokus(); foreach (var sudoku in sudokus) { scores.Add(Evaluate(sudoku)); } return(scores.Sum()); }
public static Sudoku EvolveSudokuSolution(Sudoku sudokuBoard, int populationSize, int generationNb) { var sudokuChromosome = new SudokuCellsChromosome(sudokuBoard); var fitness = new SudokuFitness(sudokuBoard); var selection = new EliteSelection(); var crossover = new UniformCrossover(); var mutation = new UniformMutation(); var population = new Population(populationSize, populationSize, sudokuChromosome); var ga = new GeneticAlgorithm(population, fitness, selection, crossover, mutation) { Termination = new OrTermination(new ITermination[] { new FitnessThresholdTermination(0), new GenerationNumberTermination(generationNb) }) }; ga.Start(); var bestIndividual = ((SudokuCellsChromosome)ga.Population.BestChromosome); return(bestIndividual.GetSudokus()[0]); }