Ejemplo n.º 1
0
        public void HandlePopulationLevelStagnationTest_SingleSpecies()
        {
            UnitTests.RandomStub randomStub = new UnitTests.RandomStub();
            Simulation           sim        = new Simulation(randomStub, gen, 20);

            // Create some fake species and genomes
            Species species1 = new Species(randomStub);

            Genome gen1 = new Genome(randomStub);

            gen1.OriginalFitness = 10;
            species1.AddGenome(gen1);

            // Remove default species/genomes and add fake ones
            sim.Species.Clear();
            sim.Species.Add(species1);

            sim.OrderSpeciesByOriginalFitness();
            sim.HandlePopulationLevelStagnation();

            Assert.AreEqual(20, species1.Offspring);
            Assert.AreEqual(20, species1.ChampionOffspring);

            Assert.AreEqual(0, sim.GenerationsSinceLastUpdate);
        }
Ejemplo n.º 2
0
        public void AddGenomesToSpeciesTest()
        {
            UnitTests.RandomStub randomStub = new UnitTests.RandomStub();
            Simulation           sim        = new Simulation(randomStub, gen, 10);

            // Create some fake species and genomes
            Species species1 = new Species(randomStub);

            // Two genomes are matching, one is not so we should get 2 species (with 2 and 1 Genomes respectively)
            Genome gen1 = new Genome(randomStub);
            Genome gen2 = new Genome(randomStub);

            Genome gen3 = new Genome(randomStub);

            gen3.ParentSimulation = sim;
            gen3.AddNode(new Node(Node.ENodeType.SENSOR, 1));
            gen3.AddNode(new Node(Node.ENodeType.SENSOR, 2));
            gen3.AddNode(new Node(Node.ENodeType.OUTPUT, 3));
            gen3.AddNode(new Node(Node.ENodeType.OUTPUT, 4));
            gen3.AddConnectionGene(1, 2, true);
            gen3.AddConnectionGene(1, 3, true);
            gen3.AddConnectionGene(1, 4, true);


            sim.Species.Clear();

            sim.AddGenomesToSpecies(new List <Genome> {
                gen1, gen2, gen3
            });

            Assert.AreEqual(2, sim.Species.Count);
            Assert.AreEqual(2, sim.Species[0].Genomes.Count);
            Assert.AreEqual(1, sim.Species[1].Genomes.Count);
        }
Ejemplo n.º 3
0
        public void AddGenomesToSpeciesTest_NullGenomes_Expected_Exception()
        {
            UnitTests.RandomStub randomStub = new UnitTests.RandomStub();
            Simulation           sim        = new Simulation(randomStub, gen, 21);

            sim.AddGenomesToSpecies(null);
        }
Ejemplo n.º 4
0
        public void InsertGeneTest_Null_ExpectedException()
        {
            UnitTests.RandomStub randomStub = new UnitTests.RandomStub();
            randomStub.NextIntValue = 0; randomStub.NextDoubleValue = 0.0;

            Genome genome = new Genome(randomStub);

            genome.AddNode(new Node(Node.ENodeType.SENSOR, 1));
            genome.AddNode(new Node(Node.ENodeType.OUTPUT, 2));

            genome.InsertConnectionGene(null);
        }
Ejemplo n.º 5
0
        public void HandlePopulationLevelStagnationTest_OddPopulationSize()
        {
            UnitTests.RandomStub randomStub = new UnitTests.RandomStub();
            Simulation           sim        = new Simulation(randomStub, gen, 21);

            // Create some fake species and genomes
            Species species1 = new Species(randomStub);
            Species species2 = new Species(randomStub);
            Species species3 = new Species(randomStub);
            Species species4 = new Species(randomStub);

            Genome gen1 = new Genome(randomStub);

            gen1.OriginalFitness = 10;
            species1.AddGenome(gen1);

            Genome gen2 = new Genome(randomStub);

            gen2.OriginalFitness = 0;
            species2.AddGenome(gen2);

            Genome gen3 = new Genome(randomStub);

            gen3.OriginalFitness = 20;
            species3.AddGenome(gen3);

            Genome gen4 = new Genome(randomStub);

            gen4.OriginalFitness = 1;
            species4.AddGenome(gen4);

            // Remove default species/genomes and add fake ones
            sim.Species.Clear();
            sim.Species.AddRange(new Species[] { species1, species2, species3, species4 });

            sim.OrderSpeciesByOriginalFitness();
            sim.HandlePopulationLevelStagnation();

            Assert.AreEqual(10, species1.Offspring);
            Assert.AreEqual(10, species1.ChampionOffspring);

            Assert.AreEqual(0, species2.Offspring);

            Assert.AreEqual(11, species3.Offspring);
            Assert.AreEqual(11, species3.ChampionOffspring);

            Assert.AreEqual(0, species4.Offspring);

            Assert.AreEqual(0, sim.GenerationsSinceLastUpdate);
        }
