#region License Information /* HeuristicLab * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL) * * This file is part of HeuristicLab. * * HeuristicLab is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * HeuristicLab is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with HeuristicLab. If not, see . */ #endregion using HeuristicLab.Common; using HeuristicLab.Core; using HeuristicLab.Data; using HeuristicLab.Encodings.ConditionActionEncoding; using HeuristicLab.Encodings.IntegerVectorEncoding; using HeuristicLab.Operators; using HeuristicLab.Optimization; using HeuristicLab.Optimization.Operators; using HeuristicLab.Parameters; using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; using HeuristicLab.Selection; namespace HeuristicLab.Algorithms.LearningClassifierSystems { /// /// An operator which represents the main loop of a learning classifier system. /// [Item("LearningClassifierSystemMainLoop", "An operator which represents the main loop of a learning classifier system.")] [StorableClass] public sealed class LearningClassifierSystemMainLoop : AlgorithmOperator { #region Parameter Properties public IConstrainedValueParameter SelectorParameter { get { return (IConstrainedValueParameter)Parameters["Selector"]; } } public IConstrainedValueParameter CrossoverParameter { get { return (IConstrainedValueParameter)Parameters["Crossover"]; } } public IConstrainedValueParameter MutatorParameter { get { return (IConstrainedValueParameter)Parameters["Mutator"]; } } public IConstrainedValueParameter AfterCrossoverParameter { get { return (IConstrainedValueParameter)Parameters["AfterCrossover"]; } } #endregion #region private properties private SolutionsCreator initialSolutionsCreator; private MatchConditionOperator matchConditionOperator; private PredictionArrayCalculator predictionArrayCalculator; private ActionSelector actionSelector; private DoDeletionBeforeCoveringOperator doDeletionBeforeCovering; private CoveringOperator covering; private ConditionalSelector subsumptionSelector; private Placeholder evaluator; private Placeholder actionExecuter; private Placeholder classifierFetcher; private Placeholder actionSetSubsumption; #endregion [StorableConstructor] private LearningClassifierSystemMainLoop(bool deserializing) : base(deserializing) { } private LearningClassifierSystemMainLoop(LearningClassifierSystemMainLoop original, Cloner cloner) : base(original, cloner) { } public override IDeepCloneable Clone(Cloner cloner) { return new LearningClassifierSystemMainLoop(this, cloner); } public LearningClassifierSystemMainLoop() : base() { Initialize(); } private void Initialize() { #region Create parameters Parameters.Add(new ConstrainedValueParameter("Selector", "The operator used to select solutions for reproduction.", new ItemSet() { new ProportionalSelector() }, new ProportionalSelector())); Parameters.Add(new ConstrainedValueParameter("Crossover", "The operator used to cross solutions.", new ItemSet() { new HeuristicLab.Encodings.CombinedIntegerVectorEncoding.SinglePointCrossover() }, new HeuristicLab.Encodings.CombinedIntegerVectorEncoding.SinglePointCrossover())); Parameters.Add(new ValueLookupParameter("Evaluator", "The operator used to evaluate solutions. This operator is executed in parallel, if an engine is used which supports parallelization.")); UniformOnePositionManipulator test = new UniformOnePositionManipulator(); test.IntegerVectorParameter.ActualName = "CombinedIntegerVector"; Parameters.Add(new OptionalConstrainedValueParameter("Mutator", "The operator used to mutate solutions.", new ItemSet() { new UniformOnePositionManipulator() }, test)); XCSAfterCrossoverOperator afterCrossover = new XCSAfterCrossoverOperator(); Parameters.Add(new ConstrainedValueParameter("AfterCrossover", "The operator used to select solutions for reproduction.", new ItemSet() { new XCSAfterCrossoverOperator() }, afterCrossover)); #endregion #region Create operators VariableCreator variableCreator = new VariableCreator(); ConditionalBranch initialPopulationConditionalBranch = new ConditionalBranch(); initialSolutionsCreator = new SolutionsCreator(); Assigner initialPopulationSizeAssigner = new Assigner(); IntCounter iterationCounter = new IntCounter(); UniformSubScopesProcessor matchCondtionSubScopesProcessor = new UniformSubScopesProcessor(); matchConditionOperator = new MatchConditionOperator(); predictionArrayCalculator = new PredictionArrayCalculator(); actionSelector = new ActionSelector(); UniformSubScopesProcessor matchActionSubScopesProcessor = new UniformSubScopesProcessor(); MatchActionOperator matchActionOperator = new MatchActionOperator(); ConditionalSelector conditionMatchSelector = new ConditionalSelector(); ConditionalSelector actionMatchSelector = new ConditionalSelector(); SubScopesProcessor matchSetSubScopesProcessor = new SubScopesProcessor(); CountNumberOfUniqueActions countNumberOfUniqueActions = new CountNumberOfUniqueActions(); doDeletionBeforeCovering = new DoDeletionBeforeCoveringOperator(); ConditionalBranch doDeletionBeforeCoveringConditionalBranch = new ConditionalBranch(); MergingReducer matchSetMergingReducerForDeletion = new MergingReducer(); SubScopeVariableCopier subscopeVariableCopier = new SubScopeVariableCopier(); XCSDeletionOperator deletionOperator = new XCSDeletionOperator(); ConditionalSelector deletionSelector = new ConditionalSelector(); LeftReducer leftReducerAfterDeletionSelection = new LeftReducer(); UniformSubScopesProcessor matchConditionAfterDeletionSubScopesProcessor = new UniformSubScopesProcessor(); ConditionalSelector conditionMatchSelectorAfterDeletion = new ConditionalSelector(); SubScopesProcessor matchSetAfterDeletionSubScopesProcessor = new SubScopesProcessor(); CountNumberOfUniqueActions countNumberOfUniqueActionsAfterDeletion = new CountNumberOfUniqueActions(); SubScopesProcessor coveringAfterDeletionSubScopesProcessor = new SubScopesProcessor(); covering = new CoveringOperator(); MergingReducer actionSetMergingReducer = new MergingReducer(); MergingReducer matchSetMergingReducer = new MergingReducer(); evaluator = new Placeholder(); SubScopesProcessor actionSetSubScopesProcessor = new SubScopesProcessor(); DataReducer actionSetSizeDataReducer = new DataReducer(); UniformSubScopesProcessor accuracySubScopesProcessor = new UniformSubScopesProcessor(); CalculateAccuracy calculateAccuracy = new CalculateAccuracy(); SumAccuracy sumAccuracy = new SumAccuracy(); UniformSubScopesProcessor updateParametersSubScopesProcessor = new UniformSubScopesProcessor(); ConditionalBranch actionSetSubsumptionBranch = new ConditionalBranch(); subsumptionSelector = new ConditionalSelector(); LeftReducer leftReducer = new LeftReducer(); XCSCheckIfGAShouldBeApplied checkIfGAShouldRun = new XCSCheckIfGAShouldBeApplied(); ConditionalBranch runGAConditionalBranch = new ConditionalBranch(); UniformSubScopesProcessor timestampAssignerSubscopeProcessor = new UniformSubScopesProcessor(); Assigner timestampAssigner = new Assigner(); LCSAdaptedGeneticAlgorithm adaptedGeneticAlgorithmMainLoop = new LCSAdaptedGeneticAlgorithm(); IntCounter currentPopulationSizeCounter = new IntCounter(); CalculateNumberOfDeletionsOperator calculateNumberOfDeletions = new CalculateNumberOfDeletionsOperator(); XCSDeletionOperator deletionOperatorAfterGA = new XCSDeletionOperator(); ConditionalSelector deletionSelectorAfterGA = new ConditionalSelector(); LeftReducer leftReducerAfterGA = new LeftReducer(); classifierFetcher = new Placeholder(); actionExecuter = new Placeholder(); actionSetSubsumption = new Placeholder(); variableCreator.CollectedValues.Add(new ValueParameter("ZeroIntValue", new IntValue(0))); variableCreator.CollectedValues.Add(new ValueParameter("OneIntValue", new IntValue(1))); variableCreator.CollectedValues.Add(new ValueParameter("Iteration", new IntValue(0))); variableCreator.CollectedValues.Add(new ValueParameter("CurrentPopulationSize", new IntValue(0))); initialPopulationConditionalBranch.ConditionParameter.ActualName = "CreateInitialPopulation"; initialSolutionsCreator.NumberOfSolutionsParameter.ActualName = "N"; initialPopulationSizeAssigner.LeftSideParameter.ActualName = "CurrentPopulationSize"; initialPopulationSizeAssigner.RightSideParameter.ActualName = "N"; iterationCounter.ValueParameter.ActualName = "Iteration"; iterationCounter.IncrementParameter.ActualName = "OneIntValue"; matchConditionOperator.MatchParameter.ActualName = "CombinedIntegerVector"; conditionMatchSelector.CopySelected = new BoolValue(false); conditionMatchSelector.ConditionParameter.ActualName = "MatchCondition"; conditionMatchSelectorAfterDeletion.CopySelected = new BoolValue(false); conditionMatchSelectorAfterDeletion.ConditionParameter.ActualName = "MatchCondition"; countNumberOfUniqueActions.ClassifiersParameter.ActualName = "CombinedIntegerVector"; countNumberOfUniqueActionsAfterDeletion.ClassifiersParameter.ActualName = "CombinedIntegerVector"; subscopeVariableCopier.SubScopeIndexParameter.Value = new IntValue(1); doDeletionBeforeCovering.CurrentPopulationSizeParameter.ActualName = "CurrentPopulationSize"; doDeletionBeforeCovering.NumberOfUniqueActionsParameter.ActualName = countNumberOfUniqueActions.NumberOfUniqueActionsParameter.ActualName; doDeletionBeforeCovering.PopulationSizeParameter.ActualName = "N"; doDeletionBeforeCoveringConditionalBranch.ConditionParameter.ActualName = doDeletionBeforeCovering.DoDeletionParameter.ActualName; deletionOperator.NumberToDeleteParameter.ActualName = doDeletionBeforeCovering.NumberToDeleteParameter.ActualName; deletionOperator.AverageActionSetSizesParameter.ActualName = "AverageActionSetSize"; deletionOperator.FitnessesParameter.ActualName = "Fitness"; deletionOperator.NumerositiesParameter.ActualName = "Numerosity"; deletionOperator.ExperiencesParameter.ActualName = "Experience"; deletionOperator.ThetaDeletionParameter.ActualName = "ThetaDeletion"; deletionOperator.DeltaParameter.ActualName = "Delta"; deletionOperator.RandomParameter.ActualName = "Random"; deletionSelector.ConditionParameter.ActualName = deletionOperator.HasToBeDeletedVariableName; deletionSelector.CopySelected = new BoolValue(false); covering.ActionsInMatchSetParameter.ActualName = countNumberOfUniqueActions.UniqueActionsParameter.ActualName; covering.ParallelParameter.Value.Value = true; covering.RandomParameter.ActualName = "Random"; covering.CurrentPopulationSizeParameter.ActualName = "CurrentPopulationSize"; matchActionSubScopesProcessor.Operator = matchActionOperator; matchActionOperator.MatchParameter.ActualName = "CombinedIntegerVector"; matchActionOperator.TargetMatchParameter.ActualName = actionSelector.SelectedActionParameter.ActualName; predictionArrayCalculator.MatchParameter.ActualName = "CombinedIntegerVector"; actionSelector.PredictionArrayParameter.ActualName = predictionArrayCalculator.PredictionArrayParameter.Name; actionSelector.RandomParameter.ActualName = "Random"; actionSelector.ExplorationProbabilityParameter.ActualName = "ExplorationProbability"; actionMatchSelector.CopySelected = new BoolValue(false); actionMatchSelector.ConditionParameter.ActualName = "MatchAction"; actionSetSubsumptionBranch.ConditionParameter.ActualName = "DoActionSetSubsumption"; subsumptionSelector.CopySelected = new BoolValue(false); SelectorParameter.Value.CopySelected = new BoolValue(true); SelectorParameter.Value.NumberOfSelectedSubScopesParameter.Value = new IntValue(4); evaluator.Name = "Evaluator"; classifierFetcher.Name = "ClassifierFetcher"; actionExecuter.Name = "ActionExecuter"; actionSetSizeDataReducer.TargetParameter.ActualName = "CurrentActionSetSize"; actionSetSizeDataReducer.ParameterToReduce.ActualName = "Numerosity"; actionSetSizeDataReducer.ReductionOperation.Value = new ReductionOperation(ReductionOperations.Sum); actionSetSizeDataReducer.TargetOperation.Value = new ReductionOperation(ReductionOperations.Assign); calculateAccuracy.AlphaParameter.ActualName = "Alpha"; calculateAccuracy.ErrorParameter.ActualName = "Error"; calculateAccuracy.ErrorZeroParameter.ActualName = "ErrorZero"; calculateAccuracy.PowerParameter.ActualName = "v"; sumAccuracy.AccuracyParameter.ActualName = calculateAccuracy.AccuracyParameter.ActualName; sumAccuracy.NumerosityParameter.ActualName = "Numerosity"; //BEGIN parameters have to be set differently checkIfGAShouldRun.TimeStampsParameter.ActualName = "Timestamp"; checkIfGAShouldRun.NumerositiesParameter.ActualName = "Numerosity"; checkIfGAShouldRun.ThetaGAParameter.ActualName = "ThetaGA"; //END checkIfGAShouldRun.IterationParameter.ActualName = iterationCounter.ValueParameter.ActualName; runGAConditionalBranch.ConditionParameter.ActualName = checkIfGAShouldRun.RunGAParameter.ActualName; timestampAssigner.LeftSideParameter.ActualName = "Timestamp"; timestampAssigner.RightSideParameter.ActualName = iterationCounter.ValueParameter.ActualName; afterCrossover.NumerosityParameter.ActualName = "Numerosity"; afterCrossover.ExperienceParameter.ActualName = "Experience"; afterCrossover.TimestampParameter.ActualName = "Timestamp"; afterCrossover.CurrentIterationParameter.ActualName = "Iteration"; afterCrossover.FitnessParameter.ActualName = "Fitness"; afterCrossover.AverageActionSetSizeParameter.ActualName = "AverageActionSetSize"; afterCrossover.PredictionParameter.ActualName = "Prediction"; afterCrossover.ErrorParameter.ActualName = "Error"; afterCrossover.ParentFitnessParameter.ActualName = "Fitness"; afterCrossover.ParentErrorParameter.ActualName = "Error"; afterCrossover.ParentPredictionParameter.ActualName = "Prediction"; afterCrossover.ParentAverageActionSetSizeParameter.ActualName = "AverageActionSetSize"; adaptedGeneticAlgorithmMainLoop.SelectorParameter.ActualName = SelectorParameter.Name; adaptedGeneticAlgorithmMainLoop.CrossoverParameter.ActualName = CrossoverParameter.Name; adaptedGeneticAlgorithmMainLoop.MutatorParameter.ActualName = MutatorParameter.Name; adaptedGeneticAlgorithmMainLoop.RandomParameter.ActualName = "Random"; adaptedGeneticAlgorithmMainLoop.MaximumGenerationsParameter.ActualName = "ZeroIntValue"; adaptedGeneticAlgorithmMainLoop.QualityParameter.ActualName = "Fitness"; adaptedGeneticAlgorithmMainLoop.MutationProbabilityParameter.Value = new PercentValue(10); adaptedGeneticAlgorithmMainLoop.MaximizationParameter.Value = new BoolValue(true); adaptedGeneticAlgorithmMainLoop.AfterCrossoverParameter.ActualName = AfterCrossoverParameter.Name; currentPopulationSizeCounter.ValueParameter.ActualName = "CurrentPopulationSize"; currentPopulationSizeCounter.Increment = new IntValue(2); calculateNumberOfDeletions.CurrentPopulationSizeParameter.ActualName = "CurrentPopulationSize"; calculateNumberOfDeletions.PopulationSizeParameter.ActualName = "N"; deletionOperatorAfterGA.NumberToDeleteParameter.ActualName = calculateNumberOfDeletions.NumberOfDeletionsParameter.ActualName; deletionOperatorAfterGA.AverageActionSetSizesParameter.ActualName = "AverageActionSetSize"; deletionOperatorAfterGA.FitnessesParameter.ActualName = "Fitness"; deletionOperatorAfterGA.NumerositiesParameter.ActualName = "Numerosity"; deletionOperatorAfterGA.ExperiencesParameter.ActualName = "Experience"; deletionOperatorAfterGA.ThetaDeletionParameter.ActualName = "ThetaDeletion"; deletionOperatorAfterGA.DeltaParameter.ActualName = "Delta"; deletionOperatorAfterGA.RandomParameter.ActualName = "Random"; deletionSelectorAfterGA.ConditionParameter.ActualName = deletionOperatorAfterGA.HasToBeDeletedVariableName; deletionSelectorAfterGA.CopySelected = new BoolValue(false); #endregion #region Create operator graph OperatorGraph.InitialOperator = variableCreator; variableCreator.Successor = initialPopulationConditionalBranch; initialPopulationConditionalBranch.TrueBranch = initialSolutionsCreator; initialSolutionsCreator.Successor = initialPopulationSizeAssigner; initialPopulationConditionalBranch.FalseBranch = new EmptyOperator(); initialPopulationConditionalBranch.Successor = classifierFetcher; classifierFetcher.Successor = matchCondtionSubScopesProcessor; matchCondtionSubScopesProcessor.Operator = matchConditionOperator; matchCondtionSubScopesProcessor.Successor = conditionMatchSelector; conditionMatchSelector.Successor = matchSetSubScopesProcessor; matchSetSubScopesProcessor.Operators.Add(new EmptyOperator()); matchSetSubScopesProcessor.Operators.Add(countNumberOfUniqueActions); matchSetSubScopesProcessor.Successor = subscopeVariableCopier; subscopeVariableCopier.Successor = doDeletionBeforeCovering; doDeletionBeforeCovering.Successor = doDeletionBeforeCoveringConditionalBranch; doDeletionBeforeCoveringConditionalBranch.TrueBranch = matchSetMergingReducerForDeletion; matchSetMergingReducerForDeletion.Successor = deletionOperator; deletionOperator.Successor = deletionSelector; deletionSelector.Successor = leftReducerAfterDeletionSelection; leftReducerAfterDeletionSelection.Successor = matchConditionAfterDeletionSubScopesProcessor; doDeletionBeforeCoveringConditionalBranch.FalseBranch = coveringAfterDeletionSubScopesProcessor; coveringAfterDeletionSubScopesProcessor.Operators.Add(new EmptyOperator()); coveringAfterDeletionSubScopesProcessor.Operators.Add(covering); coveringAfterDeletionSubScopesProcessor.Successor = matchSetMergingReducer; matchConditionAfterDeletionSubScopesProcessor.Operator = matchConditionOperator; matchConditionAfterDeletionSubScopesProcessor.Successor = conditionMatchSelectorAfterDeletion; conditionMatchSelectorAfterDeletion.Successor = matchSetAfterDeletionSubScopesProcessor; matchSetAfterDeletionSubScopesProcessor.Operators.Add(new EmptyOperator()); matchSetAfterDeletionSubScopesProcessor.Operators.Add(countNumberOfUniqueActionsAfterDeletion); matchSetAfterDeletionSubScopesProcessor.Successor = matchSetMergingReducer; countNumberOfUniqueActionsAfterDeletion.Successor = covering; covering.Successor = predictionArrayCalculator; predictionArrayCalculator.Successor = actionSelector; actionSelector.Successor = matchActionSubScopesProcessor; matchActionSubScopesProcessor.Successor = actionMatchSelector; actionMatchSelector.Successor = actionExecuter; actionExecuter.Successor = actionSetSubScopesProcessor; actionSetSubScopesProcessor.Operators.Add(new EmptyOperator()); actionSetSubScopesProcessor.Operators.Add(actionSetSizeDataReducer); actionSetSizeDataReducer.Successor = accuracySubScopesProcessor; accuracySubScopesProcessor.Operator = calculateAccuracy; accuracySubScopesProcessor.Successor = sumAccuracy; sumAccuracy.Successor = updateParametersSubScopesProcessor; updateParametersSubScopesProcessor.Operator = evaluator; updateParametersSubScopesProcessor.Successor = actionSetSubsumptionBranch; actionSetSubsumptionBranch.TrueBranch = actionSetSubsumption; actionSetSubsumption.Successor = subsumptionSelector; subsumptionSelector.Successor = leftReducer; actionSetSubsumptionBranch.FalseBranch = new EmptyOperator(); actionSetSubsumptionBranch.Successor = checkIfGAShouldRun; checkIfGAShouldRun.Successor = runGAConditionalBranch; runGAConditionalBranch.TrueBranch = timestampAssignerSubscopeProcessor; runGAConditionalBranch.FalseBranch = new EmptyOperator(); timestampAssignerSubscopeProcessor.Operator = timestampAssigner; timestampAssignerSubscopeProcessor.Successor = adaptedGeneticAlgorithmMainLoop; adaptedGeneticAlgorithmMainLoop.Successor = currentPopulationSizeCounter; actionSetSubScopesProcessor.Successor = actionSetMergingReducer; matchSetMergingReducer.Successor = calculateNumberOfDeletions; calculateNumberOfDeletions.Successor = deletionOperatorAfterGA; deletionOperatorAfterGA.Successor = deletionSelectorAfterGA; deletionSelectorAfterGA.Successor = leftReducerAfterGA; leftReducerAfterGA.Successor = iterationCounter; iterationCounter.Successor = classifierFetcher; #endregion } private void ParameterizeStochasticOperator(IOperator op) { IStochasticOperator stochasticOp = op as IStochasticOperator; if (stochasticOp != null) { stochasticOp.RandomParameter.ActualName = "Random"; stochasticOp.RandomParameter.Hidden = true; } } internal void SetCurrentProblem(IConditionActionProblem problem) { initialSolutionsCreator.SolutionCreatorParameter.ActualName = problem.SolutionCreatorParameter.Name; initialSolutionsCreator.EvaluatorParameter.ActualName = problem.EvaluatorParameter.Name; problem.ActionExecuter.SelectedActionParameter.ActualName = actionSelector.SelectedActionParameter.ActualName; problem.ClassifierFetcher.IterationParameter.ActualName = "Iteration"; evaluator.OperatorParameter.ActualName = problem.EvaluatorParameter.Name; classifierFetcher.OperatorParameter.ActualName = problem.ClassifierFetcherParameter.Name; actionExecuter.OperatorParameter.ActualName = problem.ActionExecuterParameter.Name; problem.ActionSetSubsumptionOperator.ThetaSubsumptionParameter.ActualName = "ThetaSubsumption"; problem.ActionSetSubsumptionOperator.ErrorsParameter.ActualName = "Error"; problem.ActionSetSubsumptionOperator.ErrorZeroParameter.ActualName = "ErrorZero"; problem.ActionSetSubsumptionOperator.ExperiencesParameter.ActualName = "Experience"; problem.ActionSetSubsumptionOperator.NumerositiesParameter.ActualName = "Numerosity"; subsumptionSelector.ConditionParameter.ActualName = problem.ActionSetSubsumptionOperator.HasBeenSubsumedParameterName; actionSetSubsumption.OperatorParameter.ActualName = problem.ActionSetSubsumptionOperatorParameter.Name; matchConditionOperator.TargetMatchParameter.ActualName = problem.ClassifierFetcher.CurrentClassifierToMatchParameter.ActualName; doDeletionBeforeCovering.MinimalNumberOfUniqueActionsParameter.ActualName = problem.ThetaMinimalNumberOfActionsParameter.Name; covering.SolutionCreatorParameter.ActualName = problem.CoveringSolutionCreatorParameter.Name; covering.EvaluatorParameter.ActualName = problem.EvaluatorParameter.Name; covering.MinimalNumberOfUniqueActionsParameter.ActualName = problem.ThetaMinimalNumberOfActionsParameter.Name; covering.PossibleActionsParameter.ActualName = problem.PossibleActionsParameter.Name; predictionArrayCalculator.PredictionParameter.ActualName = problem.Evaluator.PredictionParameter.ActualName; predictionArrayCalculator.FitnessParameter.ActualName = problem.Evaluator.FitnessParameter.ActualName; } //private void ParameterizeSelectors() { // foreach (ISelector selector in SelectorParameter.ValidValues) { // selector.CopySelected = new BoolValue(true); // //set value by parameter! // selector.NumberOfSelectedSubScopesParameter.Value = new IntValue(5); // selector.NumberOfSelectedSubScopesParameter.Hidden = true; // ParameterizeStochasticOperator(selector); // } // if (Problem != null) { // foreach (ISingleObjectiveSelector selector in SelectorParameter.ValidValues.OfType()) { // selector.MaximizationParameter.Value = new BoolValue(true); // selector.MaximizationParameter.Hidden = true; // selector.QualityParameter.ActualName = Problem.Evaluator.QualityParameter.ActualName; // selector.QualityParameter.Hidden = true; // } // } //} } }