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));
        }
示例#2
0
        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);

            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));
        }
示例#4
0
    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);
    }
 private void Awake()
 {
     Fitness = new CheckersFitness(new CheckersBoard(m_boardSize));
     InitializeGA();
 }