Exemplo n.º 1
0
        public void MyTestMethod()
        {
            var random = new RandomImplementation(23);
            INeatConfiguration configuration = new DefaultNeatConfiguration(500);
            var nodeInovator       = new InnovationGenerator(1);
            var ConnectionInovator = new InnovationGenerator(1);

            var genomeProvider = new GenomeProvider(nodeInovator, ConnectionInovator, random);

            var crossFunction = new NeatCrossFunction(random, configuration);

            var weightMutation        = new ApplyWeightMutation(random, configuration);
            var addNodeMutation       = new AddNodeMutation(nodeInovator, ConnectionInovator, random);
            var addConnectionMutation = new AddConnectionMutation(ConnectionInovator, random, configuration);

            var evaluator = new WeightOfAHundred(configuration, genomeProvider, nodeInovator, ConnectionInovator, addConnectionMutation, addNodeMutation, weightMutation, crossFunction, random);

            for (int i = 0; i < 1000; i++)
            {
                evaluator.EvaluateGeneration();
                Console.WriteLine($"Best Fitness: {evaluator.FittestGenome.Fitness}");
            }

            Assert.That(evaluator.FittestGenome.Fitness > 90);
        }
Exemplo n.º 2
0
        public void AddConnectionMutation_Mutate_AddedConnection()
        {
            //ARRANGE
            var i = 0;

            _random.Next(Arg.Is <int>(2)).Returns(call =>
            {
                var ret = i;
                i       = i + 1;
                return(ret);
            });
            _random.NextDouble().ReturnsForAnyArgs(1.0);

            _innovationPointGenerator.GetNextInnovation().Returns(23);

            var genome = CreateGenome();

            var addConnectionMutator = new AddConnectionMutation(_innovationPointGenerator, _random, _config);

            //ACT
            var result = addConnectionMutator.Mutate(ref genome);

            //ASSERT
            Assert.IsTrue(result);

            Assert.AreEqual(1, genome.Connections.Count());

            Assert.AreEqual(1.0, genome.Connections.First().Value.Weight);
            Assert.AreEqual(23, genome.Connections.First().Value.Id);
        }
Exemplo n.º 3
0
        public void test()
        {
            var random = new RandomImplementation(23);
            INeatConfiguration configuration = new DefaultNeatConfiguration(500);
            var nodeInovator       = new InnovationGenerator(1);
            var connectionInovator = new InnovationGenerator(1);

            var problemDomain = new ProblemDomain(
                inputs:
                new double[, ]
            {
                { 0, 0, 1 },
                { 0, 1, 1 },
                { 1, 0, 1 },
                { 1, 1, 1 }
            },
                outputs:
                new double[, ]
            {
                { 0 },
                { 1 },
                { 1 },
                { 0 }
            });
            var genome = CreateOriginalGenome(nodeInovator, connectionInovator, problemDomain);

            var genomeProvider = new XORNNProvider(nodeInovator, connectionInovator, random, genome);

            var crossFunction = new NeatCrossFunction(random, configuration);

            var weightMutation        = new ApplyWeightMutation(random, configuration);
            var addNodeMutation       = new AddNodeMutation(nodeInovator, connectionInovator, random);
            var addConnectionMutation = new AddConnectionMutation(connectionInovator, random, configuration);

            var evaluator = new XORNNEvaluator(configuration, genomeProvider, nodeInovator, connectionInovator, addConnectionMutation, addNodeMutation, weightMutation, crossFunction, random, problemDomain);


            for (int i = 0; i < 1000; i++)
            {
                evaluator.EvaluateGeneration();
                Console.WriteLine($"Best Fitness: {evaluator.FittestGenome.Fitness}");
            }

            Assert.That(evaluator.FittestGenome.Fitness > 90);
        }
Exemplo n.º 4
0
        public void AddConnectionMutation_Mutate_FailedToAddConnection()
        {
            //ARRANGE
            _random.Next(Arg.Is <int>(2)).Returns(1);
            _random.NextDouble().ReturnsForAnyArgs(1.0);

            var genome = CreateGenome();

            var addConnectionMutator = new AddConnectionMutation(_innovationPointGenerator, _random, _config);

            //ACT
            var result = addConnectionMutator.Mutate(ref genome);

            //ASSERT
            Assert.IsFalse(result);

            Assert.AreEqual(0, genome.Connections.Count());
        }