public EvolutionaryAlgorithmBuilderContinuousMO( Population population, DecisionSpace decisionSpace, HyperParameterManager hyperParameters, IParentSelectionOperator parentSelector, IRecombinationOperator recombinationOperator, IMutationOperator mutationOperator, IReinsertionOperator reinsertionOperator) { this.decisionSpace = decisionSpace; HyperParameters.AddFromExistingHyperParameterSet(hyperParameters); this.population = population; this.parentSelector = parentSelector; this.recombinationOperator = recombinationOperator; this.mutationOperator = mutationOperator; this.reinsertionOperator = reinsertionOperator; }
/// <summary> /// Creates an Evolutionary Algorithm. /// </summary> /// <param name="initialPopulation">The initial population (can be empty).</param> /// <param name="fitnessCalculator">A <see cref="FitnessCalculatorSingleObjective"/>. <see cref="Optimiser"/></param> /// <param name="initialIndividualGenerator">Creates new decision vectors to build the first population. <seealso cref="Base.Conversion.IModel"/></param> /// <param name="parentSelector">The <see cref="IParentSelectionOperator"/> to use.</param> /// <param name="recombinationOperator">The <see cref="IRecombinationOperator"/> to use.</param> /// <param name="mutationOperator">The <see cref="IMutationOperator"/> to use.</param> /// <param name="reinsertionOperator">The <see cref="IReinsertionOperator"/> to use.</param> /// <param name="hyperParameters">The <see cref="HyperParameterManager"/> object with relevant settings.</param> public EvolutionaryAlgorithm( Population initialPopulation, IFitnessCalculator fitnessCalculator, Func <DecisionVector> initialIndividualGenerator, IParentSelectionOperator parentSelector, IRecombinationOperator recombinationOperator, IMutationOperator mutationOperator, IReinsertionOperator reinsertionOperator, HyperParameterManager hyperParameters) : base(initialPopulation, fitnessCalculator) { this.initialIndividualGenerator = initialIndividualGenerator; this.parentSelector = parentSelector; numberOfParents = hyperParameters.GetHyperParameterValue <int>(EvolutionaryAlgorithmHyperParameters.Number_Of_Parents); this.recombinationOperator = recombinationOperator; this.mutationOperator = mutationOperator; this.reinsertionOperator = reinsertionOperator; }
public static OptimiserBuilder GetBuilder(DecisionSpace problemSpace, AvailableOperators.ParentSelector parentSelection, AvailableOperators.RecombinationOperator recombination, AvailableOperators.MutationOperators mutation, AvailableOperators.ReinsertionOperators reinsertion, int?populationSize = null) { var hyps = EvolutionaryAlgorithmHyperParameters.GetDefaultHyperParameters(); if (populationSize != null) { hyps.UpdateHyperParameterValue( EvolutionaryAlgorithmHyperParameters.Population_Size, populationSize); } var population = new Population( hyps.GetHyperParameterValue <int>(EvolutionaryAlgorithmHyperParameters.Population_Size)); IParentSelectionOperator parentSelector; switch (parentSelection) { case AvailableOperators.ParentSelector.Tournament: parentSelector = new ParentSelectionTournament( 20, false); break; case AvailableOperators.ParentSelector.Greedy: parentSelector = new ParentSelectionGreedy(); break; case AvailableOperators.ParentSelector.Random: parentSelector = new ParentSelectionRandom(); break; case AvailableOperators.ParentSelector.Roulette: parentSelector = new ParentSelectionRoulette( false); break; default: throw new NotImplementedException(); } IRecombinationOperator recombinationOperator; hyps.UpdateHyperParameterValue(EvolutionaryAlgorithmHyperParameters.Number_Of_Parents, 2); switch (recombination) { case AvailableOperators.RecombinationOperator.MultiPoint: recombinationOperator = new CrossoverMultiPoint( 2); break; case AvailableOperators.RecombinationOperator.ArithmeticTwoParentWeighted: recombinationOperator = new CrossoverArithmeticWeighted( false, 0.5); break; case AvailableOperators.RecombinationOperator.Sbx: recombinationOperator = new CrossoverSimulatedBinary( 2); break; case AvailableOperators.RecombinationOperator.SbxSa2: recombinationOperator = new CrossoverSimulatedBinarySelfAdaptive2( population, 2); break; case AvailableOperators.RecombinationOperator.ArithmeticMultiParent: recombinationOperator = new CrossoverArithmeticMultiParent(); hyps.UpdateHyperParameterValue( EvolutionaryAlgorithmHyperParameters.Number_Of_Parents, 4); break; case AvailableOperators.RecombinationOperator.Uniform: recombinationOperator = new CrossoverUniform( 0.5); break; case AvailableOperators.RecombinationOperator.Pcx: recombinationOperator = new RecombinationParentCentric( 0.1, 0.1); hyps.UpdateHyperParameterValue( EvolutionaryAlgorithmHyperParameters.Number_Of_Parents, 6); break; default: throw new NotImplementedException(); } IMutationOperator mutationOperator; switch (mutation) { case AvailableOperators.MutationOperators.AddRandomNumber: mutationOperator = new MutationAddRandomNumber( 0.1, 0.1, 1); break; case AvailableOperators.MutationOperators.RandomSwap: mutationOperator = new MutationRandomSwap( 0.1); break; case AvailableOperators.MutationOperators.ReplaceWithRandomNumber: mutationOperator = new MutationReplaceWithRandomNumber( 0.1, 1); break; case AvailableOperators.MutationOperators.None: mutationOperator = new MutationReplaceWithRandomNumber( 0, 1); break; default: throw new NotImplementedException(); } IReinsertionOperator reinsertionOperator; switch (reinsertion) { case AvailableOperators.ReinsertionOperators.ReplaceWorst: reinsertionOperator = new ReinsertionReplaceWorst(); break; case AvailableOperators.ReinsertionOperators.ReplaceRandom: reinsertionOperator = new ReinsertionReplaceRandom(); break; default: throw new NotImplementedException(); } return(new EvolutionaryAlgorithmBuilderContinuousSO(population, problemSpace, hyps, parentSelector, recombinationOperator, mutationOperator, reinsertionOperator)); }