/// <summary> /// Initializes a new instance of a GeneticAlgorithm. /// </summary> /// <param name="mutationFunction">Mutation function to apply during evolution.</param> /// <param name="crossoverFunction">Crossover Function used during evolution.</param> /// <param name="selectionFunction">Selection Function used in chromosome selection.</param> /// <param name="pairingFunction">Pairing function used to select pairs of chromosomes during crossover.</param> public GeneticAlgorithm(IMutationFunction mutationFunction, ICrossoverFunction crossoverFunction, ISelectionFunction selectionFunction, IPairingFunction pairingFunction) { this.Mutation = mutationFunction; this.Crossover = crossoverFunction; this.Selection = selectionFunction; this.Pairing = pairingFunction; }
/// <summary> /// Adds a mutation function to the chain. /// <para>The mutator is required to handle sequence ranges.</para> /// </summary> /// <param name="mutator">Mutation function.</param> /// <returns></returns> public MutationChain Add(IMutationFunction mutator) { var mutations = new List <IMutationFunction>(this.Mutations) { mutator }; return(new MutationChain(mutations, this.SequenceLength)); }
/// <summary> /// Initializes the genetic pool using the specified seed and mutation functions. /// </summary> /// <param name="poolSize">Size of the pool to create.</param> /// <param name="seed">Starting seed value.</param> /// <param name="seedMutator">Mutator used during initialization of the pool.</param> /// <param name="fitnessMetric">Fitness function for evaluating chromosomes.</param> /// <param name="fitnessMode">Fitness mode.</param> public Population(int poolSize, IChromosome seed, IMutationFunction seedMutator, IFitnessMetric fitnessMetric, FitnessMode fitnessMode) : this(poolSize, () => seedMutator.Mutate(seed), fitnessMetric, fitnessMode) { }