Index: trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/BatchInstruction.cs
===================================================================
--- trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/BatchInstruction.cs	(revision 17993)
+++ trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/BatchInstruction.cs	(revision 18132)
@@ -5,5 +5,5 @@
     public int childIndex;
 
-    public double value; // for constants
+    public double value; // for numbers and constants
     public double weight; // for variables
     public double[] buf;
Index: trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/IntervalArithBoundsEstimator.cs
===================================================================
--- trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/IntervalArithBoundsEstimator.cs	(revision 17993)
+++ trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/IntervalArithBoundsEstimator.cs	(revision 18132)
@@ -126,7 +126,8 @@
             break;
           }
-        case OpCodes.Constant: {
-            var constTreeNode = (ConstantTreeNode)currentInstr.dynamicNode;
-            result = new Interval(constTreeNode.Value, constTreeNode.Value);
+        case OpCodes.Constant: // fall through
+        case OpCodes.Number: {
+            var numericTreeNode = (INumericTreeNode)currentInstr.dynamicNode;
+            result = new Interval(numericTreeNode.Value, numericTreeNode.Value);
             break;
           }
@@ -324,4 +325,5 @@
         where
           !(n.Symbol is Variable) &&
+          !(n.Symbol is Number) &&
           !(n.Symbol is Constant) &&
           !(n.Symbol is StartSymbol) &&
Index: trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/IntervalArithCompiledExpressionBoundsEstimator.cs
===================================================================
--- trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/IntervalArithCompiledExpressionBoundsEstimator.cs	(revision 17993)
+++ trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/IntervalArithCompiledExpressionBoundsEstimator.cs	(revision 18132)
@@ -116,4 +116,5 @@
         where
           !(n.Symbol is Variable) &&
+          !(n.Symbol is Number) &&
           !(n.Symbol is Constant) &&
           !(n.Symbol is StartSymbol) &&
@@ -153,7 +154,8 @@
             );
           }
-        case OpCodes.Constant: {
-            var v = (node as ConstantTreeNode).Value;
-            // we have to make an interval out of the constant because this may be the root of the tree (and we are expected to return an Interval)
+        case OpCodes.Constant: // fall through
+        case OpCodes.Number: {
+            var v = (node as INumericTreeNode).Value;
+            // we have to make an interval out of the number because this may be the root of the tree (and we are expected to return an Interval)
             return Expression.Constant(new Interval(v, v), typeof(Interval));
           }
Index: trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/IntervalInterpreter.cs
===================================================================
--- trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/IntervalInterpreter.cs	(revision 17993)
+++ trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/IntervalInterpreter.cs	(revision 18132)
@@ -186,8 +186,9 @@
             break;
           }
