Пример #1
0
        public void RegisterNewGeneration_GenerationExceedGenerationsNumber_RemoveOldOne()
        {
            var target     = new PerformanceGenerationStrategy();
            var population = new Population(2, 6, new ChromosomeStub());

            population.CreateInitialGeneration();
            target.RegisterNewGeneration(population);
            Assert.AreEqual(1, population.Generations.Count);

            population.CreateNewGeneration(new List <IChromosome>()
            {
                new ChromosomeStub(), new ChromosomeStub()
            });
            target.RegisterNewGeneration(population);
            Assert.AreEqual(1, population.Generations.Count);

            population.CreateNewGeneration(new List <IChromosome>()
            {
                new ChromosomeStub(), new ChromosomeStub()
            });
            target.RegisterNewGeneration(population);
            Assert.AreEqual(1, population.Generations.Count);

            population.CreateNewGeneration(new List <IChromosome>()
            {
                new ChromosomeStub(), new ChromosomeStub()
            });
            target.RegisterNewGeneration(population);
            Assert.AreEqual(1, population.Generations.Count);
        }
Пример #2
0
        public static Population GeneratePopulation(int size, object chromosome)
        {
            var defaultPerformance = new PerformanceGenerationStrategy(10);

            if (chromosome is BinaryChromosome)
            {
                return(GeneratePopulation(size, (BinaryChromosome)chromosome, defaultPerformance));
            }
            if (chromosome is CombinatorialChromosome)
            {
                return(GeneratePopulation(size, (CombinatorialChromosome)chromosome, defaultPerformance));
            }
            if (chromosome is DoubleChromosome)
            {
                return(GeneratePopulation(size, (DoubleChromosome)chromosome, defaultPerformance));
            }
            return(null);
        }
Пример #3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="GeneticSharp.Domain.Populations.Population"/> class.
        /// </summary>
        /// <param name="minSize">The minimum size (chromosomes).</param>
        /// <param name="maxSize">The maximum size (chromosomes).</param>
        /// <param name="adamChromosome">The original chromosome of all population ;).</param>
        public GeneticDietPopulation(int minSize, int maxSize, IChromosome adamChromosome)
        {
            if (minSize < 2)
            {
                throw new ArgumentOutOfRangeException("minSize", "The minimum size for a population is 2 chromosomes.");
            }

            if (maxSize < minSize)
            {
                throw new ArgumentOutOfRangeException("maxSize", "The maximum size for a population should be equal or greater than minimum size.");
            }

            ExceptionHelper.ThrowIfNull("adamChromosome", adamChromosome);

            CreationDate       = DateTime.Now;
            MinSize            = minSize;
            MaxSize            = maxSize;
            AdamChromosome     = adamChromosome;
            Generations        = new List <Generation>();
            GenerationStrategy = new PerformanceGenerationStrategy(10);
        }
Пример #4
0
        public Test UseAlgorithm(List <int> oblasti, List <double> zastupljenost, int Test_Length)
        {
            Random      r          = new Random(10);
            IDataAccess dataAccess = DataAccess.DataAccess.GetInstance();

            List <Question> qs = new List <Question>();

            for (int i = 0; i < Test_Length; i++)
            {
                qs.Add(dataAccess.GetQuestionById(1 + r.Next(1000)));
            }

            Test adamTest = new Test(qs, Test_Length);

            List <double> zastupljenost_kao_br_pitanja = new List <double>();

            foreach (var vrednost in zastupljenost)
            {
                zastupljenost_kao_br_pitanja.Add(Math.Round(vrednost * Test_Length + 0.01));
            }

            var fitness = new TestFitness(oblasti, zastupljenost_kao_br_pitanja, 0);

            IGenerationStrategy generationStrategy = new PerformanceGenerationStrategy(3);
            var population = new TestPopulation(20, 50, adamTest, oblasti)
            {
                GenerationStrategy = generationStrategy
            };

            ISelection selection = new EliteSelection();

            ICrossover crossover = new TestCrossover(oblasti, zastupljenost_kao_br_pitanja, 8, 4);

            IMutation mutation = new TestMutation(oblasti, zastupljenost_kao_br_pitanja);

            ITermination termination = new OrTermination(new ITermination[] { new TestTermination(100, oblasti),
                                                                              new FitnessThresholdTermination(oblasti.Count),
                                                                              new GenerationNumberTermination(3000) });

            GeneticAlgorithm ga = new GeneticAlgorithm(population, fitness, selection, crossover, mutation)
            {
                Termination          = termination,
                CrossoverProbability = 1f,
                MutationProbability  = 0.7f
            };


            double      oldFitness = 0;
            List <Test> tests      = new List <Test>();

            //Callback
            ga.GenerationRan += (sender, arg) =>
            {
                if (ga.BestChromosome.Fitness >= oldFitness)
                {
                    oldFitness = ga.BestChromosome.Fitness.Value;
                    tests.Add(ga.BestChromosome as Test);
                    //Console.WriteLine($"Current fitness: {ga.BestChromosome.Fitness} for generation : {ga.GenerationsNumber}");
                }
            };

            ga.Start();

            if (oldFitness == 0)
            {
                return(null);
            }
            var  lista          = tests.Where(x => !x.HasDuplicate()).OrderByDescending(x => x.Fitness.Value).ToList();
            Test bestChromosome = lista.FirstOrDefault();

            foreach (var q in bestChromosome.questions)
            {
                q.Izabrano = true;
            }

            return(bestChromosome);
        }
Пример #5
0
        public static PerformanceGenerationStrategy PerformanceStrategy(int maxGenerations = 10)
        {
            PerformanceGenerationStrategy strategy = new PerformanceGenerationStrategy(maxGenerations);

            return(strategy);
        }