Changeset 12973 for trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SymbolicRegressionPhenotypicDiversityAnalyzer.cs
- Timestamp:
- 09/29/15 16:49:13 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SymbolicRegressionPhenotypicDiversityAnalyzer.cs
r12422 r12973 21 21 22 22 using System.Collections.Generic; 23 using System.Linq;24 23 using HeuristicLab.Analysis; 25 24 using HeuristicLab.Common; 26 25 using HeuristicLab.Core; 27 using HeuristicLab.Data;28 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;29 26 using HeuristicLab.Optimization; 30 using HeuristicLab.Parameters;31 27 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 32 28 … … 34 30 [Item("SymbolicRegressionPhenotypicDiversityAnalyzer", "An analyzer which calculates diversity based on the phenotypic distance between trees")] 35 31 [StorableClass] 36 public class SymbolicRegressionPhenotypicDiversityAnalyzer : PopulationSimilarityAnalyzer, 37 ISymbolicDataAnalysisBoundedOperator, ISymbolicDataAnalysisInterpreterOperator, ISymbolicExpressionTreeAnalyzer { 38 #region parameter names 39 private const string SymbolicExpressionTreeParameterName = "SymbolicExpressionTree"; 40 private const string EvaluatedValuesParameterName = "EstimatedValues"; 41 private const string SymbolicDataAnalysisTreeInterpreterParameterName = "SymbolicExpressionTreeInterpreter"; 42 private const string ProblemDataParameterName = "ProblemData"; 43 private const string EstimationLimitsParameterName = "EstimationLimits"; 44 #endregion 45 46 #region parameter properties 47 public IScopeTreeLookupParameter<ISymbolicExpressionTree> SymbolicExpressionTreeParameter { 48 get { return (IScopeTreeLookupParameter<ISymbolicExpressionTree>)Parameters[SymbolicExpressionTreeParameterName]; } 49 } 50 private IScopeTreeLookupParameter<DoubleArray> EvaluatedValuesParameter { 51 get { return (IScopeTreeLookupParameter<DoubleArray>)Parameters[EvaluatedValuesParameterName]; } 52 } 53 public ILookupParameter<ISymbolicDataAnalysisExpressionTreeInterpreter> SymbolicDataAnalysisTreeInterpreterParameter { 54 get { return (ILookupParameter<ISymbolicDataAnalysisExpressionTreeInterpreter>)Parameters[SymbolicDataAnalysisTreeInterpreterParameterName]; } 55 } 56 public IValueLookupParameter<IRegressionProblemData> ProblemDataParameter { 57 get { return (IValueLookupParameter<IRegressionProblemData>)Parameters[ProblemDataParameterName]; } 58 } 59 public IValueLookupParameter<DoubleLimit> EstimationLimitsParameter { 60 get { return (IValueLookupParameter<DoubleLimit>)Parameters[EstimationLimitsParameterName]; } 61 } 62 #endregion 63 32 public class SymbolicRegressionPhenotypicDiversityAnalyzer : PopulationSimilarityAnalyzer { 64 33 public SymbolicRegressionPhenotypicDiversityAnalyzer(IEnumerable<ISolutionSimilarityCalculator> validSimilarityCalculators) 65 34 : base(validSimilarityCalculators) { 66 #region add parameters67 Parameters.Add(new ScopeTreeLookupParameter<ISymbolicExpressionTree>(SymbolicExpressionTreeParameterName, "The symbolic expression trees."));68 Parameters.Add(new ScopeTreeLookupParameter<DoubleArray>(EvaluatedValuesParameterName, "Intermediate estimated values to be saved in the scopes."));69 Parameters.Add(new LookupParameter<ISymbolicDataAnalysisExpressionTreeInterpreter>(SymbolicDataAnalysisTreeInterpreterParameterName, "The interpreter that should be used to calculate the output values of the symbolic data analysis tree."));70 Parameters.Add(new ValueLookupParameter<IRegressionProblemData>(ProblemDataParameterName, "The problem data on which the symbolic data analysis solution should be evaluated."));71 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."));72 #endregion73 35 74 36 UpdateCounterParameter.ActualName = "PhenotypicDiversityAnalyzerUpdateCounter"; … … 88 50 : base(original, cloner) { 89 51 } 90 91 public override IOperation Apply() {92 int updateInterval = UpdateIntervalParameter.Value.Value;93 IntValue updateCounter = UpdateCounterParameter.ActualValue;94 95 if (updateCounter == null) {96 updateCounter = new IntValue(updateInterval);97 UpdateCounterParameter.ActualValue = updateCounter;98 }99 100 if (updateCounter.Value == updateInterval) {101 var trees = SymbolicExpressionTreeParameter.ActualValue;102 var interpreter = SymbolicDataAnalysisTreeInterpreterParameter.ActualValue;103 var ds = ProblemDataParameter.ActualValue.Dataset;104 var rows = ProblemDataParameter.ActualValue.TrainingIndices;105 106 var evaluatedValues = new ItemArray<DoubleArray>(trees.Select(t => new DoubleArray(interpreter.GetSymbolicExpressionTreeValues(t, ds, rows).ToArray())));107 EvaluatedValuesParameter.ActualValue = evaluatedValues;108 }109 return base.Apply();110 }111 52 } 112 53 }
Note: See TracChangeset
for help on using the changeset viewer.