Changeset 2882 for trunk/sources/HeuristicLab.SGA/3.3
- Timestamp:
- 02/27/10 03:35:11 (15 years ago)
- Location:
- trunk/sources/HeuristicLab.SGA/3.3
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.SGA/3.3/SGA.cs
r2865 r2882 29 29 using HeuristicLab.Parameters; 30 30 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 31 using HeuristicLab.PluginInfrastructure; 31 32 32 33 namespace HeuristicLab.SGA { … … 42 43 private SGAOperator sgaOperator; 43 44 44 private ConstrainedValueParameter<ICrossover> CrossoverOperatorParameter {45 get { return ( ConstrainedValueParameter<ICrossover>)Parameters["CrossoverOperator"]; }45 private ValueParameter<IntData> PopulationSizeParameter { 46 get { return (ValueParameter<IntData>)Parameters["PopulationSize"]; } 46 47 } 47 private ConstrainedValueParameter<IManipulator> MutationOperatorParameter { 48 get { return (ConstrainedValueParameter<IManipulator>)Parameters["MutationOperator"]; } 48 private ConstrainedValueParameter<ISelector> SelectorParameter { 49 get { return (ConstrainedValueParameter<ISelector>)Parameters["Selector"]; } 50 } 51 private ConstrainedValueParameter<ICrossover> CrossoverParameter { 52 get { return (ConstrainedValueParameter<ICrossover>)Parameters["Crossover"]; } 53 } 54 private ConstrainedValueParameter<IManipulator> MutatorParameter { 55 get { return (ConstrainedValueParameter<IManipulator>)Parameters["Mutator"]; } 56 } 57 private ValueParameter<IntData> ElitesParameter { 58 get { return (ValueParameter<IntData>)Parameters["Elites"]; } 49 59 } 50 60 … … 62 72 Parameters.Add(new ValueParameter<BoolData>("SetSeedRandomly", "True if the random seed should be set to a random value, otherwise false.", new BoolData(true))); 63 73 Parameters.Add(new ValueParameter<IntData>("PopulationSize", "The size of the population of solutions.", new IntData(100))); 64 Parameters.Add(new ConstrainedValueParameter<ICrossover>("CrossoverOperator", "The operator used to cross solutions.")); 74 Parameters.Add(new ConstrainedValueParameter<ISelector>("Selector", "The operator used to select solutions for reproduction.")); 75 Parameters.Add(new ConstrainedValueParameter<ICrossover>("Crossover", "The operator used to cross solutions.")); 65 76 Parameters.Add(new ValueParameter<DoubleData>("MutationProbability", "The probability that the mutation operator is applied on a solution.", new DoubleData(0.05))); 66 Parameters.Add(new ConstrainedValueParameter<IManipulator>("Mutat ionOperator", "The operator used to mutate solutions."));77 Parameters.Add(new ConstrainedValueParameter<IManipulator>("Mutator", "The operator used to mutate solutions.")); 67 78 Parameters.Add(new ValueParameter<IntData>("Elites", "The numer of elite solutions which are kept in each generation.", new IntData(1))); 68 79 Parameters.Add(new ValueParameter<IntData>("MaximumGenerations", "The maximum number of generations which should be processed.", new IntData(1000))); 80 81 PopulationSizeParameter.ValueChanged += new EventHandler(PopulationSizeParameter_ValueChanged); 82 ElitesParameter.ValueChanged += new EventHandler(ElitesParameter_ValueChanged); 69 83 70 84 RandomCreator randomCreator = new RandomCreator(); … … 83 97 populationCreator.Successor = sgaOperator; 84 98 85 sgaOperator.CrossoverOperatorParameter.ActualName = "CrossoverOperator"; 99 sgaOperator.SelectorParameter.ActualName = "Selector"; 100 sgaOperator.CrossoverParameter.ActualName = "Crossover"; 86 101 sgaOperator.ElitesParameter.ActualName = "Elites"; 87 102 sgaOperator.MaximumGenerationsParameter.ActualName = "MaximumGenerations"; 88 sgaOperator.Mutat ionOperatorParameter.ActualName = "MutationOperator";103 sgaOperator.MutatorParameter.ActualName = "Mutator"; 89 104 sgaOperator.MutationProbabilityParameter.ActualName = "MutationProbability"; 90 105 sgaOperator.RandomParameter.ActualName = "Random"; 106 sgaOperator.ResultsParameter.ActualName = "Results"; 91 107 92 108 OperatorGraph.InitialOperator = randomCreator; 109 110 var selectors = ApplicationManager.Manager.GetInstances<ISelector>().Where(x => !(x is IMultiObjectiveSelector)); 111 selectors.Select(x => x.CopySelected = new BoolData(true)); 112 selectors.Select(x => x.NumberOfSelectedSubScopesParameter.Value = new IntData(2 * (PopulationSizeParameter.Value.Value - ElitesParameter.Value.Value))); 113 selectors.OfType<IStochasticOperator>().Select(x => x.RandomParameter.ActualName = "Random"); 114 foreach (ISelector selector in selectors) 115 SelectorParameter.ValidValues.Add(selector); 93 116 } 94 117 … … 98 121 clone.sgaOperator = (SGAOperator)cloner.Clone(sgaOperator); 99 122 return clone; 123 } 124 125 private void ElitesParameter_ValueChanged(object sender, EventArgs e) { 126 SelectorParameter.ValidValues.Select(x => x.NumberOfSelectedSubScopesParameter.Value = new IntData(2 * (PopulationSizeParameter.Value.Value - ElitesParameter.Value.Value))); 127 } 128 private void PopulationSizeParameter_ValueChanged(object sender, EventArgs e) { 129 SelectorParameter.ValidValues.Select(x => x.NumberOfSelectedSubScopesParameter.Value = new IntData(2 * (PopulationSizeParameter.Value.Value - ElitesParameter.Value.Value))); 100 130 } 101 131 … … 112 142 if (Problem.SolutionCreator is IStochasticOperator) ((IStochasticOperator)Problem.SolutionCreator).RandomParameter.ActualName = "Random"; 113 143 if (Problem.Evaluator is IStochasticOperator) ((IStochasticOperator)Problem.Evaluator).RandomParameter.ActualName = "Random"; 114 Problem.Operators. Where(x => x is IStochasticOperator).Select(x => (x as IStochasticOperator).RandomParameter.ActualName = "Random");144 Problem.Operators.OfType<IStochasticOperator>().Select(x => x.RandomParameter.ActualName = "Random"); 115 145 116 146 populationCreator.SolutionCreatorParameter.Value = Problem.SolutionCreator; 117 populationCreator. SolutionEvaluatorParameter.Value = Problem.Evaluator;147 populationCreator.EvaluatorParameter.Value = Problem.Evaluator; 118 148 sgaOperator.MaximizationParameter.Value = Problem.Maximization; 119 149 sgaOperator.QualityParameter.ActualName = Problem.Evaluator.QualityParameter.ActualName; 120 sgaOperator. SolutionEvaluatorParameter.Value = Problem.Evaluator;150 sgaOperator.EvaluatorParameter.Value = Problem.Evaluator; 121 151 122 CrossoverOperatorParameter.ValidValues.Clear(); 123 var crossovers = from o in Problem.Operators 124 where o is ICrossover 125 select (ICrossover)o; 126 foreach (ICrossover crossover in crossovers) 127 CrossoverOperatorParameter.ValidValues.Add(crossover); 152 SelectorParameter.ValidValues.OfType<ISingleObjectiveSelector>().Select(x => x.MaximizationParameter.Value = Problem.Maximization); 153 SelectorParameter.ValidValues.OfType<ISingleObjectiveSelector>().Select(x => x.QualityParameter.ActualName = Problem.Evaluator.QualityParameter.ActualName); 128 154 129 MutationOperatorParameter.ValidValues.Clear(); 130 var mutators = from o in Problem.Operators 131 where o is IManipulator 132 select (IManipulator)o; 133 foreach (IManipulator mutator in mutators) 134 MutationOperatorParameter.ValidValues.Add(mutator); 155 CrossoverParameter.ValidValues.Clear(); 156 foreach (ICrossover crossover in Problem.Operators.OfType<ICrossover>()) 157 CrossoverParameter.ValidValues.Add(crossover); 158 159 MutatorParameter.ValidValues.Clear(); 160 foreach (IManipulator mutator in Problem.Operators.OfType<IManipulator>()) 161 MutatorParameter.ValidValues.Add(mutator); 135 162 136 163 base.OnProblemChanged(); … … 143 170 protected override void Problem_EvaluatorChanged(object sender, EventArgs e) { 144 171 if (Problem.Evaluator is IStochasticOperator) ((IStochasticOperator)Problem.Evaluator).RandomParameter.ActualName = "Random"; 145 populationCreator.SolutionEvaluatorParameter.Value = Problem.Evaluator; 172 SelectorParameter.ValidValues.OfType<ISingleObjectiveSelector>().Select(x => x.QualityParameter.ActualName = Problem.Evaluator.QualityParameter.ActualName); 173 populationCreator.EvaluatorParameter.Value = Problem.Evaluator; 146 174 sgaOperator.QualityParameter.ActualName = Problem.Evaluator.QualityParameter.ActualName; 147 sgaOperator. SolutionEvaluatorParameter.Value = Problem.Evaluator;175 sgaOperator.EvaluatorParameter.Value = Problem.Evaluator; 148 176 base.Problem_EvaluatorChanged(sender, e); 149 177 } 150 178 private void Problem_MaximizationChanged(object sender, EventArgs e) { 151 179 sgaOperator.MaximizationParameter.Value = Problem.Maximization; 180 SelectorParameter.ValidValues.OfType<ISingleObjectiveSelector>().Select(x => x.MaximizationParameter.Value = Problem.Maximization); 152 181 } 153 182 } -
trunk/sources/HeuristicLab.SGA/3.3/SGAOperator.cs
r2834 r2882 35 35 [Creatable("Test")] 36 36 public class SGAOperator : AlgorithmOperator { 37 [Storable]38 private ProportionalSelector proportionalSelector;39 40 37 #region Parameter properties 41 38 public ValueLookupParameter<IRandom> RandomParameter { … … 48 45 get { return (SubScopesLookupParameter<DoubleData>)Parameters["Quality"]; } 49 46 } 50 public ValueLookupParameter<IOperator> CrossoverOperatorParameter { 51 get { return (ValueLookupParameter<IOperator>)Parameters["CrossoverOperator"]; } 47 public ValueLookupParameter<IOperator> SelectorParameter { 48 get { return (ValueLookupParameter<IOperator>)Parameters["Selector"]; } 49 } 50 public ValueLookupParameter<IOperator> CrossoverParameter { 51 get { return (ValueLookupParameter<IOperator>)Parameters["Crossover"]; } 52 52 } 53 53 public ValueLookupParameter<DoubleData> MutationProbabilityParameter { 54 54 get { return (ValueLookupParameter<DoubleData>)Parameters["MutationProbability"]; } 55 55 } 56 public ValueLookupParameter<IOperator> Mutat ionOperatorParameter {57 get { return (ValueLookupParameter<IOperator>)Parameters["Mutat ionOperator"]; }56 public ValueLookupParameter<IOperator> MutatorParameter { 57 get { return (ValueLookupParameter<IOperator>)Parameters["Mutator"]; } 58 58 } 59 public ValueLookupParameter<IOperator> SolutionEvaluatorParameter {60 get { return (ValueLookupParameter<IOperator>)Parameters[" SolutionEvaluator"]; }59 public ValueLookupParameter<IOperator> EvaluatorParameter { 60 get { return (ValueLookupParameter<IOperator>)Parameters["Evaluator"]; } 61 61 } 62 62 public ValueLookupParameter<IntData> ElitesParameter { … … 65 65 public ValueLookupParameter<IntData> MaximumGenerationsParameter { 66 66 get { return (ValueLookupParameter<IntData>)Parameters["MaximumGenerations"]; } 67 } 68 public ValueLookupParameter<VariableCollection> ResultsParameter { 69 get { return (ValueLookupParameter<VariableCollection>)Parameters["Results"]; } 67 70 } 68 71 private ScopeParameter CurrentScopeParameter { … … 81 84 Parameters.Add(new ValueLookupParameter<BoolData>("Maximization", "True if the problem is a maximization problem, otherwise false.")); 82 85 Parameters.Add(new SubScopesLookupParameter<DoubleData>("Quality", "The value which represents the quality of a solution.")); 83 Parameters.Add(new ValueLookupParameter<IOperator>("CrossoverOperator", "The operator used to cross solutions.")); 86 Parameters.Add(new ValueLookupParameter<IOperator>("Selector", "The operator used to select solutions for reproduction.")); 87 Parameters.Add(new ValueLookupParameter<IOperator>("Crossover", "The operator used to cross solutions.")); 84 88 Parameters.Add(new ValueLookupParameter<DoubleData>("MutationProbability", "The probability that the mutation operator is applied on a solution.")); 85 Parameters.Add(new ValueLookupParameter<IOperator>("Mutat ionOperator", "The operator used to mutate solutions."));86 Parameters.Add(new ValueLookupParameter<IOperator>(" SolutionEvaluator", "The operator used to evaluate solutions."));89 Parameters.Add(new ValueLookupParameter<IOperator>("Mutator", "The operator used to mutate solutions.")); 90 Parameters.Add(new ValueLookupParameter<IOperator>("Evaluator", "The operator used to evaluate solutions.")); 87 91 Parameters.Add(new ValueLookupParameter<IntData>("Elites", "The numer of elite solutions which are kept in each generation.")); 88 92 Parameters.Add(new ValueLookupParameter<IntData>("MaximumGenerations", "The maximum number of generations which should be processed.")); 93 Parameters.Add(new ValueLookupParameter<VariableCollection>("Results", "The variable collection where results should be stored.")); 89 94 Parameters.Add(new ScopeParameter("CurrentScope", "The current scope which represents a population of solutions on which the SGA should be applied.")); 90 95 #endregion … … 92 97 #region Create operator graph 93 98 SubScopesSorter subScopesSorter1 = new SubScopesSorter(); 94 proportionalSelector = new ProportionalSelector();99 Placeholder selector = new Placeholder(); 95 100 SequentialSubScopesProcessor sequentialSubScopesProcessor1 = new SequentialSubScopesProcessor(); 96 101 ChildrenCreator childrenCreator = new ChildrenCreator(); … … 108 113 IntCounter intCounter = new IntCounter(); 109 114 Comparator comparator = new Comparator(); 115 ResultsCollector resultsCollector = new ResultsCollector(); 110 116 ConditionalBranch conditionalBranch = new ConditionalBranch(); 111 117 … … 113 119 subScopesSorter1.ValueParameter.ActualName = "Quality"; 114 120 OperatorGraph.InitialOperator = subScopesSorter1; 115 subScopesSorter1.Successor = proportionalSelector;121 subScopesSorter1.Successor = selector; 116 122 117 proportionalSelector.CopySelected = new BoolData(true); 118 proportionalSelector.MaximizationParameter.ActualName = "Maximization"; 119 // NOTE: NumberOfSelectedSubScopes is set dynamically when the operator is executed 120 proportionalSelector.QualityParameter.ActualName = "Quality"; 121 proportionalSelector.RandomParameter.ActualName = "Random"; 122 proportionalSelector.Windowing = new BoolData(true); 123 proportionalSelector.Successor = sequentialSubScopesProcessor1; 123 selector.Name = "Selector"; 124 selector.OperatorParameter.ActualName = "Selector"; 125 selector.Successor = sequentialSubScopesProcessor1; 124 126 125 127 sequentialSubScopesProcessor1.Operators.Add(new EmptyOperator()); … … 133 135 uniformSequentialSubScopesProcessor.Successor = subScopesSorter2; 134 136 135 crossover.Name = "Crossover Operator";136 crossover.OperatorParameter.ActualName = "Crossover Operator";137 crossover.Name = "Crossover"; 138 crossover.OperatorParameter.ActualName = "Crossover"; 137 139 crossover.Successor = stochasticBranch; 138 140 … … 143 145 stochasticBranch.Successor = evaluator; 144 146 145 mutator.Name = "Mutat ionOperator";146 mutator.OperatorParameter.ActualName = "Mutat ionOperator";147 mutator.Name = "Mutator"; 148 mutator.OperatorParameter.ActualName = "Mutator"; 147 149 mutator.Successor = null; 148 150 149 evaluator.Name = " SolutionEvaluator";150 evaluator.OperatorParameter.ActualName = " SolutionEvaluator";151 evaluator.Name = "Evaluator"; 152 evaluator.OperatorParameter.ActualName = "Evaluator"; 151 153 evaluator.Successor = subScopesRemover; 152 154 … … 178 180 comparator.ResultParameter.ActualName = "Terminate"; 179 181 comparator.RightSideParameter.ActualName = "MaximumGenerations"; 180 comparator.Successor = conditionalBranch; 182 comparator.Successor = resultsCollector; 183 184 SubScopesLookupParameter<DoubleData> quality = new SubScopesLookupParameter<DoubleData>("Qualities"); 185 quality.ActualName = "Quality"; 186 resultsCollector.CollectedValues.Add(quality); 187 resultsCollector.ResultsParameter.ActualName = "Results"; 188 resultsCollector.Successor = conditionalBranch; 181 189 182 190 conditionalBranch.ConditionParameter.ActualName = "Terminate"; … … 186 194 #endregion 187 195 } 188 189 public override IDeepCloneable Clone(Cloner cloner) {190 SGAOperator clone = (SGAOperator)base.Clone(cloner);191 clone.proportionalSelector = (ProportionalSelector)cloner.Clone(proportionalSelector);192 return clone;193 }194 195 public override IOperation Apply() {196 int populationSize = CurrentScope.SubScopes.Count;197 // dynamically set the number of parents which are selected for reproduction198 proportionalSelector.NumberOfSelectedSubScopesParameter.Value = new IntData(2 * (populationSize - ElitesParameter.ActualValue.Value));199 return base.Apply();200 }201 196 } 202 197 }
Note: See TracChangeset
for help on using the changeset viewer.