public void AddNodeMutation_Mutate_AddsNodeAndConnection() { //ARRANGE var genome = CreateGenome(1, 1); genome.Connections.Add(1, new Connection { Id = 1, InNodeId = 1, OutNodeId = 2, IsEnabled = true, Weight = 2.0 }); _nodeInnovationGenerator.GetNextInnovation().Returns(3); _connectionInnovationGenerator.GetNextInnovation().Returns(2, 3); _randomizer.Next(1).Returns(call => call.Arg <int>() - 1); var mutator = new AddNodeMutation(_nodeInnovationGenerator, _connectionInnovationGenerator, _randomizer); //ACT var result = mutator.Mutate(ref genome); //ASSERT Assert.IsTrue(result); Assert.AreEqual(3, genome.Connections.Count); Assert.AreEqual(3, genome.Nodes.Count); Assert.AreEqual(NodeType.Hidden, genome.Nodes[3].NodeType); AssertConnection(genome, 1, false, 1, 2, 2.0); AssertConnection(genome, 2, true, 1, 3, 1.0); AssertConnection(genome, 3, true, 3, 2, 2.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); }
public void AddNodeMutation_Mutate_DidNotAddNodesSinceNoConnections() { //ARRANGE var genome = CreateGenome(1, 1); var mutator = new AddNodeMutation(_nodeInnovationGenerator, _connectionInnovationGenerator, _randomizer); //ACT var result = mutator.Mutate(ref genome); //ASSERT Assert.IsFalse(result); Assert.AreEqual(0, genome.Connections.Count); Assert.AreEqual(2, genome.Nodes.Count); }
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); }
public void AddNodeMutation_Mutate_DidNotAddNodesSinceNoEnabledConnections() { //ARRANGE var genome = CreateGenome(1, 1); genome.Connections.Add(1, new Connection { Id = 1, InNodeId = 1, OutNodeId = 2, IsEnabled = false, Weight = 1.0 }); var mutator = new AddNodeMutation(_nodeInnovationGenerator, _connectionInnovationGenerator, _randomizer); //ACT var result = mutator.Mutate(ref genome); //ASSERT Assert.IsFalse(result); Assert.AreEqual(1, genome.Connections.Count); Assert.AreEqual(2, genome.Nodes.Count); }