Changeset 18180 for branches/3138_Shape_Constraints_Transformations/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisExpressionPruningOperator.cs
- Timestamp:
- 01/10/22 10:15:25 (2 years ago)
- Location:
- branches/3138_Shape_Constraints_Transformations
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/3138_Shape_Constraints_Transformations
- Property svn:mergeinfo changed
-
branches/3138_Shape_Constraints_Transformations/HeuristicLab.Problems.DataAnalysis.Symbolic
- Property svn:mergeinfo changed
-
branches/3138_Shape_Constraints_Transformations/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisExpressionPruningOperator.cs
r17180 r18180 33 33 namespace HeuristicLab.Problems.DataAnalysis.Symbolic { 34 34 [StorableType("DBE27385-2E8C-4314-88B4-F96A5240FC9D")] 35 [Item("SymbolicExpressionTreePruningOperator", "An operator that replaces introns with constant values in a symbolic expression tree.")]35 [Item("SymbolicExpressionTreePruningOperator", "An operator that replaces sub-trees with small impacts with numbers in a symbolic expression tree.")] 36 36 public abstract class SymbolicDataAnalysisExpressionPruningOperator : SingleSuccessorOperator, ISymbolicExpressionTreeOperator { 37 37 #region parameter names … … 172 172 for (int i = 0; i < nodes.Count; ++i) { 173 173 var node = nodes[i]; 174 if (node is ConstantTreeNode) continue; 175 176 double impactValue, replacementValue; 177 double newQualityForImpacts; 178 ImpactValuesCalculator.CalculateImpactAndReplacementValues(model, node, problemData, rows, out impactValue, out replacementValue, out newQualityForImpacts, qualityForImpactsCalculation); 174 if (node is INumericTreeNode) continue; 175 176 ImpactValuesCalculator.CalculateImpactAndReplacementValues(model, node, problemData, rows, 177 out double impactValue, out double replacementValue, out double newQualityForImpacts, qualityForImpactsCalculation); 179 178 180 179 if (PruneOnlyZeroImpactNodes && !impactValue.IsAlmost(0.0)) continue; 181 180 if (!PruneOnlyZeroImpactNodes && impactValue > NodeImpactThreshold) continue; 182 181 183 var constantNode = (ConstantTreeNode)node.Grammar.GetSymbol("Constant").CreateTreeNode();184 constantNode.Value = replacementValue;182 var numberNode = (NumberTreeNode)node.Grammar.GetSymbol("Number").CreateTreeNode(); 183 numberNode.Value = replacementValue; 185 184 186 185 var length = node.GetLength(); 187 ReplaceWith Constant(node, constantNode);186 ReplaceWithNumber(node, numberNode); 188 187 i += length - 1; // skip subtrees under the node that was folded 189 188 … … 205 204 } 206 205 207 protected static void ReplaceWith Constant(ISymbolicExpressionTreeNode original, ISymbolicExpressionTreeNode replacement) {206 protected static void ReplaceWithNumber(ISymbolicExpressionTreeNode original, ISymbolicExpressionTreeNode replacement) { 208 207 var parent = original.Parent; 209 208 var i = parent.IndexOfSubtree(original);
Note: See TracChangeset
for help on using the changeset viewer.