Esempio n. 1
0
 public void Configure(IFitness fItness, IMutate mutate, ICrossover crossover, ISelection selection)
 {
     Mutate    = mutate;
     Crossover = crossover;
     Fitness   = fItness;
     Selection = selection;
 }
Esempio n. 2
0
        public GeneticAlgorithmBuilder <U> SetMutator(IMutate <U> mutator)
        {
            Contract.Requires <ArgumentNullException>(mutator != null, "Argument cannot be null.");

            Mutator = mutator;

            return(this);
        }
        public EliminationGeneticAlgorithm(IMutate <Chromosome> mutation, ISelection <Chromosome> selection, ICrossover <Chromosome> crossover,
                                           IFitnessFunction <Chromosome> fitnessFunction, int iterationLimit, double fitnessTerminator, int populationSize, int chromosomeSize)
            : base(mutation, selection, crossover, fitnessFunction, iterationLimit, fitnessTerminator, populationSize)
        {
            Population     = new Population <Chromosome>(populationSize);
            ChromosomeSize = chromosomeSize;

            InitializePopulation();
        }
Esempio n. 4
0
 protected GeneticAlgorithm(IMutate <T> mutation, ISelection <T> selection, ICrossover <T> crossover,
                            IFitnessFunction <T> fitnessFunction, int iterationLimit, double fitnessTerminator, int populationSize)
 {
     Mutation          = mutation;
     Selection         = selection;
     Crossover         = crossover;
     FitnessFunction   = fitnessFunction;
     IterationLimit    = iterationLimit;
     FitnessTerminator = fitnessTerminator;
     PopulationSize    = populationSize;
 }
Esempio n. 5
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);
        }
        public static IFinder GetGAImplementation(ICrossover crossover = null, IMutate mutate = null, IFitness fitness = null, ISelection selection = null, int populationSize = 0, int generationLimit = 0, int solutionsToPick = 0)
        {
            var result = new GAFinder();

            result.Configure(fitness, mutate, crossover, selection);


            if (populationSize > 0)
            {
                result.PopulationSize = populationSize;
            }

            if (generationLimit > 0)
            {
                result.GenerationLimit = generationLimit;
            }

            if (solutionsToPick > 0)
            {
                result.BestSolutionToPick = solutionsToPick;
            }

            return(result);
        }
Esempio n. 7
0
 /// <summary>
 /// Adds the specified mutate operator
 /// </summary>
 /// <param name="elite">The mutate operator</param>
 public void Add(IMutate mutate)
 {
     _mutate = mutate;
 }