コード例 #1
0
 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;
 }
コード例 #2
0
 /// <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;
 }
コード例 #3
0
        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));
        }