Changeset 5685 for branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisProblem.cs
- Timestamp:
- 03/15/11 12:35:14 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisProblem.cs
r5624 r5685 47 47 private const string SymbolicExpressionTreeGrammarParameterName = "SymbolicExpressionTreeGrammar"; 48 48 private const string SymbolicExpressionTreeInterpreterParameterName = "SymbolicExpressionTreeInterpreter"; 49 private const string LowerEstimationLimitParameterName = "LowerEstimationLimit";50 private const string UpperEstimationLimitParameterName = "UpperEstimationLimit";51 49 private const string MaximumSymbolicExpressionTreeDepthParameterName = "MaximumSymbolicExpressionTreeDepth"; 52 50 private const string MaximumSymbolicExpressionTreeLengthParameterName = "MaximumSymbolicExpressionTreeLength"; … … 57 55 private const string SymbolicExpressionTreeGrammarParameterDescription = "The grammar that should be used for symbolic expression tree."; 58 56 private const string SymoblicExpressionTreeInterpreterParameterDescription = "The interpreter that should be used to evaluate the symbolic expression tree."; 59 private const string LowerEstimationLimitParameterDescription = "The lower limit for the estimated value that can be returned by the symbolic data analysis model.";60 private const string UpperEstimationLimitParameterDescription = "The upper limit for the estimated value that can be returned by the symbolic data analysis model.";61 57 private const string MaximumSymbolicExpressionTreeDepthParameterDescription = "Maximal depth of the symbolic expression. The minimum depth needed for the algorithm is 3 because two levels are reserved for the ProgramRoot and the Start symbol."; 62 58 private const string MaximumSymbolicExpressionTreeLengthParameterDescription = "Maximal length of the symbolic expression."; … … 78 74 get { return (IValueParameter<ISymbolicDataAnalysisExpressionTreeInterpreter>)Parameters[SymbolicExpressionTreeInterpreterParameterName]; } 79 75 } 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 76 public IFixedValueParameter<IntValue> MaximumSymbolicExpressionTreeDepthParameter { 87 77 get { return (IFixedValueParameter<IntValue>)Parameters[MaximumSymbolicExpressionTreeDepthParameterName]; } … … 117 107 get { return SymbolicExpressionTreeInterpreterParameter.Value; } 118 108 set { SymbolicExpressionTreeInterpreterParameter.Value = value; } 119 }120 121 public DoubleValue LowerEstimationLimit {122 get { return LowerEstimationLimitParameter.Value; }123 }124 public DoubleValue UpperEstimationLimit {125 get { return UpperEstimationLimitParameter.Value; }126 109 } 127 110 … … 156 139 Parameters.Add(new ValueParameter<ISymbolicDataAnalysisGrammar>(SymbolicExpressionTreeGrammarParameterName, SymbolicExpressionTreeGrammarParameterDescription)); 157 140 Parameters.Add(new ValueParameter<ISymbolicDataAnalysisExpressionTreeInterpreter>(SymbolicExpressionTreeInterpreterParameterName, SymoblicExpressionTreeInterpreterParameterDescription)); 158 Parameters.Add(new FixedValueParameter<DoubleValue>(LowerEstimationLimitParameterName, LowerEstimationLimitParameterDescription, new DoubleValue()));159 Parameters.Add(new FixedValueParameter<DoubleValue>(UpperEstimationLimitParameterName, UpperEstimationLimitParameterDescription, new DoubleValue()));160 141 Parameters.Add(new FixedValueParameter<IntValue>(MaximumSymbolicExpressionTreeDepthParameterName, MaximumSymbolicExpressionTreeDepthParameterDescription, new IntValue())); 161 142 Parameters.Add(new FixedValueParameter<IntValue>(MaximumSymbolicExpressionTreeLengthParameterName, MaximumSymbolicExpressionTreeLengthParameterDescription, new IntValue())); … … 167 148 168 149 UpdateGrammar(); 169 Update EstimationLimits();150 UpdateDatasetPartitions(); 170 151 RegisterEventHandlers(); 171 152 InitializeOperators(); 172 153 } 173 154 174 protected abstract void UpdateEstimationLimits(); 155 protected virtual void UpdateDatasetPartitions() { 156 Evaluator.SamplesStartParameter.Value.Value = ProblemData.TrainingPartitionStart.Value; 157 Evaluator.SamplesEndParameter.Value.Value = ProblemData.TrainingPartitionEnd.Value; 158 159 foreach (var analyzer in Operators.OfType<ISymbolicDataAnalysisValidationAnalyzer<U, T>>()) { 160 analyzer.ValidationSamplesStartParameter.Value = new IntValue(ProblemData.TrainingPartitionStart.Value); 161 analyzer.ValidationSamplesEndParameter.Value = new IntValue(ProblemData.TrainingPartitionEnd.Value); 162 } 163 } 164 165 protected virtual void UpdateGrammar() { 166 foreach (var varSymbol in SymbolicExpressionTreeGrammar.Symbols.OfType<HeuristicLab.Problems.DataAnalysis.Symbolic.Variable>()) { 167 varSymbol.VariableNames = ProblemData.AllowedInputVariables; 168 } 169 foreach (var varSymbol in SymbolicExpressionTreeGrammar.Symbols.OfType<HeuristicLab.Problems.DataAnalysis.Symbolic.VariableCondition>()) { 170 varSymbol.VariableNames = ProblemData.AllowedInputVariables; 171 } 172 } 175 173 176 174 private void InitializeOperators() { 177 175 Operators.AddRange(ApplicationManager.Manager.GetInstances<ISymbolicExpressionTreeOperator>()); 178 176 Operators.Add(new SymbolicExpressionSymbolFrequencyAnalyzer()); 177 Operators.Add(new SymbolicDataAnalysisVariableFrequencyAnalyzer()); 179 178 Operators.Add(new MinAverageMaxSymbolicExpressionTreeLengthAnalyzer()); 180 179 ParameterizeOperators(); 181 180 } 182 181 183 private void ProblemDataParameter_ValueChanged(object sender, EventArgs e) { 184 ProblemDataParameter.Value.Changed += (object s, EventArgs args) => OnProblemDataChanged(); 185 186 OnProblemDataChanged(); 187 } 182 #region events 188 183 private void RegisterEventHandlers() { 189 184 ProblemDataParameter.ValueChanged += new EventHandler(ProblemDataParameter_ValueChanged); … … 195 190 } 196 191 192 private void ProblemDataParameter_ValueChanged(object sender, EventArgs e) { 193 ProblemDataParameter.Value.Changed += (object s, EventArgs args) => OnProblemDataChanged(); 194 OnProblemDataChanged(); 195 } 196 197 197 private void ArchitectureParameterValue_ValueChanged(object sender, EventArgs e) { 198 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 199 } 208 200 … … 217 209 ParameterizeOperators(); 218 210 } 211 219 212 private void SolutionCreator_SymbolicExpressionTreeParameter_ActualNameChanged(object sender, EventArgs e) { 220 213 ParameterizeOperators(); … … 223 216 protected override void OnEvaluatorChanged() { 224 217 base.OnEvaluatorChanged(); 218 ParameterizeOperators(); 225 219 } 226 220 … … 228 222 protected virtual void OnProblemDataChanged() { 229 223 UpdateGrammar(); 230 UpdateEstimationLimits(); 224 UpdateDatasetPartitions(); 225 ParameterizeOperators(); 226 231 227 var handler = ProblemDataChanged; 232 228 if (handler != null) handler(this, EventArgs.Empty); … … 234 230 OnReset(); 235 231 } 236 237 private void ParameterizeOperators() { 232 #endregion 233 234 protected virtual void ParameterizeOperators() { 238 235 var operators = Parameters.OfType<IValueParameter>().Select(p => p.Value).OfType<IOperator>().Union(Operators); 239 236 240 237 foreach (var op in operators.OfType<ISymbolicExpressionTreeGrammarBasedOperator>()) { 241 op.SymbolicExpressionTreeGrammarParameter.ActualName = SymbolicExpressionTreeGrammarParameter .Name;238 op.SymbolicExpressionTreeGrammarParameter.ActualName = SymbolicExpressionTreeGrammarParameterName; 242 239 } 243 240 foreach (var op in operators.OfType<ISymbolicExpressionTreeSizeConstraintOperator>()) { 244 op.MaximumSymbolicExpressionTreeDepthParameter.ActualName = MaximumSymbolicExpressionTreeDepthParameter .Name;245 op.MaximumSymbolicExpressionTreeLengthParameter.ActualName = MaximumSymbolicExpressionTreeLengthParameter .Name;241 op.MaximumSymbolicExpressionTreeDepthParameter.ActualName = MaximumSymbolicExpressionTreeDepthParameterName; 242 op.MaximumSymbolicExpressionTreeLengthParameter.ActualName = MaximumSymbolicExpressionTreeLengthParameterName; 246 243 } 247 244 foreach (var op in operators.OfType<ISymbolicExpressionTreeArchitectureAlteringOperator>()) { 248 op.MaximumFunctionArgumentsParameter.ActualName = MaximumFunctionArgumentsParameter .Name;249 op.MaximumFunctionDefinitionsParameter.ActualName = MaximumFunctionDefinitionsParameter .Name;245 op.MaximumFunctionArgumentsParameter.ActualName = MaximumFunctionArgumentsParameterName; 246 op.MaximumFunctionDefinitionsParameter.ActualName = MaximumFunctionDefinitionsParameterName; 250 247 } 251 248 foreach (var op in operators.OfType<ISymbolicDataAnalysisEvaluator<T>>()) { 252 op.ProblemDataParameter.ActualName = ProblemDataParameter .Name;249 op.ProblemDataParameter.ActualName = ProblemDataParameterName; 253 250 op.SymbolicExpressionTreeParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName; 254 251 op.SamplesStartParameter.Value.Value = ProblemData.TrainingPartitionStart.Value; 255 252 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 253 } 261 254 foreach (var op in operators.OfType<ISymbolicExpressionTreeCrossover>()) { … … 269 262 op.SymbolicExpressionTreeParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName; 270 263 } 264 foreach (var op in operators.OfType<ISymbolicDataAnalysisInterpreterOperator>()) { 265 op.SymbolicDataAnalysisTreeInterpreterParameter.ActualName = SymbolicExpressionTreeInterpreterParameterName; 266 } 267 foreach (var op in operators.OfType<ISymbolicDataAnalysisAnalyzer>()) { 268 op.SymbolicExpressionTreeParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName; 269 } 271 270 } 272 271
Note: See TracChangeset
for help on using the changeset viewer.