Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
02/25/15 17:53:25 (10 years ago)
Author:
bburlacu
Message:

#2326: Adapted code in the diversity analyzers according to the new base class. Improved wiring of similarity calculators and analyzers.

Location:
branches/SymbolicExpressionTreeDiversityAnalyzers
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • branches/SymbolicExpressionTreeDiversityAnalyzers/HeuristicLab.Problems.DataAnalysis.Symbolic

  • branches/SymbolicExpressionTreeDiversityAnalyzers/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/SymbolicExpressionTreeDiversityAnalyzers/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/SingleObjective/SymbolicClassificationPhenotypicDiversityAnalyzer.cs

    r12064 r12075  
    2020#endregion
    2121
     22using System.Collections.Generic;
    2223using System.Linq;
    2324using HeuristicLab.Analysis;
     
    2627using HeuristicLab.Data;
    2728using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
     29using HeuristicLab.Optimization;
    2830using HeuristicLab.Parameters;
    2931using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     
    3234  [Item("SymbolicClassificationPhenotypicDiversityAnalyzer", "An analyzer which calculates diversity based on the phenotypic distance between trees")]
    3335  [StorableClass]
    34   public class SymbolicClassificationPhenotypicDiversityAnalyzer : SingleObjectivePopulationDiversityAnalyzer {
     36  public class SymbolicClassificationPhenotypicDiversityAnalyzer : PopulationSimilarityAnalyzer {
    3537    #region parameter names
    3638    private const string SymbolicExpressionTreeParameterName = "SymbolicExpressionTree";
     
    7476    #endregion
    7577
    76     public SymbolicClassificationPhenotypicDiversityAnalyzer() {
    77       SimilarityCalculator = new SymbolicExpressionTreePhenotypicSimilarityCalculator() { SolutionVariableName = "SymbolicExpressionTree", QualityVariableName = "Quality" };
     78    public SymbolicClassificationPhenotypicDiversityAnalyzer(IEnumerable<ISingleObjectiveSolutionSimilarityCalculator> validSimilarityCalculators)
     79      : base(validSimilarityCalculators) {
    7880      #region add parameters
    7981      Parameters.Add(new ScopeTreeLookupParameter<ISymbolicExpressionTree>(SymbolicExpressionTreeParameterName, "The symbolic expression trees."));
     
    8587      Parameters.Add(new FixedValueParameter<BoolValue>(UseClassValuesParameterName, "Specifies whether the raw estimated values of the tree or the corresponding class values should be used for similarity calculation.", new BoolValue(false)));
    8688      #endregion
     89
     90      UpdateCounterParameter.ActualName = "PhenotypicDiversityAnalyzerUpdateCounter";
    8791    }
    8892
     
    101105
    102106    public override IOperation Apply() {
    103       var trees = SymbolicExpressionTreeParameter.ActualValue;
    104       var interpreter = SymbolicDataAnalysisTreeInterpreterParameter.ActualValue;
    105       var problemData = ProblemDataParameter.ActualValue;
    106       var ds = ProblemDataParameter.ActualValue.Dataset;
    107       var rows = ProblemDataParameter.ActualValue.TrainingIndices;
    108       var modelCreator = ModelCreatorParameter.ActualValue;
    109       var estimationLimits = EstimationLimitsParameter.ActualValue;
    110       var evaluatedValues = new ItemArray<DoubleArray>(trees.Length);
    111       for (int i = 0; i < trees.Length; ++i) {
    112         var model = (IDiscriminantFunctionClassificationModel)modelCreator.CreateSymbolicDiscriminantFunctionClassificationModel(trees[i], interpreter, estimationLimits.Lower, estimationLimits.Upper);
    113         model.RecalculateModelParameters(problemData, rows);
    114         var values = UseClassValues ? model.GetEstimatedClassValues(ds, rows) : model.GetEstimatedValues(ds, rows);
    115         evaluatedValues[i] = new DoubleArray(values.ToArray());
     107      int updateInterval = UpdateIntervalParameter.Value.Value;
     108      IntValue updateCounter = UpdateCounterParameter.ActualValue;
     109
     110      if (updateCounter == null) {
     111        updateCounter = new IntValue(updateInterval);
     112        UpdateCounterParameter.ActualValue = updateCounter;
    116113      }
    117       EvaluatedValuesParameter.ActualValue = evaluatedValues;
     114
     115      if (updateCounter.Value == updateInterval) {
     116        var trees = SymbolicExpressionTreeParameter.ActualValue;
     117        var interpreter = SymbolicDataAnalysisTreeInterpreterParameter.ActualValue;
     118        var problemData = ProblemDataParameter.ActualValue;
     119        var ds = ProblemDataParameter.ActualValue.Dataset;
     120        var rows = ProblemDataParameter.ActualValue.TrainingIndices;
     121        var modelCreator = ModelCreatorParameter.ActualValue;
     122        var estimationLimits = EstimationLimitsParameter.ActualValue;
     123        var evaluatedValues = new ItemArray<DoubleArray>(trees.Length);
     124        for (int i = 0; i < trees.Length; ++i) {
     125          var model =
     126            (IDiscriminantFunctionClassificationModel)
     127              modelCreator.CreateSymbolicDiscriminantFunctionClassificationModel(trees[i], interpreter,
     128                estimationLimits.Lower, estimationLimits.Upper);
     129          model.RecalculateModelParameters(problemData, rows);
     130          var values = UseClassValues ? model.GetEstimatedClassValues(ds, rows) : model.GetEstimatedValues(ds, rows);
     131          evaluatedValues[i] = new DoubleArray(values.ToArray());
     132        }
     133        EvaluatedValuesParameter.ActualValue = evaluatedValues;
     134      }
    118135      return base.Apply();
    119136    }
  • branches/SymbolicExpressionTreeDiversityAnalyzers/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/SingleObjective/SymbolicClassificationSingleObjectiveProblem.cs

    r12068 r12075  
    2222using HeuristicLab.Common;
    2323using HeuristicLab.Core;
     24using HeuristicLab.Optimization;
    2425using HeuristicLab.Parameters;
    2526using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     
    115116      Operators.Add(new SymbolicClassificationSingleObjectiveTrainingParetoBestSolutionAnalyzer());
    116117      Operators.Add(new SymbolicClassificationSingleObjectiveValidationParetoBestSolutionAnalyzer());
    117       Operators.Add(new SymbolicClassificationPhenotypicDiversityAnalyzer());
    118118      Operators.Add(new SymbolicExpressionTreePhenotypicSimilarityCalculator());
     119      Operators.Add(new SymbolicClassificationPhenotypicDiversityAnalyzer(Operators.OfType<SymbolicExpressionTreePhenotypicSimilarityCalculator>()) { DiversityResultName = "Phenotypic Similarity" });
    119120      ParameterizeOperators();
    120121    }
     
    148149      }
    149150
    150       foreach (var op in Operators.OfType<SymbolicExpressionTreePhenotypicSimilarityCalculator>()) {
     151      foreach (var op in Operators.OfType<ISingleObjectiveSolutionSimilarityCalculator>()) {
    151152        op.SolutionVariableName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName;
    152         op.ProblemData = ProblemData;
    153         op.Interpreter = SymbolicExpressionTreeInterpreter;
    154       }
     153        op.QualityVariableName = Evaluator.QualityParameter.ActualName;
    155154
    156       foreach (var op in Operators.OfType<SymbolicClassificationPhenotypicDiversityAnalyzer>()) {
    157         var sim = Operators.OfType<SymbolicExpressionTreePhenotypicSimilarityCalculator>().FirstOrDefault();
    158         if (sim != null)
    159           op.SimilarityCalculator = sim;
     155        if (op is SymbolicExpressionTreePhenotypicSimilarityCalculator) {
     156          var phenotypicSimilarityCalculator = (SymbolicExpressionTreePhenotypicSimilarityCalculator)op;
     157          phenotypicSimilarityCalculator.ProblemData = ProblemData;
     158          phenotypicSimilarityCalculator.Interpreter = SymbolicExpressionTreeInterpreter;
     159        }
    160160      }
    161161    }
  • branches/SymbolicExpressionTreeDiversityAnalyzers/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/SymbolicExpressionTreeDiversityAnalyzers/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/SymbolicRegressionPhenotypicDiversityAnalyzer.cs

    r12049 r12075  
    2020#endregion
    2121
     22using System.Collections.Generic;
    2223using System.Linq;
    2324using HeuristicLab.Analysis;
     
    2627using HeuristicLab.Data;
    2728using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
     29using HeuristicLab.Optimization;
    2830using HeuristicLab.Parameters;
    2931using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     
    3234  [Item("SymbolicRegressionPhenotypicDiversityAnalyzer", "An analyzer which calculates diversity based on the phenotypic distance between trees")]
    3335  [StorableClass]
    34   public class SymbolicRegressionPhenotypicDiversityAnalyzer : SingleObjectivePopulationDiversityAnalyzer {
     36  public class SymbolicRegressionPhenotypicDiversityAnalyzer : PopulationSimilarityAnalyzer {
    3537    #region parameter names
    3638    private const string SymbolicExpressionTreeParameterName = "SymbolicExpressionTree";
     
    5961    #endregion
    6062
    61     public SymbolicRegressionPhenotypicDiversityAnalyzer() {
    62       SimilarityCalculator = new SymbolicExpressionTreePhenotypicSimilarityCalculator { SolutionVariableName = "SymbolicExpressionTree", QualityVariableName = "Quality" };
     63    public SymbolicRegressionPhenotypicDiversityAnalyzer(IEnumerable<ISingleObjectiveSolutionSimilarityCalculator> validSimilarityCalculators)
     64      : base(validSimilarityCalculators) {
    6365      #region add parameters
    6466      Parameters.Add(new ScopeTreeLookupParameter<ISymbolicExpressionTree>(SymbolicExpressionTreeParameterName, "The symbolic expression trees."));
     
    6870      Parameters.Add(new ValueLookupParameter<DoubleLimit>(EstimationLimitsParameterName, "The upper and lower limit that should be used as cut off value for the output values of symbolic data analysis trees."));
    6971      #endregion
     72
     73      UpdateCounterParameter.ActualName = "PhenotypicDiversityAnalyzerUpdateCounter";
    7074    }
    7175
     
    8488
    8589    public override IOperation Apply() {
    86       var trees = SymbolicExpressionTreeParameter.ActualValue;
    87       var interpreter = SymbolicDataAnalysisTreeInterpreterParameter.ActualValue;
    88       var ds = ProblemDataParameter.ActualValue.Dataset;
    89       var rows = ProblemDataParameter.ActualValue.TrainingIndices;
     90      int updateInterval = UpdateIntervalParameter.Value.Value;
     91      IntValue updateCounter = UpdateCounterParameter.ActualValue;
    9092
    91       var evaluatedValues = new ItemArray<DoubleArray>(trees.Select(t => new DoubleArray(interpreter.GetSymbolicExpressionTreeValues(t, ds, rows).ToArray())));
    92       EvaluatedValuesParameter.ActualValue = evaluatedValues;
     93      if (updateCounter == null) {
     94        updateCounter = new IntValue(updateInterval);
     95        UpdateCounterParameter.ActualValue = updateCounter;
     96      }
    9397
     98      if (updateCounter.Value == updateInterval) {
     99        var trees = SymbolicExpressionTreeParameter.ActualValue;
     100        var interpreter = SymbolicDataAnalysisTreeInterpreterParameter.ActualValue;
     101        var ds = ProblemDataParameter.ActualValue.Dataset;
     102        var rows = ProblemDataParameter.ActualValue.TrainingIndices;
     103
     104        var evaluatedValues = new ItemArray<DoubleArray>(trees.Select(t => new DoubleArray(interpreter.GetSymbolicExpressionTreeValues(t, ds, rows).ToArray())));
     105        EvaluatedValuesParameter.ActualValue = evaluatedValues;
     106      }
    94107      return base.Apply();
    95108    }
  • branches/SymbolicExpressionTreeDiversityAnalyzers/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/SymbolicRegressionSingleObjectiveProblem.cs

    r12068 r12075  
    2323using HeuristicLab.Common;
    2424using HeuristicLab.Core;
     25using HeuristicLab.Optimization;
    2526using HeuristicLab.Parameters;
    2627using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     
    111112      Operators.Add(new SymbolicRegressionSingleObjectiveValidationParetoBestSolutionAnalyzer());
    112113      Operators.Add(new SymbolicRegressionSolutionsAnalyzer());
    113       Operators.Add(new SymbolicRegressionPhenotypicDiversityAnalyzer());
    114114      Operators.Add(new SymbolicExpressionTreePhenotypicSimilarityCalculator());
     115      Operators.Add(new SymbolicRegressionPhenotypicDiversityAnalyzer(Operators.OfType<SymbolicExpressionTreePhenotypicSimilarityCalculator>()) { DiversityResultName = "Phenotypic Diversity" });
    115116      ParameterizeOperators();
    116117    }
     
    143144      }
    144145
    145       foreach (var op in Operators.OfType<SymbolicExpressionTreePhenotypicSimilarityCalculator>()) {
     146      foreach (var op in Operators.OfType<ISingleObjectiveSolutionSimilarityCalculator>()) {
    146147        op.SolutionVariableName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName;
    147         op.ProblemData = ProblemData;
    148         op.Interpreter = SymbolicExpressionTreeInterpreter;
    149       }
     148        op.QualityVariableName = Evaluator.QualityParameter.ActualName;
    150149
    151       foreach (var op in Operators.OfType<SymbolicRegressionPhenotypicDiversityAnalyzer>()) {
    152         var sim = Operators.OfType<SymbolicExpressionTreePhenotypicSimilarityCalculator>().FirstOrDefault();
    153         if (sim != null)
    154           op.SimilarityCalculator = sim;
     150        if (op is SymbolicExpressionTreePhenotypicSimilarityCalculator) {
     151          var phenotypicSimilarityCalculator = (SymbolicExpressionTreePhenotypicSimilarityCalculator)op;
     152          phenotypicSimilarityCalculator.ProblemData = ProblemData;
     153          phenotypicSimilarityCalculator.Interpreter = SymbolicExpressionTreeInterpreter;
     154        }
    155155      }
    156156    }
  • branches/SymbolicExpressionTreeDiversityAnalyzers/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/SymbolicDataAnalysisBottomUpDiversityAnalyzer.cs

    r12064 r12075  
    2020#endregion
    2121
     22using System.Collections.Generic;
    2223using HeuristicLab.Analysis;
    2324using HeuristicLab.Common;
    2425using HeuristicLab.Core;
     26using HeuristicLab.Optimization;
    2527using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2628
     
    2830  [Item("SymbolicDataAnalysisBottomUpDiversityAnalyzer", "A diversity analyzer based on the bottom-up distance between trees.")]
    2931  [StorableClass]
    30   public class SymbolicDataAnalysisBottomUpDiversityAnalyzer : SingleObjectivePopulationDiversityAnalyzer {
     32  public class SymbolicDataAnalysisBottomUpDiversityAnalyzer : PopulationSimilarityAnalyzer {
    3133    [StorableConstructor]
    3234    protected SymbolicDataAnalysisBottomUpDiversityAnalyzer(bool deserializing) : base(deserializing) { }
     
    4042    }
    4143
    42     public SymbolicDataAnalysisBottomUpDiversityAnalyzer() {
    43       SimilarityCalculator = new SymbolicExpressionTreeBottomUpSimilarityCalculator { SolutionVariableName = "SymbolicExpressionTree" };
     44    public SymbolicDataAnalysisBottomUpDiversityAnalyzer(
     45      IEnumerable<ISingleObjectiveSolutionSimilarityCalculator> validSimilarityCalculators)
     46      : base(validSimilarityCalculators) {
     47      UpdateCounterParameter.ActualName = "GenotypicDiversityAnalyzerUpdateCounter";
    4448    }
    4549  }
  • branches/SymbolicExpressionTreeDiversityAnalyzers/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisProblem.cs

    r12068 r12075  
    118118      set { ProblemDataParameter.Value = value; }
    119119    }
     120
    120121    public ISymbolicDataAnalysisGrammar SymbolicExpressionTreeGrammar {
    121122      get { return SymbolicExpressionTreeGrammarParameter.Value; }
     
    126127      set { SymbolicExpressionTreeInterpreterParameter.Value = value; }
    127128    }
     129
    128130    public IntValue MaximumSymbolicExpressionTreeDepth {
    129131      get { return MaximumSymbolicExpressionTreeDepthParameter.Value; }
     
    141143      get { return RelativeNumberOfEvaluatedSamplesParameter.Value; }
    142144    }
     145
    143146    public IntRange FitnessCalculationPartition {
    144147      get { return FitnessCalculationPartitionParameter.Value; }
     
    228231      Operators.Add(new MinAverageMaxSymbolicExpressionTreeLengthAnalyzer());
    229232      Operators.Add(new SymbolicExpressionTreeLengthAnalyzer());
    230       Operators.Add(new SymbolicDataAnalysisBottomUpDiversityAnalyzer());
    231233      Operators.Add(new SymbolicExpressionTreeBottomUpSimilarityCalculator());
     234      Operators.Add(new SymbolicDataAnalysisBottomUpDiversityAnalyzer(Operators.OfType<SymbolicExpressionTreeBottomUpSimilarityCalculator>()) { DiversityResultName = "Genotypic Diversity" });
    232235      ParameterizeOperators();
    233236    }
     
    349352        op.EvaluatorParameter.ActualName = EvaluatorParameter.Name;
    350353      }
    351       foreach (var op in operators.OfType<SymbolicExpressionTreeBottomUpSimilarityCalculator>()) {
    352         op.SolutionVariableName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName;
    353       }
    354       foreach (var op in operators.OfType<SymbolicDataAnalysisBottomUpDiversityAnalyzer>()) {
    355         var sim = Operators.OfType<SymbolicExpressionTreeBottomUpSimilarityCalculator>().FirstOrDefault();
    356         if (sim != null)
    357           op.SimilarityCalculator = sim;
    358       }
    359354    }
    360355
Note: See TracChangeset for help on using the changeset viewer.