Free cookie consent management tool by TermsFeed Policy Generator

source: trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/SymbolicRegressionProblem.cs @ 4054

Last change on this file since 4054 was 4054, checked in by mkommend, 14 years ago

improved Analyzers for SymoblicRegressionProblems (ticket #1074)

File size: 24.4 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;
23using System.Collections.Generic;
24using System.Linq;
25using System.Drawing;
26using HeuristicLab.Common;
27using HeuristicLab.Core;
28using HeuristicLab.Data;
29using HeuristicLab.Optimization;
30using HeuristicLab.Parameters;
31using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
32using HeuristicLab.PluginInfrastructure;
33using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
34using HeuristicLab.Problems.DataAnalysis.Regression;
35using HeuristicLab.Problems.DataAnalysis.Symbolic;
36using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.ArchitectureManipulators;
37using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Manipulators;
38using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Crossovers;
39using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Creators;
40using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Interfaces;
41using HeuristicLab.Problems.DataAnalysis.Regression.Symbolic.Analyzers;
42using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Analyzers;
43
44namespace HeuristicLab.Problems.DataAnalysis.Regression.Symbolic {
45  [Item("Symbolic Regression Problem", "Represents a symbolic regression problem.")]
46  [Creatable("Problems")]
47  [StorableClass]
48  public class SymbolicRegressionProblem : DataAnalysisProblem, ISingleObjectiveProblem {
49
50    #region Parameter Properties
51    public ValueParameter<BoolValue> MaximizationParameter {
52      get { return (ValueParameter<BoolValue>)Parameters["Maximization"]; }
53    }
54    IParameter ISingleObjectiveProblem.MaximizationParameter {
55      get { return MaximizationParameter; }
56    }
57    public new ValueParameter<SymbolicExpressionTreeCreator> SolutionCreatorParameter {
58      get { return (ValueParameter<SymbolicExpressionTreeCreator>)Parameters["SolutionCreator"]; }
59    }
60    IParameter IProblem.SolutionCreatorParameter {
61      get { return SolutionCreatorParameter; }
62    }
63    public ValueParameter<DoubleValue> LowerEstimationLimitParameter {
64      get { return (ValueParameter<DoubleValue>)Parameters["LowerEstimationLimit"]; }
65    }
66    public ValueParameter<DoubleValue> UpperEstimationLimitParameter {
67      get { return (ValueParameter<DoubleValue>)Parameters["UpperEstimationLimit"]; }
68    }
69    public ValueParameter<ISymbolicExpressionTreeInterpreter> SymbolicExpressionTreeInterpreterParameter {
70      get { return (ValueParameter<ISymbolicExpressionTreeInterpreter>)Parameters["SymbolicExpressionTreeInterpreter"]; }
71    }
72    public new ValueParameter<ISymbolicRegressionEvaluator> EvaluatorParameter {
73      get { return (ValueParameter<ISymbolicRegressionEvaluator>)Parameters["Evaluator"]; }
74    }
75    IParameter IProblem.EvaluatorParameter {
76      get { return EvaluatorParameter; }
77    }
78    public ValueParameter<ISymbolicExpressionGrammar> FunctionTreeGrammarParameter {
79      get { return (ValueParameter<ISymbolicExpressionGrammar>)Parameters["FunctionTreeGrammar"]; }
80    }
81    public ValueParameter<IntValue> MaxExpressionLengthParameter {
82      get { return (ValueParameter<IntValue>)Parameters["MaxExpressionLength"]; }
83    }
84    public ValueParameter<IntValue> MaxExpressionDepthParameter {
85      get { return (ValueParameter<IntValue>)Parameters["MaxExpressionDepth"]; }
86    }
87    public ValueParameter<IntValue> MaxFunctionDefiningBranchesParameter {
88      get { return (ValueParameter<IntValue>)Parameters["MaxFunctionDefiningBranches"]; }
89    }
90    public ValueParameter<IntValue> MaxFunctionArgumentsParameter {
91      get { return (ValueParameter<IntValue>)Parameters["MaxFunctionArguments"]; }
92    }
93    public OptionalValueParameter<DoubleValue> BestKnownQualityParameter {
94      get { return (OptionalValueParameter<DoubleValue>)Parameters["BestKnownQuality"]; }
95    }
96    IParameter ISingleObjectiveProblem.BestKnownQualityParameter {
97      get { return BestKnownQualityParameter; }
98    }
99    #endregion
100
101    #region Properties
102    public IntValue MaxExpressionLength {
103      get { return MaxExpressionLengthParameter.Value; }
104      set { MaxExpressionLengthParameter.Value = value; }
105    }
106    public IntValue MaxExpressionDepth {
107      get { return MaxExpressionDepthParameter.Value; }
108      set { MaxExpressionDepthParameter.Value = value; }
109    }
110    public IntValue MaxFunctionDefiningBranches {
111      get { return MaxFunctionDefiningBranchesParameter.Value; }
112      set { MaxFunctionDefiningBranchesParameter.Value = value; }
113    }
114    public IntValue MaxFunctionArguments {
115      get { return MaxFunctionArgumentsParameter.Value; }
116      set { MaxFunctionArgumentsParameter.Value = value; }
117    }
118    public new SymbolicExpressionTreeCreator SolutionCreator {
119      get { return SolutionCreatorParameter.Value; }
120      set { SolutionCreatorParameter.Value = value; }
121    }
122    ISolutionCreator IProblem.SolutionCreator {
123      get { return SolutionCreatorParameter.Value; }
124    }
125    public ISymbolicExpressionTreeInterpreter SymbolicExpressionTreeInterpreter {
126      get { return SymbolicExpressionTreeInterpreterParameter.Value; }
127      set { SymbolicExpressionTreeInterpreterParameter.Value = value; }
128    }
129    public DoubleValue LowerEstimationLimit {
130      get { return LowerEstimationLimitParameter.Value; }
131      set { LowerEstimationLimitParameter.Value = value; }
132    }
133    public DoubleValue UpperEstimationLimit {
134      get { return UpperEstimationLimitParameter.Value; }
135      set { UpperEstimationLimitParameter.Value = value; }
136    }
137
138    public new ISymbolicRegressionEvaluator Evaluator {
139      get { return EvaluatorParameter.Value; }
140      set { EvaluatorParameter.Value = value; }
141    }
142    ISingleObjectiveEvaluator ISingleObjectiveProblem.Evaluator {
143      get { return EvaluatorParameter.Value; }
144    }
145    IEvaluator IProblem.Evaluator {
146      get { return EvaluatorParameter.Value; }
147    }
148    public ISymbolicExpressionGrammar FunctionTreeGrammar {
149      get { return (ISymbolicExpressionGrammar)FunctionTreeGrammarParameter.Value; }
150    }
151    public DoubleValue BestKnownQuality {
152      get { return BestKnownQualityParameter.Value; }
153    }
154    private List<IOperator> operators;
155    public override IEnumerable<IOperator> Operators {
156      get { return operators; }
157    }
158    public IEnumerable<ISymbolicRegressionAnalyzer> Analyzers {
159      get { return operators.OfType<ISymbolicRegressionAnalyzer>(); }
160    }
161    public DoubleValue PunishmentFactor {
162      get { return new DoubleValue(10.0); }
163    }
164    public IntValue TrainingSamplesStart {
165      get { return new IntValue(DataAnalysisProblemData.TrainingSamplesStart.Value); }
166    }
167    public IntValue TrainingSamplesEnd {
168      get {
169        return new IntValue((DataAnalysisProblemData.TrainingSamplesStart.Value +
170          DataAnalysisProblemData.TrainingSamplesEnd.Value) / 2);
171      }
172    }
173    public IntValue ValidationSamplesStart {
174      get { return TrainingSamplesEnd; }
175    }
176    public IntValue ValidationSamplesEnd {
177      get { return new IntValue(DataAnalysisProblemData.TrainingSamplesEnd.Value); }
178    }
179    public IntValue TestSamplesStart {
180      get { return DataAnalysisProblemData.TestSamplesStart; }
181    }
182    public IntValue TestSamplesEnd {
183      get { return DataAnalysisProblemData.TestSamplesEnd; }
184    }
185    #endregion
186
187    public SymbolicRegressionProblem()
188      : base() {
189      SymbolicExpressionTreeCreator creator = new ProbabilisticTreeCreator();
190      var evaluator = new SymbolicRegressionScaledMeanSquaredErrorEvaluator();
191      var grammar = new FullFunctionalExpressionGrammar();
192      var globalGrammar = new GlobalSymbolicExpressionGrammar(grammar);
193      var interpreter = new SimpleArithmeticExpressionInterpreter();
194      Parameters.Add(new ValueParameter<BoolValue>("Maximization", "Set to false as the error of the regression model should be minimized.", (BoolValue)new BoolValue(false).AsReadOnly()));
195      Parameters.Add(new ValueParameter<SymbolicExpressionTreeCreator>("SolutionCreator", "The operator which should be used to create new symbolic regression solutions.", creator));
196      Parameters.Add(new ValueParameter<ISymbolicExpressionTreeInterpreter>("SymbolicExpressionTreeInterpreter", "The interpreter that should be used to evaluate the symbolic expression tree.", interpreter));
197      Parameters.Add(new ValueParameter<ISymbolicRegressionEvaluator>("Evaluator", "The operator which should be used to evaluate symbolic regression solutions.", evaluator));
198      Parameters.Add(new ValueParameter<DoubleValue>("LowerEstimationLimit", "The lower limit for the estimated value that can be returned by the symbolic regression model.", new DoubleValue(double.NegativeInfinity)));
199      Parameters.Add(new ValueParameter<DoubleValue>("UpperEstimationLimit", "The upper limit for the estimated value that can be returned by the symbolic regression model.", new DoubleValue(double.PositiveInfinity)));
200      Parameters.Add(new OptionalValueParameter<DoubleValue>("BestKnownQuality", "The minimal error value that reached by symbolic regression solutions for the problem."));
201      Parameters.Add(new ValueParameter<ISymbolicExpressionGrammar>("FunctionTreeGrammar", "The grammar that should be used for symbolic regression models.", globalGrammar));
202      Parameters.Add(new ValueParameter<IntValue>("MaxExpressionLength", "Maximal length of the symbolic expression.", new IntValue(100)));
203      Parameters.Add(new ValueParameter<IntValue>("MaxExpressionDepth", "Maximal depth of the symbolic expression.", new IntValue(10)));
204      Parameters.Add(new ValueParameter<IntValue>("MaxFunctionDefiningBranches", "Maximal number of automatically defined functions.", (IntValue)new IntValue(0).AsReadOnly()));
205      Parameters.Add(new ValueParameter<IntValue>("MaxFunctionArguments", "Maximal number of arguments of automatically defined functions.", (IntValue)new IntValue(0).AsReadOnly()));
206
207      creator.SymbolicExpressionTreeParameter.ActualName = "SymbolicRegressionModel";
208      evaluator.QualityParameter.ActualName = "TrainingMeanSquaredError";
209
210      ParameterizeSolutionCreator();
211      ParameterizeEvaluator();
212
213      UpdateGrammar();
214      UpdateEstimationLimits();
215      Initialize();
216    }
217
218    [StorableConstructor]
219    private SymbolicRegressionProblem(bool deserializing) : base() { }
220
221    [StorableHook(HookType.AfterDeserialization)]
222    private void AfterDeserializationHook() {
223      RegisterParameterEvents();
224      RegisterParameterValueEvents();
225    }
226
227    public override IDeepCloneable Clone(Cloner cloner) {
228      SymbolicRegressionProblem clone = (SymbolicRegressionProblem)base.Clone(cloner);
229      clone.Initialize();
230      return clone;
231    }
232
233    private void RegisterParameterValueEvents() {
234      MaxFunctionArgumentsParameter.ValueChanged += new EventHandler(ArchitectureParameter_ValueChanged);
235      MaxFunctionDefiningBranchesParameter.ValueChanged += new EventHandler(ArchitectureParameter_ValueChanged);
236      SolutionCreatorParameter.ValueChanged += new EventHandler(SolutionCreatorParameter_ValueChanged);
237      EvaluatorParameter.ValueChanged += new EventHandler(EvaluatorParameter_ValueChanged);
238    }
239
240    private void RegisterParameterEvents() {
241      MaxFunctionArgumentsParameter.Value.ValueChanged += new EventHandler(ArchitectureParameterValue_ValueChanged);
242      MaxFunctionDefiningBranchesParameter.Value.ValueChanged += new EventHandler(ArchitectureParameterValue_ValueChanged);
243      SolutionCreator.SymbolicExpressionTreeParameter.ActualNameChanged += new EventHandler(SolutionCreator_SymbolicExpressionTreeParameter_ActualNameChanged);
244      Evaluator.QualityParameter.ActualNameChanged += new EventHandler(Evaluator_QualityParameter_ActualNameChanged);
245    }
246
247    #region event handling
248    protected override void OnDataAnalysisProblemChanged(EventArgs e) {
249      base.OnDataAnalysisProblemChanged(e);
250      BestKnownQualityParameter.Value = null;
251      // paritions could be changed
252      ParameterizeEvaluator();
253      ParameterizeAnalyzers();
254      // input variables could have been changed
255      UpdateGrammar();
256      // estimation limits have to be recalculated
257      UpdateEstimationLimits();
258    }
259    protected virtual void OnArchitectureParameterChanged(EventArgs e) {
260      UpdateGrammar();
261    }
262    protected virtual void OnGrammarChanged(EventArgs e) { }
263    protected virtual void OnOperatorsChanged(EventArgs e) { RaiseOperatorsChanged(e); }
264    protected virtual void OnSolutionCreatorChanged(EventArgs e) {
265      SolutionCreator.SymbolicExpressionTreeParameter.ActualNameChanged += new EventHandler(SolutionCreator_SymbolicExpressionTreeParameter_ActualNameChanged);
266      ParameterizeSolutionCreator();
267      OnSolutionParameterNameChanged(e);
268      RaiseSolutionCreatorChanged(e);
269    }
270
271    protected virtual void OnSolutionParameterNameChanged(EventArgs e) {
272      ParameterizeEvaluator();
273      ParameterizeAnalyzers();
274      ParameterizeOperators();
275    }
276
277    protected virtual void OnEvaluatorChanged(EventArgs e) {
278      Evaluator.QualityParameter.ActualNameChanged += new EventHandler(Evaluator_QualityParameter_ActualNameChanged);
279      ParameterizeEvaluator();
280      ParameterizeAnalyzers();
281      RaiseEvaluatorChanged(e);
282    }
283    protected virtual void OnQualityParameterNameChanged(EventArgs e) {
284      ParameterizeAnalyzers();
285    }
286    #endregion
287
288    #region event handlers
289    private void SolutionCreatorParameter_ValueChanged(object sender, EventArgs e) {
290      OnSolutionCreatorChanged(e);
291    }
292    private void SolutionCreator_SymbolicExpressionTreeParameter_ActualNameChanged(object sender, EventArgs e) {
293      OnSolutionParameterNameChanged(e);
294    }
295    private void EvaluatorParameter_ValueChanged(object sender, EventArgs e) {
296      OnEvaluatorChanged(e);
297    }
298    private void ArchitectureParameter_ValueChanged(object sender, EventArgs e) {
299      MaxFunctionArgumentsParameter.Value.ValueChanged += new EventHandler(ArchitectureParameterValue_ValueChanged);
300      MaxFunctionDefiningBranchesParameter.Value.ValueChanged += new EventHandler(ArchitectureParameterValue_ValueChanged);
301      OnArchitectureParameterChanged(e);
302    }
303    private void ArchitectureParameterValue_ValueChanged(object sender, EventArgs e) {
304      OnArchitectureParameterChanged(e);
305    }
306    private void Evaluator_QualityParameter_ActualNameChanged(object sender, EventArgs e) {
307      OnQualityParameterNameChanged(e);
308    }
309    #endregion
310
311    #region Helpers
312    private void Initialize() {
313      InitializeOperators();
314      RegisterParameterEvents();
315      RegisterParameterValueEvents();
316    }
317
318    private void UpdateGrammar() {
319      foreach (var varSymbol in FunctionTreeGrammar.Symbols.OfType<HeuristicLab.Problems.DataAnalysis.Symbolic.Symbols.Variable>()) {
320        varSymbol.VariableNames = DataAnalysisProblemData.InputVariables.CheckedItems.Select(x => x.Value.Value);
321      }
322      var globalGrammar = FunctionTreeGrammar as GlobalSymbolicExpressionGrammar;
323      if (globalGrammar != null) {
324        globalGrammar.MaxFunctionArguments = MaxFunctionArguments.Value;
325        globalGrammar.MaxFunctionDefinitions = MaxFunctionDefiningBranches.Value;
326      }
327    }
328
329    private void UpdateEstimationLimits() {
330      if (TrainingSamplesStart.Value < TrainingSamplesEnd.Value &&
331        DataAnalysisProblemData.Dataset.VariableNames.Contains(DataAnalysisProblemData.TargetVariable.Value)) {
332        var targetValues = DataAnalysisProblemData.Dataset.GetVariableValues(DataAnalysisProblemData.TargetVariable.Value, TrainingSamplesStart.Value, TrainingSamplesEnd.Value);
333        var mean = targetValues.Average();
334        var range = targetValues.Max() - targetValues.Min();
335        UpperEstimationLimit = new DoubleValue(mean + PunishmentFactor.Value * range);
336        LowerEstimationLimit = new DoubleValue(mean - PunishmentFactor.Value * range);
337      }
338    }
339
340    private void InitializeOperators() {
341      operators = new List<IOperator>();
342      operators.AddRange(ApplicationManager.Manager.GetInstances<ISymbolicExpressionTreeOperator>().OfType<IOperator>());
343      operators.Add(new SymbolicRegressionTournamentPruning());
344      operators.Add(new SymbolicRegressionVariableFrequencyAnalyzer());
345      operators.Add(new FixedValidationBestScaledSymbolicRegressionSolutionAnalyzer());
346      operators.Add(new MinAverageMaxSymbolicExpressionTreeSizeAnalyzer());
347      operators.Add(new SymbolicRegressionModelQualityAnalyzer());
348      ParameterizeOperators();
349      ParameterizeAnalyzers();
350    }
351
352    private void ParameterizeSolutionCreator() {
353      SolutionCreator.SymbolicExpressionGrammarParameter.ActualName = FunctionTreeGrammarParameter.Name;
354      SolutionCreator.MaxTreeHeightParameter.ActualName = MaxExpressionDepthParameter.Name;
355      SolutionCreator.MaxTreeSizeParameter.ActualName = MaxExpressionLengthParameter.Name;
356      SolutionCreator.MaxFunctionArgumentsParameter.ActualName = MaxFunctionArgumentsParameter.Name;
357      SolutionCreator.MaxFunctionDefinitionsParameter.ActualName = MaxFunctionDefiningBranchesParameter.Name;
358    }
359
360    private void ParameterizeEvaluator() {
361      Evaluator.SymbolicExpressionTreeParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName;
362      Evaluator.RegressionProblemDataParameter.ActualName = DataAnalysisProblemDataParameter.Name;
363      Evaluator.SamplesStartParameter.Value = TrainingSamplesStart;
364      Evaluator.SamplesEndParameter.Value = TrainingSamplesEnd;
365    }
366
367    private void ParameterizeAnalyzers() {
368      foreach (var analyzer in Analyzers) {
369        analyzer.SymbolicExpressionTreeParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName;
370        var fixedBestValidationSolutionAnalyzer = analyzer as FixedValidationBestScaledSymbolicRegressionSolutionAnalyzer;
371        if (fixedBestValidationSolutionAnalyzer != null) {
372          fixedBestValidationSolutionAnalyzer.ProblemDataParameter.ActualName = DataAnalysisProblemDataParameter.Name;
373          fixedBestValidationSolutionAnalyzer.UpperEstimationLimitParameter.ActualName = UpperEstimationLimitParameter.Name;
374          fixedBestValidationSolutionAnalyzer.LowerEstimationLimitParameter.ActualName = LowerEstimationLimitParameter.Name;
375          fixedBestValidationSolutionAnalyzer.SymbolicExpressionTreeInterpreterParameter.ActualName = SymbolicExpressionTreeInterpreterParameter.Name;
376          fixedBestValidationSolutionAnalyzer.SymbolicExpressionTreeParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName;
377          fixedBestValidationSolutionAnalyzer.ValidationSamplesStartParameter.Value = ValidationSamplesStart;
378          fixedBestValidationSolutionAnalyzer.ValidationSamplesEndParameter.Value = ValidationSamplesEnd;
379          fixedBestValidationSolutionAnalyzer.BestKnownQualityParameter.ActualName = BestKnownQualityParameter.Name;
380          fixedBestValidationSolutionAnalyzer.QualityParameter.ActualName = Evaluator.QualityParameter.ActualName;
381        }
382        var bestValidationSolutionAnalyzer = analyzer as FixedValidationBestScaledSymbolicRegressionSolutionAnalyzer;
383        if (bestValidationSolutionAnalyzer != null) {
384          bestValidationSolutionAnalyzer.ProblemDataParameter.ActualName = DataAnalysisProblemDataParameter.Name;
385          bestValidationSolutionAnalyzer.UpperEstimationLimitParameter.ActualName = UpperEstimationLimitParameter.Name;
386          bestValidationSolutionAnalyzer.LowerEstimationLimitParameter.ActualName = LowerEstimationLimitParameter.Name;
387          bestValidationSolutionAnalyzer.SymbolicExpressionTreeInterpreterParameter.ActualName = SymbolicExpressionTreeInterpreterParameter.Name;
388          bestValidationSolutionAnalyzer.SymbolicExpressionTreeParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName;
389          bestValidationSolutionAnalyzer.ValidationSamplesStartParameter.Value = ValidationSamplesStart;
390          bestValidationSolutionAnalyzer.ValidationSamplesEndParameter.Value = ValidationSamplesEnd;
391          bestValidationSolutionAnalyzer.BestKnownQualityParameter.ActualName = BestKnownQualityParameter.Name;
392          bestValidationSolutionAnalyzer.QualityParameter.ActualName = Evaluator.QualityParameter.ActualName;
393        }
394        var symbolicRegressionModelQualityAnalyzer = analyzer as SymbolicRegressionModelQualityAnalyzer;
395        if (symbolicRegressionModelQualityAnalyzer != null) {
396          symbolicRegressionModelQualityAnalyzer.ProblemDataParameter.ActualName = DataAnalysisProblemDataParameter.Name;
397          symbolicRegressionModelQualityAnalyzer.UpperEstimationLimitParameter.ActualName = UpperEstimationLimitParameter.Name;
398          symbolicRegressionModelQualityAnalyzer.LowerEstimationLimitParameter.ActualName = LowerEstimationLimitParameter.Name;
399          symbolicRegressionModelQualityAnalyzer.SymbolicExpressionTreeInterpreterParameter.ActualName = SymbolicExpressionTreeInterpreterParameter.Name;
400          symbolicRegressionModelQualityAnalyzer.SymbolicExpressionTreeParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName;
401        }
402        var varFreqAnalyzer = analyzer as SymbolicRegressionVariableFrequencyAnalyzer;
403        if (varFreqAnalyzer != null) {
404          varFreqAnalyzer.ProblemDataParameter.ActualName = DataAnalysisProblemDataParameter.Name;
405        }
406        var pruningOperator = analyzer as SymbolicRegressionTournamentPruning;
407        if (pruningOperator != null) {
408          pruningOperator.SamplesStartParameter.Value = TrainingSamplesStart;
409          pruningOperator.SamplesEndParameter.Value = TrainingSamplesEnd;
410          pruningOperator.DataAnalysisProblemDataParameter.ActualName = DataAnalysisProblemDataParameter.Name;
411          pruningOperator.SymbolicExpressionTreeParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName;
412          pruningOperator.SymbolicExpressionTreeInterpreterParameter.ActualName = SymbolicExpressionTreeInterpreterParameter.Name;
413          pruningOperator.LowerEstimationLimitParameter.ActualName = LowerEstimationLimitParameter.Name;
414          pruningOperator.UpperEstimationLimitParameter.ActualName = UpperEstimationLimitParameter.Name;
415        }
416      }
417      foreach (ISymbolicExpressionTreeAnalyzer analyzer in Operators.OfType<ISymbolicExpressionTreeAnalyzer>()) {
418        analyzer.SymbolicExpressionTreeParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName;
419      }
420    }
421
422    private void ParameterizeOperators() {
423      foreach (ISymbolicExpressionTreeOperator op in Operators.OfType<ISymbolicExpressionTreeOperator>()) {
424        op.MaxTreeHeightParameter.ActualName = MaxExpressionDepthParameter.Name;
425        op.MaxTreeSizeParameter.ActualName = MaxExpressionLengthParameter.Name;
426        op.SymbolicExpressionGrammarParameter.ActualName = FunctionTreeGrammarParameter.Name;
427      }
428      foreach (ISymbolicExpressionTreeCrossover op in Operators.OfType<ISymbolicExpressionTreeCrossover>()) {
429        op.ParentsParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName;
430        op.ChildParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName;
431      }
432      foreach (ISymbolicExpressionTreeManipulator op in Operators.OfType<ISymbolicExpressionTreeManipulator>()) {
433        op.SymbolicExpressionTreeParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName;
434      }
435      foreach (ISymbolicExpressionTreeArchitectureManipulator op in Operators.OfType<ISymbolicExpressionTreeArchitectureManipulator>()) {
436        op.MaxFunctionArgumentsParameter.ActualName = MaxFunctionArgumentsParameter.Name;
437        op.MaxFunctionDefinitionsParameter.ActualName = MaxFunctionDefiningBranchesParameter.Name;
438      }
439    }
440    #endregion
441  }
442}
Note: See TracBrowser for help on using the repository browser.