Changeset 7506 for trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Crossovers/MultiSymbolicDataAnalysisExpressionCrossover.cs
- Timestamp:
- 02/23/12 16:05:57 (12 years ago)
- Location:
- trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Crossovers
- Files:
-
- 2 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Crossovers/MultiSymbolicDataAnalysisExpressionCrossover.cs
r7503 r7506 33 33 using HeuristicLab.PluginInfrastructure; 34 34 35 namespace HeuristicLab.Problems.DataAnalysis.Symbolic .Crossovers{35 namespace HeuristicLab.Problems.DataAnalysis.Symbolic { 36 36 [Item("MultiSymbolicDataAnalysisExpressionCrossover", "Randomly selects and applies one of its crossovers every time it is called.")] 37 37 public class MultiSymbolicDataAnalysisExpressionCrossover<T> : StochasticMultiBranch<ISymbolicExpressionTreeCrossover>, 38 ISymbolicDataAnalysisExpressionCrossover<T> ,39 ISymbolicExpressionTreeSizeConstraintOperator,40 ISymbolicExpressionTreeGrammarBasedOperator where T : class, IDataAnalysisProblemData {38 ISymbolicDataAnalysisExpressionCrossover<T> where T : class, IDataAnalysisProblemData { 39 private const string ParentsParameterName = "Parents"; 40 private const string ChildParameterName = "Child"; 41 41 private const string MaximumSymbolicExpressionTreeLengthParameterName = "MaximumSymbolicExpressionTreeLength"; 42 42 private const string MaximumSymbolicExpressionTreeDepthParameterName = "MaximumSymbolicExpressionTreeDepth"; 43 private const string SymbolicExpressionTreeGrammarParameterName = "SymbolicExpressionTreeGrammar"; 44 private const string ClonedSymbolicExpressionTreeGrammarParameterName = "ClonedSymbolicExpressionTreeGrammar"; 43 private const string SymbolicDataAnalysisTreeInterpreterParameterName = "SymbolicExpressionTreeInterpreter"; 45 44 private const string EvaluatorParameterName = "Evaluator"; 46 45 private const string SymbolicDataAnalysisEvaluationPartitionParameterName = "EvaluationPartition"; 47 private const string ParentsParameterName = "Parents"; 48 private const string ChildParameterName = "Child"; 46 private const string RelativeNumberOfEvaluatedSamplesParameterName = "RelativeNumberOfEvaluatedSamples"; 47 private const string ProblemDataParameterName = "ProblemData"; 48 49 49 50 50 public override bool CanChangeName { … … 56 56 57 57 #region parameter properties 58 public ILookupParameter<ISymbolicDataAnalysisExpressionTreeInterpreter> SymbolicDataAnalysisTreeInterpreterParameter { 59 get { return (ILookupParameter<ISymbolicDataAnalysisExpressionTreeInterpreter>)Parameters[SymbolicDataAnalysisTreeInterpreterParameterName]; } 60 } 58 61 public ILookupParameter<ItemArray<ISymbolicExpressionTree>> ParentsParameter { 59 62 get { return (ScopeTreeLookupParameter<ISymbolicExpressionTree>)Parameters[ParentsParameterName]; } … … 68 71 get { return (IValueLookupParameter<IntValue>)Parameters[MaximumSymbolicExpressionTreeDepthParameterName]; } 69 72 } 70 public IValueLookupParameter<ISymbolicExpressionGrammar> SymbolicExpressionTreeGrammarParameter {71 get { return (IValueLookupParameter<ISymbolicExpressionGrammar>)Parameters[SymbolicExpressionTreeGrammarParameterName]; }72 }73 public ILookupParameter<ISymbolicExpressionGrammar> ClonedSymbolicExpressionTreeGrammarParameter {74 get { return (ILookupParameter<ISymbolicExpressionGrammar>)Parameters[ClonedSymbolicExpressionTreeGrammarParameterName]; }75 }76 73 public ILookupParameter<ISymbolicDataAnalysisSingleObjectiveEvaluator<T>> EvaluatorParameter { 77 74 get { return (ILookupParameter<ISymbolicDataAnalysisSingleObjectiveEvaluator<T>>)Parameters[EvaluatorParameterName]; } 78 75 } 79 public IValueLookupParameter<IntRange> SymbolicDataAnalysisEvaluationPartitionParameter {76 public IValueLookupParameter<IntRange> EvaluationPartitionParameter { 80 77 get { return (IValueLookupParameter<IntRange>)Parameters[SymbolicDataAnalysisEvaluationPartitionParameterName]; } 78 } 79 public IValueLookupParameter<PercentValue> RelativeNumberOfEvaluatedSamplesParameter { 80 get { return (IValueLookupParameter<PercentValue>)Parameters[RelativeNumberOfEvaluatedSamplesParameterName]; } 81 } 82 public IValueLookupParameter<T> ProblemDataParameter { 83 get { return (IValueLookupParameter<T>)Parameters[ProblemDataParameterName]; } 81 84 } 82 85 #endregion … … 88 91 public MultiSymbolicDataAnalysisExpressionCrossover() 89 92 : base() { 93 Parameters.Add(new ValueLookupParameter<PercentValue>(RelativeNumberOfEvaluatedSamplesParameterName, "The relative number of samples of the dataset partition, which should be randomly chosen for evaluation between the start and end index.")); 94 Parameters.Add(new ValueLookupParameter<T>(ProblemDataParameterName, "The problem data on which the symbolic data analysis solution should be evaluated.")); 95 Parameters.Add(new LookupParameter<ISymbolicDataAnalysisExpressionTreeInterpreter>(SymbolicDataAnalysisTreeInterpreterParameterName, "The interpreter that should be used to calculate the output values of the symbolic data analysis tree.")); 90 96 Parameters.Add(new ValueLookupParameter<IntValue>(MaximumSymbolicExpressionTreeLengthParameterName, "The maximal length (number of nodes) of the symbolic expression tree.")); 91 97 Parameters.Add(new ValueLookupParameter<IntValue>(MaximumSymbolicExpressionTreeDepthParameterName, "The maximal depth of the symbolic expression tree (a tree with one node has depth = 0).")); 92 Parameters.Add(new ValueLookupParameter<ISymbolicExpressionGrammar>(SymbolicExpressionTreeGrammarParameterName, "The tree grammar that defines the correct syntax of symbolic expression trees that should be created."));93 Parameters.Add(new LookupParameter<ISymbolicExpressionGrammar>(ClonedSymbolicExpressionTreeGrammarParameterName, "An immutable clone of the concrete grammar that is actually used to create and manipulate trees."));94 98 Parameters.Add(new LookupParameter<ISymbolicDataAnalysisSingleObjectiveEvaluator<T>>(EvaluatorParameterName, "The single objective solution evaluator")); 95 99 Parameters.Add(new ValueLookupParameter<IntRange>(SymbolicDataAnalysisEvaluationPartitionParameterName, "The start index of the dataset partition on which the symbolic data analysis solution should be evaluated.")); … … 97 101 Parameters.Add(new LookupParameter<ISymbolicExpressionTree>(ChildParameterName, "The child symbolic expression tree resulting from the crossover.")); 98 102 103 EvaluatorParameter.Hidden = true; 104 EvaluationPartitionParameter.Hidden = true; 105 SymbolicDataAnalysisTreeInterpreterParameter.Hidden = true; 106 ProblemDataParameter.Hidden = true; 107 RelativeNumberOfEvaluatedSamplesParameter.Hidden = true; 108 109 InitializeOperators(); 110 Name = "MultiSymbolicDataAnalysisExpressionCrossover"; 111 } 112 113 private void InitializeOperators() { 99 114 var list = ApplicationManager.Manager.GetInstances<ISymbolicExpressionTreeCrossover>().ToList(); 100 115 var dataAnalysisCrossovers = from type in ApplicationManager.Manager.GetTypes(typeof(ISymbolicDataAnalysisExpressionCrossover<T>)) … … 108 123 Operators = checkedItemList; 109 124 Operators_ItemsAdded(this, new CollectionItemsChangedEventArgs<IndexedItem<ISymbolicExpressionTreeCrossover>>(Operators.CheckedItems)); 110 Name = "MultiSymbolicDataAnalysisExpressionCrossover";111 }112 113 public override IOperation Apply() {114 if (ClonedSymbolicExpressionTreeGrammarParameter.ActualValue == null) {115 SymbolicExpressionTreeGrammarParameter.ActualValue.ReadOnly = true;116 IScope globalScope = ExecutionContext.Scope;117 while (globalScope.Parent != null)118 globalScope = globalScope.Parent;119 120 globalScope.Variables.Add(new Core.Variable(ClonedSymbolicExpressionTreeGrammarParameterName, (ISymbolicExpressionGrammar)SymbolicExpressionTreeGrammarParameter.ActualValue.Clone()));121 }122 return base.Apply();123 125 } 124 126 … … 150 152 151 153 private void ParameterizeCrossovers() { 154 foreach (ISymbolicExpressionTreeCrossover op in Operators) { 155 op.ChildParameter.ActualName = ChildParameter.Name; 156 op.ParentsParameter.ActualName = ParentsParameter.Name; 157 } 152 158 foreach (IStochasticOperator op in Operators.OfType<IStochasticOperator>()) { 153 159 op.RandomParameter.ActualName = RandomParameter.Name; … … 157 163 op.MaximumSymbolicExpressionTreeLengthParameter.ActualName = MaximumSymbolicExpressionTreeLengthParameter.Name; 158 164 } 159 foreach (ISymbolicExpressionTreeGrammarBasedOperator op in Operators.OfType<ISymbolicExpressionTreeGrammarBasedOperator>()) { 160 op.SymbolicExpressionTreeGrammarParameter.ActualName = SymbolicExpressionTreeGrammarParameter.Name; 165 166 foreach (ISymbolicDataAnalysisInterpreterOperator op in Operators.OfType<ISymbolicDataAnalysisInterpreterOperator>()) { 167 op.SymbolicDataAnalysisTreeInterpreterParameter.ActualName = SymbolicDataAnalysisTreeInterpreterParameter.Name; 168 } 169 foreach (var op in Operators.OfType<ISymbolicDataAnalysisExpressionCrossover<T>>()) { 170 op.ProblemDataParameter.ActualName = ProblemDataParameter.Name; 171 op.EvaluationPartitionParameter.ActualName = EvaluationPartitionParameter.Name; 172 op.RelativeNumberOfEvaluatedSamplesParameter.ActualName = RelativeNumberOfEvaluatedSamplesParameter.Name; 173 op.EvaluatorParameter.ActualName = EvaluatorParameter.Name; 161 174 } 162 175 }
Note: See TracChangeset
for help on using the changeset viewer.