Free cookie consent management tool by TermsFeed Policy Generator

source: branches/RemoveBackwardsCompatibility/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SymbolicRegressionPruningAnalyzer.cs @ 14781

Last change on this file since 14781 was 12744, checked in by gkronber, 9 years ago

#2359: added after-deserialization code for backwards-compatibility

File size: 4.2 KB
Line 
1#region License Information
2
3/* HeuristicLab
4 * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
5 *
6 * This file is part of HeuristicLab.
7 *
8 * HeuristicLab is free software: you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation, either version 3 of the License, or
11 * (at your option) any later version.
12 *
13 * HeuristicLab is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
20 */
21
22#endregion
23
24using HeuristicLab.Common;
25using HeuristicLab.Core;
26using HeuristicLab.Data;
27using HeuristicLab.Parameters;
28using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
29
30namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Regression {
31  [Item("SymbolicRegressionPruningAnalyzer", "An analyzer that prunes introns from the population.")]
32  [StorableClass]
33  public sealed class SymbolicRegressionPruningAnalyzer : SymbolicDataAnalysisSingleObjectivePruningAnalyzer {
34    private const string PruningOperatorParameterName = "PruningOperator";
35    public IValueParameter<SymbolicRegressionPruningOperator> PruningOperatorParameter {
36      get { return (IValueParameter<SymbolicRegressionPruningOperator>)Parameters[PruningOperatorParameterName]; }
37    }
38
39    protected override SymbolicDataAnalysisExpressionPruningOperator PruningOperator {
40      get { return PruningOperatorParameter.Value; }
41    }
42
43    private SymbolicRegressionPruningAnalyzer(SymbolicRegressionPruningAnalyzer original, Cloner cloner) : base(original, cloner) { }
44    public override IDeepCloneable Clone(Cloner cloner) { return new SymbolicRegressionPruningAnalyzer(this, cloner); }
45
46    [StorableConstructor]
47    private SymbolicRegressionPruningAnalyzer(bool deserializing) : base(deserializing) { }
48
49    public SymbolicRegressionPruningAnalyzer() {
50      Parameters.Add(new ValueParameter<SymbolicRegressionPruningOperator>(PruningOperatorParameterName, "The operator used to prune trees", new SymbolicRegressionPruningOperator(new SymbolicRegressionSolutionImpactValuesCalculator())));
51    }
52
53    [StorableHook(HookType.AfterDeserialization)]
54    private void AfterDeserialization() {
55      // BackwardsCompatibility3.3
56
57      #region Backwards compatible code, remove with 3.4
58      if (Parameters.ContainsKey(PruningOperatorParameterName)) {
59        var oldParam = Parameters[PruningOperatorParameterName] as ValueParameter<SymbolicDataAnalysisExpressionPruningOperator>;
60        if (oldParam != null) {
61          Parameters.Remove(oldParam);
62          Parameters.Add(new ValueParameter<SymbolicRegressionPruningOperator>(PruningOperatorParameterName, "The operator used to prune trees", new SymbolicRegressionPruningOperator(new SymbolicRegressionSolutionImpactValuesCalculator())));
63        }
64      } else {
65        // not yet contained
66        Parameters.Add(new ValueParameter<SymbolicRegressionPruningOperator>(PruningOperatorParameterName, "The operator used to prune trees", new SymbolicRegressionPruningOperator(new SymbolicRegressionSolutionImpactValuesCalculator())));
67      }
68
69
70      if (Parameters.ContainsKey("PruneOnlyZeroImpactNodes")) {
71        PruningOperator.PruneOnlyZeroImpactNodes = ((IFixedValueParameter<BoolValue>)Parameters["PruneOnlyZeroImpactNodes"]).Value.Value;
72        Parameters.Remove(Parameters["PruneOnlyZeroImpactNodes"]);
73      }
74      if (Parameters.ContainsKey("ImpactThreshold")) {
75        PruningOperator.NodeImpactThreshold = ((IFixedValueParameter<DoubleValue>)Parameters["ImpactThreshold"]).Value.Value;
76        Parameters.Remove(Parameters["ImpactThreshold"]);
77      }
78      if (Parameters.ContainsKey("ImpactValuesCalculator")) {
79        PruningOperator.ImpactValuesCalculator = ((ValueParameter<SymbolicDataAnalysisSolutionImpactValuesCalculator>)Parameters["ImpactValuesCalculator"]).Value;
80        Parameters.Remove(Parameters["ImpactValuesCalculator"]);
81      }
82
83      #endregion
84    }
85  }
86}
Note: See TracBrowser for help on using the repository browser.