+        case OpCodes.Number: // fall through
         case OpCodes.Constant: {
-            var constTreeNode = (ConstantTreeNode)currentInstr.dynamicNode;
-            result = new Interval(constTreeNode.Value, constTreeNode.Value);
-            break;
+          var numericTreeNode = (INumericTreeNode)currentInstr.dynamicNode;
+          result = new Interval(numericTreeNode.Value, numericTreeNode.Value);
+          break;
           }
         case OpCodes.Add: {
@@ -324,4 +325,5 @@
         if (
           !(n.Symbol is Variable) &&
+          !(n.Symbol is Number) &&
           !(n.Symbol is Constant) &&
           !(n.Symbol is StartSymbol) &&
@@ -346,6 +348,6 @@
         else if (n.Symbol is Power) {
           // only integer exponents are supported
-          var exp = n.GetSubtree(1) as ConstantTreeNode;
-          if (exp == null || exp.Value != Math.Truncate(exp.Value)) return false;
+          var exponent = n.GetSubtree(1) as INumericTreeNode;
+          if (exponent == null || exponent.Value != Math.Truncate(exponent.Value)) return false;
         }
       }
Index: trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/OpCodes.cs
===================================================================
--- trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/OpCodes.cs	(revision 17993)
+++ trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/OpCodes.cs	(revision 18132)
@@ -46,5 +46,5 @@
     Variable = 18,
     LagVariable = 19,
-    Constant = 20,
+    Number = 20,
     Arg = 21,
     Power = 22,
@@ -79,4 +79,5 @@
     CubeRoot = 51,
     Tanh = 52,
+    Constant = 53
   };
   public static class OpCodes {
@@ -101,5 +102,6 @@
     public const byte Variable = (byte)OpCode.Variable;
     public const byte LagVariable = (byte)OpCode.LagVariable;
-    public const byte Constant = (byte)OpCode.Constant;
+    public const byte Number = (byte)OpCode.Number;
+    public const byte Constant = (byte) OpCode.Constant;
     public const byte Arg = (byte)OpCode.Arg;
     public const byte Power = (byte)OpCode.Power;
@@ -159,4 +161,5 @@
       { typeof(LaggedVariable), OpCodes.LagVariable },
       { typeof(AutoregressiveTargetVariable),OpCodes.LagVariable},
+      { typeof(Number), OpCodes.Number },
       { typeof(Constant), OpCodes.Constant },
       { typeof(Argument), OpCodes.Arg },
Index: trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionCompiledTreeInterpreter.cs
===================================================================
--- trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionCompiledTreeInterpreter.cs	(revision 17993)
+++ trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionCompiledTreeInterpreter.cs	(revision 18132)
@@ -157,7 +157,8 @@
       #region switch opcode
       switch (opcode) {
-        case OpCodes.Constant: {
-            var constantTreeNode = (ConstantTreeNode)node;
-            return Expression.Constant(constantTreeNode.Value);
+        case OpCodes.Constant: // fall through
+        case OpCodes.Number: {
+          var numberTreeNode = (INumericTreeNode)node;
+          return Expression.Constant(numberTreeNode.Value);
           }
         case OpCodes.Variable: {
Index: trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeBatchInterpreter.cs
===================================================================
--- trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeBatchInterpreter.cs	(revision 17993)
+++ trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeBatchInterpreter.cs	(revision 18132)
@@ -84,5 +84,7 @@
               break;
             }
-          case OpCodes.Constant: break; // nothing to do here, don't remove because we want to prevent falling into the default case here.
+          case OpCodes.Constant: // fall through
+          case OpCodes.Number: 
+            break; // nothing to do here, don't remove because we want to prevent falling into the default case here.
           case OpCodes.Add: {
               Load(instr.buf, code[c].buf);
@@ -279,6 +281,6 @@
             cachedData[variable.VariableName] = code[i].data;
           }
-        } else if (node is ConstantTreeNode constant) {
-          code[i].value = constant.Value;
+        } else if (node is INumericTreeNode numeric) {
+          code[i].value = numeric.Value;
           for (int j = 0; j < BATCHSIZE; ++j)
             code[i].buf[j] = code[i].value;
Index: trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeILEmittingInterpreter.cs
===================================================================
--- trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeILEmittingInterpreter.cs	(revision 17993)
+++ trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeILEmittingInterpreter.cs	(revision 18132)
@@ -711,9 +711,10 @@
             return;
           }
+        case OpCodes.Number: // fall through
         case OpCodes.Constant: {
-            ConstantTreeNode constNode = (ConstantTreeNode)currentInstr.dynamicNode;
-            il.Emit(System.Reflection.Emit.OpCodes.Ldc_R8, constNode.Value);
-            return;
-          }
+          var constNode = (INumericTreeNode) currentInstr.dynamicNode;
+          il.Emit(System.Reflection.Emit.OpCodes.Ldc_R8, constNode.Value);
+          return;
+        }
 
         //mkommend: this symbol uses the logistic function f(x) = 1 / (1 + e^(-alpha * x) ) 
Index: trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeInterpreter.cs
===================================================================
--- trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeInterpreter.cs	(revision 17993)
+++ trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeInterpreter.cs	(revision 18132)
@@ -496,8 +496,9 @@
             return ((IList<double>)currentInstr.data)[actualRow] * laggedVariableTreeNode.Weight;
           }
-        case OpCodes.Constant: {
-            var constTreeNode = (ConstantTreeNode)currentInstr.dynamicNode;
-            return constTreeNode.Value;
-          }
+        case OpCodes.Constant:  // fall through
+        case OpCodes.Number: {
+          var numericTreeNode = (INumericTreeNode) currentInstr.dynamicNode;
+          return numericTreeNode.Value;
+        }
 
         //mkommend: this symbol uses the logistic function f(x) = 1 / (1 + e^(-alpha * x) ) 
Index: trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeLinearInterpreter.cs
===================================================================
--- trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeLinearInterpreter.cs	(revision 17993)
+++ trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeLinearInterpreter.cs	(revision 18132)
@@ -416,8 +416,9 @@
         #region opcode switch
         switch (instr.opCode) {
+          case OpCodes.Number: // fall through
           case OpCodes.Constant: {
-              var constTreeNode = (ConstantTreeNode)instr.dynamicNode;
-              instr.value = constTreeNode.Value;
-              instr.skip = true; // the value is already set so this instruction should be skipped in the evaluation phase
+            var numericTreeNode = (INumericTreeNode)instr.dynamicNode;
+            instr.value = numericTreeNode.Value;
+            instr.skip = true; // the value is already set so this instruction should be skipped in the evaluation phase
             }
             break;
Index: trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeNativeInterpreter.cs
===================================================================
--- trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeNativeInterpreter.cs	(revision 17993)
+++ trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeNativeInterpreter.cs	(revision 18132)
@@ -82,6 +82,6 @@
           code[i].weight = variable.Weight;
           code[i].data = cachedData[variable.VariableName].AddrOfPinnedObject();
-        } else if (node is ConstantTreeNode constant) {
-          code[i].value = constant.Value;
+        } else if (node is INumericTreeNode numeric) {
+          code[i].value = numeric.Value;
         }
 
