- Timestamp:
- 11/22/12 15:03:32 (12 years ago)
- Location:
- branches/HeuristicLab.TreeSimplifier
- Files:
-
- 22 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.TreeSimplifier/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionGrammarEditorView.Designer.cs
r7967 r8935 1 namespace HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views { 1 #region License Information 2 /* HeuristicLab 3 * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 * 5 * This file is part of HeuristicLab. 6 * 7 * HeuristicLab is free software: you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation, either version 3 of the License, or 10 * (at your option) any later version. 11 * 12 * HeuristicLab is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>. 19 */ 20 #endregion 21 22 namespace HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views { 2 23 partial class SymbolicExpressionGrammarEditorView { 3 24 /// <summary> -
branches/HeuristicLab.TreeSimplifier/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionTreeChart.cs
r8388 r8935 157 157 #region events 158 158 public event MouseEventHandler SymbolicExpressionTreeNodeClicked; 159 protected v oid OnSymbolicExpressionTreeNodeClicked(object sender, MouseEventArgs e) {159 protected virtual void OnSymbolicExpressionTreeNodeClicked(object sender, MouseEventArgs e) { 160 160 var clicked = SymbolicExpressionTreeNodeClicked; 161 161 if (clicked != null) … … 163 163 } 164 164 165 pr otected virtualvoid SymbolicExpressionTreeChart_MouseClick(object sender, MouseEventArgs e) {165 private void SymbolicExpressionTreeChart_MouseClick(object sender, MouseEventArgs e) { 166 166 VisualSymbolicExpressionTreeNode visualTreeNode = FindVisualSymbolicExpressionTreeNodeAt(e.X, e.Y); 167 167 if (visualTreeNode != null) { … … 171 171 172 172 public event MouseEventHandler SymbolicExpressionTreeNodeDoubleClicked; 173 protected v oid OnSymbolicExpressionTreeNodeDoubleClicked(object sender, MouseEventArgs e) {173 protected virtual void OnSymbolicExpressionTreeNodeDoubleClicked(object sender, MouseEventArgs e) { 174 174 var doubleClicked = SymbolicExpressionTreeNodeDoubleClicked; 175 175 if (doubleClicked != null) … … 184 184 185 185 public event ItemDragEventHandler SymbolicExpressionTreeNodeDrag; 186 protected v oid OnSymbolicExpressionTreeNodeDragDrag(object sender, ItemDragEventArgs e) {186 protected virtual void OnSymbolicExpressionTreeNodeDragDrag(object sender, ItemDragEventArgs e) { 187 187 var dragged = SymbolicExpressionTreeNodeDrag; 188 188 if (dragged != null) -
branches/HeuristicLab.TreeSimplifier/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views/3.4/InteractiveSymbolicDiscriminantFunctionClassificationSolutionSimplifierView.cs
r8916 r8935 22 22 using System; 23 23 using System.Collections.Generic; 24 using System.Linq; 24 25 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding; 25 26 … … 48 49 49 50 protected override Dictionary<ISymbolicExpressionTreeNode, double> CalculateReplacementValues(ISymbolicExpressionTree tree) { 50 return calculator.CalculateReplacementValues(tree, Content.Model.Interpreter, Content.ProblemData) ;51 return calculator.CalculateReplacementValues(tree, Content.Model.Interpreter, Content.ProblemData).ToDictionary(x => x.Item1, x => x.Item2); 51 52 } 52 53 53 54 protected override Dictionary<ISymbolicExpressionTreeNode, double> CalculateImpactValues(ISymbolicExpressionTree tree) { 54 55 return calculator.CalculateImpactValues(tree, Content.Model.Interpreter, Content.ProblemData, 55 Content.Model.LowerEstimationLimit, Content.Model.UpperEstimationLimit);56 Content.Model.LowerEstimationLimit, Content.Model.UpperEstimationLimit).ToDictionary(x => x.Item1, x => x.Item2); ; 56 57 } 57 58 -
branches/HeuristicLab.TreeSimplifier/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/MultiObjective/SymbolicClassificationMultiObjectivePearsonRSquaredTreeSizeEvaluator.cs
r8915 r8935 1 using System.Collections.Generic; 1 #region License Information 2 /* HeuristicLab 3 * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 * 5 * This file is part of HeuristicLab. 6 * 7 * HeuristicLab is free software: you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation, either version 3 of the License, or 10 * (at your option) any later version. 11 * 12 * HeuristicLab is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>. 19 */ 20 #endregion 21 22 using System.Collections.Generic; 2 23 using HeuristicLab.Common; 3 24 using HeuristicLab.Core; -
branches/HeuristicLab.TreeSimplifier/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/SymbolicDiscriminantFunctionClassificationSolutionImpactValuesCalculator.cs
r8409 r8935 1 using System.Collections.Generic; 1 #region License Information 2 /* HeuristicLab 3 * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 * 5 * This file is part of HeuristicLab. 6 * 7 * HeuristicLab is free software: you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation, either version 3 of the License, or 10 * (at your option) any later version. 11 * 12 * HeuristicLab is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>. 19 */ 20 #endregion 21 22 using System; 23 using System.Collections.Generic; 2 24 using System.Linq; 3 25 using HeuristicLab.Common; … … 6 28 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Classification { 7 29 public class SymbolicDiscriminantFunctionClassificationSolutionImpactValuesCalculator : SymbolicDataAnalysisSolutionImpactValuesCalculator { 8 public override Dictionary<ISymbolicExpressionTreeNode, double> CalculateReplacementValues(ISymbolicExpressionTree tree, 9 ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, 10 IDataAnalysisProblemData problemData) { 11 var replacementValues = new Dictionary<ISymbolicExpressionTreeNode, double>(); 12 foreach (ISymbolicExpressionTreeNode node in tree.Root.GetSubtree(0).GetSubtree(0).IterateNodesPrefix()) { 13 replacementValues[node] = CalculateReplacementValue(node, tree, interpreter, problemData); 14 } 15 return replacementValues; 30 public override IEnumerable<Tuple<ISymbolicExpressionTreeNode, double>> CalculateReplacementValues(ISymbolicExpressionTree tree, 31 ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, 32 IDataAnalysisProblemData problemData) { 33 return from node in tree.Root.GetSubtree(0).GetSubtree(0).IterateNodesPrefix() 34 select new Tuple<ISymbolicExpressionTreeNode, double>(node, CalculateReplacementValue(node, tree, interpreter, problemData)); 16 35 } 17 public override Dictionary<ISymbolicExpressionTreeNode, double> CalculateImpactValues(ISymbolicExpressionTree tree, 18 ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, 19 IDataAnalysisProblemData classificationProblemData, 20 double lowerEstimationLimit, double upperEstimationLimit) { 36 37 public override IEnumerable<Tuple<ISymbolicExpressionTreeNode, double>> CalculateImpactValues(ISymbolicExpressionTree tree, 38 ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, 39 IDataAnalysisProblemData classificationProblemData, 40 double lowerEstimationLimit, double upperEstimationLimit) { 21 41 var problemData = (IClassificationProblemData)classificationProblemData; 22 42 var dataset = problemData.Dataset; 23 43 var rows = problemData.TrainingIndices; 24 44 string targetVariable = problemData.TargetVariable; 25 Dictionary<ISymbolicExpressionTreeNode, double> impactValues = new Dictionary<ISymbolicExpressionTreeNode, double>();26 List<ISymbolicExpressionTreeNode> nodes = tree.Root.GetSubtree(0).GetSubtree(0).IterateNodesPostfix().ToList();27 28 45 var targetClassValues = dataset.GetDoubleValues(targetVariable, rows); 29 var originalOutput = interpreter.GetSymbolicExpressionTreeValues(tree, dataset, rows) 30 .LimitToRange(lowerEstimationLimit, upperEstimationLimit) 31 .ToArray(); 46 var originalOutput = interpreter.GetSymbolicExpressionTreeValues(tree, dataset, rows).LimitToRange(lowerEstimationLimit, upperEstimationLimit).ToArray(); 32 47 OnlineCalculatorError errorState; 33 48 double originalGini = NormalizedGiniCalculator.Calculate(targetClassValues, originalOutput, out errorState); 34 49 if (errorState != OnlineCalculatorError.None) originalGini = 0.0; 35 50 36 foreach (ISymbolicExpressionTreeNode node in nodes) { 37 var parent = node.Parent; 38 var constantNode = ((ConstantTreeNode)new Constant().CreateTreeNode()); 39 constantNode.Value = CalculateReplacementValue(node, tree, interpreter, classificationProblemData); 40 ISymbolicExpressionTreeNode replacementNode = constantNode; 41 SwitchNode(parent, node, replacementNode); 42 var newOutput = interpreter.GetSymbolicExpressionTreeValues(tree, dataset, rows) 43 .LimitToRange(lowerEstimationLimit, upperEstimationLimit) 44 .ToArray(); 45 double newGini = NormalizedGiniCalculator.Calculate(targetClassValues, newOutput, out errorState); 46 if (errorState != OnlineCalculatorError.None) newGini = 0.0; 51 return from node in tree.Root.GetSubtree(0).GetSubtree(0).IterateNodesPostfix() 52 select new Tuple<ISymbolicExpressionTreeNode, double>(node, CalculateImpact(tree, originalGini, node, interpreter, problemData, lowerEstimationLimit, upperEstimationLimit)); 53 } 47 54 48 // impact = 0 if no change49 // impact < 0 if new solution is better50 // impact > 0 if new solution is worse51 impactValues[node] = originalGini - newGini;52 SwitchNode(parent, replacementNode, node);53 }54 return impactValues;55 private static double CalculateImpact(ISymbolicExpressionTree tree, double originalQuality, ISymbolicExpressionTreeNode node, 56 ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, IClassificationProblemData problemData, 57 double lowerEstimationLimit, double upperEstimationLimit) { 58 var dataset = problemData.Dataset; 59 var rows = problemData.TrainingIndices.ToList(); 60 string targetVariable = problemData.TargetVariable; 61 var targetValues = dataset.GetDoubleValues(targetVariable, rows).ToList(); 55 62 63 var parent = node.Parent; 64 var constantNode = (ConstantTreeNode)new Constant().CreateTreeNode(); 65 constantNode.Value = CalculateReplacementValue(node, tree, interpreter, problemData); 66 SwitchNode(parent, node, constantNode); 67 var newOutput = interpreter.GetSymbolicExpressionTreeValues(tree, dataset, rows) 68 .LimitToRange(lowerEstimationLimit, upperEstimationLimit) 69 .ToArray(); 70 OnlineCalculatorError errorState; 71 double quality = NormalizedGiniCalculator.Calculate(targetValues, newOutput, out errorState); 72 if (errorState != OnlineCalculatorError.None) quality = 0.0; 73 SwitchNode(parent, constantNode, node); 74 // impact = 0 if no change 75 // impact < 0 if new solution is better 76 // impact > 0 if new solution is worse 77 return originalQuality - quality; 56 78 } 57 79 } -
branches/HeuristicLab.TreeSimplifier/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/InteractiveSymbolicRegressionSolutionSimplifierView.cs
r8916 r8935 22 22 using System; 23 23 using System.Collections.Generic; 24 using System.Linq; 24 25 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding; 25 26 using HeuristicLab.Problems.DataAnalysis.Symbolic.Views; … … 48 49 49 50 protected override Dictionary<ISymbolicExpressionTreeNode, double> CalculateReplacementValues(ISymbolicExpressionTree tree) { 50 return calculator.CalculateReplacementValues(tree, Content.Model.Interpreter, Content.ProblemData) ;51 return calculator.CalculateReplacementValues(tree, Content.Model.Interpreter, Content.ProblemData).ToDictionary(x => x.Item1, x => x.Item2); 51 52 } 52 53 53 54 protected override Dictionary<ISymbolicExpressionTreeNode, double> CalculateImpactValues(ISymbolicExpressionTree tree) { 54 return calculator.CalculateImpactValues(tree, Content.Model.Interpreter, Content.ProblemData, 0, 0); 55 return calculator.CalculateImpactValues(tree, Content.Model.Interpreter, Content.ProblemData, 56 Content.Model.LowerEstimationLimit, Content.Model.UpperEstimationLimit).ToDictionary(x => x.Item1, x => x.Item2); 55 57 } 56 58 -
branches/HeuristicLab.TreeSimplifier/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/SymbolicRegressionSolutionErrorCharacteristicsCurveView.Designer.cs
r8100 r8935 1 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views { 1 #region License Information 2 /* HeuristicLab 3 * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 * 5 * This file is part of HeuristicLab. 6 * 7 * HeuristicLab is free software: you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation, either version 3 of the License, or 10 * (at your option) any later version. 11 * 12 * HeuristicLab is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>. 19 */ 20 #endregion 21 22 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views { 2 23 partial class SymbolicRegressionSolutionErrorCharacteristicsCurveView { 3 24 /// <summary> -
branches/HeuristicLab.TreeSimplifier/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/SymbolicRegressionSolutionView.Designer.cs
r5829 r8935 1 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views { 1 #region License Information 2 /* HeuristicLab 3 * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 * 5 * This file is part of HeuristicLab. 6 * 7 * HeuristicLab is free software: you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation, either version 3 of the License, or 10 * (at your option) any later version. 11 * 12 * HeuristicLab is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>. 19 */ 20 #endregion 21 22 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views { 2 23 partial class SymbolicRegressionSolutionView { 3 24 /// <summary> -
branches/HeuristicLab.TreeSimplifier/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/VariableTrackbar.Designer.cs
r7967 r8935 1 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views { 1 #region License Information 2 /* HeuristicLab 3 * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 * 5 * This file is part of HeuristicLab. 6 * 7 * HeuristicLab is free software: you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation, either version 3 of the License, or 10 * (at your option) any later version. 11 * 12 * HeuristicLab is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>. 19 */ 20 #endregion 21 22 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views { 2 23 partial class VariableTrackbar { 3 24 /// <summary> -
branches/HeuristicLab.TreeSimplifier/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/VariableTrackbar.cs
r7028 r8935 1 using System; 1 #region License Information 2 /* HeuristicLab 3 * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 * 5 * This file is part of HeuristicLab. 6 * 7 * HeuristicLab is free software: you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation, either version 3 of the License, or 10 * (at your option) any later version. 11 * 12 * HeuristicLab is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>. 19 */ 20 #endregion 21 22 using System; 2 23 using System.Collections.Generic; 3 using System.ComponentModel;4 using System.Drawing;5 using System.Data;6 24 using System.Linq; 7 using System.Text;8 25 using System.Windows.Forms; 9 26 using System.Windows.Forms.DataVisualization.Charting; … … 38 55 boxPlotChart.Series["BoxPlot"]["BoxPlotShowMedian"] = "true"; 39 56 boxPlotChart.Series["BoxPlot"]["BoxPlotShowUnusualValues"] = "true"; 40 boxPlotChart.ChartAreas[0].AxisY.Minimum = valuesArr.Min() 41 boxPlotChart.ChartAreas[0].AxisY.Maximum = valuesArr.Max() 42 57 boxPlotChart.ChartAreas[0].AxisY.Minimum = valuesArr.Min(); 58 boxPlotChart.ChartAreas[0].AxisY.Maximum = valuesArr.Max(); 59 43 60 44 61 trackBar.Minimum = (int)Math.Round(valuesArr.Min() * FACTOR); -
branches/HeuristicLab.TreeSimplifier/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SymbolicRegressionSolutionImpactValuesCalculator.cs
r8409 r8935 20 20 #endregion 21 21 22 using System; 22 23 using System.Collections.Generic; 23 24 using System.Linq; 25 using HeuristicLab.Common; 24 26 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding; 25 27 26 28 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Regression { 27 29 public class SymbolicRegressionSolutionImpactValuesCalculator : SymbolicDataAnalysisSolutionImpactValuesCalculator { 28 public override Dictionary<ISymbolicExpressionTreeNode, double> CalculateReplacementValues(ISymbolicExpressionTree tree, 29 ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, 30 IDataAnalysisProblemData problemData) { 31 var replacementValues = new Dictionary<ISymbolicExpressionTreeNode, double>(); 32 foreach (ISymbolicExpressionTreeNode node in tree.Root.GetSubtree(0).GetSubtree(0).IterateNodesPrefix()) { 33 replacementValues[node] = CalculateReplacementValue(node, tree, interpreter, problemData); 34 } 35 return replacementValues; 30 public override IEnumerable<Tuple<ISymbolicExpressionTreeNode, double>> CalculateReplacementValues(ISymbolicExpressionTree tree, 31 ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, 32 IDataAnalysisProblemData problemData) { 33 return from node in tree.Root.GetSubtree(0).GetSubtree(0).IterateNodesPrefix() 34 select new Tuple<ISymbolicExpressionTreeNode, double>(node, CalculateReplacementValue(node, tree, interpreter, problemData)); 36 35 } 37 36 38 public override Dictionary<ISymbolicExpressionTreeNode, double> CalculateImpactValues(ISymbolicExpressionTree tree, ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, IDataAnalysisProblemData regressionProblemData, double lowerEstimationLimit, double upperEstimationLimit) { 37 public override IEnumerable<Tuple<ISymbolicExpressionTreeNode, double>> CalculateImpactValues(ISymbolicExpressionTree tree, 38 ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, 39 IDataAnalysisProblemData regressionProblemData, 40 double lowerEstimationLimit, double upperEstimationLimit) { 39 41 var problemData = (IRegressionProblemData)regressionProblemData; 40 42 var dataset = problemData.Dataset; 41 43 var rows = problemData.TrainingIndices.ToList(); 42 44 string targetVariable = problemData.TargetVariable; 43 var impactValues = new Dictionary<ISymbolicExpressionTreeNode, double>();44 45 List<ISymbolicExpressionTreeNode> nodes = tree.Root.GetSubtree(0).GetSubtree(0).IterateNodesPostfix().ToList(); 45 var originalOutput = interpreter.GetSymbolicExpressionTreeValues(tree, dataset, rows). ToArray();46 var originalOutput = interpreter.GetSymbolicExpressionTreeValues(tree, dataset, rows).LimitToRange(lowerEstimationLimit, upperEstimationLimit).ToArray(); 46 47 var targetValues = dataset.GetDoubleValues(targetVariable, rows).ToList(); 47 48 OnlineCalculatorError errorState; … … 49 50 if (errorState != OnlineCalculatorError.None) originalR2 = 0.0; 50 51 51 foreach (ISymbolicExpressionTreeNode node in nodes) { 52 var parent = node.Parent; 53 var constantNode = ((ConstantTreeNode)new Constant().CreateTreeNode()); 54 constantNode.Value = CalculateReplacementValue(node, tree, interpreter, problemData); 55 ISymbolicExpressionTreeNode replacementNode = constantNode; 56 SwitchNode(parent, node, replacementNode); 57 var newOutput = interpreter.GetSymbolicExpressionTreeValues(tree, dataset, rows); 58 double newR2 = OnlinePearsonsRSquaredCalculator.Calculate(targetValues, newOutput, out errorState); 59 if (errorState != OnlineCalculatorError.None) newR2 = 0.0; 52 return from node in tree.Root.GetSubtree(0).GetSubtree(0).IterateNodesPostfix().ToList() 53 select new Tuple<ISymbolicExpressionTreeNode, double>(node, CalculateImpact(tree, originalR2, node, interpreter, problemData, lowerEstimationLimit, upperEstimationLimit)); 54 } 60 55 61 // impact = 0 if no change 62 // impact < 0 if new solution is better 63 // impact > 0 if new solution is worse 64 impactValues[node] = originalR2 - newR2; 65 SwitchNode(parent, replacementNode, node); 66 } 67 return impactValues; 56 private static double CalculateImpact(ISymbolicExpressionTree tree, double originalQuality, ISymbolicExpressionTreeNode node, 57 ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, IRegressionProblemData problemData, 58 double lowerEstimationLimit, double upperEstimationLimit) { 59 var dataset = problemData.Dataset; 60 var rows = problemData.TrainingIndices.ToList(); 61 string targetVariable = problemData.TargetVariable; 62 var targetValues = dataset.GetDoubleValues(targetVariable, rows).ToList(); 63 64 var parent = node.Parent; 65 var constantNode = (ConstantTreeNode)new Constant().CreateTreeNode(); 66 constantNode.Value = CalculateReplacementValue(node, tree, interpreter, problemData); 67 SwitchNode(parent, node, constantNode); 68 var newOutput = interpreter.GetSymbolicExpressionTreeValues(tree, dataset, rows) 69 .LimitToRange(lowerEstimationLimit, upperEstimationLimit) 70 .ToArray(); 71 OnlineCalculatorError errorState; 72 double quality = OnlinePearsonsRSquaredCalculator.Calculate(targetValues, newOutput, out errorState); 73 if (errorState != OnlineCalculatorError.None) quality = 0.0; 74 SwitchNode(parent, constantNode, node); 75 // impact = 0 if no change 76 // impact < 0 if new solution is better 77 // impact > 0 if new solution is worse 78 return originalQuality - quality; 68 79 } 69 80 } -
branches/HeuristicLab.TreeSimplifier/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/InteractiveSymbolicDataAnalysisSolutionSimplifierView.Designer.cs
r8916 r8935 186 186 this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 187 187 this.Controls.Add(this.splitContainer); 188 this.DoubleBuffered = true; 188 189 this.Name = "InteractiveSymbolicDataAnalysisSolutionSimplifierView"; 189 190 this.Size = new System.Drawing.Size(564, 348); -
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 -
branches/HeuristicLab.TreeSimplifier/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/InteractiveSymbolicExpressionTreeChart.Designer.cs
r8409 r8935 1 using System.Windows.Forms; 1 #region License Information 2 /* HeuristicLab 3 * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 * 5 * This file is part of HeuristicLab. 6 * 7 * HeuristicLab is free software: you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation, either version 3 of the License, or 10 * (at your option) any later version. 11 * 12 * HeuristicLab is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>. 19 */ 20 #endregion 21 22 using System.Windows.Forms; 2 23 3 24 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views { … … 26 47 /// </summary> 27 48 private void InitializeComponent() { 49 this.DoubleBuffered = true; 28 50 this.insertNodeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 29 51 this.changeValueToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); … … 131 153 this.pasteToolStripMenuItem.Text = "Paste"; 132 154 this.pasteToolStripMenuItem.Click += new System.EventHandler(this.pasteToolStripMenuItem_Clicked); 155 // 156 // contextMenuStrip 157 // 158 this.contextMenuStrip.Opened += this.contextMenuStrip_Opened; 159 this.contextMenuStrip.Items.AddRange(new ToolStripItem[] { insertNodeToolStripMenuItem, 160 changeValueToolStripMenuItem, 161 copyToolStripMenuItem, 162 cutToolStripMenuItem, 163 deleteToolStripMenuItem, 164 pasteToolStripMenuItem }); 133 165 // 134 166 // treeStatusLabel -
branches/HeuristicLab.TreeSimplifier/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/InteractiveSymbolicExpressionTreeChart.cs
r8916 r8935 40 40 InitializeComponent(); 41 41 // add extra actions in the context menu strips 42 this.contextMenuStrip.Opened += this.contextMenuStrip_Opened; 43 this.contextMenuStrip.Items.AddRange(new ToolStripItem[] { 44 insertNodeToolStripMenuItem, 45 changeValueToolStripMenuItem, 46 copyToolStripMenuItem, 47 cutToolStripMenuItem, 48 deleteToolStripMenuItem, 49 pasteToolStripMenuItem }); 42 43 50 44 lastSelected = null; 51 45 currSelected = null; … … 53 47 } 54 48 55 public bool TreeValid { 56 get { return TreeState.Valid == treeState; } 57 } 58 49 public bool TreeValid { get { return TreeState.Valid == treeState; } } 59 50 // expose an additional event for signaling to the parent view when the tree structure was modified 60 51 // the emitting of the signal is conditional on the tree being valid, otherwise only a Repaint is issued … … 66 57 treeState = TreeState.Valid; 67 58 var changed = SymbolicExpressionTreeChanged; 68 if (changed != null) {59 if (changed != null) 69 60 changed(sender, e); 70 }71 61 } else { 72 62 treeStatusValue.Text = "Invalid"; … … 80 70 var menu = sender as ContextMenuStrip; 81 71 if (menu == null) return; 82 var point = menu.SourceControl.PointToClient(Cursor.Position); 83 var visualNode = FindVisualSymbolicExpressionTreeNodeAt(point.X, point.Y); 84 if (visualNode != null) { 85 lastSelected = currSelected; 86 if (lastSelected != null) lastSelected.LineColor = Color.Black; 87 currSelected = visualNode; 88 currSelected.LineColor = Color.LightGreen; 89 EnableTreeEditingMenuItems(); 90 OnSymbolicExpressionTreeNodeClicked(currSelected, new MouseEventArgs(MouseButtons.Right, 1, point.X, point.Y, 0)); 72 if (currSelected == null) { 73 insertNodeToolStripMenuItem.Visible = false; 74 changeValueToolStripMenuItem.Visible = false; 75 copyToolStripMenuItem.Visible = false; 76 cutToolStripMenuItem.Visible = false; 77 deleteToolStripMenuItem.Visible = false; 78 pasteToolStripMenuItem.Visible = false; 91 79 } else { 92 DisableTreeEditingMenuItems(); 93 } 94 } 95 96 private void DisableTreeEditingMenuItems() { 97 insertNodeToolStripMenuItem.Visible = false; 98 changeValueToolStripMenuItem.Visible = false; 99 copyToolStripMenuItem.Visible = false; 100 cutToolStripMenuItem.Visible = false; 101 deleteToolStripMenuItem.Visible = false; 102 pasteToolStripMenuItem.Visible = false; 103 } 104 105 private void EnableTreeEditingMenuItems() { 106 107 var node = currSelected.SymbolicExpressionTreeNode; 108 changeValueToolStripMenuItem.Visible = (node is SymbolicExpressionTreeTerminalNode); 109 insertNodeToolStripMenuItem.Visible = !changeValueToolStripMenuItem.Visible; 110 copyToolStripMenuItem.Visible = true; 111 cutToolStripMenuItem.Visible = true; 112 deleteToolStripMenuItem.Visible = true; 113 pasteToolStripMenuItem.Visible = (lastOp == EditOp.CopyNode || lastOp == EditOp.CopySubtree || lastOp == EditOp.CutNode || lastOp == EditOp.CutSubtree) && insertNodeToolStripMenuItem.Visible; 114 } 115 116 117 protected override void SymbolicExpressionTreeChart_MouseClick(object sender, MouseEventArgs e) { 118 VisualSymbolicExpressionTreeNode visualTreeNode = FindVisualSymbolicExpressionTreeNodeAt(e.X, e.Y); 119 if (visualTreeNode != null) { 120 lastSelected = currSelected; 121 if (lastSelected != null) lastSelected.LineColor = Color.Black; 122 currSelected = visualTreeNode; 123 currSelected.LineColor = Color.LightGreen; 124 } 125 Repaint(); 126 base.SymbolicExpressionTreeChart_MouseClick(sender, e); 80 var node = currSelected.SymbolicExpressionTreeNode; 81 changeValueToolStripMenuItem.Visible = (node is SymbolicExpressionTreeTerminalNode); 82 insertNodeToolStripMenuItem.Visible = !changeValueToolStripMenuItem.Visible; 83 copyToolStripMenuItem.Visible = true; 84 cutToolStripMenuItem.Visible = true; 85 deleteToolStripMenuItem.Visible = true; 86 pasteToolStripMenuItem.Visible = tempNode != null && insertNodeToolStripMenuItem.Visible; 87 } 88 } 89 90 protected override void OnSymbolicExpressionTreeNodeClicked(object sender, MouseEventArgs e) { 91 var visualTreeNode = FindVisualSymbolicExpressionTreeNodeAt(e.X, e.Y); 92 if (visualTreeNode == null || visualTreeNode == currSelected) return; 93 lastSelected = currSelected; 94 if (lastSelected != null) 95 lastSelected.LineColor = Color.Black; 96 currSelected = visualTreeNode; 97 currSelected.LineColor = Color.LightGreen; 98 Repaint(); 99 base.OnSymbolicExpressionTreeNodeClicked(sender, e); 127 100 } 128 101 … … 131 104 var node = currSelected.SymbolicExpressionTreeNode; 132 105 133 var dialog = new InsertNodeDialog(); 134 dialog.SetAllowedSymbols(node.Grammar.AllowedSymbols.Where(s => s.Enabled && s.InitialFrequency > 0.0 && !(s is ProgramRootSymbol || s is StartSymbol || s is Defun))); 135 dialog.DialogValidated += OnInsertNodeDialogValidated; 136 dialog.ShowDialog(this); 106 using (var dialog = new InsertNodeDialog()) { 107 dialog.SetAllowedSymbols(node.Grammar.AllowedSymbols.Where(s => s.Enabled && s.InitialFrequency > 0.0 && !(s is ProgramRootSymbol || s is StartSymbol || s is Defun))); 108 dialog.DialogValidated += InsertNodeDialog_Validated; 109 dialog.ShowDialog(this); 110 } 137 111 } 138 112 … … 140 114 if (currSelected == null) return; 141 115 var node = currSelected.SymbolicExpressionTreeNode; 142 var dialog = new ValueChangeDialog(); 143 dialog.SetContent(node); 144 dialog.DialogValidated += OnChangeValueDialogValidated; 145 dialog.ShowDialog(this); 116 using (var dialog = new ValueChangeDialog()) { 117 dialog.SetContent(node); 118 dialog.DialogValidated += ChangeValueDialog_Validated; 119 dialog.ShowDialog(this); 120 } 146 121 } 147 122 148 123 public event EventHandler SymbolicExpressionTreeNodeChanged; 149 150 private void OnChangeValueDialogValidated(object sender, EventArgs e) { 151 SymbolicExpressionTreeNodeChanged(sender, e); 152 } 153 154 private void OnInsertNodeDialogValidated(object sender, EventArgs e) { 124 private void OnSymbolicExpressionTreeNodeChanged(object sender, EventArgs e) { 125 var changed = SymbolicExpressionTreeNodeChanged; 126 if (changed != null) 127 SymbolicExpressionTreeNodeChanged(sender, e); 128 } 129 130 private void ChangeValueDialog_Validated(object sender, EventArgs e) { 131 OnSymbolicExpressionTreeNodeChanged(sender, e); 132 } 133 134 private void InsertNodeDialog_Validated(object sender, EventArgs e) { 155 135 var dialog = (InsertNodeDialog)sender; 156 136 var symbol = dialog.SelectedSymbol(); … … 172 152 } 173 153 } 174 // we assume that there is no case in which the parents subtrees get transferred to node, but node doesn't get added as a subtree of parent175 154 } 176 155 if (parent.Symbol.MaximumArity > parent.SubtreeCount) { … … 210 189 lastOp = EditOp.CopyNode; 211 190 tempNode = currSelected.SymbolicExpressionTreeNode; 212 var visualNode = visualTreeNodes[tempNode]; 213 visualNode.LineColor = Color.LightGray; 214 visualNode.TextColor = Color.LightGray; 191 currSelected.LineColor = Color.LightGray; 192 currSelected.TextColor = Color.LightGray; 215 193 Repaint(); 216 194 } … … 223 201 visualNode.LineColor = Color.LightGray; 224 202 visualNode.TextColor = Color.LightGray; 225 if (node.SubtreeCount > 0) { 226 foreach (var subtree in node.Subtrees) { 227 var visualLine = visualLines[new Tuple<ISymbolicExpressionTreeNode, ISymbolicExpressionTreeNode>(node, subtree)]; 228 visualLine.LineColor = Color.LightGray; 229 } 203 if (node.SubtreeCount <= 0) continue; 204 foreach (var subtree in node.Subtrees) { 205 var visualLine = visualLines[new Tuple<ISymbolicExpressionTreeNode, ISymbolicExpressionTreeNode>(node, subtree)]; 206 visualLine.LineColor = Color.LightGray; 230 207 } 231 208 } … … 237 214 var node = currSelected.SymbolicExpressionTreeNode; 238 215 var parent = node.Parent; 216 if (parent == null || parent.Symbol is StartSymbol || parent.Symbol is ProgramRootSymbol) 217 return; // the operation would result in the deletion of the entire tree 239 218 if (parent.Symbol.MaximumArity >= node.SubtreeCount + parent.SubtreeCount - 1) { // -1 because tempNode will be removed 240 219 parent.RemoveSubtree(parent.IndexOfSubtree(node)); … … 244 223 parent.AddSubtree(child); 245 224 } 246 } else { 247 // if the node cannot be deleted without breaking the tree, do nothing 248 // TODO: decide what to do 249 } 225 } 226 currSelected = null; // because the currently selected node was just deleted 250 227 OnSymbolicExpressionTreeChanged(sender, e); 251 228 } … … 255 232 var node = currSelected.SymbolicExpressionTreeNode; 256 233 var parent = node.Parent; 234 if (parent == null || parent.Symbol is StartSymbol || parent.Symbol is ProgramRootSymbol) 235 return; // the operation makes no sense as it would result in the deletion of the entire tree 257 236 parent.RemoveSubtree(parent.IndexOfSubtree(node)); 237 currSelected = null; // because the currently selected node was just deleted 258 238 OnSymbolicExpressionTreeChanged(sender, e); 259 239 } … … 270 250 switch (lastOp) { 271 251 case (EditOp.CutNode): { 272 // cut node252 // when cutting a node from the tree, it's children become children of it's parent 273 253 var parent = tempNode.Parent; 274 254 // arity checks to see if parent can accept node's children (we assume the grammar is already ok with that) 255 // (otherise, the 'cut' part of the operation will just not do anything) 275 256 if (parent.Symbol.MaximumArity >= tempNode.SubtreeCount + parent.SubtreeCount - 1) { 276 257 // -1 because tempNode will be removed … … 282 263 } 283 264 lastOp = EditOp.CopyNode; 265 currSelected = null; 284 266 } 285 267 break; … … 287 269 case (EditOp.CutSubtree): { 288 270 // cut subtree 289 tempNode.Parent.RemoveSubtree(tempNode.Parent.IndexOfSubtree(tempNode)); 290 lastOp = EditOp.CopySubtree; // do this so the next paste will actually perform a copy 271 var parent = tempNode.Parent; 272 parent.RemoveSubtree(parent.IndexOfSubtree(tempNode)); 273 lastOp = EditOp.CopySubtree; // do this so the next paste will actually perform a copy 274 currSelected = null; 291 275 break; 292 276 } 293 277 case (EditOp.CopyNode): { 294 278 // copy node 295 var clone = tempNode.Clone() as ISymbolicExpressionTreeNode; // should never be null279 var clone = (SymbolicExpressionTreeNode)tempNode.Clone(); // should never be null 296 280 clone.Parent = tempNode.Parent; 297 281 tempNode = clone; 298 if (tempNode != null && tempNode.SubtreeCount > 0) { 299 for (int i = tempNode.SubtreeCount - 1; i >= 0; --i) 300 tempNode.RemoveSubtree(i); 301 } 282 for (int i = tempNode.SubtreeCount - 1; i >= 0; --i) tempNode.RemoveSubtree(i); 302 283 break; 303 284 } 304 285 case (EditOp.CopySubtree): { 305 286 // copy subtree 306 var clone = tempNode.Clone() as ISymbolicExpressionTreeNode; 307 if (clone != null) { 308 clone.Parent = tempNode.Parent; 309 tempNode = clone; 310 } 287 var clone = (SymbolicExpressionTreeNode)tempNode.Clone(); 288 clone.Parent = tempNode.Parent; 289 tempNode = clone; 311 290 break; 312 291 } 313 292 } 314 293 node.AddSubtree(tempNode); 315 Tree = Tree; 316 // hack in order to trigger the reinitialization of the dictionaries after new nodes appeared in the graph 294 Tree = Tree; // hack in order to trigger the reinitialization of the dictionaries after new nodes appeared in the graph 317 295 OnSymbolicExpressionTreeChanged(sender, e); 318 } else {319 // throw exception or show a warning to the user about invalid arity320 296 } 321 297 } -
branches/HeuristicLab.TreeSimplifier/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/TreeEditDialogs/SymbolicExpressionTreeNodeChangeValueDialog.Designer.cs
r8409 r8935 53 53 this.variableNameLabel = new System.Windows.Forms.Label(); 54 54 this.variableNamesCombo = new System.Windows.Forms.ComboBox(); 55 this.okButton = new System.Windows.Forms.Button(); 56 this.cancelButton = new System.Windows.Forms.Button(); 55 57 ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit(); 56 58 this.SuspendLayout(); … … 59 61 // 60 62 this.originalValueLabel.AutoSize = true; 61 this.originalValueLabel.Location = new System.Drawing.Point(1 4, 15);63 this.originalValueLabel.Location = new System.Drawing.Point(12, 45); 62 64 this.originalValueLabel.Name = "originalValueLabel"; 63 65 this.originalValueLabel.Size = new System.Drawing.Size(72, 13); … … 67 69 // oldValueTextBox 68 70 // 69 this.oldValueTextBox.Location = new System.Drawing.Point(123, 12);71 this.oldValueTextBox.Location = new System.Drawing.Point(123, 42); 70 72 this.oldValueTextBox.Name = "oldValueTextBox"; 71 73 this.oldValueTextBox.ReadOnly = true; … … 75 77 // newValueTextBox 76 78 // 77 this.newValueTextBox.Location = new System.Drawing.Point(123, 38);79 this.newValueTextBox.Location = new System.Drawing.Point(123, 82); 78 80 this.newValueTextBox.Name = "newValueTextBox"; 79 81 this.newValueTextBox.Size = new System.Drawing.Size(131, 20); … … 86 88 // 87 89 this.newValueLabel.AutoSize = true; 88 this.newValueLabel.Location = new System.Drawing.Point(1 4, 41);90 this.newValueLabel.Location = new System.Drawing.Point(12, 85); 89 91 this.newValueLabel.Name = "newValueLabel"; 90 92 this.newValueLabel.Size = new System.Drawing.Size(59, 13); … … 101 103 // 102 104 this.variableNameLabel.AutoSize = true; 103 this.variableNameLabel.Location = new System.Drawing.Point(1 4, 74);105 this.variableNameLabel.Location = new System.Drawing.Point(12, 7); 104 106 this.variableNameLabel.Name = "variableNameLabel"; 105 107 this.variableNameLabel.Size = new System.Drawing.Size(76, 13); … … 112 114 this.variableNamesCombo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 113 115 this.variableNamesCombo.FormattingEnabled = true; 114 this.variableNamesCombo.Location = new System.Drawing.Point(123, 71);116 this.variableNamesCombo.Location = new System.Drawing.Point(123, 4); 115 117 this.variableNamesCombo.Name = "variableNamesCombo"; 116 118 this.variableNamesCombo.Size = new System.Drawing.Size(131, 21); … … 121 123 this.variableNamesCombo.Validated += new System.EventHandler(this.variableNamesCombo_Validated); 122 124 // 125 // okButton 126 // 127 this.okButton.Location = new System.Drawing.Point(15, 119); 128 this.okButton.Name = "okButton"; 129 this.okButton.Size = new System.Drawing.Size(75, 23); 130 this.okButton.TabIndex = 8; 131 this.okButton.Text = "OK"; 132 this.okButton.UseVisualStyleBackColor = true; 133 this.okButton.Click += new System.EventHandler(this.okButton_Click); 134 // 135 // cancelButton 136 // 137 this.cancelButton.CausesValidation = false; 138 this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; 139 this.cancelButton.Location = new System.Drawing.Point(179, 119); 140 this.cancelButton.Name = "cancelButton"; 141 this.cancelButton.Size = new System.Drawing.Size(75, 23); 142 this.cancelButton.TabIndex = 9; 143 this.cancelButton.Text = "Cancel"; 144 this.cancelButton.UseVisualStyleBackColor = true; 145 this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click); 146 // 123 147 // ValueChangeDialog 124 148 // … … 126 150 this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 127 151 this.AutoSize = true; 128 this.ClientSize = new System.Drawing.Size(269, 103); 152 this.CancelButton = this.cancelButton; 153 this.ClientSize = new System.Drawing.Size(269, 154); 154 this.ControlBox = false; 155 this.Controls.Add(this.cancelButton); 156 this.Controls.Add(this.okButton); 129 157 this.Controls.Add(this.variableNamesCombo); 130 158 this.Controls.Add(this.variableNameLabel); … … 133 161 this.Controls.Add(this.oldValueTextBox); 134 162 this.Controls.Add(this.originalValueLabel); 163 this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; 135 164 this.MaximizeBox = false; 136 165 this.MinimizeBox = false; … … 151 180 private System.Windows.Forms.Label originalValueLabel; 152 181 private System.Windows.Forms.TextBox oldValueTextBox; 153 private System.Windows.Forms.TextBox newValueTextBox;154 182 private System.Windows.Forms.Label newValueLabel; 155 183 private System.Windows.Forms.ErrorProvider errorProvider; 156 private System.Windows.Forms.ComboBox variableNamesCombo;157 184 private System.Windows.Forms.Label variableNameLabel; 185 private System.Windows.Forms.Button cancelButton; 186 private System.Windows.Forms.Button okButton; 187 public System.Windows.Forms.TextBox newValueTextBox; 188 public System.Windows.Forms.ComboBox variableNamesCombo; 158 189 } 159 190 } -
branches/HeuristicLab.TreeSimplifier/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/TreeEditDialogs/SymbolicExpressionTreeNodeChangeValueDialog.cs
r8916 r8935 29 29 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views { 30 30 public partial class ValueChangeDialog : Form { 31 private ISymbolicExpressionTreeNode _content;31 private ISymbolicExpressionTreeNode content; 32 32 public ISymbolicExpressionTreeNode Content { 33 get { return _content; }33 get { return content; } 34 34 set { 35 35 if (InvokeRequired) 36 Invoke(new Action<SymbolicExpressionTreeNode>(x => _content = x), value);36 Invoke(new Action<SymbolicExpressionTreeNode>(x => content = x), value); 37 37 else 38 _content = value;38 content = value; 39 39 } 40 }41 42 public string Caption {43 get { return this.Text; }44 set {45 if (InvokeRequired)46 Invoke(new Action<string>(x => this.Caption = x), value);47 else48 this.Text = value;49 }50 }51 52 public string OldValue {53 get { return oldValueTextBox.Text; }54 set {55 if (InvokeRequired)56 Invoke(new Action<string>(x => this.NewValue = x), value);57 else58 oldValueTextBox.Text = value;59 }60 }61 62 public string NewValue {63 get { return newValueTextBox.Text; }64 set {65 if (InvokeRequired)66 Invoke(new Action<string>(x => this.NewValue = x), value);67 else68 newValueTextBox.Text = value;69 }70 }71 72 public TextBox NewValueTextBox {73 get { return newValueTextBox; }74 }75 76 public ComboBox VariableNameComboBox {77 get { return variableNamesCombo; }78 40 } 79 41 … … 86 48 Content = content; 87 49 if (Content is VariableTreeNode) { 88 Caption= "Change variable name or weight";50 this.Text = "Change variable name or weight"; 89 51 var variable = Content as VariableTreeNode; 90 OldValue = Math.Round(variable.Weight, 4).ToString(); 91 NewValue = OldValue; 52 newValueTextBox.Text = oldValueTextBox.Text = Math.Round(variable.Weight, 4).ToString(); 92 53 // add a dropbox containing all the available variable names 93 54 variableNameLabel.Visible = true; … … 95 56 foreach (var name in variable.Symbol.VariableNames) variableNamesCombo.Items.Add(name); 96 57 variableNamesCombo.SelectedIndex = variableNamesCombo.Items.IndexOf(variable.VariableName); 97 // variableNamesCombo.SelectedText = variable.VariableName;98 // variableNamesCombo.SelectedIndex = 0;99 58 } else if (Content is ConstantTreeNode) { 100 Caption= "Change constant value";59 this.Text = "Change constant value"; 101 60 var constant = Content as ConstantTreeNode; 102 OldValue = Math.Round(constant.Value, 4).ToString(); 103 NewValue = OldValue; 61 newValueTextBox.Text = oldValueTextBox.Text = Math.Round(constant.Value, 4).ToString(); 104 62 } 105 63 } … … 155 113 if ((e.KeyCode == Keys.Enter) || (e.KeyCode == Keys.Return)) { 156 114 if (!ValidateChildren()) return; 157 DialogValidated(this, e);115 OnDialogValidated(this, e); // emit validated effect 158 116 Close(); 159 117 } … … 161 119 162 120 public event EventHandler DialogValidated; 121 private void OnDialogValidated(object sender, EventArgs e) { 122 var dialogValidated = DialogValidated; 123 if (dialogValidated != null) 124 dialogValidated(sender, e); 125 } 126 127 private void cancelButton_Click(object sender, EventArgs e) { 128 Close(); 129 } 130 131 private void okButton_Click(object sender, EventArgs e) { 132 if (ValidateChildren()) { 133 OnDialogValidated(this, e); 134 Close(); 135 } 136 } 137 163 138 } 164 139 } -
branches/HeuristicLab.TreeSimplifier/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/TreeEditDialogs/SymbolicExpressionTreeNodeInsertDialog.Designer.cs
r8409 r8935 1 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views { 1 #region License Information 2 /* HeuristicLab 3 * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 * 5 * This file is part of HeuristicLab. 6 * 7 * HeuristicLab is free software: you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation, either version 3 of the License, or 10 * (at your option) any later version. 11 * 12 * HeuristicLab is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>. 19 */ 20 #endregion 21 22 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views { 2 23 partial class InsertNodeDialog { 3 24 /// <summary> … … 34 55 this.constantValueLabel = new System.Windows.Forms.Label(); 35 56 this.errorProvider = new System.Windows.Forms.ErrorProvider(this.components); 57 this.okButton = new System.Windows.Forms.Button(); 58 this.cancelButton = new System.Windows.Forms.Button(); 36 59 ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit(); 37 60 this.SuspendLayout(); … … 70 93 // 71 94 this.variableNameLabel.AutoSize = true; 72 this.variableNameLabel.Location = new System.Drawing.Point(13, 7 7);95 this.variableNameLabel.Location = new System.Drawing.Point(13, 74); 73 96 this.variableNameLabel.Name = "variableNameLabel"; 74 97 this.variableNameLabel.Size = new System.Drawing.Size(35, 13); … … 81 104 this.variableNamesCombo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 82 105 this.variableNamesCombo.FormattingEnabled = true; 83 this.variableNamesCombo.Location = new System.Drawing.Point(120, 7 4);106 this.variableNamesCombo.Location = new System.Drawing.Point(120, 71); 84 107 this.variableNamesCombo.Name = "variableNamesCombo"; 85 108 this.variableNamesCombo.Size = new System.Drawing.Size(108, 21); … … 123 146 this.errorProvider.RightToLeft = true; 124 147 // 148 // okButton 149 // 150 this.okButton.Location = new System.Drawing.Point(12, 112); 151 this.okButton.Name = "okButton"; 152 this.okButton.Size = new System.Drawing.Size(75, 23); 153 this.okButton.TabIndex = 9; 154 this.okButton.Text = "OK"; 155 this.okButton.UseVisualStyleBackColor = true; 156 this.okButton.Click += new System.EventHandler(this.okButton_Click); 157 // 158 // cancelButton 159 // 160 this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; 161 this.cancelButton.Location = new System.Drawing.Point(153, 112); 162 this.cancelButton.Name = "cancelButton"; 163 this.cancelButton.Size = new System.Drawing.Size(75, 23); 164 this.cancelButton.TabIndex = 10; 165 this.cancelButton.Text = "Cancel"; 166 this.cancelButton.UseVisualStyleBackColor = true; 167 this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click); 168 // 125 169 // InsertNodeDialog 126 170 // 127 171 this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 128 172 this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 129 this.ClientSize = new System.Drawing.Size(240, 107); 173 this.CancelButton = this.cancelButton; 174 this.ClientSize = new System.Drawing.Size(240, 147); 175 this.ControlBox = false; 176 this.Controls.Add(this.cancelButton); 177 this.Controls.Add(this.okButton); 130 178 this.Controls.Add(this.constantValueLabel); 131 179 this.Controls.Add(this.constantValueTextBox); … … 136 184 this.Controls.Add(this.allowedSymbolsCombo); 137 185 this.Controls.Add(this.nodeSymbolLabel); 186 this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; 138 187 this.Name = "InsertNodeDialog"; 139 188 this.Text = "SymbolicExpressionTreeNodeInsertDialog"; … … 156 205 internal System.Windows.Forms.TextBox variableWeightTextBox; 157 206 internal System.Windows.Forms.ComboBox variableNamesCombo; 207 private System.Windows.Forms.Button cancelButton; 208 private System.Windows.Forms.Button okButton; 158 209 } 159 210 } -
branches/HeuristicLab.TreeSimplifier/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/TreeEditDialogs/SymbolicExpressionTreeNodeInsertDialog.cs
r8409 r8935 1 using System; 1 #region License Information 2 /* HeuristicLab 3 * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 * 5 * This file is part of HeuristicLab. 6 * 7 * HeuristicLab is free software: you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation, either version 3 of the License, or 10 * (at your option) any later version. 11 * 12 * HeuristicLab is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>. 19 */ 20 #endregion 21 22 using System; 2 23 using System.Collections.Generic; 3 24 using System.ComponentModel; … … 9 30 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views { 10 31 public partial class InsertNodeDialog : Form { 11 public string Caption {12 get { return this.Text; }13 set {14 if (InvokeRequired)15 Invoke(new Action<string>(x => this.Caption = x), value);16 else17 this.Text = value;18 }19 }20 21 32 public InsertNodeDialog() { 22 33 InitializeComponent(); … … 55 66 constantValueTextBox.Visible = false; 56 67 // add controls to the dialog for changing the variable name or weight 68 } else { 69 variableNameLabel.Visible = false; 70 variableNamesCombo.Visible = false; 71 variableWeightLabel.Visible = false; 72 variableWeightTextBox.Visible = false; 73 constantValueLabel.Visible = false; 74 constantValueTextBox.Visible = false; 57 75 } 58 76 } … … 90 108 91 109 public event EventHandler DialogValidated; 110 private void OnDialogValidated(object sender, EventArgs e) { 111 var dialogValidated = DialogValidated; 112 if (dialogValidated != null) 113 dialogValidated(sender, e); 114 } 92 115 93 116 private void childControl_KeyDown(object sender, KeyEventArgs e) { … … 98 121 if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Return) { 99 122 if (ValidateChildren()) { 100 DialogValidated(this, e);123 OnDialogValidated(this, e); 101 124 Close(); 102 125 } 103 126 } 104 127 } 128 129 private void okButton_Click(object sender, EventArgs e) { 130 if (ValidateChildren()) { 131 OnDialogValidated(this, e); 132 Close(); 133 } 134 } 135 136 private void cancelButton_Click(object sender, EventArgs e) { 137 Close(); 138 } 105 139 } 106 140 } -
branches/HeuristicLab.TreeSimplifier/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj
r8916 r8935 204 204 <Compile Include="Crossovers\SymbolicDataAnalysisExpressionSemanticSimilarityCrossover.cs" /> 205 205 <Compile Include="Interfaces\ISymbolicDataAnalysisExpressionCrossover.cs" /> 206 <Compile Include="Interfaces\ISymbolicDataAnalysisImpactValuesCalculator.cs" />207 206 <Compile Include="Interpreter\InterpreterState.cs" /> 208 207 <Compile Include="Interpreter\OpCodes.cs" /> -
branches/HeuristicLab.TreeSimplifier/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisSolutionImpactValuesCalculator.cs
r8916 r8935 20 20 #endregion 21 21 22 using System; 22 23 using System.Collections.Generic; 23 24 using HeuristicLab.Common; … … 25 26 26 27 namespace HeuristicLab.Problems.DataAnalysis.Symbolic { 27 public abstract class SymbolicDataAnalysisSolutionImpactValuesCalculator : ISymbolicDataAnalysisSolutionImpactValuesCalculator { 28 public abstract Dictionary<ISymbolicExpressionTreeNode, double> CalculateReplacementValues(ISymbolicExpressionTree tree, ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, IDataAnalysisProblemData problemData); 29 public abstract Dictionary<ISymbolicExpressionTreeNode, double> CalculateImpactValues(ISymbolicExpressionTree tree, ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, IDataAnalysisProblemData problemData, double lowerEstimationLimit, double upperEstimationLimit); 28 public abstract class SymbolicDataAnalysisSolutionImpactValuesCalculator { 29 public abstract IEnumerable<Tuple<ISymbolicExpressionTreeNode, double>> CalculateReplacementValues(ISymbolicExpressionTree tree, 30 ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, 31 IDataAnalysisProblemData problemData); 32 public abstract IEnumerable<Tuple<ISymbolicExpressionTreeNode, double>> CalculateImpactValues(ISymbolicExpressionTree tree, 33 ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, 34 IDataAnalysisProblemData problemData, 35 double lowerEstimationLimit, double upperEstimationLimit); 30 36 31 protected void SwitchNode(ISymbolicExpressionTreeNode root, ISymbolicExpressionTreeNode oldBranch, ISymbolicExpressionTreeNode newBranch) {37 protected static void SwitchNode(ISymbolicExpressionTreeNode root, ISymbolicExpressionTreeNode oldBranch, ISymbolicExpressionTreeNode newBranch) { 32 38 for (int i = 0; i < root.SubtreeCount; i++) { 33 39 if (root.GetSubtree(i) == oldBranch) { … … 39 45 } 40 46 41 protected double CalculateReplacementValue(ISymbolicExpressionTreeNode node, ISymbolicExpressionTree sourceTree, ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, IDataAnalysisProblemData problemData) { 42 var root = new ProgramRootSymbol().CreateTreeNode(); 43 var start = new StartSymbol().CreateTreeNode(); 44 root.AddSubtree(start); 45 start.AddSubtree((ISymbolicExpressionTreeNode)node.Clone()); 47 protected static double CalculateReplacementValue(ISymbolicExpressionTreeNode node, ISymbolicExpressionTree sourceTree, 48 ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, IDataAnalysisProblemData problemData) { 49 var rootSymbol = new ProgramRootSymbol().CreateTreeNode(); 50 var startSymbol = new StartSymbol().CreateTreeNode(); 51 rootSymbol.AddSubtree(startSymbol); 52 startSymbol.AddSubtree((ISymbolicExpressionTreeNode)node.Clone()); 46 53 var rows = problemData.TrainingIndices; 47 var tempTree = new SymbolicExpressionTree(root );54 var tempTree = new SymbolicExpressionTree(rootSymbol); 48 55 return interpreter.GetSymbolicExpressionTreeValues(tempTree, problemData.Dataset, rows).Median(); 49 56 } -
branches/HeuristicLab.TreeSimplifier/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Symbols/LaggedSymbol.cs
r5809 r8935 1 using HeuristicLab.Common; 1 #region License Information 2 /* HeuristicLab 3 * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 * 5 * This file is part of HeuristicLab. 6 * 7 * HeuristicLab is free software: you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation, either version 3 of the License, or 10 * (at your option) any later version. 11 * 12 * HeuristicLab is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>. 19 */ 20 #endregion 21 22 using HeuristicLab.Common; 2 23 using HeuristicLab.Core; 3 24 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
Note: See TracChangeset
for help on using the changeset viewer.