public void CheckOnePointRecombinationFromBest() { using (var source = RandomSource.DrillIn()) { // Arrange var parameters = new NetworkParameters(3, 1) { InitialConnectionDensity = 1f }; var tracker = new InnovationTracker(NetworkParameters.BiasCount + parameters.SensorCount + parameters.EffectorCount); var best = new Genome(parameters, tracker, true); var worst = new Genome(parameters, tracker, true); // Act source.GetParanoid(); source.PushLimitedNexts(1, 3); // crossover points source.PushNextBools(true); // start from best var result = best.Mate(worst, CrossoverType.OnePoint); // Assert Assert.Equal(result.NeatChromosome[0].Weight, best.NeatChromosome[0].Weight); for (var i = 1; i < result.NeatChromosome.Count; i++) { Assert.Equal(result.NeatChromosome[i].Weight, worst.NeatChromosome[i].Weight); } } }
public void CheckTwoPointRecombinationOfSingleGene() { // TODO fix crossover, make this one green using (var source = RandomSource.DrillIn()) { // Arrange var parameters = new NetworkParameters(3, 1) { InitialConnectionDensity = 1f }; var tracker = new InnovationTracker(NetworkParameters.BiasCount + parameters.SensorCount + parameters.EffectorCount); var best = new Genome(parameters, tracker, true); var worst = new Genome(parameters, tracker, true); // Act source.GetParanoid(); source.PushLimitedNexts(2, 2); // crossover points source.PushNextBools(true); // start from best var result = best.Mate(worst, CrossoverType.TwoPoints); // Assert Assert.Equal(result.NeatChromosome[2].Weight, worst.NeatChromosome[2].Weight); for (var i = 0; i < result.NeatChromosome.Count; i++) { if (i == 2) { continue; } Assert.Equal(result.NeatChromosome[i].Weight, best.NeatChromosome[i].Weight); } } }
public void SimpleNetworkCheck() { using (var source = RandomSource.DrillIn()) { // Arrange for (var i = 0; i < 10; i++) { source.PushNextFloats(0.6f); // identity weights and density chances } source.GetParanoid(); var parameters = new NetworkParameters(3, 1) { InitialConnectionDensity = 1f }; var tracker = new InnovationTracker(NetworkParameters.BiasCount + parameters.SensorCount + parameters.EffectorCount); var genome = new Genome(parameters, tracker, false); var network = new RecurrentNetwork(); #region Network initialization network.AddNeuron(0, 0); network.AddNeuron(1, 0); network.AddNeuron(2, 0); network.AddNeuron(3, 0); network.AddNeuron(4, 1); network.AddConnection(0, 4, 1f); network.AddConnection(1, 4, 1f); network.AddConnection(2, 4, 1f); network.AddConnection(3, 4, 1f); network.AddConnection(4, 4, 1f); #endregion float[] result = null; for (var i = 0; i < 5; i++) { for (var j = 0; j < 3; j++) { genome.Network.Sensors[j] = 0.5f; } genome.Network.Activate(); result = network.Activate(new[] { 1f, 0.5f, 0.5f, 0.5f }); } Assert.Equal(result[0], genome.Network.Effectors[0]); } }
public void CheckRandomSourceDrillIn() { using (var source = RandomSource.DrillIn()) { // Arrange // Act source.GetParanoid(); source.PushNextFloats(1, 2, 3); // Assert Assert.Equal(1, Neat.Utils.RandomSource.Next()); Assert.Equal(2, Neat.Utils.RandomSource.Next()); Assert.Equal(3, Neat.Utils.RandomSource.Next()); } }
public void CheckDisjointsAndEtcAreTakenFromBest() { // TODO fix crossover, make this one green using (var source = RandomSource.DrillIn()) { // Arrange var parameters = new NetworkParameters(3, 1) { InitialConnectionDensity = 1f }; var tracker = new InnovationTracker(NetworkParameters.BiasCount + parameters.SensorCount + parameters.EffectorCount); var best = new Genome(parameters, tracker, true); var worst = new Genome(parameters, tracker, true); best.SplitConnection(1); // Act source.GetParanoid(); source.PushLimitedNexts(0, 2); // crossover points - all from worst source.PushNextBools(true); // start from best var result = best.Mate(worst, CrossoverType.OnePoint); // Assert Assert.Equal(best.NeatChromosome.Count, result.NeatChromosome.Count); for (var i = 0; i < result.NeatChromosome.Count - 2; i++) { var parentGene = Assert.Single(worst.NeatChromosome, g => g.Id == result.NeatChromosome[i].Id); Assert.Equal(result.NeatChromosome[i].Weight, parentGene.Weight); } for (var i = result.NeatChromosome.Count - 2; i < result.NeatChromosome.Count; i++) { Assert.Equal(result.NeatChromosome[i].Id, best.NeatChromosome[i].Id); Assert.Equal(result.NeatChromosome[i].Weight, best.NeatChromosome[i].Weight); } } }