Ejemplo n.º 6
0
        public void CalculateSpeciesOffspringTest_TotalFitnessGreaterThanZero()
        {
            UnitTests.RandomStub randomStub = new UnitTests.RandomStub();
            Simulation           sim        = new Simulation(randomStub, gen, 21);

            // Create some fake species and genomes
            Species species1 = new Species(randomStub);
            Species species2 = new Species(randomStub);
            Species species3 = new Species(randomStub);
            Species species4 = new Species(randomStub);

            Genome gen1 = new Genome(randomStub);

            gen1.OriginalFitness = 5;
            gen1.Fitness         = 5;
            species1.AddGenome(gen1);

            Genome gen2 = new Genome(randomStub);

            gen2.OriginalFitness = 10;
            gen2.Fitness         = 10;
            species2.AddGenome(gen2);

            Genome gen3 = new Genome(randomStub);

            gen3.OriginalFitness = 15;
            gen3.Fitness         = 15;
            species3.AddGenome(gen3);

            Genome gen4 = new Genome(randomStub);

            gen4.OriginalFitness = 20;
            gen4.Fitness         = 20;
            species4.AddGenome(gen4);

            // Remove default species/genomes and add fake ones
            sim.Species.Clear();
            sim.Species.AddRange(new Species[] { species1, species2, species3, species4 });

            sim.OrderSpeciesByOriginalFitness();
            sim.CalculateSpeciesOffspring(50.0f);

            Assert.AreEqual(2, species1.Offspring);
            Assert.AreEqual(4, species2.Offspring);
            Assert.AreEqual(6, species3.Offspring);
            Assert.AreEqual(9, species4.Offspring);
        }
Ejemplo n.º 7
0
        public void FindConnectionGeneToSplitTest_Correct_Expected_True()
        {
            UnitTests.RandomStub randomStub = new UnitTests.RandomStub();
            randomStub.NextIntValue = 0; randomStub.NextDoubleValue = 0.0;

            Genome genome = new Genome(randomStub);

            genome.AddNode(new Node(Node.ENodeType.SENSOR, 1));
            genome.AddNode(new Node(Node.ENodeType.OUTPUT, 2));

            genome.AddConnectionGene(1, 2, true);

            int  connectionIndex = -1;
            bool found           = genome.FindConnectionGeneToSplit(out connectionIndex);

            Assert.AreEqual(true, found);
            Assert.AreEqual(0, connectionIndex);
        }
Ejemplo n.º 8
0
        public void CalculateSpeciesOffspringTest_TotalFitnessZero_Expected_AllSpeciesHaveSameOffspring_ButOne()
        {
            UnitTests.RandomStub randomStub = new UnitTests.RandomStub();
            Simulation           sim        = new Simulation(randomStub, gen, 22);

            // Create some fake species and genomes
            Species species1 = new Species(randomStub);
            Species species2 = new Species(randomStub);
            Species species3 = new Species(randomStub);
            Species species4 = new Species(randomStub);

            Genome gen1 = new Genome(randomStub);

            gen1.OriginalFitness = 10;
            species1.AddGenome(gen1);

            Genome gen2 = new Genome(randomStub);

            gen2.OriginalFitness = 0;
            species2.AddGenome(gen2);

            Genome gen3 = new Genome(randomStub);

            gen3.OriginalFitness = 20;
            species3.AddGenome(gen3);

            Genome gen4 = new Genome(randomStub);

            gen4.OriginalFitness = 1;
            species4.AddGenome(gen4);

            // Remove default species/genomes and add fake ones
            sim.Species.Clear();
            sim.Species.AddRange(new Species[] { species1, species2, species3, species4 });

            sim.OrderSpeciesByOriginalFitness();
            sim.CalculateSpeciesOffspring(0.0f);

            Assert.AreEqual(7, sim.Species[0].Offspring);
            for (int i = 1; i < sim.Species.Count; ++i)
            {
                Assert.AreEqual(5, sim.Species[i].Offspring);
            }
        }
Ejemplo n.º 9
0
        public void AddGenomesToSpeciesTest_NoSpecies_Expected_CreateNewSpecies()
        {
            UnitTests.RandomStub randomStub = new UnitTests.RandomStub();
            Simulation           sim        = new Simulation(randomStub, gen, 10);

            sim.Species.Clear();

            Genome gen1 = new Genome(randomStub);

            gen1.OriginalFitness = 5;
            gen1.Fitness         = 5;


            Assert.AreEqual(0, sim.Species.Count);
            sim.AddGenomesToSpecies(new List <Genome> {
                gen1
            });
            Assert.AreEqual(1, sim.Species.Count);
        }