public void Evolve_ManyGenerations_Fast() { int movesAhead = 10; int boardSize = 10; var selection = new EliteSelection(); var crossover = new OrderedCrossover(); var mutation = new TworsMutation(); var chromosome = new CheckersChromosome(movesAhead, boardSize); var fitness = new CheckersFitness(new CheckersBoard(boardSize)); var population = new Population(40, 40, chromosome); var ga = new GeneticAlgorithm(population, fitness, selection, crossover, mutation); ga.GenerationRan += delegate { if (ga.Population.GenerationsNumber % 100 == 0) { fitness.Update(ga.Population.BestChromosome as CheckersChromosome); } }; ga.Start(); var firstFitness = ((CheckersChromosome)ga.Population.BestChromosome).Fitness; ga.Termination = new GenerationNumberTermination(2001); TimeAssert.LessThan(100000, () => { ga.Start(); }); var lastFitness = ((CheckersChromosome)ga.Population.BestChromosome).Fitness; Assert.LessOrEqual(firstFitness, lastFitness); }
public void Evaluate_ChromosomeForwardMove_Fitness05() { var target = new CheckersFitness(new CheckersBoard(8)); var chromosome = new CheckersChromosome(2, 8); chromosome.Moves.Clear(); chromosome.Moves.Add(new CheckersMove(new CheckersPiece(CheckersPlayer.PlayerOne) { CurrentSquare = new CheckersSquare(1, 2) }, new CheckersSquare(2, 3))); Assert.AreEqual(0.5, target.Evaluate(chromosome)); }
private void Awake () { var population = new Population (m_populationSize, m_populationSize, new CheckersChromosome (m_movesAhead, m_boardSize)); Fitness = new CheckersFitness (new CheckersBoard (m_boardSize)); GA = new GeneticAlgorithm ( population, Fitness, new EliteSelection (), new UniformCrossover (), new UniformMutation ()); GA.TaskExecutor = new SmartThreadPoolTaskExecutor(); GA.TaskExecutor.Timeout = System.TimeSpan.FromSeconds (1); }
public void Evaluate_ChromosomeForwardMoveAndCanCaptureAnotherOne_Fitness2() { var board = new CheckersBoard(8); var target = new CheckersFitness(board); var move = new CheckersMove(new CheckersPiece(CheckersPlayer.PlayerOne) { CurrentSquare = new CheckersSquare(3, 2) }, new CheckersSquare(4, 3)); Assert.IsTrue(board.MovePiece(move)); move = new CheckersMove(new CheckersPiece(CheckersPlayer.PlayerTwo) { CurrentSquare = new CheckersSquare(6, 5) }, new CheckersSquare(5, 4)); Assert.IsTrue(board.MovePiece(move)); var chromosome = new CheckersChromosome(2, 8); chromosome.Moves.Clear(); chromosome.Moves.Add(new CheckersMove(new CheckersPiece(CheckersPlayer.PlayerOne) { CurrentSquare = new CheckersSquare(4, 3) }, new CheckersSquare(6, 5))); target.Update(chromosome); Assert.AreEqual(2, target.Evaluate(chromosome)); }