Free cookie consent management tool by TermsFeed Policy Generator

source: branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/SymbolicDataAnalysisPhenotypicDiversityAnalyzer.cs @ 11271

Last change on this file since 11271 was 11271, checked in by bburlacu, 10 years ago

#1772: Added specialized diversity analyzers (phenotypic and bottom-up) and phenotypic similarity calculator.

File size: 3.7 KB
Line 
1using System.Linq;
2using HeuristicLab.Analysis;
3using HeuristicLab.Core;
4using HeuristicLab.Data;
5using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
6using HeuristicLab.Parameters;
7using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
8
9namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Analyzers {
10  [Item("SymbolicDataAnalysisPhenotypicDiversityAnalyzer", "An analyzer which calculates diversity based on the phenotypic similarity between trees")]
11  [StorableClass]
12  public class SymbolicDataAnalysisPhenotypicDiversityAnalyzer : SingleObjectivePopulationDiversityAnalyzer {
13    private const string SymbolicExpressionTreeParameterName = "SymbolicExpressionTree";
14    private const string EvaluatedValuesParameterName = "EstimatedValues";
15    private const string SymbolicDataAnalysisTreeInterpreterParameterName = "SymbolicExpressionTreeInterpreter";
16    private const string ProblemDataParameterName = "ProblemData";
17    private const string EstimationLimitsParameterName = "EstimationLimits";
18
19    public IScopeTreeLookupParameter<ISymbolicExpressionTree> SymbolicExpressionTreeParameter {
20      get { return (IScopeTreeLookupParameter<ISymbolicExpressionTree>)Parameters[SymbolicExpressionTreeParameterName]; }
21    }
22
23    private IScopeTreeLookupParameter<DoubleArray> EvaluatedValuesParameter {
24      get { return (IScopeTreeLookupParameter<DoubleArray>)Parameters[EvaluatedValuesParameterName]; }
25    }
26
27    public ILookupParameter<ISymbolicDataAnalysisExpressionTreeInterpreter> SymbolicDataAnalysisTreeInterpreterParameter {
28      get { return (ILookupParameter<ISymbolicDataAnalysisExpressionTreeInterpreter>)Parameters[SymbolicDataAnalysisTreeInterpreterParameterName]; }
29    }
30    public IValueLookupParameter<IDataAnalysisProblemData> ProblemDataParameter {
31      get { return (IValueLookupParameter<IDataAnalysisProblemData>)Parameters[ProblemDataParameterName]; }
32    }
33
34    public IValueLookupParameter<DoubleLimit> EstimationLimitsParameter {
35      get { return (IValueLookupParameter<DoubleLimit>)Parameters[EstimationLimitsParameterName]; }
36    }
37
38    public SymbolicDataAnalysisPhenotypicDiversityAnalyzer() {
39      SimilarityCalculator = new PhenotypicSimilarityCalculator();
40
41      Parameters.Add(new ScopeTreeLookupParameter<ISymbolicExpressionTree>(SymbolicExpressionTreeParameterName, "The symbolic expression trees."));
42      Parameters.Add(new ScopeTreeLookupParameter<DoubleArray>(EvaluatedValuesParameterName, "Intermediate estimated values to be saved in the scopes."));
43      Parameters.Add(new LookupParameter<ISymbolicDataAnalysisExpressionTreeInterpreter>(SymbolicDataAnalysisTreeInterpreterParameterName, "The interpreter that should be used to calculate the output values of the symbolic data analysis tree."));
44      Parameters.Add(new ValueLookupParameter<IDataAnalysisProblemData>(ProblemDataParameterName, "The problem data on which the symbolic data analysis solution should be evaluated."));
45      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."));
46    }
47
48    public override IOperation Apply() {
49      var trees = SymbolicExpressionTreeParameter.ActualValue;
50      var interpreter = SymbolicDataAnalysisTreeInterpreterParameter.ActualValue;
51      var ds = ProblemDataParameter.ActualValue.Dataset;
52      var rows = ProblemDataParameter.ActualValue.TrainingIndices;
53
54      var evaluatedValues = new ItemArray<DoubleArray>(trees.Select(t => new DoubleArray(interpreter.GetSymbolicExpressionTreeValues(t, ds, rows).ToArray())));
55
56      EvaluatedValuesParameter.ActualValue = evaluatedValues;
57
58      return base.Apply();
59    }
60  }
61}
Note: See TracBrowser for help on using the repository browser.