Free cookie consent management tool by TermsFeed Policy Generator

source: trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SymbolicRegressionPruningAnalyzer.cs @ 14125

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

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

File size: 4.2 KB
RevLine 
[10469]1#region License Information
2
3/* HeuristicLab
[12012]4 * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
[10469]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
[10368]24using HeuristicLab.Common;
25using HeuristicLab.Core;
[12744]26using HeuristicLab.Data;
[10469]27using HeuristicLab.Parameters;
[10368]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 {
[10469]34    private const string PruningOperatorParameterName = "PruningOperator";
[12358]35    public IValueParameter<SymbolicRegressionPruningOperator> PruningOperatorParameter {
36      get { return (IValueParameter<SymbolicRegressionPruningOperator>)Parameters[PruningOperatorParameterName]; }
[10368]37    }
[12358]38
39    protected override SymbolicDataAnalysisExpressionPruningOperator PruningOperator {
40      get { return PruningOperatorParameter.Value; }
[10368]41    }
42
[12358]43    private SymbolicRegressionPruningAnalyzer(SymbolicRegressionPruningAnalyzer original, Cloner cloner) : base(original, cloner) { }
44    public override IDeepCloneable Clone(Cloner cloner) { return new SymbolicRegressionPruningAnalyzer(this, cloner); }
45
[10378]46    [StorableConstructor]
47    private SymbolicRegressionPruningAnalyzer(bool deserializing) : base(deserializing) { }
48
[10368]49    public SymbolicRegressionPruningAnalyzer() {
[12358]50      Parameters.Add(new ValueParameter<SymbolicRegressionPruningOperator>(PruningOperatorParameterName, "The operator used to prune trees", new SymbolicRegressionPruningOperator(new SymbolicRegressionSolutionImpactValuesCalculator())));
[10368]51    }
[12744]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    }
[10368]85  }
86}
Note: See TracBrowser for help on using the repository browser.