Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
11/06/10 01:56:04 (14 years ago)
Author:
swagner
Message:

Merged cloning refactoring branch back into trunk (#922)

Location:
trunk/sources
Files:
28 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources

  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Analyzers/RegressionSolutionAnalyzer.cs

    r4468 r4722  
    2121
    2222using System.Collections.Generic;
     23using HeuristicLab.Common;
    2324using HeuristicLab.Core;
    2425using HeuristicLab.Data;
     
    8990    #endregion
    9091
     92
     93    [StorableConstructor]
     94    protected RegressionSolutionAnalyzer(bool deserializing) : base(deserializing) { }
     95    protected RegressionSolutionAnalyzer(RegressionSolutionAnalyzer original, Cloner cloner) : base(original, cloner) { }
    9196    public RegressionSolutionAnalyzer()
    9297      : base() {
     
    101106
    102107    [StorableHook(HookType.AfterDeserialization)]
    103     private void Initialize() {
     108    private void AfterDeserialization() {
    104109      // backwards compatibility
    105110      if (!Parameters.ContainsKey(GenerationsParameterName)) {
  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/LinearRegression/LinearRegressionSolutionCreator.cs

    r4082 r4722  
    2323using System.Collections.Generic;
    2424using System.Linq;
     25using HeuristicLab.Common;
    2526using HeuristicLab.Core;
    2627using HeuristicLab.Data;
     
    3940  [Item("LinearRegressionSolutionCreator", "Uses linear regression to create a structure tree.")]
    4041  [StorableClass]
    41   public class LinearRegressionSolutionCreator : SingleSuccessorOperator, ISolutionCreator {
     42  public sealed class LinearRegressionSolutionCreator : SingleSuccessorOperator, ISolutionCreator {
    4243    private const string SymbolicExpressionTreeParameterName = "SymbolicExpressionTree";
    4344    private const string DataAnalysisProblemDataParameterName = "DataAnalysisProblemData";
     
    4546    private const string SamplesEndParameterName = "SamplesEnd";
    4647
     48    [StorableConstructor]
     49    private LinearRegressionSolutionCreator(bool deserializing) : base(deserializing) { }
     50    private LinearRegressionSolutionCreator(LinearRegressionSolutionCreator original, Cloner cloner) : base(original, cloner) { }
    4751    public LinearRegressionSolutionCreator() {
    4852      Parameters.Add(new LookupParameter<SymbolicExpressionTree>(SymbolicExpressionTreeParameterName, "The resulting solution encoded as a symbolic expression tree."));
     
    5155      Parameters.Add(new ValueLookupParameter<IntValue>(SamplesEndParameterName, "The end of the samples on which the linear regression should be applied."));
    5256    }
    53     [StorableConstructor]
    54     public LinearRegressionSolutionCreator(bool deserializing)
    55       : base(deserializing) {
     57
     58    public override IDeepCloneable Clone(Cloner cloner) {
     59      return new LinearRegressionSolutionCreator(this, cloner);
    5660    }
    5761
  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/SupportVectorRegression/BestSupportVectorRegressionSolutionAnalyzer.cs

    r4543 r4722  
    2222using System.Collections.Generic;
    2323using System.Linq;
     24using HeuristicLab.Common;
    2425using HeuristicLab.Core;
    2526using HeuristicLab.Data;
     
    5253    #endregion
    5354
     55    [StorableConstructor]
     56    private BestSupportVectorRegressionSolutionAnalyzer(bool deserializing) : base(deserializing) { }
     57    private BestSupportVectorRegressionSolutionAnalyzer(BestSupportVectorRegressionSolutionAnalyzer original, Cloner cloner) : base(original, cloner) { }
    5458    public BestSupportVectorRegressionSolutionAnalyzer()
    5559      : base() {
    5660      Parameters.Add(new ScopeTreeLookupParameter<SupportVectorMachineModel>(SupportVectorRegressionModelParameterName, "The support vector regression models to analyze."));
    5761      Parameters.Add(new LookupParameter<SupportVectorRegressionSolution>(BestSolutionParameterName, "The best support vector regression solution."));
     62    }
     63
     64    public override IDeepCloneable Clone(Cloner cloner) {
     65      return new BestSupportVectorRegressionSolutionAnalyzer(this, cloner);
    5866    }
    5967
  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/SupportVectorRegression/SupportVectorRegressionSolution.cs

    r4543 r4722  
    2424using System.Drawing;
    2525using System.Linq;
     26using HeuristicLab.Common;
    2627using HeuristicLab.Core;
    2728using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     
    3637  [StorableClass]
    3738  public sealed class SupportVectorRegressionSolution : DataAnalysisSolution {
    38     public SupportVectorRegressionSolution() : base() { }
    39     public SupportVectorRegressionSolution(DataAnalysisProblemData problemData, SupportVectorMachineModel model, IEnumerable<string> inputVariables, double lowerEstimationLimit, double upperEstimationLimit)
    40       : base(problemData, lowerEstimationLimit, upperEstimationLimit) {
    41       this.Model = model;
    42     }
    43 
    4439    public override Image ItemImage {
    4540      get { return HeuristicLab.Common.Resources.VS2008ImageLibrary.Function; }
     
    5348    public Dataset SupportVectors {
    5449      get { return CalculateSupportVectors(); }
     50    }
     51
     52    private List<double> estimatedValues;
     53    public override IEnumerable<double> EstimatedValues {
     54      get {
     55        if (estimatedValues == null) RecalculateEstimatedValues();
     56        return estimatedValues;
     57      }
     58    }
     59
     60    public override IEnumerable<double> EstimatedTrainingValues {
     61      get {
     62        return GetEstimatedValues(ProblemData.TrainingIndizes);
     63      }
     64    }
     65
     66    public override IEnumerable<double> EstimatedTestValues {
     67      get {
     68        return GetEstimatedValues(ProblemData.TestIndizes);
     69      }
     70    }
     71
     72    [StorableConstructor]
     73    private SupportVectorRegressionSolution(bool deserializing) : base(deserializing) { }
     74    private SupportVectorRegressionSolution(SupportVectorRegressionSolution original, Cloner cloner) : base(original, cloner) { }
     75    public SupportVectorRegressionSolution() : base() { }
     76    public SupportVectorRegressionSolution(DataAnalysisProblemData problemData, SupportVectorMachineModel model, IEnumerable<string> inputVariables, double lowerEstimationLimit, double upperEstimationLimit)
     77      : base(problemData, lowerEstimationLimit, upperEstimationLimit) {
     78      this.Model = model;
     79    }
     80
     81    public override IDeepCloneable Clone(Cloner cloner) {
     82      return new SupportVectorRegressionSolution(this, cloner);
    5583    }
    5684
     
    83111    }
    84112
    85     private List<double> estimatedValues;
    86     public override IEnumerable<double> EstimatedValues {
    87       get {
    88         if (estimatedValues == null) RecalculateEstimatedValues();
    89         return estimatedValues;
    90       }
    91     }
    92 
    93     public override IEnumerable<double> EstimatedTrainingValues {
    94       get {
    95         return GetEstimatedValues(ProblemData.TrainingIndizes);
    96       }
    97     }
    98 
    99     public override IEnumerable<double> EstimatedTestValues {
    100       get {
    101         return GetEstimatedValues(ProblemData.TestIndizes);
    102       }
    103     }
    104113
    105114    private IEnumerable<double> GetEstimatedValues(IEnumerable<int> rows) {
  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/BestSymbolicRegressionSolutionAnalyzer.cs

    r4468 r4722  
    2222using System.Linq;
    2323using HeuristicLab.Analysis;
     24using HeuristicLab.Common;
    2425using HeuristicLab.Core;
    2526using HeuristicLab.Data;
     
    6768    #endregion
    6869
     70    [StorableConstructor]
     71    private BestSymbolicRegressionSolutionAnalyzer(bool deserializing) : base(deserializing) { }
     72    private BestSymbolicRegressionSolutionAnalyzer(BestSymbolicRegressionSolutionAnalyzer original, Cloner cloner) : base(original, cloner) { }
    6973    public BestSymbolicRegressionSolutionAnalyzer()
    7074      : base() {
     
    7579    }
    7680
     81    public override IDeepCloneable Clone(Cloner cloner) {
     82      return new BestSymbolicRegressionSolutionAnalyzer(this, cloner);
     83    }
     84
    7785    [StorableHook(HookType.AfterDeserialization)]
    78     private void Initialize() {
     86    private void AfterDeserialization() {
    7987      if (!Parameters.ContainsKey(VariableFrequenciesParameterName)) {
    8088        Parameters.Add(new LookupParameter<DataTable>(VariableFrequenciesParameterName, "The variable frequencies table to use for the calculation of variable impacts"));
  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/FixedValidationBestScaledSymbolicRegressionSolutionAnalyzer.cs

    r4468 r4722  
    2323using System.Linq;
    2424using HeuristicLab.Analysis;
     25using HeuristicLab.Common;
    2526using HeuristicLab.Core;
    2627using HeuristicLab.Data;
     
    165166    #endregion
    166167
     168    [StorableConstructor]
     169    private FixedValidationBestScaledSymbolicRegressionSolutionAnalyzer(bool deserializing) : base(deserializing) { }
     170    private FixedValidationBestScaledSymbolicRegressionSolutionAnalyzer(FixedValidationBestScaledSymbolicRegressionSolutionAnalyzer original, Cloner cloner) : base(original, cloner) { }
    167171    public FixedValidationBestScaledSymbolicRegressionSolutionAnalyzer()
    168172      : base() {
     
    186190    }
    187191
    188     [StorableConstructor]
    189     private FixedValidationBestScaledSymbolicRegressionSolutionAnalyzer(bool deserializing) : base() { }
     192    public override IDeepCloneable Clone(Cloner cloner) {
     193      return new FixedValidationBestScaledSymbolicRegressionSolutionAnalyzer(this, cloner);
     194    }
    190195
    191196    [StorableHook(HookType.AfterDeserialization)]
  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/SymbolicRegressionModelQualityAnalyzer.cs

    r4468 r4722  
    2424using System.Linq;
    2525using HeuristicLab.Analysis;
     26using HeuristicLab.Common;
    2627using HeuristicLab.Core;
    2728using HeuristicLab.Data;
     
    118119    #endregion
    119120
     121    [StorableConstructor]
     122    private SymbolicRegressionModelQualityAnalyzer(bool deserializing) : base(deserializing) { }
     123    private SymbolicRegressionModelQualityAnalyzer(SymbolicRegressionModelQualityAnalyzer original, Cloner cloner) : base(original, cloner) { }
    120124    public SymbolicRegressionModelQualityAnalyzer()
    121125      : base() {
     
    131135    }
    132136
    133     [StorableConstructor]
    134     private SymbolicRegressionModelQualityAnalyzer(bool deserializing) : base() { }
     137    public override IDeepCloneable Clone(Cloner cloner) {
     138      return new SymbolicRegressionModelQualityAnalyzer(this, cloner);
     139    }
    135140
    136141    public override IOperation Apply() {
  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/SymbolicRegressionModelQualityCalculator.cs

    r4468 r4722  
    2121
    2222using System;
     23using HeuristicLab.Common;
    2324using HeuristicLab.Core;
    2425using HeuristicLab.Data;
     
    8384    #endregion
    8485
     86    [StorableConstructor]
     87    private SymbolicRegressionModelQualityCalculator(bool deserializing) : base(deserializing) { }
     88    private SymbolicRegressionModelQualityCalculator(SymbolicRegressionModelQualityCalculator original, Cloner cloner) : base(original, cloner) { }
    8589    public SymbolicRegressionModelQualityCalculator()
    8690      : base() {
     
    138142
    139143    }
     144    public override IDeepCloneable Clone(Cloner cloner) {
     145      return new SymbolicRegressionModelQualityCalculator(this, cloner);
     146    }
    140147  }
    141148}
  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/SymbolicRegressionSolutionLinearScaler.cs

    r4068 r4722  
    2020#endregion
    2121
     22using HeuristicLab.Common;
    2223using HeuristicLab.Core;
    2324using HeuristicLab.Data;
     
    5354    }
    5455
     56    [StorableConstructor]
     57    private SymbolicRegressionSolutionLinearScaler(bool deserializing) : base(deserializing) { }
     58    private SymbolicRegressionSolutionLinearScaler(SymbolicRegressionSolutionLinearScaler original, Cloner cloner) : base(original, cloner) { }
    5559    public SymbolicRegressionSolutionLinearScaler()
    5660      : base() {
     
    5963      Parameters.Add(new LookupParameter<DoubleValue>(AlphaParameterName, "Alpha parameter for linear transformation."));
    6064      Parameters.Add(new LookupParameter<DoubleValue>(BetaParameterName, "Beta parameter for linear transformation."));
     65    }
     66
     67    public override IDeepCloneable Clone(Cloner cloner) {
     68      return new SymbolicRegressionSolutionLinearScaler(this, cloner);
    6169    }
    6270
  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/SymbolicRegressionTournamentPruning.cs

    r4468 r4722  
    2222using System.Collections.Generic;
    2323using System.Linq;
     24using HeuristicLab.Common;
    2425using HeuristicLab.Core;
    2526using HeuristicLab.Data;
     
    3334
    3435namespace HeuristicLab.Problems.DataAnalysis.Regression.Symbolic.Analyzers {
    35   public class SymbolicRegressionTournamentPruning : SingleSuccessorOperator, ISymbolicRegressionAnalyzer {
     36  public sealed class SymbolicRegressionTournamentPruning : SingleSuccessorOperator, ISymbolicRegressionAnalyzer {
    3637    private const string RandomParameterName = "Random";
    3738    private const string SymbolicExpressionTreeParameterName = "SymbolicExpressionTree";
     
    176177    }
    177178    #endregion
    178     protected SymbolicRegressionTournamentPruning(bool deserializing) : base(deserializing) { }
     179
     180    [StorableConstructor]
     181    private SymbolicRegressionTournamentPruning(bool deserializing) : base(deserializing) { }
     182    private SymbolicRegressionTournamentPruning(SymbolicRegressionTournamentPruning original, Cloner cloner) : base(original, cloner) { }
    179183    public SymbolicRegressionTournamentPruning()
    180184      : base() {
     
    201205    }
    202206
     207    public override IDeepCloneable Clone(Cloner cloner) {
     208      return new SymbolicRegressionTournamentPruning(this, cloner);
     209    }
     210
    203211    [StorableHook(HookType.AfterDeserialization)]
    204212    private void AfterDeserialization() {
     
    241249      double lowerEstimationLimit, double upperEstimationLimit,
    242250      double maxPruningRatio, double qualityGainWeight) {
    243         IEnumerable<int> rows = Enumerable.Range(samplesStart, samplesEnd - samplesStart)
    244           .Where(i => i < problemData.TestSamplesStart.Value || problemData.TestSamplesEnd.Value <= i);
     251      IEnumerable<int> rows = Enumerable.Range(samplesStart, samplesEnd - samplesStart)
     252        .Where(i => i < problemData.TestSamplesStart.Value || problemData.TestSamplesEnd.Value <= i);
    245253      int originalSize = tree.Size;
    246254      double originalQuality = evaluator.Evaluate(interpreter, tree,
  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/SymbolicRegressionVariableFrequencyAnalyzer.cs

    r4068 r4722  
    2222using System.Linq;
    2323using HeuristicLab.Analysis;
     24using HeuristicLab.Common;
    2425using HeuristicLab.Core;
    2526using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
     
    6061    #endregion
    6162
     63    [StorableConstructor]
     64    private SymbolicRegressionVariableFrequencyAnalyzer(bool deserializing) : base(deserializing) { }
     65    private SymbolicRegressionVariableFrequencyAnalyzer(SymbolicRegressionVariableFrequencyAnalyzer original, Cloner cloner) : base(original, cloner) { }
    6266    public SymbolicRegressionVariableFrequencyAnalyzer()
    6367      : base() {
     
    6670      Parameters.Add(new ValueLookupParameter<DataTable>(VariableFrequenciesParameterName, "The data table to store the variable frequencies."));
    6771      Parameters.Add(new LookupParameter<ResultCollection>(ResultsParameterName, "The result collection where the best symbolic regression solution should be stored."));
     72    }
     73
     74    public override IDeepCloneable Clone(Cloner cloner) {
     75      return new SymbolicRegressionVariableFrequencyAnalyzer(this, cloner);
    6876    }
    6977
  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/ValidationBestScaledSymbolicRegressionSolutionAnalyzer.cs

    r4468 r4722  
    135135    private ResultsCollector resultsCollector;
    136136
     137    [StorableConstructor]
     138    private ValidationBestScaledSymbolicRegressionSolutionAnalyzer(bool deserializing) : base(deserializing) { }
     139    private ValidationBestScaledSymbolicRegressionSolutionAnalyzer(ValidationBestScaledSymbolicRegressionSolutionAnalyzer original, Cloner cloner)
     140      : base(original, cloner) {
     141      Initialize();
     142    }
    137143    public ValidationBestScaledSymbolicRegressionSolutionAnalyzer()
    138144      : base() {
     
    249255    }
    250256
    251     [StorableConstructor]
    252     private ValidationBestScaledSymbolicRegressionSolutionAnalyzer(bool deserializing) : base() { }
     257    public override IDeepCloneable Clone(Cloner cloner) {
     258      return new ValidationBestScaledSymbolicRegressionSolutionAnalyzer(this, cloner);
     259    }
    253260
    254261    [StorableHook(HookType.AfterDeserialization)]
     262    private void AfterDeserialization() {
     263      Initialize();
     264    }
    255265    private void Initialize() {
    256266      SymbolicExpressionTreeParameter.DepthChanged += new EventHandler(SymbolicExpressionTreeParameter_DepthChanged);
    257267    }
    258268
    259     public override IDeepCloneable Clone(Cloner cloner) {
    260       ValidationBestScaledSymbolicRegressionSolutionAnalyzer clone = (ValidationBestScaledSymbolicRegressionSolutionAnalyzer)base.Clone(cloner);
    261       clone.Initialize();
    262       return clone;
    263     }
    264269
    265270    private void SymbolicExpressionTreeParameter_DepthChanged(object sender, EventArgs e) {
  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Evaluators/MultiObjectiveSymbolicRegressionEvaluator.cs

    r4468 r4722  
    2222using System.Collections.Generic;
    2323using System.Linq;
     24using HeuristicLab.Common;
    2425using HeuristicLab.Core;
    2526using HeuristicLab.Data;
     
    102103    #endregion
    103104
     105    [StorableConstructor]
     106    protected MultiObjectiveSymbolicRegressionEvaluator(bool deserializing) : base(deserializing) { }
     107    protected MultiObjectiveSymbolicRegressionEvaluator(MultiObjectiveSymbolicRegressionEvaluator original, Cloner cloner) : base(original, cloner) { }
    104108    public MultiObjectiveSymbolicRegressionEvaluator()
    105109      : base() {
     
    112116      Parameters.Add(new ValueLookupParameter<IntValue>(SamplesEndParameterName, "The end index of the dataset partition on which the symbolic regression solution should be evaluated."));
    113117      Parameters.Add(new ValueParameter<PercentValue>(RelativeNumberOfEvaluatedSamplesParameterName, "The relative number of samples of the dataset partition, which should be randomly chosen for evaluation between the start and end index.", new PercentValue(1)));
    114     }
    115 
    116     [StorableConstructor]
    117     protected MultiObjectiveSymbolicRegressionEvaluator(bool deserializing) : base(deserializing) { }
    118     [StorableHook(Persistence.Default.CompositeSerializers.Storable.HookType.AfterDeserialization)]
    119     private void AfterDeserialization() {
    120118    }
    121119
  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Evaluators/MultiObjectiveSymbolicRegressionMeanSquaredErrorEvaluator.cs

    r4166 r4722  
    2020#endregion
    2121
    22 using System;
    2322using System.Collections.Generic;
     23using HeuristicLab.Common;
    2424using HeuristicLab.Core;
    2525using HeuristicLab.Data;
     
    2727using HeuristicLab.Parameters;
    2828using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    29 using HeuristicLab.Problems.DataAnalysis.Evaluators;
    3029using HeuristicLab.Problems.DataAnalysis.Symbolic;
    3130using HeuristicLab.Problems.DataAnalysis.Symbolic.Symbols;
     
    3433  [Item("MultiObjectiveSymbolicRegressionMeanSquaredErrorEvaluator", "Calculates the mean squared error and the number of variables of a symbolic regression solution.")]
    3534  [StorableClass]
    36   public class MultiObjectiveSymbolicRegressionMeanSquaredErrorEvaluator : MultiObjectiveSymbolicRegressionEvaluator {
     35  public sealed class MultiObjectiveSymbolicRegressionMeanSquaredErrorEvaluator : MultiObjectiveSymbolicRegressionEvaluator {
    3736    private const string UpperEstimationLimitParameterName = "UpperEstimationLimit";
    3837    private const string LowerEstimationLimitParameterName = "LowerEstimationLimit";
     
    5453    }
    5554    #endregion
     55    [StorableConstructor]
     56    private MultiObjectiveSymbolicRegressionMeanSquaredErrorEvaluator(bool deserializing) : base(deserializing) { }
     57    private MultiObjectiveSymbolicRegressionMeanSquaredErrorEvaluator(MultiObjectiveSymbolicRegressionMeanSquaredErrorEvaluator original, Cloner cloner)
     58      : base(original, cloner) {
     59    }
    5660    public MultiObjectiveSymbolicRegressionMeanSquaredErrorEvaluator()
    5761      : base() {
    5862      Parameters.Add(new ValueLookupParameter<DoubleValue>(UpperEstimationLimitParameterName, "The upper limit that should be used as cut off value for the output values of symbolic expression trees."));
    5963      Parameters.Add(new ValueLookupParameter<DoubleValue>(LowerEstimationLimitParameterName, "The lower limit that should be used as cut off value for the output values of symbolic expression trees."));
     64    }
     65
     66    public override IDeepCloneable Clone(Cloner cloner) {
     67      return new MultiObjectiveSymbolicRegressionMeanSquaredErrorEvaluator(this, cloner);
    6068    }
    6169
  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Evaluators/MultiObjectiveSymbolicRegressionPearsonsRSquaredEvaluator.cs

    r4128 r4722  
    2020#endregion
    2121
    22 using System;
    2322using System.Collections.Generic;
     23using HeuristicLab.Common;
    2424using HeuristicLab.Core;
    2525using HeuristicLab.Data;
     
    2727using HeuristicLab.Parameters;
    2828using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    29 using HeuristicLab.Problems.DataAnalysis.Evaluators;
    3029using HeuristicLab.Problems.DataAnalysis.Symbolic;
    3130using HeuristicLab.Problems.DataAnalysis.Symbolic.Symbols;
     
    3433  [Item("MultiObjectiveSymbolicRegressionPearsonsRSquaredEvaluator", "Calculates the correlation coefficient r² and the number of variables of a symbolic regression solution.")]
    3534  [StorableClass]
    36   public class MultiObjectiveSymbolicRegressionPearsonsRSquaredEvaluator : MultiObjectiveSymbolicRegressionEvaluator {
     35  public sealed class MultiObjectiveSymbolicRegressionPearsonsRSquaredEvaluator : MultiObjectiveSymbolicRegressionEvaluator {
    3736    private const string UpperEstimationLimitParameterName = "UpperEstimationLimit";
    3837    private const string LowerEstimationLimitParameterName = "LowerEstimationLimit";
     
    5453    }
    5554    #endregion
     55    [StorableConstructor]
     56    private MultiObjectiveSymbolicRegressionPearsonsRSquaredEvaluator(bool deserializing) : base(deserializing) { }
     57    private MultiObjectiveSymbolicRegressionPearsonsRSquaredEvaluator(MultiObjectiveSymbolicRegressionPearsonsRSquaredEvaluator original, Cloner cloner)
     58      : base(original, cloner) {
     59    }
    5660    public MultiObjectiveSymbolicRegressionPearsonsRSquaredEvaluator()
    5761      : base() {
    5862      Parameters.Add(new ValueLookupParameter<DoubleValue>(UpperEstimationLimitParameterName, "The upper limit that should be used as cut off value for the output values of symbolic expression trees."));
    5963      Parameters.Add(new ValueLookupParameter<DoubleValue>(LowerEstimationLimitParameterName, "The lower limit that should be used as cut off value for the output values of symbolic expression trees."));
     64    }
     65
     66    public override IDeepCloneable Clone(Cloner cloner) {
     67      return new MultiObjectiveSymbolicRegressionPearsonsRSquaredEvaluator(this, cloner);
    6068    }
    6169
  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Evaluators/SingleObjectiveSymbolicRegressionEvaluator.cs

    r4468 r4722  
    2323using System.Collections.Generic;
    2424using System.Linq;
     25using HeuristicLab.Common;
    2526using HeuristicLab.Core;
    2627using HeuristicLab.Data;
     
    115116    #endregion
    116117
     118    [StorableConstructor]
     119    protected SingleObjectiveSymbolicRegressionEvaluator(bool deserializing) : base(deserializing) { }
     120    protected SingleObjectiveSymbolicRegressionEvaluator(SingleObjectiveSymbolicRegressionEvaluator original, Cloner cloner)
     121      : base(original, cloner) {
     122    }
    117123    public SingleObjectiveSymbolicRegressionEvaluator()
    118124      : base() {
     
    129135    }
    130136
    131     [StorableConstructor]
    132     protected SingleObjectiveSymbolicRegressionEvaluator(bool deserializing) : base(deserializing) { }
     137
    133138    [StorableHook(Persistence.Default.CompositeSerializers.Storable.HookType.AfterDeserialization)]
    134139    private void AfterDeserialization() {
  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Evaluators/SymbolicRegressionMeanSquaredErrorEvaluator.cs

    r4190 r4722  
    2222using System;
    2323using System.Collections.Generic;
     24using HeuristicLab.Common;
    2425using HeuristicLab.Core;
    25 using HeuristicLab.Data;
    2626using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
    27 using HeuristicLab.Parameters;
    2827using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2928using HeuristicLab.Problems.DataAnalysis.Evaluators;
     
    3534  public class SymbolicRegressionMeanSquaredErrorEvaluator : SingleObjectiveSymbolicRegressionEvaluator {
    3635
    37     public SymbolicRegressionMeanSquaredErrorEvaluator()
    38       : base() {
     36    [StorableConstructor]
     37    protected SymbolicRegressionMeanSquaredErrorEvaluator(bool deserializing) : base(deserializing) { }
     38    protected SymbolicRegressionMeanSquaredErrorEvaluator(SymbolicRegressionMeanSquaredErrorEvaluator original, Cloner cloner)
     39      : base(original, cloner) {
     40    }
     41    public SymbolicRegressionMeanSquaredErrorEvaluator() : base() { }
     42
     43    public override IDeepCloneable Clone(Cloner cloner) {
     44      return new SymbolicRegressionMeanSquaredErrorEvaluator(this, cloner);
    3945    }
    4046
  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Evaluators/SymbolicRegressionPearsonsRSquaredEvaluator.cs

    r4190 r4722  
    2222using System;
    2323using System.Collections.Generic;
     24using HeuristicLab.Common;
    2425using HeuristicLab.Core;
    25 using HeuristicLab.Data;
    2626using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
    27 using HeuristicLab.Parameters;
    2827using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2928using HeuristicLab.Problems.DataAnalysis.Evaluators;
     
    3433  [StorableClass]
    3534  public class SymbolicRegressionPearsonsRSquaredEvaluator : SingleObjectiveSymbolicRegressionEvaluator {
    36     public SymbolicRegressionPearsonsRSquaredEvaluator()
    37       : base() {
     35    [StorableConstructor]
     36    protected SymbolicRegressionPearsonsRSquaredEvaluator(bool deserializing) : base(deserializing) { }
     37    protected SymbolicRegressionPearsonsRSquaredEvaluator(SymbolicRegressionPearsonsRSquaredEvaluator original, Cloner cloner)
     38      : base(original, cloner) {
    3839    }
     40    public SymbolicRegressionPearsonsRSquaredEvaluator() : base() { }
    3941
     42    public override IDeepCloneable Clone(Cloner cloner) {
     43      return new SymbolicRegressionPearsonsRSquaredEvaluator(this, cloner);
     44    }
    4045    public override double Evaluate(ISymbolicExpressionTreeInterpreter interpreter, SymbolicExpressionTree solution, double lowerEstimationLimit, double upperEstimationLimit, Dataset dataset, string targetVariable, IEnumerable<int> rows) {
    4146      double mse = Calculate(interpreter, solution, lowerEstimationLimit, upperEstimationLimit, dataset, targetVariable, rows);
  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Evaluators/SymbolicRegressionScaledMeanAndVarianceSquaredErrorEvaluator.cs

    r4190 r4722  
    3434  [Item("SymbolicRegressionScaledMeanAndVarianceSquaredErrorEvaluator", "Calculates the mean and the variance of the squared errors of a linearly scaled symbolic regression solution.")]
    3535  [StorableClass]
    36   public class SymbolicRegressionScaledMeanAndVarianceSquaredErrorEvaluator : SymbolicRegressionMeanSquaredErrorEvaluator {
     36  public sealed class SymbolicRegressionScaledMeanAndVarianceSquaredErrorEvaluator : SymbolicRegressionMeanSquaredErrorEvaluator {
    3737    private const string QualityVarianceParameterName = "QualityVariance";
    3838    private const string QualitySamplesParameterName = "QualitySamples";
     
    9090    }
    9191    #endregion
     92    [StorableConstructor]
     93    private SymbolicRegressionScaledMeanAndVarianceSquaredErrorEvaluator(bool deserializing) : base(deserializing) { }
     94    private SymbolicRegressionScaledMeanAndVarianceSquaredErrorEvaluator(SymbolicRegressionScaledMeanAndVarianceSquaredErrorEvaluator original, Cloner cloner) : base(original, cloner) { }
    9295    public SymbolicRegressionScaledMeanAndVarianceSquaredErrorEvaluator()
    9396      : base() {
     
    100103      Parameters.Add(new LookupParameter<DoubleValue>(DecompositionVarianceParameterName, "A parameter which stores the relativ bias of the MSE."));
    101104      Parameters.Add(new LookupParameter<DoubleValue>(DecompositionCovarianceParameterName, "A parameter which stores the relativ bias of the MSE."));
     105    }
     106
     107    public override IDeepCloneable Clone(Cloner cloner) {
     108      return new SymbolicRegressionScaledMeanAndVarianceSquaredErrorEvaluator(this, cloner);
    102109    }
    103110
  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Evaluators/SymbolicRegressionScaledMeanSquaredErrorEvaluator.cs

    r4477 r4722  
    3434  [Item("SymbolicRegressionScaledMeanSquaredErrorEvaluator", "Calculates the mean squared error of a linearly scaled symbolic regression solution.")]
    3535  [StorableClass]
    36   public class SymbolicRegressionScaledMeanSquaredErrorEvaluator : SymbolicRegressionMeanSquaredErrorEvaluator {
     36  public sealed class SymbolicRegressionScaledMeanSquaredErrorEvaluator : SymbolicRegressionMeanSquaredErrorEvaluator {
    3737
    3838    #region parameter properties
     
    5454    }
    5555    #endregion
     56    [StorableConstructor]
     57    private SymbolicRegressionScaledMeanSquaredErrorEvaluator(bool deserializing) : base(deserializing) { }
     58    private SymbolicRegressionScaledMeanSquaredErrorEvaluator(SymbolicRegressionScaledMeanSquaredErrorEvaluator original, Cloner cloner) : base(original, cloner) { }
    5659    public SymbolicRegressionScaledMeanSquaredErrorEvaluator()
    5760      : base() {
    5861      Parameters.Add(new LookupParameter<DoubleValue>("Alpha", "Alpha parameter for linear scaling of the estimated values."));
    5962      Parameters.Add(new LookupParameter<DoubleValue>("Beta", "Beta parameter for linear scaling of the estimated values."));
     63    }
     64
     65    public override IDeepCloneable Clone(Cloner cloner) {
     66      return new SymbolicRegressionScaledMeanSquaredErrorEvaluator(this, cloner);
    6067    }
    6168
  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Interfaces/ISymbolicRegressionEvaluator.cs

    r4190 r4722  
    2020#endregion
    2121
     22using System.Collections.Generic;
    2223using HeuristicLab.Core;
    2324using HeuristicLab.Data;
     
    2526using HeuristicLab.Optimization;
    2627using HeuristicLab.Problems.DataAnalysis.Symbolic;
    27 using System.Collections.Generic;
    2828
    2929namespace HeuristicLab.Problems.DataAnalysis.Regression.Symbolic {
  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/MultiObjectiveSymbolicRegressionProblem.cs

    r4545 r4722  
    2121
    2222using System;
    23 using System.Collections.Generic;
    24 using System.Linq;
    2523using HeuristicLab.Common;
    2624using HeuristicLab.Core;
    2725using HeuristicLab.Data;
    28 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
    29 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Analyzers;
    30 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Creators;
    31 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Interfaces;
    3226using HeuristicLab.Optimization;
    3327using HeuristicLab.Parameters;
    3428using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    35 using HeuristicLab.PluginInfrastructure;
    36 using HeuristicLab.Problems.DataAnalysis.Regression.Symbolic.Analyzers;
    37 using HeuristicLab.Problems.DataAnalysis.Symbolic;
    3829
    3930namespace HeuristicLab.Problems.DataAnalysis.Regression.Symbolic {
     
    7162    #endregion
    7263
    73 
    7464    [StorableConstructor]
    7565    protected MultiObjectiveSymbolicRegressionProblem(bool deserializing) : base(deserializing) { }
     66    protected MultiObjectiveSymbolicRegressionProblem(MultiObjectiveSymbolicRegressionProblem original, Cloner cloner)
     67      : base(original, cloner) {
     68      RegisterParameterEvents();
     69      RegisterParameterValueEvents();
     70    }
    7671    public MultiObjectiveSymbolicRegressionProblem()
    7772      : base() {
     
    8984
    9085    public override IDeepCloneable Clone(Cloner cloner) {
    91       MultiObjectiveSymbolicRegressionProblem clone = (MultiObjectiveSymbolicRegressionProblem)base.Clone(cloner);
    92       clone.RegisterParameterEvents();
    93       clone.RegisterParameterValueEvents();
    94       return clone;
     86      return new MultiObjectiveSymbolicRegressionProblem(this, cloner);
    9587    }
    9688
  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/SimpleSymbolicRegressionEvaluator.cs

    r4068 r4722  
    2222using System;
    2323using System.Linq;
     24using HeuristicLab.Common;
    2425using HeuristicLab.Core;
    2526using HeuristicLab.Data;
     
    3334  [Item("SimpleSymbolicRegressionEvaluator", "Evaluates a symbolic regression solution and outputs a matrix of target and estimated values.")]
    3435  [StorableClass]
    35   public class SimpleSymbolicRegressionEvaluator : SingleSuccessorOperator {
     36  public sealed class SimpleSymbolicRegressionEvaluator : SingleSuccessorOperator {
    3637    private const string SymbolicExpressionTreeInterpreterParameterName = "SymbolicExpressionTreeInterpreter";
    3738    private const string FunctionTreeParameterName = "FunctionTree";
     
    100101    #endregion
    101102
     103    [StorableConstructor]
     104    private SimpleSymbolicRegressionEvaluator(bool deserializing) : base(deserializing) { }
     105    private SimpleSymbolicRegressionEvaluator(SimpleSymbolicRegressionEvaluator original, Cloner cloner) : base(original, cloner) { }
    102106    public SimpleSymbolicRegressionEvaluator()
    103107      : base() {
     
    110114      Parameters.Add(new ValueLookupParameter<DoubleValue>(LowerEstimationLimitParameterName, "The lower limit that should be used as cut off value for the output values of symbolic expression trees."));
    111115      Parameters.Add(new LookupParameter<DoubleMatrix>(ValuesParameterName, "The matrix of target and estimated values as generated by the symbolic regression solution."));
     116    }
     117
     118    public override IDeepCloneable Clone(Cloner cloner) {
     119      return new SimpleSymbolicRegressionEvaluator(this, cloner);
    112120    }
    113121
  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/SymbolicRegressionModel.cs

    r4468 r4722  
    3232  [StorableClass]
    3333  [Item("SymbolicRegressionModel", "A symbolic regression model represents an entity that provides estimated values based on input values.")]
    34   public class SymbolicRegressionModel : NamedItem, IDataAnalysisModel {
    35     private SymbolicRegressionModel() : base() { } // for cloning
     34  public sealed class SymbolicRegressionModel : NamedItem, IDataAnalysisModel {
    3635    [StorableConstructor]
    37     protected SymbolicRegressionModel(bool deserializing)
    38       : base(deserializing) {
     36    private SymbolicRegressionModel(bool deserializing) : base(deserializing) { }
     37    private SymbolicRegressionModel(SymbolicRegressionModel original, Cloner cloner)
     38      : base(original, cloner) {
     39      tree = (SymbolicExpressionTree)cloner.Clone(original.tree);
     40      interpreter = (ISymbolicExpressionTreeInterpreter)cloner.Clone(original.interpreter);
     41      inputVariables = new List<string>(original.inputVariables);
    3942    }
     43
    4044    public SymbolicRegressionModel(ISymbolicExpressionTreeInterpreter interpreter, SymbolicExpressionTree tree)
    4145      : base() {
     
    4549    }
    4650
     51    public override IDeepCloneable Clone(Cloner cloner) {
     52      return new SymbolicRegressionModel(this, cloner);
     53    }
     54
    4755    [StorableHook(HookType.AfterDeserialization)]
    48     private void AfterDeserializationHook() {
     56    private void AfterDeserialization() {
    4957      if (inputVariables == null)
    5058        this.inputVariables = tree.IterateNodesPrefix().OfType<VariableTreeNode>().Select(var => var.VariableName).Distinct().ToList();
     
    7381      return interpreter.GetSymbolicExpressionTreeValues(tree, problemData.Dataset, rows);
    7482    }
    75 
    76     public override IDeepCloneable Clone(Cloner cloner) {
    77       var clone = (SymbolicRegressionModel)base.Clone(cloner);
    78       clone.tree = (SymbolicExpressionTree)cloner.Clone(tree);
    79       clone.interpreter = (ISymbolicExpressionTreeInterpreter)cloner.Clone(interpreter);
    80       clone.inputVariables = new List<string>(inputVariables);
    81       return clone;
    82     }
    8383  }
    8484}
  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/SymbolicRegressionProblem.cs

    r4562 r4722  
    3434  [Creatable("Problems")]
    3535  [StorableClass]
    36   public class SymbolicRegressionProblem : SymbolicRegressionProblemBase, ISingleObjectiveDataAnalysisProblem {
     36  public sealed class SymbolicRegressionProblem : SymbolicRegressionProblemBase, ISingleObjectiveDataAnalysisProblem {
    3737
    3838    #region Parameter Properties
     
    7474
    7575    [StorableConstructor]
    76     protected SymbolicRegressionProblem(bool deserializing) : base(deserializing) { }
     76    private SymbolicRegressionProblem(bool deserializing) : base(deserializing) { }
     77    private SymbolicRegressionProblem(SymbolicRegressionProblem original, Cloner cloner)
     78      : base(original, cloner) {
     79      RegisterParameterEvents();
     80      RegisterParameterValueEvents();
     81    }
     82
    7783    public SymbolicRegressionProblem()
    7884      : base() {
     
    9298
    9399    public override IDeepCloneable Clone(Cloner cloner) {
    94       SymbolicRegressionProblem clone = (SymbolicRegressionProblem)base.Clone(cloner);
    95       clone.RegisterParameterEvents();
    96       clone.RegisterParameterValueEvents();
    97       return clone;
     100      return new SymbolicRegressionProblem(this, cloner);
    98101    }
    99102
  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/SymbolicRegressionProblemBase.cs

    r4486 r4722  
    130130      get {
    131131        int endIndex = (int)(DataAnalysisProblemData.TrainingIndizes.Count() * (1.0 - DataAnalysisProblemData.ValidationPercentage.Value) - 1);
    132         if (endIndex < 0) endIndex = 0; 
     132        if (endIndex < 0) endIndex = 0;
    133133        return new IntValue(DataAnalysisProblemData.TrainingIndizes.ElementAt(endIndex));
    134134      }
     
    153153    [StorableConstructor]
    154154    protected SymbolicRegressionProblemBase(bool deserializing) : base(deserializing) { }
     155    protected SymbolicRegressionProblemBase(SymbolicRegressionProblemBase original, Cloner cloner)
     156      : base(original, cloner) {
     157      operators = original.operators.Select(x => (IOperator)cloner.Clone(x)).ToList();
     158      RegisterParameterEvents();
     159      RegisterParameterValueEvents();
     160    }
    155161    public SymbolicRegressionProblemBase()
    156162      : base() {
     
    178184      RegisterParameterEvents();
    179185      RegisterParameterValueEvents();
    180     }
    181 
    182     public override IDeepCloneable Clone(Cloner cloner) {
    183       SymbolicRegressionProblemBase clone = (SymbolicRegressionProblemBase)base.Clone(cloner);
    184       clone.operators = operators.Select(x => (IOperator)cloner.Clone(x)).ToList();
    185       clone.RegisterParameterEvents();
    186       clone.RegisterParameterValueEvents();
    187       return clone;
    188186    }
    189187
  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/SymbolicRegressionSolution.cs

    r4468 r4722  
    2424using System.Drawing;
    2525using System.Linq;
     26using HeuristicLab.Common;
    2627using HeuristicLab.Core;
    2728using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     
    3536  [StorableClass]
    3637  public class SymbolicRegressionSolution : DataAnalysisSolution {
    37     public SymbolicRegressionSolution() : base() { }
    38     public SymbolicRegressionSolution(DataAnalysisProblemData problemData, SymbolicRegressionModel model, double lowerEstimationLimit, double upperEstimationLimit)
    39       : base(problemData, lowerEstimationLimit, upperEstimationLimit) {
    40       this.Model = model;
    41     }
    42 
    4338    public override Image ItemImage {
    4439      get { return HeuristicLab.Common.Resources.VS2008ImageLibrary.Function; }
     
    4843      get { return (SymbolicRegressionModel)base.Model; }
    4944      set { base.Model = value; }
    50     }
    51 
    52     protected override void RecalculateEstimatedValues() {
    53       int minLag = 0;
    54       var laggedTreeNodes = Model.SymbolicExpressionTree.IterateNodesPrefix().OfType<LaggedVariableTreeNode>();
    55       if (laggedTreeNodes.Any())
    56         minLag = laggedTreeNodes.Min(node => node.Lag);
    57       IEnumerable<double> calculatedValues =
    58           from x in Model.GetEstimatedValues(ProblemData, 0 - minLag, ProblemData.Dataset.Rows)
    59           let boundedX = Math.Min(UpperEstimationLimit, Math.Max(LowerEstimationLimit, x))
    60           select double.IsNaN(boundedX) ? UpperEstimationLimit : boundedX;
    61       estimatedValues = Enumerable.Repeat(double.NaN, Math.Abs(minLag)).Concat(calculatedValues).ToList();
    62       OnEstimatedValuesChanged();
    6345    }
    6446
     
    7961    }
    8062
     63    [StorableConstructor]
     64    protected SymbolicRegressionSolution(bool deserializing) : base(deserializing) { }
     65    protected SymbolicRegressionSolution(SymbolicRegressionSolution original, Cloner cloner)
     66      : base(original, cloner) {
     67    }
     68    public SymbolicRegressionSolution(DataAnalysisProblemData problemData, SymbolicRegressionModel model, double lowerEstimationLimit, double upperEstimationLimit)
     69      : base(problemData, lowerEstimationLimit, upperEstimationLimit) {
     70      this.Model = model;
     71    }
     72
     73    public override IDeepCloneable Clone(Cloner cloner) {
     74      return new SymbolicRegressionSolution(this, cloner);
     75    }
     76
     77    protected override void RecalculateEstimatedValues() {
     78      int minLag = 0;
     79      var laggedTreeNodes = Model.SymbolicExpressionTree.IterateNodesPrefix().OfType<LaggedVariableTreeNode>();
     80      if (laggedTreeNodes.Any())
     81        minLag = laggedTreeNodes.Min(node => node.Lag);
     82      IEnumerable<double> calculatedValues =
     83          from x in Model.GetEstimatedValues(ProblemData, 0 - minLag, ProblemData.Dataset.Rows)
     84          let boundedX = Math.Min(UpperEstimationLimit, Math.Max(LowerEstimationLimit, x))
     85          select double.IsNaN(boundedX) ? UpperEstimationLimit : boundedX;
     86      estimatedValues = Enumerable.Repeat(double.NaN, Math.Abs(minLag)).Concat(calculatedValues).ToList();
     87      OnEstimatedValuesChanged();
     88    }
     89
    8190    public virtual IEnumerable<double> GetEstimatedValues(IEnumerable<int> rows) {
    8291      if (estimatedValues == null) RecalculateEstimatedValues();
Note: See TracChangeset for help on using the changeset viewer.