- Timestamp:
- 05/14/11 16:45:46 (13 years ago)
- Location:
- branches/histogram
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/histogram
-
branches/histogram/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/InteractiveSymbolicDataAnalysisSolutionSimplifierView.cs
r6011 r6195 29 29 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views; 30 30 using HeuristicLab.MainForm.WindowsForms; 31 using HeuristicLab.Problems.DataAnalysis.Symbolic;32 31 33 32 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views { … … 35 34 private Dictionary<ISymbolicExpressionTreeNode, ISymbolicExpressionTreeNode> replacementNodes; 36 35 private Dictionary<ISymbolicExpressionTreeNode, double> nodeImpacts; 36 private bool updateInProgress = false; 37 37 38 38 public InteractiveSymbolicDataAnalysisSolutionSimplifierView() { … … 91 91 nodeImpacts = CalculateImpactValues(Content.Model.SymbolicExpressionTree); 92 92 93 // automatically fold all branches with impact = 1 94 List<ISymbolicExpressionTreeNode> nodeList = Content.Model.SymbolicExpressionTree.Root.GetSubtree(0).IterateNodesPrefix().ToList(); 95 foreach (var parent in nodeList) { 96 for (int subTreeIndex = 0; subTreeIndex < parent.SubtreesCount; subTreeIndex++) { 97 var child = parent.GetSubtree(subTreeIndex); 98 if (!(child.Symbol is Constant) && nodeImpacts[child].IsAlmost(0.0)) { 99 SwitchNodeWithReplacementNode(parent, subTreeIndex); 93 if (!updateInProgress) { 94 // automatically fold all branches with impact = 1 95 List<ISymbolicExpressionTreeNode> nodeList = Content.Model.SymbolicExpressionTree.Root.GetSubtree(0).IterateNodesPrefix().ToList(); 96 foreach (var parent in nodeList) { 97 for (int subTreeIndex = 0; subTreeIndex < parent.SubtreesCount; subTreeIndex++) { 98 var child = parent.GetSubtree(subTreeIndex); 99 if (!(child.Symbol is Constant) && nodeImpacts[child].IsAlmost(0.0)) { 100 SwitchNodeWithReplacementNode(parent, subTreeIndex); 101 } 100 102 } 101 103 } 102 104 } 105 103 106 // show only interesting part of solution 104 107 if (tree.Root.SubtreesCount > 1) … … 131 134 // only allow to replace nodes for which a replacement value is known (replacement value for ADF nodes are not available) 132 135 if (subTree == visualTreeNode.SymbolicExpressionTreeNode && replacementNodes.ContainsKey(subTree)) { 133 double replacementImpact = nodeImpacts.ContainsKey(replacementNodes[subTree]) ? nodeImpacts[replacementNodes[subTree]] : 0.0;134 double originalImpact = nodeImpacts.ContainsKey(subTree) ? nodeImpacts[subTree] : 0.0;135 136 SwitchNodeWithReplacementNode(treeNode, i); 136 137 … … 140 141 else 141 142 this.treeChart.Tree = new SymbolicExpressionTree(tree.Root.GetSubtree(0).GetSubtree(0)); // 1st child of RPB 142 if (!(originalImpact.IsAlmost(0.0) && replacementImpact.IsAlmost(0.0))) { 143 // update everything after the change if necessary (impact != 0) 144 UpdateModel(tree); 145 } else { 146 // both impacts are zero, so we only need to repaint the nodes 147 PaintNodeImpacts(); 148 } 143 144 updateInProgress = true; 145 UpdateModel(tree); 146 updateInProgress = false; 149 147 return; // break all loops 150 148 } … … 191 189 visualTree.ToolTip += Environment.NewLine + "Replacement value: " + constantReplacementNode.Value; 192 190 } 193 } 191 } 194 192 } 195 193 this.PaintCollapsedNodes();
Note: See TracChangeset
for help on using the changeset viewer.