public void Configure(IFitness fItness, IMutate mutate, ICrossover crossover, ISelection selection) { Mutate = mutate; Crossover = crossover; Fitness = fItness; Selection = selection; }
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(); }
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; }
/// <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); }
/// <summary> /// Adds the specified mutate operator /// </summary> /// <param name="elite">The mutate operator</param> public void Add(IMutate mutate) { _mutate = mutate; }