Exemple #1
0
        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);
                }
            }
        }
Exemple #2
0
        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);
                }
            }
        }
Exemple #3
0
        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]);
            }
        }
Exemple #4
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());
            }
        }
Exemple #5
0
        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);
                }
            }
        }