private CMAEvolutionStrategy(CMAEvolutionStrategy original, Cloner cloner) : base(original, cloner) { qualityAnalyzer = cloner.Clone(original.qualityAnalyzer); cmaAnalyzer = cloner.Clone(original.cmaAnalyzer); solutionCreator = cloner.Clone(original.solutionCreator); populationSolutionCreator = cloner.Clone(original.populationSolutionCreator); evaluator = cloner.Clone(original.evaluator); sorter = cloner.Clone(original.sorter); terminator = cloner.Clone(original.terminator); RegisterEventHandlers(); }
public CMAEvolutionStrategy() : base() { Parameters.Add(new FixedValueParameter <IntValue>(SeedName, "The random seed used to initialize the new pseudo random number generator.", new IntValue(0))); Parameters.Add(new FixedValueParameter <BoolValue>(SetSeedRandomlyName, "True if the random seed should be set to a random value, otherwise false.", new BoolValue(true))); Parameters.Add(new FixedValueParameter <IntValue>(PopulationSizeName, "λ (lambda) - the size of the offspring population.", new IntValue(20))); Parameters.Add(new FixedValueParameter <IntValue>(InitialIterationsName, "The number of iterations that should be performed with only axis parallel mutation.", new IntValue(0))); Parameters.Add(new FixedValueParameter <DoubleArray>(InitialSigmaName, "The initial sigma can be a single value or a value for each dimension. All values need to be > 0.", new DoubleArray(new[] { 0.5 }))); Parameters.Add(new OptionalValueParameter <IntValue>(MuName, "Optional, the mu best offspring that should be considered for update of the new mean and strategy parameters. If not given it will be automatically calculated.")); Parameters.Add(new ConstrainedValueParameter <ICMARecombinator>(CMARecombinatorName, "The operator used to calculate the new mean.")); Parameters.Add(new ConstrainedValueParameter <ICMAManipulator>(CMAMutatorName, "The operator used to manipulate a point.")); Parameters.Add(new ConstrainedValueParameter <ICMAInitializer>(CMAInitializerName, "The operator that initializes the covariance matrix and strategy parameters.")); Parameters.Add(new ConstrainedValueParameter <ICMAUpdater>(CMAUpdaterName, "The operator that updates the covariance matrix and strategy parameters.")); Parameters.Add(new ValueParameter <MultiAnalyzer>(AnalyzerName, "The operator used to analyze each generation.", new MultiAnalyzer())); Parameters.Add(new FixedValueParameter <IntValue>(MaximumGenerationsName, "The maximum number of generations which should be processed.", new IntValue(1000))); Parameters.Add(new FixedValueParameter <IntValue>(MaximumEvaluatedSolutionsName, "The maximum number of evaluated solutions that should be computed.", new IntValue(int.MaxValue))); Parameters.Add(new FixedValueParameter <DoubleValue>(TargetQualityName, "(stopFitness) Surpassing this quality value terminates the algorithm.", new DoubleValue(double.NaN))); Parameters.Add(new FixedValueParameter <DoubleValue>(MinimumQualityChangeName, "(stopTolFun) If the range of fitness values is less than a certain value the algorithm terminates (set to 0 or positive value to enable).", new DoubleValue(double.NaN))); Parameters.Add(new FixedValueParameter <DoubleValue>(MinimumQualityHistoryChangeName, "(stopTolFunHist) If the range of fitness values is less than a certain value for a certain time the algorithm terminates (set to 0 or positive to enable).", new DoubleValue(double.NaN))); Parameters.Add(new FixedValueParameter <DoubleValue>(MinimumStandardDeviationName, "(stopTolXFactor) If the standard deviation falls below a certain value the algorithm terminates (set to 0 or positive to enable).", new DoubleValue(double.NaN))); Parameters.Add(new FixedValueParameter <DoubleValue>(MaximumStandardDeviationChangeName, "(stopTolUpXFactor) If the standard deviation changes by a value larger than this parameter the algorithm stops (set to a value > 0 to enable).", new DoubleValue(double.NaN))); var randomCreator = new RandomCreator(); var variableCreator = new VariableCreator(); var resultsCollector = new ResultsCollector(); var cmaInitializer = new Placeholder(); solutionCreator = new Placeholder(); var subScopesCreator = new SubScopesCreator(); var ussp1 = new UniformSubScopesProcessor(); populationSolutionCreator = new Placeholder(); var cmaMutator = new Placeholder(); var ussp2 = new UniformSubScopesProcessor(); evaluator = new Placeholder(); var subScopesCounter = new SubScopesCounter(); sorter = new SubScopesSorter(); var analyzer = new Placeholder(); var cmaRecombinator = new Placeholder(); var generationsCounter = new IntCounter(); var cmaUpdater = new Placeholder(); terminator = new Terminator(); OperatorGraph.InitialOperator = randomCreator; randomCreator.RandomParameter.ActualName = "Random"; randomCreator.SeedParameter.ActualName = SeedParameter.Name; randomCreator.SeedParameter.Value = null; randomCreator.SetSeedRandomlyParameter.ActualName = SetSeedRandomlyParameter.Name; randomCreator.SetSeedRandomlyParameter.Value = null; randomCreator.Successor = variableCreator; variableCreator.Name = "Initialize Variables"; variableCreator.CollectedValues.Add(new ValueParameter <IntValue>("EvaluatedSolutions", new IntValue(0))); variableCreator.CollectedValues.Add(new ValueParameter <IntValue>("Generations", new IntValue(0))); variableCreator.Successor = resultsCollector; resultsCollector.CollectedValues.Add(new LookupParameter <IntValue>("EvaluatedSolutions")); resultsCollector.CollectedValues.Add(new LookupParameter <IntValue>("Generations")); resultsCollector.ResultsParameter.ActualName = "Results"; resultsCollector.Successor = cmaInitializer; cmaInitializer.Name = "Initialize Strategy Parameters"; cmaInitializer.OperatorParameter.ActualName = CMAInitializerParameter.Name; cmaInitializer.Successor = subScopesCreator; subScopesCreator.NumberOfSubScopesParameter.ActualName = PopulationSizeParameter.Name; subScopesCreator.Successor = ussp1; ussp1.Name = "Create population"; ussp1.Parallel = new BoolValue(false); ussp1.Operator = populationSolutionCreator; ussp1.Successor = solutionCreator; populationSolutionCreator.Name = "Initialize arx"; // populationSolutionCreator.OperatorParameter will be wired populationSolutionCreator.Successor = null; solutionCreator.Name = "Initialize xmean"; // solutionCreator.OperatorParameter will be wired solutionCreator.Successor = cmaMutator; cmaMutator.Name = "Sample population"; cmaMutator.OperatorParameter.ActualName = CMAMutatorParameter.Name; cmaMutator.Successor = ussp2; ussp2.Name = "Evaluate offspring"; ussp2.Parallel = new BoolValue(true); ussp2.Operator = evaluator; ussp2.Successor = subScopesCounter; evaluator.Name = "Evaluator"; // evaluator.OperatorParameter will be wired evaluator.Successor = null; subScopesCounter.Name = "Count EvaluatedSolutions"; subScopesCounter.AccumulateParameter.Value = new BoolValue(true); subScopesCounter.ValueParameter.ActualName = "EvaluatedSolutions"; subScopesCounter.Successor = sorter; // sorter.ValueParameter will be wired // sorter.DescendingParameter will be wired sorter.Successor = analyzer; analyzer.Name = "Analyzer"; analyzer.OperatorParameter.ActualName = AnalyzerParameter.Name; analyzer.Successor = cmaRecombinator; cmaRecombinator.Name = "Create new xmean"; cmaRecombinator.OperatorParameter.ActualName = CMARecombinatorParameter.Name; cmaRecombinator.Successor = generationsCounter; generationsCounter.Name = "Generations++"; generationsCounter.IncrementParameter.Value = new IntValue(1); generationsCounter.ValueParameter.ActualName = "Generations"; generationsCounter.Successor = cmaUpdater; cmaUpdater.Name = "Update distributions"; cmaUpdater.OperatorParameter.ActualName = CMAUpdaterParameter.Name; cmaUpdater.Successor = terminator; terminator.Continue = cmaMutator; terminator.Terminate = null; qualityAnalyzer = new BestAverageWorstQualityAnalyzer(); cmaAnalyzer = new CMAAnalyzer(); InitializeOperators(); RegisterEventHandlers(); Parameterize(); }
protected Terminator(Terminator original, Cloner cloner) : base(original, cloner) { }