Ejemplo n.º 1
0
        public void TestChromosomeClone()
        {
            // Use the Assert class to test conditions
            var chromosome = new LevelChunkChromosome(10);

            Assert.AreEqual(chromosome, chromosome.Clone());
        }
Ejemplo n.º 2
0
        public void TestEquality()
        {
            var fitness = new LevelChunkFitness(0);

            // Use the Assert class to test conditions
            var chromosome = new LevelChunkChromosome(10);

            Assert.LessOrEqual(Mathf.Abs((float)fitness.Evaluate(chromosome)
                                         - (float)fitness.Evaluate(chromosome.Clone())), _errorMargin);
        }
Ejemplo n.º 3
0
        public void TestIncreaseHT()
        {
            var fitness = new LevelChunkFitness(10);

            // Use the Assert class to test conditions
            var chromosome1 = new LevelChunkChromosome(2);

            chromosome1.ReplaceGenes(0, new Gene[] { new Gene(LevelElement.None), new Gene(LevelElement.None) });

            var chromosome2 = new LevelChunkChromosome(2);

            chromosome2.ReplaceGenes(0, new Gene[] { new Gene(LevelElement.None), new Gene(LevelElement.Beast) });

            Assert.Less(fitness.Evaluate(chromosome1), fitness.Evaluate(chromosome2));
        }
Ejemplo n.º 4
0
    private void GenerateLevelGS()
    {
        Level = new LevelElement[LevelSize];
        for (var i = 0; i < nChunks; i++)
        {
            var dcParams   = DifficultyCurveParams;
            var difficulty = DifficultyCurve(i, dcParams.a, dcParams.b, dcParams.k);

            var eParams   = EvolutionParams;
            var chunkSize = LevelSize / nChunks;

            var fitness    = new LevelChunkFitness(difficulty);
            var chromosome = new LevelChunkChromosome(chunkSize);

            var crossover  = new OnePointCrossover(chunkSize / 2);
            var mutation   = new UniformMutation(allGenesMutable: true);
            var selection  = new RouletteWheelSelection();
            var population = new Population(50, 100, chromosome);

            var m_ga = new GeneticAlgorithm(population, fitness, selection, crossover, mutation)
            {
                Termination = new TimeEvolvingTermination(new TimeSpan(0, 0, 1))
            };

            m_ga.TaskExecutor = new ParallelTaskExecutor
            {
                MinThreads = 2,
                MaxThreads = 5
            };
            m_ga.Start();
            // Everty time a generation ends, we log the best solution.

            /*m_ga.GenerationRan += delegate
             * {
             *  var f = m_ga.BestChromosome.Fitness;
             *  Debug.Log($"Generation: {m_ga.GenerationsNumber} - Fitness: ${f}");
             * };*/
            var genes = m_ga.BestChromosome.GetGenes();
            for (int j = 0; j < chunkSize; j++)
            {
                Level[i * chunkSize + j] = (LevelElement)genes[j].Value;
            }
            Debug.Log($"Fitness: {m_ga.BestChromosome.Fitness}");
        }
    }