/// <summary>
        /// Constructor for genetic algorithm.
        /// Genetic algorithms imitate natural biological processes,
        /// </summary>
        /// <param name="population">Init population. </param>
        /// <param name="fitness">Fitness.</param>
        /// <param name="selection">Selection operator.</param>
        /// <param name="xover">Xover operator.</param>
        /// <param name="mutation">Mutation operator.</param>
        /// <param name="elitizmus">Elitizmus.</param>
        /// <param name="termination">Termination GA.</param>
        /// <param name="executor">Executor.</param>
        /// <param name="mutationProbability">Mutation probability.</param>
        /// <param name="xoverProbability">Xover probability.</param>
        public GeneticAlgorithm(IPopulation population,
                                IFitness fitness,
                                ISelection selection,
                                IXover xover,
                                IMutation mutation,
                                IElite elitizmus,
                                ITermination termination,
                                IExecutor executor,
                                float mutationProbability,
                                float xoverProbability)
        {
            Population       = population;
            this.fitness     = fitness;
            this.selection   = selection;
            this.xover       = xover;
            this.mutation    = mutation;
            this.elitizmus   = elitizmus;
            this.executor    = executor;
            this.termination = termination;

            // base probability
            this.xoverProbability    = xoverProbability;
            this.mutationProbability = mutationProbability;
            TimeEvolving             = TimeSpan.Zero;
            CurrentGenerationsNumber = 1;
        }
 /// <summary>
 /// Evolutionary strategy
 /// </summary>
 /// <param name="fitness">fit. func.</param>
 /// <param name="population">init pop</param>
 public ES_μ_λ(IFitness fitness, IPopulation population) : base(fitness, population)
 {
     xover       = new XoverUniform();
     elite       = new EliteByFitness(0.1);
     selection   = new SelectionTournament();
     termination = new TerminationMaxNumberGeneration();
     termination.InitializeTerminationCondition(15_000);
     mutationProbability = 0.01f;
     xoverProbability    = 0.5f;
 }
Beispiel #3
0
        /// <summary>
        /// Creates a new population.
        /// </summary>
        /// <param name="population">The current population.</param>
        /// <param name="elite">The elite operator.</param>
        /// <param name="mutate">The mutate operator.</param>
        /// <param name="crossover">The crossover operator.</param>
        /// <param name="diversify">The diversify operator.</param>
        /// <returns></returns>
        public Population CreateNewPopulation(Population population, IElite elite, IMutate mutate, ICrossOver crossover, IDiversify diversify)
        {
            IChromosome parent1, parent2;
            IChromosome child1 = null, child2 = null;

            // create a new population
            var nextPopulation = new Population();

            // copy all elites to the new population
            elite?.Process(population, nextPopulation);

            // make sure the population is diversified enough
            diversify?.Process(nextPopulation, population.Count);

            // while next population is not filled completely
            while (nextPopulation.Count < population.Count)
            {
                // select 2 parents
                DoTournament(population, out parent1, out parent2);

                // perform crossover so we get 2 children
                crossover?.Process(parent1, parent2, out child1, out child2);

                // mutate both children
                mutate?.Process(child1);
                mutate?.Process(child2);

                // and add the children to the next population
                nextPopulation.Add(child1);
                if (nextPopulation.Count < population.Count)
                {
                    nextPopulation.Add(child2);
                }
            }
            return(nextPopulation);
        }
 /// <summary>
 /// Adds the specified elite operator
 /// </summary>
 /// <param name="elite">The elite operator</param>
 public void Add(IElite elite)
 {
     _elite = elite;
 }