Index: /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Formatters/InfixExpressionFormatter.cs
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Formatters/InfixExpressionFormatter.cs	(revision 17621)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Formatters/InfixExpressionFormatter.cs	(revision 17622)
@@ -29,4 +29,6 @@
 using HEAL.Attic;
 
+using DoubleVector = MathNet.Numerics.LinearAlgebra.Vector<double>;
+
 namespace HeuristicLab.Problems.DataAnalysis.Symbolic {
   /// <summary>
@@ -58,5 +60,5 @@
     /// <param name="formatString">The format string for numeric parameters (e.g. \"G4\" to limit to 4 digits, default is \"G\")</param>
     /// <returns>Infix expression</returns>
-    public string Format(ISymbolicExpressionTree symbolicExpressionTree, NumberFormatInfo numberFormat, string formatString="G") {
+    public string Format(ISymbolicExpressionTree symbolicExpressionTree, NumberFormatInfo numberFormat, string formatString = "G") {
       // skip root and start symbols
       StringBuilder strBuilder = new StringBuilder();
@@ -141,4 +143,6 @@
             strBuilder.AppendFormat("'{0}'", varNode.VariableName);
           }
+          if (varNode.DataType == typeof(DoubleVector))
+            strBuilder.Append("{}");
           if (!varNode.Weight.IsAlmost(1.0)) {
             strBuilder.Append(")");
Index: /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Importer/InfixExpressionParser.cs
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Importer/InfixExpressionParser.cs	(revision 17621)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Importer/InfixExpressionParser.cs	(revision 17622)
@@ -28,4 +28,6 @@
 using HeuristicLab.Common;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
+
+using DoubleVector = MathNet.Numerics.LinearAlgebra.Vector<double>;
 
 namespace HeuristicLab.Problems.DataAnalysis.Symbolic {
@@ -50,6 +52,7 @@
   ///                 | number
   /// ArgList       = Expr { ',' Expr }
-  /// VarExpr       = varId OptFactorPart
+  /// VarExpr       = varId ( OptFactorPart | OptVectorPart )
   /// OptFactorPart = [ ('=' varVal | '[' ['+' | '-' ] number {',' ['+' | '-' ] number } ']' ) ]
+  /// OptVectorPart = [ '{' [ number {',' number } ] '}' ]
   /// varId         =  ident | ' ident ' | " ident "
   /// varVal        =  ident | ' ident ' | " ident "
@@ -57,5 +60,5 @@
   /// </summary>
   public sealed class InfixExpressionParser {
-    private enum TokenType { Operator, Identifier, Number, LeftPar, RightPar, LeftBracket, RightBracket, Comma, Eq, End, NA };
+    private enum TokenType { Operator, Identifier, Number, LeftPar, RightPar, LeftBracket, RightBracket, Comma, Eq, End, NA, LeftBrace, RightBrace };
     private class Token {
       internal double doubleVal;
@@ -86,4 +89,5 @@
     private BinaryFactorVariable binaryFactorVar = new BinaryFactorVariable();
     private FactorVariable factorVar = new FactorVariable();
+    private Variable vectorVariable = new Variable() { VariableDataType = typeof(DoubleVector) };
 
     private ProgramRootSymbol programRootSymbol = new ProgramRootSymbol();
@@ -255,8 +259,8 @@
         } else if (str[pos] == '{') {
           pos++;
-          yield return new Token { TokenType = TokenType.LeftPar, strVal = "{" };
+          yield return new Token { TokenType = TokenType.LeftBrace, strVal = "{" };
         } else if (str[pos] == '}') {
           pos++;
-          yield return new Token { TokenType = TokenType.RightPar, strVal = "}" };
+          yield return new Token { TokenType = TokenType.RightBrace, strVal = "}" };
         } else if (str[pos] == '=') {
           pos++;
@@ -403,6 +407,7 @@
     ///                 | number
     /// ArgList       = Expr { ',' Expr }
-    /// VarExpr       = varId OptFactorPart
+    /// VarExpr       = varId ( OptFactorPart | OptVectorPart )
     /// OptFactorPart = [ ('=' varVal | '[' ['+' | '-' ] number {',' ['+' | '-' ] number } ']' ) ]
+    /// OptVectorPart = [ '{' [ number {',' number } ] '}' ]
     /// varId         =  ident | ' ident ' | " ident "
     /// varVal        =  ident | ' ident ' | " ident "
@@ -516,4 +521,25 @@
             factorVariableNode.Weights = weights.ToArray();
             return factorVariableNode;
+          } else if (tokens.Peek().TokenType == TokenType.LeftBrace) {
+            // vector variable
+            var vecVarNode = (VariableTreeNodeBase)vectorVariable.CreateTreeNode();
+            vecVarNode.VariableName = idTok.strVal;
+            vecVarNode.Weight = 1.0;
+            tokens.Dequeue(); // skip {
+            // optional vector length (currently unused)
+            var lengths = new List<int>();
+            if (tokens.Peek().TokenType == TokenType.Number) {
+              var lengthToken = tokens.Dequeue();
+              lengths.Add((int)lengthToken.doubleVal);
+              while (tokens.Peek().TokenType == TokenType.Comma) {
+                tokens.Dequeue(); // skip comma
+                lengthToken = tokens.Dequeue();
+                if (lengthToken.TokenType != TokenType.Number) throw new ArgumentException("number expected");
+                lengths.Add((int)lengthToken.doubleVal);
+              }
+            }
+            var rightBraceToken = tokens.Dequeue();
+            if (rightBraceToken.TokenType != TokenType.RightBrace) throw new ArgumentException("closing brace } expected");
+            return vecVarNode;
           } else {
             // variable
Index: /branches/3040_VectorBasedGP/HeuristicLab.Tests/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4/InfixExpressionParserTest.cs
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Tests/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4/InfixExpressionParserTest.cs	(revision 17621)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Tests/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4/InfixExpressionParserTest.cs	(revision 17622)
@@ -121,4 +121,8 @@
       Console.WriteLine(formatter.Format(parser.Parse("-1.0 * x = bla")));
       Console.WriteLine(formatter.Format(parser.Parse("+1.0 * \"x\" = bla + y = \"bla2\"")));
+
+      Console.WriteLine(formatter.Format(parser.Parse("x { } * y")));
+      Console.WriteLine(formatter.Format(parser.Parse("x { 2 } * y")));
+      Console.WriteLine(formatter.Format(parser.Parse("x { 2, 3 } * y")));
     }
   }
Index: /branches/3040_VectorBasedGP/HeuristicLab.Tests/HeuristicLab.Tests.csproj
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Tests/HeuristicLab.Tests.csproj	(revision 17621)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Tests/HeuristicLab.Tests.csproj	(revision 17622)
@@ -12,5 +12,5 @@
     <RootNamespace>HeuristicLab.Tests</RootNamespace>
     <AssemblyName>HeuristicLab.Tests</AssemblyName>
-    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
+    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
     <FileAlignment>512</FileAlignment>
     <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
