Changeset 18100 for branches/3140_NumberSymbol
- Timestamp:
- 12/01/21 13:40:55 (3 years ago)
- Location:
- branches/3140_NumberSymbol
- Files:
-
- 2 added
- 37 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/3140_NumberSymbol/HeuristicLab.Algorithms.DataAnalysis/3.4/GBM/GradientBoostingRegressionAlgorithm.cs
r17180 r18100 417 417 var addNode = new Addition().CreateTreeNode(); 418 418 var mulNode = new Multiplication().CreateTreeNode(); 419 var scaleNode = ( ConstantTreeNode)new Constant().CreateTreeNode(); // all models are scaled using the same nu419 var scaleNode = (NumberTreeNode)new Number().CreateTreeNode(); // all models are scaled using the same nu 420 420 scaleNode.Value = nu; 421 421 -
branches/3140_NumberSymbol/HeuristicLab.Algorithms.DataAnalysis/3.4/GradientBoostedTrees/RegressionTreeModel.cs
r17180 r18100 230 230 var startSy = new StartSymbol(); 231 231 var varCondSy = new VariableCondition() { IgnoreSlope = true }; 232 var constSy = new Constant();232 var numSy = new Number(); 233 233 234 234 var startNode = startSy.CreateTreeNode(); 235 startNode.AddSubtree(CreateSymbolicRegressionTreeRecursive(tree, 0, varCondSy, constSy));235 startNode.AddSubtree(CreateSymbolicRegressionTreeRecursive(tree, 0, varCondSy, numSy)); 236 236 var rootNode = rootSy.CreateTreeNode(); 237 237 rootNode.AddSubtree(startNode); … … 239 239 } 240 240 241 private ISymbolicExpressionTreeNode CreateSymbolicRegressionTreeRecursive(TreeNode[] treeNodes, int nodeIdx, VariableCondition varCondSy, ConstantconstSy) {241 private ISymbolicExpressionTreeNode CreateSymbolicRegressionTreeRecursive(TreeNode[] treeNodes, int nodeIdx, VariableCondition varCondSy, Number constSy) { 242 242 var curNode = treeNodes[nodeIdx]; 243 243 if (curNode.VarName == TreeNode.NO_VARIABLE) { 244 var node = ( ConstantTreeNode)constSy.CreateTreeNode();244 var node = (NumberTreeNode)constSy.CreateTreeNode(); 245 245 node.Value = curNode.Val; 246 246 return node; -
branches/3140_NumberSymbol/HeuristicLab.Algorithms.DataAnalysis/3.4/NonlinearRegression/NonlinearRegression.cs
r17180 r18100 123 123 : base() { 124 124 Problem = new RegressionProblem(); 125 Parameters.Add(new FixedValueParameter<StringValue>(ModelStructureParameterName, "The function for which the parameters must be fit (only numeric constants are tuned).", new StringValue(" 1.0* x*x + 0.0")));125 Parameters.Add(new FixedValueParameter<StringValue>(ModelStructureParameterName, "The function for which the parameters must be fit (only numeric constants are tuned).", new StringValue("<num> * x*x + 0.0"))); 126 126 Parameters.Add(new FixedValueParameter<IntValue>(IterationsParameterName, "The maximum number of iterations for constants optimization.", new IntValue(200))); 127 127 Parameters.Add(new FixedValueParameter<IntValue>(RestartsParameterName, "The number of independent random restarts (>0)", new IntValue(10))); … … 267 267 // initialize constants randomly 268 268 if (rand != null) { 269 foreach (var node in tree.IterateNodesPrefix().OfType< ConstantTreeNode>()) {269 foreach (var node in tree.IterateNodesPrefix().OfType<NumberTreeNode>()) { 270 270 double f = Math.Exp(NormalDistributedRandom.NextDouble(rand, 0, 1)); 271 271 double s = rand.NextDouble() < 0.5 ? -1 : 1; -
branches/3140_NumberSymbol/HeuristicLab.Algorithms.DataAnalysis/3.4/RandomForest/RandomForestModel.cs
r17931 r18100 220 220 } 221 221 222 var constSy = new Constant();222 var numSy = new Number(); 223 223 var varCondSy = new VariableCondition() { IgnoreSlope = true }; 224 224 225 var node = CreateRegressionTreeRec(rf.innerobj.trees, offset, offset + 1, constSy, varCondSy);225 var node = CreateRegressionTreeRec(rf.innerobj.trees, offset, offset + 1, numSy, varCondSy); 226 226 227 227 var startNode = new StartSymbol().CreateTreeNode(); … … 232 232 } 233 233 234 private ISymbolicExpressionTreeNode CreateRegressionTreeRec(double[] trees, int offset, int k, Constant constSy, VariableCondition varCondSy) {234 private ISymbolicExpressionTreeNode CreateRegressionTreeRec(double[] trees, int offset, int k, Number numSy, VariableCondition varCondSy) { 235 235 236 236 // alglib source for evaluation of one tree (dfprocessinternal) … … 262 262 263 263 if ((double)(trees[k]) == (double)(-1)) { 264 var constNode = (ConstantTreeNode)constSy.CreateTreeNode();265 constNode.Value = trees[k + 1];266 return constNode;264 var numNode = (NumberTreeNode)numSy.CreateTreeNode(); 265 numNode.Value = trees[k + 1]; 266 return numNode; 267 267 } else { 268 268 var condNode = (VariableConditionTreeNode)varCondSy.CreateTreeNode(); … … 271 271 condNode.Slope = double.PositiveInfinity; 272 272 273 var left = CreateRegressionTreeRec(trees, offset, k + 3, constSy, varCondSy);274 var right = CreateRegressionTreeRec(trees, offset, offset + (int)Math.Round(trees[k + 2]), constSy, varCondSy);273 var left = CreateRegressionTreeRec(trees, offset, k + 3, numSy, varCondSy); 274 var right = CreateRegressionTreeRec(trees, offset, offset + (int)Math.Round(trees[k + 2]), numSy, varCondSy); 275 275 276 276 condNode.AddSubtree(left); // not 100% correct because interpreter uses: if(x <= thres) left() else right() and RF uses if(x < thres) left() else right() (see above) -
branches/3140_NumberSymbol/HeuristicLab.Algorithms.DataAnalysis/3.4/RandomForest/RandomForestModelAlglib_3_7.cs
r17931 r18100 220 220 } 221 221 222 var constSy = new Constant();222 var numSy = new Number(); 223 223 var varCondSy = new VariableCondition() { IgnoreSlope = true }; 224 224 225 var node = CreateRegressionTreeRec(rf.innerobj.trees, offset, offset + 1, constSy, varCondSy);225 var node = CreateRegressionTreeRec(rf.innerobj.trees, offset, offset + 1, numSy, varCondSy); 226 226 227 227 var startNode = new StartSymbol().CreateTreeNode(); … … 232 232 } 233 233 234 private ISymbolicExpressionTreeNode CreateRegressionTreeRec(double[] trees, int offset, int k, ConstantconstSy, VariableCondition varCondSy) {234 private ISymbolicExpressionTreeNode CreateRegressionTreeRec(double[] trees, int offset, int k, Number constSy, VariableCondition varCondSy) { 235 235 236 236 // alglib source for evaluation of one tree (dfprocessinternal) … … 262 262 263 263 if ((double)(trees[k]) == (double)(-1)) { 264 var constNode = (ConstantTreeNode)constSy.CreateTreeNode();265 constNode.Value = trees[k + 1];266 return constNode;264 var numNode = (NumberTreeNode)constSy.CreateTreeNode(); 265 numNode.Value = trees[k + 1]; 266 return numNode; 267 267 } else { 268 268 var condNode = (VariableConditionTreeNode)varCondSy.CreateTreeNode(); -
branches/3140_NumberSymbol/HeuristicLab.Algorithms.DataAnalysis/3.4/RandomForest/RandomForestModelFull.cs
r17931 r18100 199 199 } 200 200 201 var constSy = new Constant();201 var numSy = new Number(); 202 202 var varCondSy = new VariableCondition() { IgnoreSlope = true }; 203 203 204 var node = CreateRegressionTreeRec(rf.innerobj.trees, offset, offset + 1, constSy, varCondSy);204 var node = CreateRegressionTreeRec(rf.innerobj.trees, offset, offset + 1, numSy, varCondSy); 205 205 206 206 var startNode = new StartSymbol().CreateTreeNode(); … … 211 211 } 212 212 213 private ISymbolicExpressionTreeNode CreateRegressionTreeRec(double[] trees, int offset, int k, ConstantconstSy, VariableCondition varCondSy) {213 private ISymbolicExpressionTreeNode CreateRegressionTreeRec(double[] trees, int offset, int k, Number constSy, VariableCondition varCondSy) { 214 214 215 215 // alglib source for evaluation of one tree (dfprocessinternal) … … 241 241 242 242 if ((double)(trees[k]) == (double)(-1)) { 243 var constNode = (ConstantTreeNode)constSy.CreateTreeNode();244 constNode.Value = trees[k + 1];245 return constNode;243 var numNode = (NumberTreeNode)constSy.CreateTreeNode(); 244 numNode.Value = trees[k + 1]; 245 return numNode; 246 246 } else { 247 247 var condNode = (VariableConditionTreeNode)varCondSy.CreateTreeNode(); -
branches/3140_NumberSymbol/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/SymbolicClassificationPruningOperator.cs
r17180 r18100 101 101 for (int i = 0; i < nodes.Count; ++i) { 102 102 var node = nodes[i]; 103 if (node is ConstantTreeNode) continue;103 if (node is NumberTreeNode) continue; 104 104 105 105 double impactValue, replacementValue, newQualityForImpactsCalculation; … … 109 109 if (!pruneOnlyZeroImpactNodes && impactValue > nodeImpactThreshold) continue; 110 110 111 var constantNode = (ConstantTreeNode)node.Grammar.GetSymbol("Constant").CreateTreeNode();112 constantNode.Value = replacementValue;111 var numberNode = (NumberTreeNode)node.Grammar.GetSymbol("Number").CreateTreeNode(); 112 numberNode.Value = replacementValue; 113 113 114 ReplaceWithConstant(node, constantNode);114 ReplaceWithConstant(node, numberNode); 115 115 i += node.GetLength() - 1; // skip subtrees under the node that was folded 116 116 -
branches/3140_NumberSymbol/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/SymbolicRegressionSolutionResponseFunctionView.cs
r18093 r18100 120 120 121 121 private void ChangeVariableValue(string variableName, double value) { 122 foreach (var constNode in variableNodes[variableName].Cast<NumTreeNode>())123 constNode.Value = value;122 foreach (var numNode in variableNodes[variableName].Cast<NumberTreeNode>()) 123 numNode.Value = value; 124 124 125 125 UpdateResponseSeries(); … … 210 210 211 211 int childIndex = varNode.Parent.IndexOfSubtree(varNode); 212 var replacementNode = Make ConstantTreeNode(medianValues[varNode.VariableName]);212 var replacementNode = MakeNumberTreeNode(medianValues[varNode.VariableName]); 213 213 var parent = varNode.Parent; 214 214 parent.RemoveSubtree(childIndex); … … 223 223 } 224 224 225 private ISymbolicExpressionTreeNode MakeProduct(Num TreeNode c, double weight) {225 private ISymbolicExpressionTreeNode MakeProduct(NumberTreeNode c, double weight) { 226 226 var mul = new Multiplication(); 227 227 var prod = mul.CreateTreeNode(); 228 prod.AddSubtree(Make ConstantTreeNode(weight));228 prod.AddSubtree(MakeNumberTreeNode(weight)); 229 229 prod.AddSubtree(c); 230 230 return prod; 231 231 } 232 232 233 private Num TreeNode MakeConstantTreeNode(double value) {234 Num num = new Num();235 num .MinValue = value - 1;236 num .MaxValue = value + 1;237 Num TreeNode numTreeNode = (NumTreeNode)num.CreateTreeNode();238 num TreeNode.Value = value;239 return num TreeNode;233 private NumberTreeNode MakeNumberTreeNode(double value) { 234 Number number = new Number(); 235 number.MinValue = value - 1; 236 number.MaxValue = value + 1; 237 NumberTreeNode numberTreeNode = (NumberTreeNode)number.CreateTreeNode(); 238 numberTreeNode.Value = value; 239 return numberTreeNode; 240 240 } 241 241 } -
branches/3140_NumberSymbol/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/MultiObjective/NMSEMultiObjectiveConstraintsEvaluator.cs
r17958 r18100 123 123 if (errorState == OnlineCalculatorError.None) { 124 124 //Set alpha and beta to the scaling nodes from ia grammar 125 var offsetParameter = offset.GetSubtree(1) as ConstantTreeNode;125 var offsetParameter = offset.GetSubtree(1) as NumberTreeNode; 126 126 offsetParameter.Value = alpha; 127 var scalingParameter = scaling.GetSubtree(1) as ConstantTreeNode;127 var scalingParameter = scaling.GetSubtree(1) as NumberTreeNode; 128 128 scalingParameter.Value = beta; 129 129 } -
branches/3140_NumberSymbol/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/Evaluators/NMSESingleObjectiveConstraintsEvaluator.cs
r18093 r18100 155 155 if (errorState == OnlineCalculatorError.None) { 156 156 //Set alpha and beta to the scaling nodes from ia grammar 157 var offsetParameter = offset.GetSubtree(1) as Num TreeNode;157 var offsetParameter = offset.GetSubtree(1) as NumberTreeNode; 158 158 offsetParameter.Value = alpha; 159 var scalingParameter = scaling.GetSubtree(1) as Num TreeNode;159 var scalingParameter = scaling.GetSubtree(1) as NumberTreeNode; 160 160 scalingParameter.Value = beta; 161 161 } -
branches/3140_NumberSymbol/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/Evaluators/SymbolicRegressionConstantOptimizationEvaluator.cs
r18093 r18100 32 32 33 33 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Regression { 34 [Item(" NumOptimization Evaluator", "Calculates Pearson R² of a symbolic regression solution and optimizes the constant used.")]34 [Item("Constant Optimization Evaluator", "Calculates Pearson R² of a symbolic regression solution and optimizes the constant used.")] 35 35 [StorableType("24B68851-036D-4446-BD6F-3823E9028FF4")] 36 36 public class SymbolicRegressionConstantOptimizationEvaluator : SymbolicRegressionSingleObjectiveEvaluator { … … 307 307 int i = 0; 308 308 foreach (var node in tree.Root.IterateNodesPrefix().OfType<SymbolicExpressionTreeTerminalNode>()) { 309 Num TreeNode numTreeNode = node as NumTreeNode;309 NumberTreeNode numberTreeNode = node as NumberTreeNode; 310 310 VariableTreeNodeBase variableTreeNodeBase = node as VariableTreeNodeBase; 311 311 FactorVariableTreeNode factorVarTreeNode = node as FactorVariableTreeNode; 312 if (num TreeNode != null) {313 if (num TreeNode.Parent.Symbol is Power314 && num TreeNode.Parent.GetSubtree(1) == numTreeNode) continue; // exponents in powers are not optimizated (see TreeToAutoDiffTermConverter)315 num TreeNode.Value = constants[i++];312 if (numberTreeNode != null) { 313 if (numberTreeNode.Parent.Symbol is Power 314 && numberTreeNode.Parent.GetSubtree(1) == numberTreeNode) continue; // exponents in powers are not optimizated (see TreeToAutoDiffTermConverter) 315 numberTreeNode.Value = constants[i++]; 316 316 } else if (updateVariableWeights && variableTreeNodeBase != null) 317 317 variableTreeNodeBase.Weight = constants[i++]; -
branches/3140_NumberSymbol/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SymbolicRegressionPruningOperator.cs
r17180 r18100 91 91 for (int i = 0; i < nodes.Count; ++i) { 92 92 var node = nodes[i]; 93 if (node is ConstantTreeNode) continue;93 if (node is NumberTreeNode) continue; 94 94 95 95 double impactValue, replacementValue; … … 100 100 if (!pruneOnlyZeroImpactNodes && impactValue > nodeImpactThreshold) continue; 101 101 102 var constantNode = ( ConstantTreeNode)node.Grammar.GetSymbol("Constant").CreateTreeNode();102 var constantNode = (NumberTreeNode)node.Grammar.GetSymbol("Number").CreateTreeNode(); 103 103 constantNode.Value = replacementValue; 104 104 -
branches/3140_NumberSymbol/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/InteractiveSymbolicDataAnalysisSolutionSimplifierView.cs
r17579 r18100 203 203 204 204 var replacementValues = impactAndReplacementValues.ToDictionary(x => x.Key, x => x.Value.Item2); 205 foreach (var pair in replacementValues.Where(pair => !(pair.Key is ConstantTreeNode))) {205 foreach (var pair in replacementValues.Where(pair => !(pair.Key is NumberTreeNode))) { 206 206 foldedNodes[pair.Key] = MakeConstantTreeNode(pair.Value); 207 207 } … … 250 250 } 251 251 252 private static ConstantTreeNode MakeConstantTreeNode(double value) {253 var constant = new Constant{ MinValue = value - 1, MaxValue = value + 1 };254 var constantTreeNode = ( ConstantTreeNode)constant.CreateTreeNode();252 private static NumberTreeNode MakeConstantTreeNode(double value) { 253 var constant = new Number { MinValue = value - 1, MaxValue = value + 1 }; 254 var constantTreeNode = (NumberTreeNode)constant.CreateTreeNode(); 255 255 constantTreeNode.Value = value; 256 256 return constantTreeNode; … … 297 297 VisualTreeNode<ISymbolicExpressionTreeNode> visualTree = treeChart.GetVisualSymbolicExpressionTreeNode(treeNode); 298 298 299 if (!(treeNode is ConstantTreeNode) && nodeImpacts.ContainsKey(treeNode)) {299 if (!(treeNode is NumberTreeNode) && nodeImpacts.ContainsKey(treeNode)) { 300 300 visualTree.ToolTip = visualTree.Content.ToString(); 301 301 double impact = nodeImpacts[treeNode]; … … 314 314 } 315 315 visualTree.ToolTip += Environment.NewLine + "Node impact: " + impact; 316 var constantReplacementNode = foldedNodes[treeNode] as ConstantTreeNode;316 var constantReplacementNode = foldedNodes[treeNode] as NumberTreeNode; 317 317 if (constantReplacementNode != null) { 318 318 visualTree.ToolTip += Environment.NewLine + "Replacement value: " + constantReplacementNode.Value; … … 324 324 if (changedNodes.ContainsKey(treeNode)) { 325 325 visualTree.LineColor = Color.DodgerBlue; 326 } else if (treeNode is ConstantTreeNode && foldedNodes.ContainsKey(treeNode)) {326 } else if (treeNode is NumberTreeNode && foldedNodes.ContainsKey(treeNode)) { 327 327 visualTree.LineColor = Color.DarkOrange; 328 328 } -
branches/3140_NumberSymbol/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/InteractiveSymbolicExpressionTreeChart.cs
r17180 r18100 104 104 var symbol = dialog.SelectedSymbol; 105 105 var node = symbol.CreateTreeNode(); 106 if (node is ConstantTreeNode) {107 var constant = node as ConstantTreeNode;108 constant.Value = double.Parse(dialog.constantValueTextBox.Text);106 if (node is NumberTreeNode) { 107 var number = node as NumberTreeNode; 108 number.Value = double.Parse(dialog.numberValueTextBox.Text); 109 109 } else if (node is VariableTreeNode) { 110 110 var variable = node as VariableTreeNode; … … 133 133 ISymbolicExpressionTreeNode newNode = null; 134 134 var result = DialogResult.Cancel; 135 if (node is ConstantTreeNode) {136 using (var dialog = new ConstantNodeEditDialog(node)) {135 if (node is NumberTreeNode) { 136 using (var dialog = new NumberNodeEditDialog(node)) { 137 137 dialog.ShowDialog(this); 138 138 newNode = dialog.NewNode; … … 200 200 // check if the copied/cut node (stored in the tempNode) can be inserted as a child of the current selected node 201 201 var node = currSelected.Content; 202 if (node is ConstantTreeNode || node is VariableTreeNode) return;202 if (node is NumberTreeNode || node is VariableTreeNode) return; 203 203 // check if the currently selected node can accept the copied node as a child 204 204 // no need to check the grammar, an arity check will do just fine here -
branches/3140_NumberSymbol/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Symbols/ConstantView.cs
r17180 r18100 27 27 28 28 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views { 29 [View(" ConstantView")]30 [Content(typeof( Constant), true)]29 [View("Number View")] 30 [Content(typeof(Number), true)] 31 31 public partial class ConstantView : SymbolView { 32 public new ConstantContent {33 get { return ( Constant)base.Content; }32 public new Number Content { 33 get { return (Number)base.Content; } 34 34 set { base.Content = value; } 35 35 } -
branches/3140_NumberSymbol/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/TreeEditDialogs/SymbolicExpressionTreeConstantNodeEditDialog.Designer.cs
r17180 r18100 21 21 22 22 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views { 23 partial class ConstantNodeEditDialog {23 partial class NumberNodeEditDialog { 24 24 /// <summary> 25 25 /// Required designer variable. … … 121 121 this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click); 122 122 // 123 // ConstantNodeEditDialog123 // NumberNodeEditDialog 124 124 // 125 125 this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); … … 138 138 this.MaximizeBox = false; 139 139 this.MinimizeBox = false; 140 this.Name = " ConstantNodeEditDialog";140 this.Name = "NumberNodeEditDialog"; 141 141 this.ShowIcon = false; 142 142 this.ShowInTaskbar = false; 143 143 this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; 144 144 this.Text = "Edit constant value"; 145 this.KeyDown += new System.Windows.Forms.KeyEventHandler(this. ConstantNodeEditDialog_KeyDown);145 this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.NumberNodeEditDialog_KeyDown); 146 146 ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit(); 147 147 this.ResumeLayout(false); -
branches/3140_NumberSymbol/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/TreeEditDialogs/SymbolicExpressionTreeConstantNodeEditDialog.cs
r17180 r18100 28 28 29 29 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views { 30 public partial class ConstantNodeEditDialog : Form {31 private ConstantTreeNode constantTreeNode;32 public ConstantTreeNode NewNode {33 get { return constantTreeNode; }30 public partial class NumberNodeEditDialog : Form { 31 private NumberTreeNode numberTreeNode; 32 public NumberTreeNode NewNode { 33 get { return numberTreeNode; } 34 34 set { 35 35 if (InvokeRequired) 36 Invoke(new Action<SymbolicExpressionTreeNode>(x => constantTreeNode = (ConstantTreeNode)x), value);36 Invoke(new Action<SymbolicExpressionTreeNode>(x => numberTreeNode = (NumberTreeNode)x), value); 37 37 else 38 constantTreeNode = value;38 numberTreeNode = value; 39 39 } 40 40 } 41 41 42 public ConstantNodeEditDialog(ISymbolicExpressionTreeNode node) {42 public NumberNodeEditDialog(ISymbolicExpressionTreeNode node) { 43 43 InitializeComponent(); 44 44 oldValueTextBox.TabStop = false; // cannot receive focus using tab key 45 NewNode = ( ConstantTreeNode)node;45 NewNode = (NumberTreeNode)node; 46 46 InitializeFields(); 47 47 } … … 49 49 private void InitializeFields() { 50 50 if (NewNode == null) 51 throw new ArgumentException("Node is not a constant.");51 throw new ArgumentException("Node is not a number."); 52 52 else { 53 53 this.Text = "Edit constant"; 54 newValueTextBox.Text = oldValueTextBox.Text = Math.Round( constantTreeNode.Value, 4).ToString();54 newValueTextBox.Text = oldValueTextBox.Text = Math.Round(numberTreeNode.Value, 4).ToString(); 55 55 } 56 56 } … … 87 87 // proxy handler passing key strokes to the parent control 88 88 private void childControl_KeyDown(object sender, KeyEventArgs e) { 89 ConstantNodeEditDialog_KeyDown(sender, e);89 NumberNodeEditDialog_KeyDown(sender, e); 90 90 } 91 91 92 private void ConstantNodeEditDialog_KeyDown(object sender, KeyEventArgs e) {92 private void NumberNodeEditDialog_KeyDown(object sender, KeyEventArgs e) { 93 93 if ((e.KeyCode == Keys.Enter) || (e.KeyCode == Keys.Return)) { 94 94 if (!ValidateChildren()) return; … … 100 100 public event EventHandler DialogValidated; 101 101 private void OnDialogValidated(object sender, EventArgs e) { 102 if ( constantTreeNode == null) return;102 if (numberTreeNode == null) return; 103 103 var value = double.Parse(newValueTextBox.Text); 104 104 // we impose an extra validation condition: that the new value is different from the original value 105 if ( constantTreeNode.Value.Equals(value)) return;105 if (numberTreeNode.Value.Equals(value)) return; 106 106 107 constantTreeNode.Value = value;107 numberTreeNode.Value = value; 108 108 DialogResult = DialogResult.OK; 109 109 var dialogValidated = DialogValidated; -
branches/3140_NumberSymbol/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/TreeEditDialogs/SymbolicExpressionTreeNodeInsertDialog.Designer.cs
r17180 r18100 52 52 this.variableNamesCombo = new System.Windows.Forms.ComboBox(); 53 53 this.variableWeightTextBox = new System.Windows.Forms.TextBox(); 54 this. constantValueTextBox = new System.Windows.Forms.TextBox();55 this. constantValueLabel = new System.Windows.Forms.Label();54 this.numberValueTextBox = new System.Windows.Forms.TextBox(); 55 this.numberValueLabel = new System.Windows.Forms.Label(); 56 56 this.errorProvider = new System.Windows.Forms.ErrorProvider(this.components); 57 57 this.okButton = new System.Windows.Forms.Button(); … … 121 121 this.variableWeightTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.variableWeightTextBox_Validating); 122 122 // 123 // constantValueTextBox124 // 125 this. constantValueTextBox.Location = new System.Drawing.Point(101, 37);126 this. constantValueTextBox.Name = "constantValueTextBox";127 this. constantValueTextBox.Size = new System.Drawing.Size(127, 20);128 this. constantValueTextBox.TabIndex = 7;129 this. constantValueTextBox.Text = "0.0";130 this. constantValueTextBox.Visible = false;131 this. constantValueTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.constantValueTextBox_Validating);132 // 133 // constantValueLabel134 // 135 this. constantValueLabel.AutoSize = true;136 this. constantValueLabel.Location = new System.Drawing.Point(19, 40);137 this. constantValueLabel.Name = "constantValueLabel";138 this. constantValueLabel.Size = new System.Drawing.Size(34, 13);139 this. constantValueLabel.TabIndex = 8;140 this. constantValueLabel.Text = "Value";141 this. constantValueLabel.Visible = false;123 // numberValueTextBox 124 // 125 this.numberValueTextBox.Location = new System.Drawing.Point(101, 37); 126 this.numberValueTextBox.Name = "numberValueTextBox"; 127 this.numberValueTextBox.Size = new System.Drawing.Size(127, 20); 128 this.numberValueTextBox.TabIndex = 7; 129 this.numberValueTextBox.Text = "0.0"; 130 this.numberValueTextBox.Visible = false; 131 this.numberValueTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.numberValueTextBox_Validating); 132 // 133 // numberValueLabel 134 // 135 this.numberValueLabel.AutoSize = true; 136 this.numberValueLabel.Location = new System.Drawing.Point(19, 40); 137 this.numberValueLabel.Name = "numberValueLabel"; 138 this.numberValueLabel.Size = new System.Drawing.Size(34, 13); 139 this.numberValueLabel.TabIndex = 8; 140 this.numberValueLabel.Text = "Value"; 141 this.numberValueLabel.Visible = false; 142 142 // 143 143 // errorProvider … … 187 187 this.Controls.Add(this.cancelButton); 188 188 this.Controls.Add(this.okButton); 189 this.Controls.Add(this. constantValueLabel);190 this.Controls.Add(this. constantValueTextBox);189 this.Controls.Add(this.numberValueLabel); 190 this.Controls.Add(this.numberValueTextBox); 191 191 this.Controls.Add(this.variableWeightTextBox); 192 192 this.Controls.Add(this.variableNamesCombo); … … 211 211 private System.Windows.Forms.Label variableWeightLabel; 212 212 private System.Windows.Forms.Label variableNameLabel; 213 private System.Windows.Forms.Label constantValueLabel;213 private System.Windows.Forms.Label numberValueLabel; 214 214 private System.Windows.Forms.ErrorProvider errorProvider; 215 internal System.Windows.Forms.TextBox constantValueTextBox;215 internal System.Windows.Forms.TextBox numberValueTextBox; 216 216 internal System.Windows.Forms.TextBox variableWeightTextBox; 217 217 internal System.Windows.Forms.ComboBox variableNamesCombo; -
branches/3140_NumberSymbol/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/TreeEditDialogs/SymbolicExpressionTreeNodeInsertDialog.cs
r17180 r18100 57 57 var combo = (ComboBox)sender; 58 58 var symbol = combo.Items[combo.SelectedIndex]; 59 if (symbol is Constant) {59 if (symbol is Number) { 60 60 // add controls to the dialog for changing the constant value 61 61 variableNameLabel.Visible = false; … … 63 63 variableWeightLabel.Visible = false; 64 64 variableWeightTextBox.Visible = false; 65 constantValueLabel.Visible = true;66 constantValueTextBox.Visible = true;65 numberValueLabel.Visible = true; 66 numberValueTextBox.Visible = true; 67 67 } else if (symbol is VariableBase) { 68 68 var variableSymbol = (VariableBase)symbol; … … 80 80 variableWeightLabel.Visible = true; 81 81 variableWeightTextBox.Visible = true; 82 constantValueLabel.Visible = false;83 constantValueTextBox.Visible = false;82 numberValueLabel.Visible = false; 83 numberValueTextBox.Visible = false; 84 84 // add controls to the dialog for changing the variable name or weight 85 85 } else { … … 88 88 variableWeightLabel.Visible = false; 89 89 variableWeightTextBox.Visible = false; 90 constantValueLabel.Visible = false;91 constantValueTextBox.Visible = false;90 numberValueLabel.Visible = false; 91 numberValueTextBox.Visible = false; 92 92 } 93 93 } … … 102 102 } 103 103 104 private void constantValueTextBox_Validating(object sender, CancelEventArgs e) {104 private void numberValueTextBox_Validating(object sender, CancelEventArgs e) { 105 105 string errorMessage; 106 if (ValidateDoubleValue( constantValueTextBox.Text, out errorMessage)) return;106 if (ValidateDoubleValue(numberValueTextBox.Text, out errorMessage)) return; 107 107 e.Cancel = true; 108 errorProvider.SetError( constantValueTextBox, errorMessage);109 constantValueTextBox.SelectAll();108 errorProvider.SetError(numberValueTextBox, errorMessage); 109 numberValueTextBox.SelectAll(); 110 110 } 111 111 -
branches/3140_NumberSymbol/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/SymbolicDataAnalysisAlleleFrequencyAnalyzer.cs
r17180 r18100 88 88 StringBuilder builder = new StringBuilder(); 89 89 var varTreeNode = tree as VariableTreeNode; 90 var numTreeNode = tree as NumberTreeNode; 90 91 var constTreeNode = tree as ConstantTreeNode; 91 92 var factorVarTreeNode = tree as FactorVariableTreeNode; … … 97 98 } else if (binFactorVarTreeNode != null) { 98 99 builder.Append("(factor " + binFactorVarTreeNode.VariableName + "=" + binFactorVarTreeNode.VariableValue); 99 } else if ( constTreeNode != null) {100 } else if (numTreeNode != null || constTreeNode != null) { 100 101 builder.Append("(const"); 101 102 } else { -
branches/3140_NumberSymbol/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Converters/LinearModelToTreeConverter.cs
r18093 r18100 58 58 59 59 if (@const!=0.0) { 60 Num TreeNode cNode = (NumTreeNode)new Num().CreateTreeNode();60 NumberTreeNode cNode = (NumberTreeNode)new Number().CreateTreeNode(); 61 61 cNode.Value = @const; 62 62 add.AddSubtree(cNode); … … 99 99 100 100 if (!@const.IsAlmost(0.0)) { 101 Num TreeNode cNode = (NumTreeNode)new Num().CreateTreeNode();101 NumberTreeNode cNode = (NumberTreeNode)new Number().CreateTreeNode(); 102 102 cNode.Value = @const; 103 103 addition.AddSubtree(cNode); … … 130 130 131 131 if (!@const.IsAlmost(0.0)) { 132 Num TreeNode cNode = (NumTreeNode)new Num().CreateTreeNode();132 NumberTreeNode cNode = (NumberTreeNode)new Number().CreateTreeNode(); 133 133 cNode.Value = @const; 134 134 addition.AddSubtree(cNode); -
branches/3140_NumberSymbol/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Converters/TreeToAutoDiffTermConverter.cs
r18093 r18100 145 145 146 146 private AutoDiff.Term ConvertToAutoDiff(ISymbolicExpressionTreeNode node) { 147 if (node.Symbol is Num ) {148 initialConstants.Add(((Num TreeNode)node).Value);147 if (node.Symbol is Number) { 148 initialConstants.Add(((NumberTreeNode)node).Value); 149 149 var var = new AutoDiff.Variable(); 150 150 variables.Add(var); … … 152 152 } 153 153 154 if (node.Symbol is RealConstant) {155 initialConstants.Add((( RealConstantTreeNode)node).Value);154 if (node.Symbol is Constant) { 155 initialConstants.Add(((ConstantTreeNode)node).Value); 156 156 var var = new AutoDiff.Variable(); 157 157 variables.Add(var); … … 267 267 } 268 268 if (node.Symbol is Power) { 269 var powerNode = node.GetSubtree(1) as Num TreeNode;269 var powerNode = node.GetSubtree(1) as NumberTreeNode; 270 270 if (powerNode == null) 271 271 throw new NotSupportedException("Only integer powers are allowed in parameter optimization. Try to use exp() and log() instead of the power symbol."); … … 337 337 !(n.Symbol is FactorVariable) && 338 338 !(n.Symbol is LaggedVariable) && 339 !(n.Symbol is Num ) &&340 !(n.Symbol is RealConstant) &&339 !(n.Symbol is Number) && 340 !(n.Symbol is Constant) && 341 341 !(n.Symbol is Addition) && 342 342 !(n.Symbol is Subtraction) && -
branches/3140_NumberSymbol/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Formatters/InfixExpressionFormatter.cs
r17811 r18100 54 54 55 55 var power = node.GetSubtree(1); 56 if(power is ConstantTreeNode constNode && Math.Truncate(constNode.Value) == constNode.Value) {56 if(power is NumberTreeNode constNode && Math.Truncate(constNode.Value) == constNode.Value) { 57 57 strBuilder.Append(" ").Append(token).Append(" ").Append(constNode.Value.ToString(formatString, numberFormat)); 58 58 } else { … … 141 141 142 142 if (!factorNode.Weight.IsAlmost(1.0)) strBuilder.Append(")"); 143 } else if (node.Symbol is Constant) {144 var constNode = node as ConstantTreeNode;143 } else if (node.Symbol is Number) { 144 var constNode = node as NumberTreeNode; 145 145 if (constants == null && constNode.Value < 0) { 146 146 strBuilder.Append("(").Append(constNode.Value.ToString(formatString, numberFormat)) … … 204 204 /// </summary> 205 205 /// <param name="symbolicExpressionTree">The tree representation of the expression.</param> 206 /// <param name="numberFormat"> Numberformat that should be used for numeric parameters (e.g. NumberFormatInfo.InvariantInfo (default)).</param>206 /// <param name="numberFormat">Constant format that should be used for numeric parameters (e.g. NumberFormatInfo.InvariantInfo (default)).</param> 207 207 /// <param name="formatString">The format string for numeric parameters (e.g. \"G4\" to limit to 4 digits, default is \"G\")</param> 208 208 /// <returns>Infix expression</returns> -
branches/3140_NumberSymbol/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Formatters/SymbolicDataAnalysisExpressionCSharpFormatter.cs
r17648 r18100 162 162 var varNode = node as VariableTreeNode; 163 163 strBuilder.AppendFormat("{0} * {1}", VariableName2Identifier(varNode.VariableName), varNode.Weight.ToString("g17", CultureInfo.InvariantCulture)); 164 } else if (node is ConstantTreeNode) { 165 var constNode = node as ConstantTreeNode; 166 strBuilder.Append(constNode.Value.ToString("g17", CultureInfo.InvariantCulture)); 164 } else if (node is INumericTreeNode numNode) { 165 strBuilder.Append(numNode.Value.ToString("g17", CultureInfo.InvariantCulture)); 167 166 } else if (node.Symbol is FactorVariable) { 168 167 var factorNode = node as FactorVariableTreeNode; -
branches/3140_NumberSymbol/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Formatters/SymbolicDataAnalysisExpressionExcelFormatter.cs
r17180 r18100 134 134 } 135 135 stringBuilder.Append("))"); 136 } else if (symbol is Constant) {137 ConstantTreeNode constantTreeNode = node as ConstantTreeNode;138 stringBuilder.Append( constantTreeNode.Value.ToString(CultureInfo.InvariantCulture));136 } else if (symbol is INumericSymbol numNode) { 137 var numTreeNode = node as INumericTreeNode; 138 stringBuilder.Append(numTreeNode.Value.ToString(CultureInfo.InvariantCulture)); 139 139 } else if (symbol is Cosine) { 140 140 stringBuilder.Append("COS("); -
branches/3140_NumberSymbol/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Formatters/SymbolicDataAnalysisExpressionLatexFormatter.cs
r17826 r18100 189 189 } else if (node.Symbol is IfThenElse) { 190 190 strBuilder.Append(@" \operatorname{if} \left( "); 191 } else if (node.Symbol is Constant) {192 var constName = "c_{" + constIndex + "}";191 } else if (node.Symbol is INumericSymbol numNode) { 192 var numName = "c_{" + constIndex + "}"; 193 193 constIndex++; 194 var constNode = node as ConstantTreeNode;195 if ( constNode.Value.IsAlmost(1.0)) {194 var numericNode = node as INumericTreeNode; 195 if (numericNode.Value.IsAlmost(1.0)) { 196 196 strBuilder.Append("1 "); 197 197 } else { 198 strBuilder.Append(constName); 199 constants.Add(new KeyValuePair<string, double>(constName, constNode.Value)); 200 } 201 198 strBuilder.Append(numName); 199 constants.Add(new KeyValuePair<string, double>(numName, numericNode.Value)); 200 } 202 201 } else if (node.Symbol is FactorVariable) { 203 202 var factorNode = node as FactorVariableTreeNode; … … 471 470 } else if (node.Symbol is IfThenElse) { 472 471 strBuilder.Append(@" \right) "); 472 } else if (node.Symbol is Number) { 473 473 } else if (node.Symbol is Constant) { 474 } 474 }else if (node.Symbol is LaggedVariable) { 475 475 } else if (node.Symbol is Variable) { 476 476 } else if (node.Symbol is FactorVariable) { -
branches/3140_NumberSymbol/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Formatters/SymbolicDataAnalysisExpressionMATLABFormatter.cs
r17180 r18100 151 151 } 152 152 stringBuilder.Append(")"); 153 } else if (symbol is Constant) {154 ConstantTreeNode constantTreeNode = node as ConstantTreeNode;155 stringBuilder.Append( constantTreeNode.Value.ToString(CultureInfo.InvariantCulture));153 } else if (symbol is INumericSymbol) { 154 var numberTreeNode = node as INumericTreeNode; 155 stringBuilder.Append(numberTreeNode?.Value.ToString(CultureInfo.InvariantCulture)); 156 156 } else if (symbol is Cosine) { 157 157 stringBuilder.Append("cos("); -
branches/3140_NumberSymbol/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Formatters/SymbolicDataAnalysisExpressionMathematicaFormatter.cs
r17180 r18100 130 130 var varNode = node as VariableTreeNode; 131 131 strBuilder.AppendFormat("Times[{0}, {1}]", varNode.VariableName, varNode.Weight.ToString("G17", CultureInfo.InvariantCulture)); 132 } else if (node.Symbol is Constant) {133 var constNode = node as ConstantTreeNode;134 strBuilder.Append( constNode.Value.ToString("G17", CultureInfo.InvariantCulture));132 } else if (node.Symbol is INumericSymbol) { 133 var numNode = node as INumericTreeNode; 134 strBuilder.Append(numNode?.Value.ToString("G17", CultureInfo.InvariantCulture)); 135 135 } else if (node.Symbol is FactorVariable) { 136 136 var factorNode = node as FactorVariableTreeNode; -
branches/3140_NumberSymbol/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Formatters/SymbolicDataAnalysisExpressionPythonFormatter.cs
r17929 r18100 202 202 else if (node is VariableTreeNode) 203 203 FormatVariableTreeNode(node, strBuilder); 204 else if (node is ConstantTreeNode)205 Format ConstantTreeNode(node, strBuilder);204 else if (node is INumericTreeNode) 205 FormatNumericTreeNode(node, strBuilder); 206 206 else 207 207 throw new NotSupportedException("Formatting of symbol: " + symbol + " not supported for Python symbolic expression tree formatter."); … … 227 227 } 228 228 229 private static void FormatConstantTreeNode(ISymbolicExpressionTreeNode node, StringBuilder strBuilder) { 230 var constNode = node as ConstantTreeNode; 231 strBuilder.Append(constNode.Value.ToString("g17", CultureInfo.InvariantCulture)); 229 private static void FormatNumericTreeNode(ISymbolicExpressionTreeNode node, StringBuilder strBuilder) { 230 var symbol = node.Symbol; 231 double value = 0.0; 232 if (symbol is INumericSymbol) { 233 var numNode = node as INumericTreeNode; 234 value = numNode.Value; 235 } else { 236 throw new NotSupportedException("Formatting of symbol: " + symbol + " not supported for Python symbolic expression tree formatter."); 237 } 238 239 240 strBuilder.Append(value.ToString("g17", CultureInfo.InvariantCulture)); 232 241 } 233 242 -
branches/3140_NumberSymbol/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Formatters/SymbolicDataAnalysisExpressionSmalltalkFormatter.cs
r17180 r18100 83 83 } 84 84 stringBuilder.Append(")"); 85 } else if (symbol is Constant) {86 ConstantTreeNode constantTreeNode = node as ConstantTreeNode;87 stringBuilder.Append( constantTreeNode.Value.ToString(CultureInfo.InvariantCulture));88 } 85 } else if (symbol is INumericSymbol) { 86 var numberTreeNode = node as INumericTreeNode; 87 stringBuilder.Append(numberTreeNode?.Value.ToString(CultureInfo.InvariantCulture)); 88 }else if (symbol is Cosine) { 89 89 stringBuilder.Append(FormatRecursively(node.GetSubtree(0))); 90 90 stringBuilder.Append(" cos"); -
branches/3140_NumberSymbol/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Formatters/TSQLExpressionFormatter.cs
r17180 r18100 164 164 var varNode = node as VariableTreeNode; 165 165 strBuilder.AppendFormat("{0} * {1}", VariableName2Identifier(varNode.VariableName), varNode.Weight.ToString("g17", CultureInfo.InvariantCulture)); 166 } else if (node is ConstantTreeNode) { 167 var constNode = node as ConstantTreeNode; 168 strBuilder.Append(constNode.Value.ToString("g17", CultureInfo.InvariantCulture)); 169 } else if (node.Symbol is FactorVariable) { 166 } else if (node is INumericTreeNode numNode) { 167 strBuilder.Append(numNode.Value.ToString("g17", CultureInfo.InvariantCulture)); 168 }else if (node.Symbol is FactorVariable) { 170 169 var factorNode = node as FactorVariableTreeNode; 171 170 FormatFactor(level, factorNode, strBuilder); -
branches/3140_NumberSymbol/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Grammars/ArithmeticExpressionGrammar.cs
r18093 r18100 49 49 var mul = new Multiplication(); 50 50 var div = new Division(); 51 var constant = new Num(); 52 constant.MinValue = -20; 53 constant.MaxValue = 20; 54 var number = new RealConstant(); 51 var number = new Number(); 55 52 number.MinValue = -20; 56 53 number.MaxValue = 20; 54 var constant = new Constant(); 57 55 var variableSymbol = new HeuristicLab.Problems.DataAnalysis.Symbolic.Variable(); 58 56 var binFactorVariableSymbol = new BinaryFactorVariable(); 59 57 var factorVariableSymbol = new FactorVariable(); 60 58 61 var allSymbols = new List<Symbol>() { add, sub, mul, div, constant, number, variableSymbol, binFactorVariableSymbol, factorVariableSymbol };59 var allSymbols = new List<Symbol>() { add, sub, mul, div, number, constant, variableSymbol, binFactorVariableSymbol, factorVariableSymbol }; 62 60 var functionSymbols = new List<Symbol>() { add, sub, mul, div }; 63 61 … … 68 66 SetSubtreeCount(funSymb, 1, 3); 69 67 } 68 SetSubtreeCount(number, 0, 0); 70 69 SetSubtreeCount(constant, 0, 0); 71 SetSubtreeCount(number, 0, 0);72 70 SetSubtreeCount(variableSymbol, 0, 0); 73 71 SetSubtreeCount(binFactorVariableSymbol, 0, 0); -
branches/3140_NumberSymbol/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Grammars/FullFunctionalExpressionGrammar.cs
r18093 r18100 118 118 variableCondition.InitialFrequency = 0.0; 119 119 120 var constant = new Num();121 constant.MinValue = -20;122 constant.MaxValue = 20;120 var number = new Number(); 121 number.MinValue = -20; 122 number.MaxValue = 20; 123 123 var variableSymbol = new HeuristicLab.Problems.DataAnalysis.Symbolic.Variable(); 124 124 var binFactorVariable = new BinaryFactorVariable(); … … 130 130 autoregressiveVariable.Enabled = false; 131 131 132 var number = new RealConstant(); 133 number.MinValue = -20; 134 number.MaxValue = 20; 132 var constant = new Constant(); 135 133 136 134 var allSymbols = new List<Symbol>() { add, sub, mul, div, aq, mean, abs, sin, cos, tan, log, square, cube, pow, sqrt, cubeRoot, root, exp, tanh, 137 135 airyA, airyB, bessel, cosineIntegral, dawson, erf, expIntegralEi, fresnelCosineIntegral, fresnelSineIntegral, gamma, hypCosineIntegral, hypSineIntegral, norm, psi, sineIntegral, 138 @if, gt, lt, and, or, not,xor, timeLag, integral, derivative, constant, number, variableSymbol, binFactorVariable, factorVariable, laggedVariable,autoregressiveVariable, variableCondition };136 @if, gt, lt, and, or, not,xor, timeLag, integral, derivative, number, constant, variableSymbol, binFactorVariable, factorVariable, laggedVariable,autoregressiveVariable, variableCondition }; 139 137 var unaryFunctionSymbols = new List<Symbol>() { abs, square, sqrt, cube, cubeRoot, sin, cos, tan, log, exp, tanh, not, timeLag, integral, derivative, 140 138 airyA, airyB, bessel, cosineIntegral, dawson, erf, expIntegralEi, fresnelCosineIntegral, fresnelSineIntegral, gamma, hypCosineIntegral, hypSineIntegral, norm, psi, sineIntegral … … 143 141 var binaryFunctionSymbols = new List<Symbol>() { pow, root, gt, lt, aq, variableCondition }; 144 142 var ternarySymbols = new List<Symbol>() { add, sub, mul, div, mean, and, or, xor }; 145 var terminalSymbols = new List<Symbol>() { variableSymbol, binFactorVariable, factorVariable, constant, number, laggedVariable, autoregressiveVariable };143 var terminalSymbols = new List<Symbol>() { variableSymbol, binFactorVariable, factorVariable, number, constant, laggedVariable, autoregressiveVariable }; 146 144 147 145 foreach (var symb in allSymbols) -
branches/3140_NumberSymbol/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Grammars/LinearScalingGrammar.cs
r18093 r18100 66 66 var abs = new Absolute(); 67 67 var aq = new AnalyticQuotient(); 68 var constant = new Num(); 69 constant.MinValue = -20; 70 constant.MaxValue = 20; 71 var number = new RealConstant(); 68 var number = new Number(); 72 69 number.MinValue = -20; 73 70 number.MaxValue = 20; 71 var constant = new Constant(); 74 72 var variableSymbol = new Variable(); 75 73 … … 81 79 //all other symbols 82 80 var allSymbols = new List<Symbol> { 83 add, sub, mul, div, constant, number, variableSymbol, sin, cos, tan, log, square, sqrt, cube, cbrt, exp,81 add, sub, mul, div, number, constant, variableSymbol, sin, cos, tan, log, square, sqrt, cube, cbrt, exp, 84 82 tanh, aq, abs 85 83 }; … … 89 87 var realValueSymbols = new List<Symbol> { 90 88 add, sub, mul, div, sin, cos, tan, tanh, exp, log, aq, abs, square, cube, sqrt, cbrt, 91 variableSymbol, constant, number89 variableSymbol, number, constant 92 90 }; 93 91 … … 116 114 //Define childs for offset 117 115 AddAllowedChildSymbol(offset, scaling, 0); 118 AddAllowedChildSymbol(offset, constant, 1);116 AddAllowedChildSymbol(offset, number, 1); 119 117 120 118 //Define childs for scaling 121 119 foreach (var symb in allSymbols) AddAllowedChildSymbol(scaling, symb, 0); 122 AddAllowedChildSymbol(scaling, constant, 1);120 AddAllowedChildSymbol(scaling, number, 1); 123 121 124 122 //Define childs for realvalue symbols -
branches/3140_NumberSymbol/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Grammars/TypeCoherentExpressionGrammar.cs
r18093 r18100 105 105 var derivative = new Derivative(); 106 106 107 var constant = new Num(); 108 constant.MinValue = -20; 109 constant.MaxValue = 20; 110 var number = new RealConstant(); 107 var number = new Number(); 111 108 number.MinValue = -20; 112 109 number.MaxValue = 20; 110 var constant = new Constant(); 113 111 var variableSymbol = new Variable(); 114 112 var binFactorVariable = new BinaryFactorVariable(); … … 124 122 var specialFunctions = new GroupSymbol(SpecialFunctionsName, new List<ISymbol> { abs, airyA, airyB, bessel, cosineIntegral, dawson, erf, expIntegralEi, 125 123 fresnelCosineIntegral,fresnelSineIntegral,gamma,hypCosineIntegral,hypSineIntegral,norm, psi, sineIntegral, analyticalQuotient}); 126 var terminalSymbols = new GroupSymbol(TerminalsName, new List<ISymbol> { constant, number, variableSymbol, binFactorVariable, factorVariable });124 var terminalSymbols = new GroupSymbol(TerminalsName, new List<ISymbol> { number, constant, variableSymbol, binFactorVariable, factorVariable }); 127 125 var realValuedSymbols = new GroupSymbol(RealValuedSymbolsName, new List<ISymbol>() { arithmeticSymbols, trigonometricSymbols, exponentialAndLogarithmicSymbols, specialFunctions, terminalSymbols }); 128 126 … … 196 194 AddAllowedChildSymbol(powerSymbols, laggedVariable, 0); 197 195 AddAllowedChildSymbol(powerSymbols, autoregressiveVariable, 0); 198 AddAllowedChildSymbol(powerSymbols, constant, 1);196 AddAllowedChildSymbol(powerSymbols, number, 1); 199 197 200 198 AddAllowedChildSymbol(square, realValuedSymbols, 0); -
branches/3140_NumberSymbol/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj
r18093 r18100 174 174 <Compile Include="Interfaces\IBoundsEstimator.cs" /> 175 175 <Compile Include="Interfaces\IModelBacktransformator.cs" /> 176 <Compile Include="Interfaces\INumericSymbol.cs" /> 177 <Compile Include="Interfaces\INumericTreeNode.cs" /> 176 178 <Compile Include="Interfaces\IVariableTreeNode.cs" /> 177 179 <Compile Include="Interfaces\IVariableSymbol.cs" /> … … 238 240 <Compile Include="Symbols\AutoregressiveVariable.cs" /> 239 241 <Compile Include="Symbols\Average.cs" /> 240 <Compile Include="Symbols\Num .cs" />241 <Compile Include="Symbols\Num TreeNode.cs" />242 <Compile Include="Symbols\Number.cs" /> 243 <Compile Include="Symbols\NumberTreeNode.cs" /> 242 244 <Compile Include="Symbols\AiryA.cs" /> 243 245 <Compile Include="Symbols\AiryB.cs" /> … … 251 253 <Compile Include="Symbols\CubeRoot.cs" /> 252 254 <Compile Include="Symbols\HyperbolicTangent.cs" /> 253 <Compile Include="Symbols\ RealConstant.cs" />254 <Compile Include="Symbols\ RealConstantTreeNode.cs" />255 <Compile Include="Symbols\Constant.cs" /> 256 <Compile Include="Symbols\ConstantTreeNode.cs" /> 255 257 <Compile Include="Symbols\VariableBase.cs" /> 256 258 <Compile Include="Symbols\VariableTreeNodeBase.cs" /> -
branches/3140_NumberSymbol/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Importer/InfixExpressionParser.cs
r18093 r18100 82 82 knownSymbols = new BidirectionalLookup<string, ISymbol>(StringComparer.InvariantCulture, new SymbolComparer()); 83 83 84 private Num num = new Num();85 private RealConstant realConstant = new RealConstant();84 private Number number = new Number(); 85 private Constant constant = new Constant(); 86 86 private Variable variable = new Variable(); 87 87 private BinaryFactorVariable binaryFactorVar = new BinaryFactorVariable(); … … 181 181 && str[pos] != ']' 182 182 && str[pos] != '}' 183 && str[pos] != ',') { 183 && str[pos] != ',' 184 && str[pos] != '>') { 184 185 sb.Append(str[pos]); 185 186 pos++; … … 333 334 foreach (var negTerm in negTerms) sumNeg.AddSubtree(negTerm); 334 335 335 var constNode = (Num TreeNode)num.CreateTreeNode();336 var constNode = (NumberTreeNode)number.CreateTreeNode(); 336 337 constNode.Value = -1.0; 337 338 var prod = GetSymbol("*").CreateTreeNode(); … … 532 533 } 533 534 } else if (next.TokenType == TokenType.LeftAngleBracket) { 535 Token numberTok = null; 534 536 var leftAngleBracket = tokens.Dequeue(); 535 537 if (leftAngleBracket.TokenType != TokenType.LeftAngleBracket) … … 539 541 if (idTok.TokenType != TokenType.Identifier || idTok.strVal.ToLower() != "num") 540 542 throw new ArgumentException("string 'num' expected"); 543 544 if (tokens.Peek().TokenType == TokenType.Eq) { 545 var equalTok = tokens.Dequeue(); 546 if (tokens.Peek().TokenType != TokenType.Number) 547 throw new ArgumentException("No value for number specified."); 548 549 numberTok = tokens.Dequeue(); 550 } 551 541 552 var rightAngleBracket = tokens.Dequeue(); 542 553 if (rightAngleBracket.TokenType != TokenType.RightAngleBracket) 543 554 throw new ArgumentException("closing bracket > expected"); 544 var numNode = (NumTreeNode)num.CreateTreeNode(); 555 var numNode = (NumberTreeNode)number.CreateTreeNode(); 556 if (numberTok != null) numNode.Value = numberTok.doubleVal; 545 557 return numNode; 546 558 } else if (next.TokenType == TokenType.Number) { 547 559 var numTok = tokens.Dequeue(); 548 var constNode = ( RealConstantTreeNode)realConstant.CreateTreeNode();560 var constNode = (ConstantTreeNode)constant.CreateTreeNode(); 549 561 constNode.Value = numTok.doubleVal; 550 562 return constNode;
Note: See TracChangeset
for help on using the changeset viewer.