Changeset 5722 for branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/InteractiveSymbolicDataAnalysisSolutionSimplifierView.cs
- Timestamp:
- 03/16/11 19:29:57 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/InteractiveSymbolicDataAnalysisSolutionSimplifierView.cs
r5717 r5722 33 33 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views { 34 34 public abstract partial class InteractiveSymbolicDataAnalysisSolutionSimplifierView : AsynchronousContentView { 35 private ISymbolicExpressionTree simplifiedExpressionTree;36 35 private Dictionary<ISymbolicExpressionTreeNode, ConstantTreeNode> replacementNodes; 37 36 private Dictionary<ISymbolicExpressionTreeNode, double> nodeImpacts; … … 41 40 this.replacementNodes = new Dictionary<ISymbolicExpressionTreeNode, ConstantTreeNode>(); 42 41 this.nodeImpacts = new Dictionary<ISymbolicExpressionTreeNode, double>(); 43 this.simplifiedExpressionTree = null;44 42 this.Caption = "Interactive Solution Simplifier"; 45 43 } … … 85 83 replacementNodes.Clear(); 86 84 if (Content != null && Content.Model != null && Content.ProblemData != null) { 87 SymbolicDataAnalysisExpressionTreeSimplifier simplifier = new SymbolicDataAnalysisExpressionTreeSimplifier(); 88 simplifiedExpressionTree = simplifier.Simplify(Content.Model.SymbolicExpressionTree); 89 90 var replacementValues = CalculateReplacementValues(simplifiedExpressionTree); 85 var tree = Content.Model.SymbolicExpressionTree; 86 var replacementValues = CalculateReplacementValues(tree); 91 87 foreach (var pair in replacementValues) { 92 88 replacementNodes.Add(pair.Key, MakeConstantTreeNode(pair.Value)); 93 89 } 94 nodeImpacts = CalculateImpactValues( simplifiedExpressionTree);90 nodeImpacts = CalculateImpactValues(Content.Model.SymbolicExpressionTree); 95 91 96 92 // automatically fold all branches with impact = 1 97 List<ISymbolicExpressionTreeNode> nodeList = simplifiedExpressionTree.Root.GetSubTree(0).IterateNodesPrefix().ToList();93 List<ISymbolicExpressionTreeNode> nodeList = Content.Model.SymbolicExpressionTree.Root.GetSubTree(0).IterateNodesPrefix().ToList(); 98 94 foreach (var parent in nodeList) { 99 95 for (int subTreeIndex = 0; subTreeIndex < parent.SubTrees.Count(); subTreeIndex++) { … … 105 101 } 106 102 // show only interesting part of solution 107 this.treeChart.Tree = new SymbolicExpressionTree( simplifiedExpressionTree.Root.GetSubTree(0).GetSubTree(0));103 this.treeChart.Tree = new SymbolicExpressionTree(tree.Root.GetSubTree(0).GetSubTree(0)); 108 104 this.PaintNodeImpacts(); 109 105 } … … 125 121 private void treeChart_SymbolicExpressionTreeNodeDoubleClicked(object sender, MouseEventArgs e) { 126 122 VisualSymbolicExpressionTreeNode visualTreeNode = (VisualSymbolicExpressionTreeNode)sender; 127 foreach (SymbolicExpressionTreeNode treeNode in simplifiedExpressionTree.IterateNodesPostfix()) { 123 var tree = Content.Model.SymbolicExpressionTree; 124 foreach (SymbolicExpressionTreeNode treeNode in tree.IterateNodesPostfix()) { 128 125 for (int i = 0; i < treeNode.SubTrees.Count(); i++) { 129 126 ISymbolicExpressionTreeNode subTree = treeNode.GetSubTree(i); … … 135 132 136 133 // show only interesting part of solution 137 this.treeChart.Tree = new SymbolicExpressionTree( simplifiedExpressionTree.Root.GetSubTree(0).GetSubTree(0));134 this.treeChart.Tree = new SymbolicExpressionTree(tree.Root.GetSubTree(0).GetSubTree(0)); 138 135 139 SymbolicExpressionTree tree = (SymbolicExpressionTree)simplifiedExpressionTree.Clone();140 136 UpdateModel(tree); 141 137 this.PaintNodeImpacts(); … … 157 153 double max = impacts.Max(); 158 154 double min = impacts.Min(); 159 foreach (ISymbolicExpressionTreeNode treeNode in simplifiedExpressionTree.IterateNodesPostfix()) {155 foreach (ISymbolicExpressionTreeNode treeNode in Content.Model.SymbolicExpressionTree.IterateNodesPostfix()) { 160 156 if (!(treeNode is ConstantTreeNode) && nodeImpacts.ContainsKey(treeNode)) { 161 157 double impact = this.nodeImpacts[treeNode]; 162 158 double replacementValue = this.replacementNodes[treeNode].Value; 163 159 VisualSymbolicExpressionTreeNode visualTree = treeChart.GetVisualSymbolicExpressionTreeNode(treeNode); 164 160 165 161 // impact = 0 if no change 166 162 // impact < 0 if new solution is better … … 180 176 181 177 private void PaintCollapsedNodes() { 182 foreach (ISymbolicExpressionTreeNode treeNode in simplifiedExpressionTree.IterateNodesPostfix()) {178 foreach (ISymbolicExpressionTreeNode treeNode in Content.Model.SymbolicExpressionTree.IterateNodesPostfix()) { 183 179 if (treeNode is ConstantTreeNode && replacementNodes.ContainsValue((ConstantTreeNode)treeNode)) 184 180 this.treeChart.GetVisualSymbolicExpressionTreeNode(treeNode).LineColor = Color.DarkOrange; … … 192 188 193 189 private void btnSimplify_Click(object sender, EventArgs e) { 194 this.CalculateReplacementNodesAndNodeImpacts(); 190 SymbolicDataAnalysisExpressionTreeSimplifier simplifier = new SymbolicDataAnalysisExpressionTreeSimplifier(); 191 var simplifiedExpressionTree = simplifier.Simplify(Content.Model.SymbolicExpressionTree); 192 UpdateModel(simplifiedExpressionTree); 195 193 } 196 194 }
Note: See TracChangeset
for help on using the changeset viewer.