Changeset 5618 for branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisProblem.cs
- Timestamp:
- 03/07/11 14:23:26 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisProblem.cs
r5580 r5618 22 22 using System; 23 23 using System.Drawing; 24 using System.Linq; 24 25 using HeuristicLab.Common; 25 26 using HeuristicLab.Common.Resources; 26 27 using HeuristicLab.Core; 27 28 using HeuristicLab.Data; 29 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding; 28 30 using HeuristicLab.Optimization; 29 31 using HeuristicLab.Parameters; 30 32 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 33 using HeuristicLab.PluginInfrastructure; 34 35 //TODO configure training start / end 36 //TODO configure analyzer validation 37 //TODO configure grammar with ADF usage 31 38 32 39 namespace HeuristicLab.Problems.DataAnalysis.Symbolic { … … 71 78 get { return (IValueParameter<ISymbolicDataAnalysisTreeInterpreter>)Parameters[SymbolicExpressionTreeInterpreterParameterName]; } 72 79 } 73 public I ValueParameter<DoubleValue> LowerEstimationLimitParameter {74 get { return (I ValueParameter<DoubleValue>)Parameters[LowerEstimationLimitParameterName]; }75 } 76 public I ValueParameter<DoubleValue> UpperEstimationLimitParameter {77 get { return (I ValueParameter<DoubleValue>)Parameters[UpperEstimationLimitParameterName]; }78 } 79 public I ValueParameter<IntValue> MaximumSymbolicExpressionTreeDepthParameter {80 get { return (I ValueParameter<IntValue>)Parameters[MaximumSymbolicExpressionTreeDepthParameterName]; }81 } 82 public I ValueParameter<IntValue> MaximumSymbolicExpressionTreeLengthParameter {83 get { return (I ValueParameter<IntValue>)Parameters[MaximumSymbolicExpressionTreeLengthParameterName]; }84 } 85 public I ValueParameter<IntValue> MaximumFunctionDefinitionsParameter {86 get { return (I ValueParameter<IntValue>)Parameters[MaximumFunctionDefinitionsParameterName]; }87 } 88 public I ValueParameter<IntValue> MaximumFunctionArgumentsParameter {89 get { return (I ValueParameter<IntValue>)Parameters[MaximumFunctionArgumentsParameterName]; }80 public IFixedValueParameter<DoubleValue> LowerEstimationLimitParameter { 81 get { return (IFixedValueParameter<DoubleValue>)Parameters[LowerEstimationLimitParameterName]; } 82 } 83 public IFixedValueParameter<DoubleValue> UpperEstimationLimitParameter { 84 get { return (IFixedValueParameter<DoubleValue>)Parameters[UpperEstimationLimitParameterName]; } 85 } 86 public IFixedValueParameter<IntValue> MaximumSymbolicExpressionTreeDepthParameter { 87 get { return (IFixedValueParameter<IntValue>)Parameters[MaximumSymbolicExpressionTreeDepthParameterName]; } 88 } 89 public IFixedValueParameter<IntValue> MaximumSymbolicExpressionTreeLengthParameter { 90 get { return (IFixedValueParameter<IntValue>)Parameters[MaximumSymbolicExpressionTreeLengthParameterName]; } 91 } 92 public IFixedValueParameter<IntValue> MaximumFunctionDefinitionsParameter { 93 get { return (IFixedValueParameter<IntValue>)Parameters[MaximumFunctionDefinitionsParameterName]; } 94 } 95 public IFixedValueParameter<IntValue> MaximumFunctionArgumentsParameter { 96 get { return (IFixedValueParameter<IntValue>)Parameters[MaximumFunctionArgumentsParameterName]; } 90 97 } 91 98 #endregion … … 100 107 public T ProblemData { 101 108 get { return ProblemDataParameter.Value; } 109 set { ProblemDataParameter.Value = value; } 102 110 } 103 111 104 112 public ISymbolicDataAnalysisGrammar SymbolicExpressionTreeGrammar { 105 113 get { return SymbolicExpressionTreeGrammarParameter.Value; } 106 protectedset { SymbolicExpressionTreeGrammarParameter.Value = value; }114 set { SymbolicExpressionTreeGrammarParameter.Value = value; } 107 115 } 108 116 public ISymbolicDataAnalysisTreeInterpreter SymbolicExpressionTreeInterpreter { 109 117 get { return SymbolicExpressionTreeInterpreterParameter.Value; } 110 protectedset { SymbolicExpressionTreeInterpreterParameter.Value = value; }118 set { SymbolicExpressionTreeInterpreterParameter.Value = value; } 111 119 } 112 120 … … 128 136 } 129 137 public IntValue MaximumFunctionArguments { 130 get { return MaximumFunctionArguments ; }138 get { return MaximumFunctionArgumentsParameter.Value; } 131 139 } 132 140 #endregion … … 134 142 [StorableConstructor] 135 143 protected SymbolicDataAnalysisProblem(bool deserializing) : base(deserializing) { } 136 protected SymbolicDataAnalysisProblem(SymbolicDataAnalysisProblem<T, U, V> original, Cloner cloner) : base(original, cloner) { } 137 138 protected SymbolicDataAnalysisProblem() 139 : base() { 140 Parameters.Add(new ValueParameter<T>(ProblemDataParameterName, ProblemDataParameterDescription)); 144 [StorableHook(HookType.AfterDeserialization)] 145 private void AfterDeserialization() { 146 RegisterEventHandlers(); 147 } 148 protected SymbolicDataAnalysisProblem(SymbolicDataAnalysisProblem<T, U, V> original, Cloner cloner) 149 : base(original, cloner) { 150 RegisterEventHandlers(); 151 } 152 153 protected SymbolicDataAnalysisProblem(T problemData, U evaluator, V solutionCreator) 154 : base(evaluator, solutionCreator) { 155 Parameters.Add(new ValueParameter<T>(ProblemDataParameterName, ProblemDataParameterDescription, problemData)); 141 156 Parameters.Add(new ValueParameter<ISymbolicDataAnalysisGrammar>(SymbolicExpressionTreeGrammarParameterName, SymbolicExpressionTreeGrammarParameterDescription)); 142 157 Parameters.Add(new ValueParameter<ISymbolicDataAnalysisTreeInterpreter>(SymbolicExpressionTreeInterpreterParameterName, SymoblicExpressionTreeInterpreterParameterDescription)); 143 Parameters.Add(new ValueParameter<DoubleValue>(LowerEstimationLimitParameterName, LowerEstimationLimitParameterDescription)); 144 Parameters.Add(new ValueParameter<DoubleValue>(UpperEstimationLimitParameterName, UpperEstimationLimitParameterDescription)); 145 Parameters.Add(new ValueParameter<IntValue>(MaximumSymbolicExpressionTreeDepthParameterName, MaximumSymbolicExpressionTreeDepthParameterDescription)); 146 Parameters.Add(new ValueParameter<IntValue>(MaximumSymbolicExpressionTreeLengthParameterName, MaximumSymbolicExpressionTreeLengthParameterDescription)); 147 Parameters.Add(new ValueParameter<IntValue>(MaximumFunctionDefinitionsParameterName, MaximumFunctionDefinitionsParameterDescription)); 148 Parameters.Add(new ValueParameter<IntValue>(MaximumFunctionArgumentsParameterName, MaximumFunctionArgumentsParameterDescription)); 158 Parameters.Add(new FixedValueParameter<DoubleValue>(LowerEstimationLimitParameterName, LowerEstimationLimitParameterDescription, new DoubleValue())); 159 Parameters.Add(new FixedValueParameter<DoubleValue>(UpperEstimationLimitParameterName, UpperEstimationLimitParameterDescription, new DoubleValue())); 160 Parameters.Add(new FixedValueParameter<IntValue>(MaximumSymbolicExpressionTreeDepthParameterName, MaximumSymbolicExpressionTreeDepthParameterDescription, new IntValue())); 161 Parameters.Add(new FixedValueParameter<IntValue>(MaximumSymbolicExpressionTreeLengthParameterName, MaximumSymbolicExpressionTreeLengthParameterDescription, new IntValue())); 162 Parameters.Add(new FixedValueParameter<IntValue>(MaximumFunctionDefinitionsParameterName, MaximumFunctionDefinitionsParameterDescription, new IntValue())); 163 Parameters.Add(new FixedValueParameter<IntValue>(MaximumFunctionArgumentsParameterName, MaximumFunctionArgumentsParameterDescription, new IntValue())); 164 165 SymbolicExpressionTreeGrammar = new TypeCoherentExpressionGrammar(); 166 SymbolicExpressionTreeInterpreter = new SymbolicDataAnalysisExpressionTreeInterpreter(); 167 168 UpdateGrammar(); 169 UpdateEstimationLimits(); 170 RegisterEventHandlers(); 171 InitializeOperators(); 172 } 173 174 protected abstract void UpdateEstimationLimits(); 175 176 private void InitializeOperators() { 177 Operators.AddRange(ApplicationManager.Manager.GetInstances<ISymbolicExpressionTreeOperator>()); 178 Operators.Add(new SymbolicExpressionSymbolFrequencyAnalyzer()); 179 Operators.Add(new MinAverageMaxSymbolicExpressionTreeLengthAnalyzer()); 180 ParameterizeOperators(); 181 } 182 183 private void ProblemDataParameter_ValueChanged(object sender, EventArgs e) { 184 ProblemDataParameter.Value.Changed += (object s, EventArgs args) => OnProblemDataChanged(); 185 186 OnProblemDataChanged(); 187 } 188 private void RegisterEventHandlers() { 189 ProblemDataParameter.ValueChanged += new EventHandler(ProblemDataParameter_ValueChanged); 190 ProblemDataParameter.Value.Changed += (object sender, EventArgs e) => OnProblemDataChanged(); 191 192 MaximumFunctionArguments.ValueChanged += new EventHandler(ArchitectureParameterValue_ValueChanged); 193 MaximumFunctionDefinitions.ValueChanged += new EventHandler(ArchitectureParameterValue_ValueChanged); 194 MaximumSymbolicExpressionTreeDepth.ValueChanged += new EventHandler(MaximumSymbolicExpressionTreeDepth_ValueChanged); 195 } 196 197 private void ArchitectureParameterValue_ValueChanged(object sender, EventArgs e) { 198 UpdateGrammar(); 199 } 200 protected virtual void UpdateGrammar() { 201 foreach (var varSymbol in SymbolicExpressionTreeGrammar.Symbols.OfType<HeuristicLab.Problems.DataAnalysis.Symbolic.Variable>()) { 202 varSymbol.VariableNames = ProblemData.AllowedInputVariables; 203 } 204 foreach (var varSymbol in SymbolicExpressionTreeGrammar.Symbols.OfType<HeuristicLab.Problems.DataAnalysis.Symbolic.VariableCondition>()) { 205 varSymbol.VariableNames = ProblemData.AllowedInputVariables; 206 } 207 } 208 209 private void MaximumSymbolicExpressionTreeDepth_ValueChanged(object sender, EventArgs e) { 210 if (MaximumSymbolicExpressionTreeDepth != null && MaximumSymbolicExpressionTreeDepth.Value < 3) 211 MaximumSymbolicExpressionTreeDepth.Value = 3; 212 } 213 214 protected override void OnSolutionCreatorChanged() { 215 base.OnSolutionCreatorChanged(); 216 SolutionCreator.SymbolicExpressionTreeParameter.ActualNameChanged += new EventHandler(SolutionCreator_SymbolicExpressionTreeParameter_ActualNameChanged); 217 ParameterizeOperators(); 218 } 219 private void SolutionCreator_SymbolicExpressionTreeParameter_ActualNameChanged(object sender, EventArgs e) { 220 ParameterizeOperators(); 221 } 222 223 protected override void OnEvaluatorChanged() { 224 base.OnEvaluatorChanged(); 149 225 } 150 226 151 227 public event EventHandler ProblemDataChanged; 152 228 protected virtual void OnProblemDataChanged() { 229 UpdateGrammar(); 230 UpdateEstimationLimits(); 153 231 var handler = ProblemDataChanged; 154 232 if (handler != null) handler(this, EventArgs.Empty); 233 234 OnReset(); 235 } 236 237 private void ParameterizeOperators() { 238 var operators = Parameters.OfType<IValueParameter>().Select(p => p.Value).OfType<IOperator>().Union(Operators); 239 240 foreach (var op in operators.OfType<ISymbolicExpressionTreeGrammarBasedOperator>()) { 241 op.SymbolicExpressionTreeGrammarParameter.ActualName = SymbolicExpressionTreeGrammarParameter.Name; 242 } 243 foreach (var op in operators.OfType<ISymbolicExpressionTreeSizeConstraintOperator>()) { 244 op.MaximumSymbolicExpressionTreeDepthParameter.ActualName = MaximumSymbolicExpressionTreeDepthParameter.Name; 245 op.MaximumSymbolicExpressionTreeLengthParameter.ActualName = MaximumSymbolicExpressionTreeLengthParameter.Name; 246 } 247 foreach (var op in operators.OfType<ISymbolicExpressionTreeArchitectureAlteringOperator>()) { 248 op.MaximumFunctionArgumentsParameter.ActualName = MaximumFunctionArgumentsParameter.Name; 249 op.MaximumFunctionDefinitionsParameter.ActualName = MaximumFunctionDefinitionsParameter.Name; 250 } 251 foreach (var op in operators.OfType<ISymbolicDataAnalysisEvaluator<T>>()) { 252 op.ProblemDataParameter.ActualName = ProblemDataParameter.Name; 253 op.SymbolicExpressionTreeParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName; 254 op.SamplesStartParameter.Value.Value = ProblemData.TrainingPartitionStart.Value; 255 op.SamplesEndParameter.Value.Value = ProblemData.TrainingPartitionEnd.Value; 256 } 257 foreach (var op in operators.OfType<ISymbolicDataAnalysisBoundedEvaluator<T>>()) { 258 op.LowerEstimationLimitParameter.ActualName = LowerEstimationLimitParameter.Name; 259 op.UpperEstimationLimitParameter.ActualName = UpperEstimationLimitParameter.Name; 260 } 261 foreach (var op in operators.OfType<ISymbolicExpressionTreeCrossover>()) { 262 op.ParentsParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName; 263 op.ChildParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName; 264 } 265 foreach (var op in operators.OfType<ISymbolicExpressionTreeManipulator>()) { 266 op.SymbolicExpressionTreeParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName; 267 } 268 foreach (var op in operators.OfType<ISymbolicExpressionTreeAnalyzer>()) { 269 op.SymbolicExpressionTreeParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName; 270 } 155 271 } 156 272 }
Note: See TracChangeset
for help on using the changeset viewer.