Free cookie consent management tool by TermsFeed Policy Generator

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

Last change on this file since 4125 was 4118, checked in by abeham, 14 years ago

#1090

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