Free cookie consent management tool by TermsFeed Policy Generator

source: trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/ValidationBestScaledSymbolicRegressionSolutionAnalyzer.cs @ 3681

Last change on this file since 3681 was 3681, checked in by gkronber, 14 years ago

Adapted analyzers to use ScopeTreeLookupParameter and wire the depth setting correctly for

  • SymbolicExpressionTreeEncoding
  • ArtificialAntProblem
  • SymbolicRegression

#999

File size: 13.1 KB
Line 
1#region License Information
2/* HeuristicLab
3 * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
4 *
5 * This file is part of HeuristicLab.
6 *
7 * HeuristicLab is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * HeuristicLab is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
19 */
20#endregion
21
22using System.Linq;
23using HeuristicLab.Common;
24using HeuristicLab.Core;
25using HeuristicLab.Data;
26using HeuristicLab.Operators;
27using HeuristicLab.Optimization;
28using HeuristicLab.Parameters;
29using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
30using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
31using HeuristicLab.Problems.DataAnalysis.Regression.Symbolic;
32using HeuristicLab.Problems.DataAnalysis.Symbolic;
33using System.Collections.Generic;
34using HeuristicLab.Problems.DataAnalysis.Symbolic.Symbols;
35using HeuristicLab.Problems.DataAnalysis;
36using HeuristicLab.Analysis;
37using System;
38using HeuristicLab.Optimization.Operators;
39
40namespace HeuristicLab.Problems.DataAnalysis.Regression.Symbolic.Analyzers {
41  /// <summary>
42  /// An operator that analyzes the validation best scaled symbolic regression solution.
43  /// </summary>
44  [Item("ValidationBestScaledSymbolicRegressionSolutionAnalyzer", "An operator that analyzes the validation best scaled symbolic regression solution.")]
45  [StorableClass]
46  public sealed class ValidationBestScaledSymbolicRegressionSolutionAnalyzer : AlgorithmOperator, ISymbolicRegressionAnalyzer {
47    private const string SymbolicExpressionTreeParameterName = "SymbolicExpressionTree";
48    private const string ScaledSymbolicExpressionTreeParameterName = "ScaledSymbolicExpressionTree";
49    private const string SymbolicExpressionTreeInterpreterParameterName = "SymbolicExpressionTreeInterpreter";
50    private const string ProblemDataParameterName = "ProblemData";
51    private const string SamplesStartParameterName = "SamplesStart";
52    private const string SamplesEndParameterName = "SamplesEnd";
53    private const string QualityParameterName = "ScaledQuality";
54    private const string UpperEstimationLimitParameterName = "UpperEstimationLimit";
55    private const string LowerEstimationLimitParameterName = "LowerEstimationLimit";
56    private const string AlphaParameterName = "Alpha";
57    private const string BetaParameterName = "Beta";
58    private const string BestSolutionParameterName = "ValidationBestSolution";
59    private const string BestSolutionQualityParameterName = "ValidationBestSolutionQuality";
60    private const string ResultsParameterName = "Results";
61
62    public ScopeTreeLookupParameter<SymbolicExpressionTree> SymbolicExpressionTreeParameter {
63      get { return (ScopeTreeLookupParameter<SymbolicExpressionTree>)Parameters[SymbolicExpressionTreeParameterName]; }
64    }
65    public IValueLookupParameter<ISymbolicExpressionTreeInterpreter> SymbolicExpressionTreeInterpreterParameter {
66      get { return (IValueLookupParameter<ISymbolicExpressionTreeInterpreter>)Parameters[SymbolicExpressionTreeInterpreterParameterName]; }
67    }
68    public IValueLookupParameter<DataAnalysisProblemData> ProblemDataParameter {
69      get { return (IValueLookupParameter<DataAnalysisProblemData>)Parameters[ProblemDataParameterName]; }
70    }
71    public IValueLookupParameter<IntValue> SamplesStartParameter {
72      get { return (IValueLookupParameter<IntValue>)Parameters[SamplesStartParameterName]; }
73    }
74    public IValueLookupParameter<IntValue> SamplesEndParameter {
75      get { return (IValueLookupParameter<IntValue>)Parameters[SamplesEndParameterName]; }
76    }
77    public IValueLookupParameter<DoubleValue> UpperEstimationLimitParameter {
78      get { return (IValueLookupParameter<DoubleValue>)Parameters[UpperEstimationLimitParameterName]; }
79    }
80    public IValueLookupParameter<DoubleValue> LowerEstimationLimitParameter {
81      get { return (IValueLookupParameter<DoubleValue>)Parameters[LowerEstimationLimitParameterName]; }
82    }
83    public ILookupParameter<SymbolicRegressionSolution> BestSolutionParameter {
84      get { return (ILookupParameter<SymbolicRegressionSolution>)Parameters[BestSolutionParameterName]; }
85    }
86    public ILookupParameter<DoubleValue> BestSolutionQualityParameter {
87      get { return (ILookupParameter<DoubleValue>)Parameters[BestSolutionQualityParameterName]; }
88    }
89    public ILookupParameter<ResultCollection> ResultsParameter {
90      get { return (ILookupParameter<ResultCollection>)Parameters[ResultsParameterName]; }
91    }
92
93    [Storable]
94    private BestQualityMemorizer validationQualityMemorizer;
95    [Storable]
96    private BestSymbolicRegressionSolutionAnalyzer bestSolutionAnalyzer;
97
98    public ValidationBestScaledSymbolicRegressionSolutionAnalyzer()
99      : base() {
100      Parameters.Add(new ScopeTreeLookupParameter<SymbolicExpressionTree>(SymbolicExpressionTreeParameterName, "The symbolic expression trees to analyze."));
101      Parameters.Add(new ValueLookupParameter<ISymbolicExpressionTreeInterpreter>(SymbolicExpressionTreeInterpreterParameterName, "The interpreter that should be used for the analysis of symbolic expression trees."));
102      Parameters.Add(new ValueLookupParameter<DataAnalysisProblemData>(ProblemDataParameterName, "The problem data for which the symbolic expression tree is a solution."));
103      Parameters.Add(new ValueLookupParameter<IntValue>(SamplesStartParameterName, "The first index of the validation partition of the data set."));
104      Parameters.Add(new ValueLookupParameter<IntValue>(SamplesEndParameterName, "The last index of the validation partition of the data set."));
105      Parameters.Add(new ValueLookupParameter<DoubleValue>(UpperEstimationLimitParameterName, "The upper estimation limit that was set for the evaluation of the symbolic expression trees."));
106      Parameters.Add(new ValueLookupParameter<DoubleValue>(LowerEstimationLimitParameterName, "The lower estimation limit that was set for the evaluation of the symbolic expression trees."));
107      Parameters.Add(new LookupParameter<SymbolicRegressionSolution>(BestSolutionParameterName, "The best symbolic regression solution."));
108      Parameters.Add(new LookupParameter<DoubleValue>(BestSolutionQualityParameterName, "The quality of the best symbolic regression solution."));
109      Parameters.Add(new LookupParameter<ResultCollection>(ResultsParameterName, "The result collection where the best symbolic regression solution should be stored."));
110
111      #region operator initialization
112      UniformSubScopesProcessor subScopesProc = new UniformSubScopesProcessor();
113      SymbolicRegressionSolutionLinearScaler linearScaler = new SymbolicRegressionSolutionLinearScaler();
114      SymbolicRegressionMeanSquaredErrorEvaluator validationMseEvaluator = new SymbolicRegressionMeanSquaredErrorEvaluator();
115      bestSolutionAnalyzer = new BestSymbolicRegressionSolutionAnalyzer();
116      validationQualityMemorizer = new BestQualityMemorizer();
117      BestAverageWorstQualityCalculator bestAvgWorstValidationQualityCalculator = new BestAverageWorstQualityCalculator();
118      DataTableValuesCollector validationValuesCollector = new DataTableValuesCollector();
119      ResultsCollector resultsCollector = new ResultsCollector();
120      #endregion
121
122      #region parameter wiring
123      linearScaler.AlphaParameter.ActualName = AlphaParameterName;
124      linearScaler.BetaParameter.ActualName = BetaParameterName;
125      linearScaler.SymbolicExpressionTreeParameter.ActualName = SymbolicExpressionTreeParameter.Name;
126      linearScaler.ScaledSymbolicExpressionTreeParameter.ActualName = ScaledSymbolicExpressionTreeParameterName;
127
128      validationMseEvaluator.LowerEstimationLimitParameter.ActualName = LowerEstimationLimitParameter.Name;
129      validationMseEvaluator.UpperEstimationLimitParameter.ActualName = UpperEstimationLimitParameter.Name;
130      validationMseEvaluator.SymbolicExpressionTreeParameter.ActualName = ScaledSymbolicExpressionTreeParameterName;
131      validationMseEvaluator.SymbolicExpressionTreeInterpreterParameter.ActualName = SymbolicExpressionTreeInterpreterParameter.Name;
132      validationMseEvaluator.QualityParameter.ActualName = QualityParameterName;
133      validationMseEvaluator.RegressionProblemDataParameter.ActualName = ProblemDataParameter.Name;
134      validationMseEvaluator.SamplesStartParameter.ActualName = SamplesStartParameter.Name;
135      validationMseEvaluator.SamplesEndParameter.ActualName = SamplesEndParameter.Name;
136
137      bestSolutionAnalyzer.BestSolutionParameter.ActualName = BestSolutionParameter.Name;
138      bestSolutionAnalyzer.BestSolutionQualityParameter.ActualName = BestSolutionQualityParameter.Name;
139      bestSolutionAnalyzer.LowerEstimationLimitParameter.ActualName = LowerEstimationLimitParameter.Name;
140      bestSolutionAnalyzer.ProblemDataParameter.ActualName = ProblemDataParameter.Name;
141      bestSolutionAnalyzer.QualityParameter.ActualName = QualityParameterName;
142      bestSolutionAnalyzer.ResultsParameter.ActualName = ResultsParameter.Name;
143      bestSolutionAnalyzer.SymbolicExpressionTreeInterpreterParameter.ActualName = SymbolicExpressionTreeInterpreterParameter.Name;
144      bestSolutionAnalyzer.SymbolicExpressionTreeParameter.ActualName = ScaledSymbolicExpressionTreeParameterName;
145      bestSolutionAnalyzer.SymbolicExpressionTreeParameter.Depth = SymbolicExpressionTreeParameter.Depth;
146      bestSolutionAnalyzer.UpperEstimationLimitParameter.ActualName = UpperEstimationLimitParameter.Name;
147
148      bestAvgWorstValidationQualityCalculator.AverageQualityParameter.ActualName = "Current Average Validation Quality";
149      bestAvgWorstValidationQualityCalculator.BestQualityParameter.ActualName = "Current Best Validation Quality";
150      bestAvgWorstValidationQualityCalculator.MaximizationParameter.Value = new BoolValue(false);
151      bestAvgWorstValidationQualityCalculator.QualityParameter.ActualName = QualityParameterName;
152      bestAvgWorstValidationQualityCalculator.WorstQualityParameter.ActualName = "Current Worst Validation Quality";
153
154      validationQualityMemorizer.BestQualityParameter.ActualName = "Best Validation Quality";
155      validationQualityMemorizer.QualityParameter.ActualName = QualityParameterName;
156      validationQualityMemorizer.QualityParameter.Depth = SymbolicExpressionTreeParameter.Depth;
157
158      validationValuesCollector.DataTableParameter.ActualName = "Validation Qualities";
159      validationValuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Best Validation Quality", null, "Current Best Validation Quality"));
160      validationValuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Validation Quality", null, "Best Validation Quality"));
161
162      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Best Validation Quality", null, "Current Best Validation Quality"));
163      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Validation Quality", null, "Best Validation Quality"));
164      resultsCollector.CollectedValues.Add(new LookupParameter<DataTable>("Validation Qualities"));
165      resultsCollector.ResultsParameter.ActualName = ResultsParameter.Name;
166      #endregion
167
168      #region operator graph
169      OperatorGraph.InitialOperator = subScopesProc;
170      subScopesProc.Operator = linearScaler;
171      linearScaler.Successor = validationMseEvaluator;
172      validationMseEvaluator.Successor = null;
173      subScopesProc.Successor = bestSolutionAnalyzer;
174      bestSolutionAnalyzer.Successor = bestAvgWorstValidationQualityCalculator;
175      bestAvgWorstValidationQualityCalculator.Successor = validationQualityMemorizer;
176      validationQualityMemorizer.Successor = validationValuesCollector;
177      validationValuesCollector.Successor = resultsCollector;
178      resultsCollector.Successor = null;
179      #endregion
180
181      Initialize();
182    }
183
184    [StorableConstructor]
185    private ValidationBestScaledSymbolicRegressionSolutionAnalyzer(bool deserializing) : base() { }
186
187    [StorableHook(HookType.AfterDeserialization)]
188    private void Initialize() {
189      SymbolicExpressionTreeParameter.DepthChanged += new EventHandler(SymbolicExpressionTreeParameter_DepthChanged);
190    }
191
192    public override IDeepCloneable Clone(Cloner cloner) {
193      ValidationBestScaledSymbolicRegressionSolutionAnalyzer clone = (ValidationBestScaledSymbolicRegressionSolutionAnalyzer)base.Clone(cloner);
194      clone.Initialize();
195      return clone;
196    }
197
198    private void SymbolicExpressionTreeParameter_DepthChanged(object sender, EventArgs e) {
199      validationQualityMemorizer.QualityParameter.Depth = SymbolicExpressionTreeParameter.Depth;
200      bestSolutionAnalyzer.SymbolicExpressionTreeParameter.Depth = SymbolicExpressionTreeParameter.Depth;
201    }
202  }
203}
Note: See TracBrowser for help on using the repository browser.