Changeset 12848 for branches/DataAnalysis.ComplexityAnalyzer/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisExpressionPruningOperator.cs
- Timestamp:
- 08/12/15 10:35:02 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/DataAnalysis.ComplexityAnalyzer/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisExpressionPruningOperator.cs
r12547 r12848 49 49 private const string EstimationLimitsParameterName = "EstimationLimits"; 50 50 private const string InterpreterParameterName = "SymbolicExpressionTreeInterpreter"; 51 private const string ApplyLinearScalingParameterName = "ApplyLinearScaling"; 51 52 #endregion 52 53 … … 87 88 public ILookupParameter<ISymbolicDataAnalysisExpressionTreeInterpreter> InterpreterParameter { 88 89 get { return (ILookupParameter<ISymbolicDataAnalysisExpressionTreeInterpreter>)Parameters[InterpreterParameterName]; } 90 } 91 public ILookupParameter<BoolValue> ApplyLinearScalingParameter { 92 get { return (ILookupParameter<BoolValue>)Parameters[ApplyLinearScalingParameterName]; } 89 93 } 90 94 #endregion … … 124 128 Parameters.Add(new LookupParameter<ISymbolicExpressionTree>(SymbolicExpressionTreeParameterName)); 125 129 Parameters.Add(new LookupParameter<DoubleValue>(QualityParameterName)); 130 Parameters.Add(new LookupParameter<BoolValue>(ApplyLinearScalingParameterName)); 126 131 Parameters.Add(new ValueParameter<ISymbolicDataAnalysisSolutionImpactValuesCalculator>(ImpactValuesCalculatorParameterName, impactValuesCalculator)); 132 #endregion 133 } 134 135 [StorableHook(HookType.AfterDeserialization)] 136 private void AfterDeserialization() { 137 // BackwardsCompatibility3.3 138 #region Backwards compatible code, remove with 3.4 139 if (!Parameters.ContainsKey(PrunedNodesParameterName)) { 140 Parameters.Add(new LookupParameter<IntValue>(PrunedNodesParameterName, "A counter of how many nodes were pruned.")); 141 } 142 if (!Parameters.ContainsKey(ApplyLinearScalingParameterName)) { 143 Parameters.Add(new LookupParameter<BoolValue>(ApplyLinearScalingParameterName)); 144 } 145 if (!Parameters.ContainsKey(ImpactValuesCalculatorParameterName)) { 146 // value must be set by derived operators (regression/classification) 147 Parameters.Add(new ValueParameter<ISymbolicDataAnalysisSolutionImpactValuesCalculator>(ImpactValuesCalculatorParameterName)); 148 } 127 149 #endregion 128 150 } … … 141 163 var model = CreateModel(tree, interpreter, problemData, estimationLimits); 142 164 var nodes = tree.Root.GetSubtree(0).GetSubtree(0).IterateNodesPrefix().ToList(); 143 var rows = Enumerable.Range(fitnessCalculationPartition.Start, fitnessCalculationPartition.Size) ;165 var rows = Enumerable.Range(fitnessCalculationPartition.Start, fitnessCalculationPartition.Size).ToList(); 144 166 var prunedSubtrees = 0; 145 167 var prunedTrees = 0; 146 168 var prunedNodes = 0; 147 169 148 double quality = Evaluate(model);170 double qualityForImpactsCalculation = double.NaN; 149 171 150 172 for (int i = 0; i < nodes.Count; ++i) { … … 153 175 154 176 double impactValue, replacementValue; 155 ImpactValuesCalculator.CalculateImpactAndReplacementValues(model, node, problemData, rows, out impactValue, out replacementValue, quality); 177 double newQualityForImpacts; 178 ImpactValuesCalculator.CalculateImpactAndReplacementValues(model, node, problemData, rows, out impactValue, out replacementValue, out newQualityForImpacts, qualityForImpactsCalculation); 156 179 157 180 if (PruneOnlyZeroImpactNodes && !impactValue.IsAlmost(0.0)) continue; … … 165 188 i += length - 1; // skip subtrees under the node that was folded 166 189 167 quality -= impactValue;168 190 prunedSubtrees++; 169 191 prunedNodes += length; 192 193 qualityForImpactsCalculation = newQualityForImpacts; 170 194 } 171 195 … … 174 198 PrunedTreesParameter.ActualValue = new IntValue(prunedTrees); 175 199 PrunedNodesParameter.ActualValue = new IntValue(prunedNodes); 176 QualityParameter.ActualValue.Value = quality; 200 201 if (prunedSubtrees > 0) // if nothing was pruned then there's no need to re-evaluate the tree 202 QualityParameter.ActualValue.Value = Evaluate(model); 177 203 178 204 return base.Apply();
Note: See TracChangeset
for help on using the changeset viewer.