Changeset 8935 for branches/HeuristicLab.TreeSimplifier/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/InteractiveSymbolicDataAnalysisSolutionSimplifierView.cs
- Timestamp:
- 11/22/12 15:03:32 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.TreeSimplifier/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/InteractiveSymbolicDataAnalysisSolutionSimplifierView.cs
r8916 r8935 96 96 if (Content == null || Content.Model == null || Content.ProblemData == null) return; 97 97 var tree = model; 98 CalculateReplacementNodesAndNodeImpacts(tree); 99 } 100 101 private void CalculateReplacementNodesAndNodeImpacts(ISymbolicExpressionTree tree) { 98 102 var replacementValues = CalculateReplacementValues(tree); 99 103 foreach (var pair in replacementValues.Where(pair => !(pair.Key is ConstantTreeNode))) { … … 117 121 } 118 122 119 private void CalculateReplacementNodesAndNodeImpacts(ISymbolicExpressionTree tree) {120 var replacementValues = CalculateReplacementValues(tree);121 foreach (var pair in replacementValues.Where(pair => !(pair.Key is ConstantTreeNode))) {122 replacementNodes[pair.Key] = MakeConstantTreeNode(pair.Value);123 }124 nodeImpacts = CalculateImpactValues(tree);125 126 if (!updateInProgress) {127 // automatically fold all branches with impact = 0128 List<ISymbolicExpressionTreeNode> nodeList = tree.Root.GetSubtree(0).IterateNodesPrefix().ToList();129 foreach (var parent in nodeList) {130 for (int subTreeIndex = 0; subTreeIndex < parent.SubtreeCount; subTreeIndex++) {131 var child = parent.GetSubtree(subTreeIndex);132 if (!(child.Symbol is Constant) && nodeImpacts[child].IsAlmost(0.0)) {133 SwitchNodeWithReplacementNode(parent, subTreeIndex);134 }135 }136 }137 }138 PaintModel();139 }140 141 123 private void PaintModel() { 142 124 // show only interesting part of solution … … 149 131 protected abstract void UpdateModel(ISymbolicExpressionTree tree); 150 132 151 private ConstantTreeNode MakeConstantTreeNode(double value) { 152 Constant constant = new Constant(); 153 constant.MinValue = value - 1; 154 constant.MaxValue = value + 1; 155 ConstantTreeNode constantTreeNode = (ConstantTreeNode)constant.CreateTreeNode(); 133 private static ConstantTreeNode MakeConstantTreeNode(double value) { 134 var constant = new Constant { MinValue = value - 1, MaxValue = value + 1 }; 135 var constantTreeNode = (ConstantTreeNode)constant.CreateTreeNode(); 156 136 constantTreeNode.Value = value; 157 137 return constantTreeNode; … … 164 144 if (symbExprTreeNode == null) return; 165 145 var tree = model; 146 147 bool update = false; 166 148 // check if the node value/weight has been altered 167 149 // if so, the first double click will return the node to its original value/weight/variable name … … 171 153 variable.VariableName = originalVariableNames[symbExprTreeNode]; 172 154 originalVariableNames.Remove(variable); 155 update = true; 156 } else if (originalValues.ContainsKey(symbExprTreeNode)) { 157 double value = originalValues[symbExprTreeNode]; 158 if (symbExprTreeNode.Symbol is Constant) { 159 var constantTreeNode = (ConstantTreeNode)symbExprTreeNode; 160 constantTreeNode.Value = value; 161 } else if (symbExprTreeNode.Symbol is Variable) { 162 var variable = (VariableTreeNode)symbExprTreeNode; 163 variable.Weight = value; 164 } 165 originalValues.Remove(symbExprTreeNode); 166 update = true; 167 } else if (replacementNodes.ContainsKey(symbExprTreeNode)) { 168 foreach (var treeNode in tree.IterateNodesPostfix()) { 169 for (int i = 0; i < treeNode.SubtreeCount; i++) { 170 var subtree = treeNode.GetSubtree(i); 171 if (subtree == symbExprTreeNode) { 172 SwitchNodeWithReplacementNode(treeNode, i); 173 // show only interesting part of solution 174 treeChart.Tree = tree.Root.SubtreeCount > 1 175 ? new SymbolicExpressionTree(tree.Root) 176 : new SymbolicExpressionTree(tree.Root.GetSubtree(0).GetSubtree(0)); 177 update = true; 178 } 179 } 180 if (update) break; 181 } 182 } 183 if (update) { 173 184 updateInProgress = true; 174 185 UpdateModel(tree); 175 186 updateInProgress = false; 176 return;177 }178 if (originalValues.ContainsKey(symbExprTreeNode)) {179 double value = originalValues[symbExprTreeNode];180 if (symbExprTreeNode.Symbol is Constant)181 ((ConstantTreeNode)symbExprTreeNode).Value = value;182 else if (symbExprTreeNode.Symbol is Variable)183 ((VariableTreeNode)symbExprTreeNode).Weight = value;184 originalValues.Remove(symbExprTreeNode);185 updateInProgress = true;186 UpdateModel(tree);187 updateInProgress = false;188 return;189 }190 foreach (SymbolicExpressionTreeNode treeNode in tree.IterateNodesPostfix()) {191 for (int i = 0; i < treeNode.SubtreeCount; i++) {192 ISymbolicExpressionTreeNode subTree = treeNode.GetSubtree(i);193 // only allow to replace nodes for which a replacement value is known (replacement value for ADF nodes are not available)194 if (subTree == symbExprTreeNode && replacementNodes.ContainsKey(subTree)) {195 SwitchNodeWithReplacementNode(treeNode, i);196 // show only interesting part of solution197 treeChart.Tree = tree.Root.SubtreeCount > 1 ? new SymbolicExpressionTree(tree.Root) : new SymbolicExpressionTree(tree.Root.GetSubtree(0).GetSubtree(0));198 updateInProgress = true;199 UpdateModel(tree);200 updateInProgress = false;201 return; // break all loops202 }203 }204 187 } 205 188 } … … 222 205 223 206 if (node is VariableTreeNode) { 224 var variable = dialog.Content as VariableTreeNode;225 var weight = double.Parse(dialog. NewValueTextBox.Text);226 var name = (string)dialog. VariableNameComboBox.SelectedItem;207 var variable = (VariableTreeNode)node; 208 var weight = double.Parse(dialog.newValueTextBox.Text); 209 var name = (string)dialog.variableNamesCombo.SelectedItem; 227 210 if (!variable.Weight.Equals(weight)) { 228 211 flag1 = true; … … 236 219 } 237 220 } else if (node is ConstantTreeNode) { 238 var constant = dialog.Content as ConstantTreeNode;239 var value = double.Parse(dialog. NewValueTextBox.Text);221 var constant = (ConstantTreeNode)node; 222 var value = double.Parse(dialog.newValueTextBox.Text); 240 223 if (!constant.Value.Equals(value)) { 241 224 flag1 = true; … … 355 338 } else if (e.Error != null) { 356 339 // There was an error during the operation. 357 // Error-handling358 340 } else { 359 341 // The operation completed normally. We can update the model
Note: See TracChangeset
for help on using the changeset viewer.