Example #1
0
        /// <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());
        }
Example #2
0
        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]);
        }