Index: /branches/3040_VectorBasedGP/HeuristicLab.DataPreprocessing/3.4/Data/PreprocessingData.cs
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.DataPreprocessing/3.4/Data/PreprocessingData.cs	(revision 17447)
+++ /branches/3040_VectorBasedGP/HeuristicLab.DataPreprocessing/3.4/Data/PreprocessingData.cs	(revision 17448)
@@ -31,4 +31,6 @@
 using HeuristicLab.Problems.DataAnalysis;
 
+using DoubleVector = MathNet.Numerics.LinearAlgebra.Vector<double>;
+
 namespace HeuristicLab.DataPreprocessing {
 
Index: /branches/3040_VectorBasedGP/HeuristicLab.DataPreprocessing/3.4/HeuristicLab.DataPreprocessing-3.4.csproj
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.DataPreprocessing/3.4/HeuristicLab.DataPreprocessing-3.4.csproj	(revision 17447)
+++ /branches/3040_VectorBasedGP/HeuristicLab.DataPreprocessing/3.4/HeuristicLab.DataPreprocessing-3.4.csproj	(revision 17448)
@@ -73,4 +73,8 @@
   </PropertyGroup>
   <ItemGroup>
+    <Reference Include="MathNet.Numerics, Version=4.9.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\bin\MathNet.Numerics.dll</HintPath>
+    </Reference>
     <Reference Include="System" />
     <Reference Include="System.Core" />
Index: /branches/3040_VectorBasedGP/HeuristicLab.DataPreprocessing/3.4/Plugin.cs.frame
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.DataPreprocessing/3.4/Plugin.cs.frame	(revision 17447)
+++ /branches/3040_VectorBasedGP/HeuristicLab.DataPreprocessing/3.4/Plugin.cs.frame	(revision 17448)
@@ -39,4 +39,5 @@
   [PluginDependency("HeuristicLab.Random", "3.3")]
   [PluginDependency("HeuristicLab.Visualization.ChartControlsExtensions", "3.3")]
+  [PluginDependency("HeuristicLab.MathNet.Numerics", "4.9.0")]
   public class HeuristicLabDataPreprocessingPlugin : PluginBase {
   }
Index: /branches/3040_VectorBasedGP/HeuristicLab.MathNet.Numerics/HeuristicLab.MathNet.Numerics.csproj
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.MathNet.Numerics/HeuristicLab.MathNet.Numerics.csproj	(revision 17447)
+++ /branches/3040_VectorBasedGP/HeuristicLab.MathNet.Numerics/HeuristicLab.MathNet.Numerics.csproj	(revision 17448)
@@ -48,5 +48,5 @@
   </ItemGroup>
   <ItemGroup>
-    <PackageReference Include="MathNet.Numerics">
+    <PackageReference Include="MathNet.Numerics.Signed">
       <Version>4.9.0</Version>
     </PackageReference>
Index: /branches/3040_VectorBasedGP/HeuristicLab.MathNet.Numerics/Plugin.cs.frame
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.MathNet.Numerics/Plugin.cs.frame	(revision 17447)
+++ /branches/3040_VectorBasedGP/HeuristicLab.MathNet.Numerics/Plugin.cs.frame	(revision 17448)
@@ -24,5 +24,5 @@
 namespace HeuristicLab.MathNet.Numerics {
   [Plugin("HeuristicLab.MathNet.Numerics", "HeuristicLab wrapper for MathNet.Numerics nuget package.", "4.9.0.$WCREV$")]
-  [PluginFile("HeuristicLab.MathNet.Numerics", PluginFileType.Assembly)]
+  [PluginFile("HeuristicLab.MathNet.Numerics.dll", PluginFileType.Assembly)]
   [PluginFile("MathNet.Numerics.dll", PluginFileType.Assembly)]
   //[PluginFile("MathNet.Numerics.License.txt", PluginFileType.License)]
Index: /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj	(revision 17447)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj	(revision 17448)
@@ -115,4 +115,8 @@
       <HintPath>..\..\bin\HeuristicLab.Problems.DataAnalysis.Symbolic.NativeInterpreter-0.1.dll</HintPath>
       <Private>False</Private>
+    </Reference>
+    <Reference Include="MathNet.Numerics, Version=4.9.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\bin\MathNet.Numerics.dll</HintPath>
     </Reference>
     <Reference Include="System" />
Index: /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeInterpreter.cs
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeInterpreter.cs	(revision 17447)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeInterpreter.cs	(revision 17448)
@@ -20,4 +20,6 @@
 #endregion
 
+using DoubleVector = MathNet.Numerics.LinearAlgebra.Vector<double>;
+
 using System;
 using System.Collections.Generic;
@@ -28,4 +30,5 @@
 using HeuristicLab.Parameters;
 using HEAL.Attic;
+using MathNet.Numerics.Statistics;
 
 namespace HeuristicLab.Problems.DataAnalysis.Symbolic {
@@ -566,5 +569,5 @@
             DoubleVector s = VectorEvaluate(dataset, ref row, state);
             for (int i = 1; i < currentInstr.nArguments; i++) {
-              s *= VectorEvaluate(dataset, ref row, state);
+              s = s.PointwiseMultiply(VectorEvaluate(dataset, ref row, state));
             }
             return s;
@@ -579,5 +582,5 @@
 
         case OpCodes.VectorVariable: {
-            if (row < 0 || row >= dataset.Rows) return new DoubleVector(new[] { double.NaN });
+            if (row < 0 || row >= dataset.Rows) return DoubleVector.Build.Dense(new[] { double.NaN });
             var vectorVarTreeNode = currentInstr.dynamicNode as VectorVariableTreeNode;
             return ((IList<DoubleVector>)currentInstr.data)[row] * vectorVarTreeNode.Weight;
Index: /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Plugin.cs.frame
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Plugin.cs.frame	(revision 17447)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Plugin.cs.frame	(revision 17448)
@@ -47,4 +47,5 @@
   [PluginDependency("HeuristicLab.Random", "3.3")]
   [PluginDependency("HeuristicLab.Selection", "3.3")]
+  [PluginDependency("HeuristicLab.MathNet.Numerics", "4.9.0")]
   public class HeuristicLabProblemsDataAnalysisSymbolicPlugin : PluginBase {
   }
Index: /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisProblem.cs
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisProblem.cs	(revision 17447)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisProblem.cs	(revision 17448)
@@ -35,4 +35,6 @@
 using HeuristicLab.Problems.Instances;
 
+using DoubleVector = MathNet.Numerics.LinearAlgebra.Vector<double>;
+
 namespace HeuristicLab.Problems.DataAnalysis.Symbolic {
   [StorableType("59935E69-C4A5-480E-8FFB-D9669DE9BFD4")]
Index: /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis/3.4/Dataset.cs
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis/3.4/Dataset.cs	(revision 17447)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis/3.4/Dataset.cs	(revision 17448)
@@ -30,4 +30,6 @@
 using HeuristicLab.Data;
 
+using DoubleVector = MathNet.Numerics.LinearAlgebra.Vector<double>;
+
 namespace HeuristicLab.Problems.DataAnalysis {
   [Item("Dataset", "Represents a dataset containing data that should be analyzed.")]
@@ -144,8 +146,4 @@
         else if (iter.Current[i] is DoubleVector dv)
           transposed.Add(new List<DoubleVector>() { dv });
-        else if (iter.Current[i] is StringVector sv)
-          transposed.Add(new List<StringVector>() { sv });
-        else if (iter.Current[i] is DateTimeVector dtv)
-          transposed.Add(new List<DateTimeVector>() { dtv });
         else throw new NotSupportedException(string.Format("Variable {0} has type {1}. This is not supported when converting from row-wise data.", vnames[i], iter.Current[i].GetType()));
       }
@@ -227,10 +225,4 @@
       get { return variableValues.Where(p => p.Value is IList<DoubleVector>).Select(p => p.Key); }
     }
-    public IEnumerable<string> StringVectorVariables {
-      get { return variableValues.Where(p => p.Value is IList<StringVector>).Select(p => p.Key); }
-    }
-    public IEnumerable<string> DateTimeVectorVariables {
-      get { return variableValues.Where(p => p.Value is IList<DateTimeVector>).Select(p => p.Key); }
-    }
 
     public IEnumerable<double> GetDoubleValues(string variableName) {
@@ -245,10 +237,4 @@
     public IEnumerable<DoubleVector> GetDoubleVectorValues(string variableName) {
       return GetValues<DoubleVector>(variableName);
-    }
-    public IEnumerable<StringVector> GetStringVectorValues(string variableName) {
-      return GetValues<StringVector>(variableName);
-    }
-    public IEnumerable<DateTimeVector> GetDateTimeVectorValues(string variableName) {
-      return GetValues<DateTimeVector>(variableName);
     }
 
@@ -299,28 +285,4 @@
       var values = GetValues<DoubleVector>(variableName);
       return new ReadOnlyCollection<DoubleVector>(values);
-    }
-
-    public StringVector GetStringVectorValue(string variableName, int row) {
-      var values = GetValues<StringVector>(variableName);
-      return values[row];
-    }
-    public IEnumerable<StringVector> GetStringVectorValues(string variableName, IEnumerable<int> rows) {
-      return GetValues<StringVector>(variableName, rows);
-    }
-    public ReadOnlyCollection<StringVector> GetReadOnlyStringVectorValues(string variableName) {
-      var values = GetValues<StringVector>(variableName);
-      return new ReadOnlyCollection<StringVector>(values);
-    }
-
-    public DateTimeVector GetDateTimeVectorValue(string variableName, int row) {
-      var values = GetValues<DateTimeVector>(variableName);
-      return values[row];
-    }
-    public IEnumerable<DateTimeVector> GetDateTimeVectorValues(string variableName, IEnumerable<int> rows) {
-      return GetValues<DateTimeVector>(variableName, rows);
-    }
-    public ReadOnlyCollection<DateTimeVector> GetReadOnlyDateTimeVectorValues(string variableName) {
-      var values = GetValues<DateTimeVector>(variableName);
-      return new ReadOnlyCollection<DateTimeVector>(values);
     }
 
@@ -356,6 +318,5 @@
     }
     protected static bool IsAllowedType(Type type) {
-      return type == typeof(double) || type == typeof(string) || type == typeof(DateTime)
-             || type == typeof(DoubleVector) || type == typeof(StringVector) || type == typeof(DateTimeVector);
+      return type == typeof(double) || type == typeof(string) || type == typeof(DateTime) || type == typeof(DoubleVector);
     }
 
@@ -403,11 +364,5 @@
 
       var doubleVectorValues = values as IList<DoubleVector>;
-      if (doubleVectorValues != null) return doubleVectorValues.Select(x => new DoubleVector(x)).ToList();
-
-      var stringVectorValues = values as IList<StringVector>;
-      if (stringVectorValues != null) return stringVectorValues.Select(x => new StringVector(x)).ToList();
-
-      var dateTimeVectorValues = values as IList<DateTimeVector>;
-      if (dateTimeVectorValues != null) return dateTimeVectorValues.Select(x => new DateTimeVector(x)).ToList();
+      if (doubleVectorValues != null) return doubleVectorValues.Select(x => DoubleVector.Build.DenseOfVector(x)).ToList();
 
       throw new ArgumentException(string.Format("Unsupported variable type {0}.", GetElementType(values)));
@@ -450,8 +405,9 @@
     string IStringConvertibleMatrix.GetValue(int rowIndex, int columnIndex) {
       var value = variableValues[variableNames[columnIndex]][rowIndex];
-      if (value is IVector vector) {
-        const int maxCount = 10;
-        string extension = vector.Count > maxCount ? ", ..." : "";
-        return $"[{string.Join(", ", vector.Cast<object>().Take(Math.Min(vector.Count, maxCount)))}{extension}]";
+      if (value is DoubleVector vector) {
+        return $"[{vector.ToVectorString(10, 80)}]";
+        //const int maxCount = 10;
+        //string extension = vector.Count > maxCount ? ", ..." : "";
+        //return $"[{string.Join(", ", vector.Cast<object>().Take(Math.Min(vector.Count, maxCount)))}{extension}]";
       }
 
Index: /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis/3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis/3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj	(revision 17447)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis/3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj	(revision 17448)
@@ -103,4 +103,9 @@
       <Private>False</Private>
     </Reference>
+    <Reference Include="MathNet.Numerics, Version=4.9.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\bin\MathNet.Numerics.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
     <Reference Include="System" />
     <Reference Include="System.Core">
@@ -167,8 +172,4 @@
     <Compile Include="Implementation\Transformations\ShiftToRangeTransformation.cs" />
     <Compile Include="Implementation\Transformations\Transformation.cs" />
-    <Compile Include="Implementation\Vectors\DateTimeVector.cs" />
-    <Compile Include="Implementation\Vectors\StringVector.cs" />
-    <Compile Include="Implementation\Vectors\DoubleVector.cs" />
-    <Compile Include="Implementation\Vectors\Vector.cs" />
     <Compile Include="Interfaces\Classification\IClassificationEnsembleModel.cs">
       <SubType>Code</SubType>
@@ -183,5 +184,4 @@
     <Compile Include="Interfaces\ITransformation.cs" />
     <Compile Include="Interfaces\ITransformationMapper.cs" />
-    <Compile Include="Interfaces\IVector.cs" />
     <Compile Include="Interfaces\Regression\IConfidenceRegressionModel.cs" />
     <Compile Include="Interfaces\Regression\IConfidenceRegressionSolution.cs" />
Index: /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/DataAnalysisProblemData.cs
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/DataAnalysisProblemData.cs	(revision 17447)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/DataAnalysisProblemData.cs	(revision 17448)
@@ -30,4 +30,6 @@
 using HEAL.Attic;
 
+using DoubleVector = MathNet.Numerics.LinearAlgebra.Vector<double>;
+
 namespace HeuristicLab.Problems.DataAnalysis {
   [StorableType("85AE1542-D563-434F-A760-1D181EFC2101")]
@@ -162,5 +164,5 @@
 
       var variables = dataset.VariableNames.Where(variable =>
-        dataset.VariableHasType<double>(variable) || dataset.VariableHasType<string>(variable) || dataset.VariableHasType<DoubleVector> (variable));
+        dataset.VariableHasType<double>(variable) || dataset.VariableHasType<string>(variable) || dataset.VariableHasType<DoubleVector>(variable));
       var inputVariables = new CheckedItemList<StringValue>(variables.Select(x => new StringValue(x).AsReadOnly()));
       foreach (StringValue x in inputVariables)
Index: /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionSolutionVariableImpactsCalculator.cs
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionSolutionVariableImpactsCalculator.cs	(revision 17447)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionSolutionVariableImpactsCalculator.cs	(revision 17448)
@@ -33,4 +33,6 @@
 using HeuristicLab.Random;
 
+using DoubleVector = MathNet.Numerics.LinearAlgebra.Vector<double>;
+
 namespace HeuristicLab.Problems.DataAnalysis {
   [StorableType("414B25CD-6643-4E42-9EB2-B9A24F5E1528")]
@@ -319,5 +321,5 @@
           // new var has same empirical distribution but the relation to y is broken
           // prepare a complete column for the dataset
-          replacementValues = Enumerable.Repeat(new DoubleVector(new[] { double.NaN }), modifiableDataset.Rows).ToList();
+          replacementValues = Enumerable.Repeat(DoubleVector.Build.Dense(new[] { double.NaN }), modifiableDataset.Rows).ToList();
           // shuffle only the selected rows
           var shuffledValues = rows.Select(r => originalValues[r]).Shuffle(random).ToList();
Index: /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/IDataset.cs
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/IDataset.cs	(revision 17447)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/IDataset.cs	(revision 17448)
@@ -27,4 +27,6 @@
 using HEAL.Attic;
 
+using DoubleVector = MathNet.Numerics.LinearAlgebra.Vector<double>;
+
 namespace HeuristicLab.Problems.DataAnalysis {
   [StorableType("55cc9211-2136-41a0-a5bc-0d51e915d1b4")]
@@ -35,6 +37,4 @@
     IEnumerable<string> DateTimeVariables { get; }
     IEnumerable<string> DoubleVectorVariables { get; }
-    IEnumerable<string> StringVectorVariables { get; }
-    IEnumerable<string> DateTimeVectorVariables { get; }
 
     bool ContainsVariable(string variablename);
@@ -60,14 +60,4 @@
     IEnumerable<DoubleVector> GetDoubleVectorValues(string variableName, IEnumerable<int> rows);
     ReadOnlyCollection<DoubleVector> GetReadOnlyDoubleVectorValues(string variableName);
-
-    StringVector GetStringVectorValue(string variableName, int row);
-    IEnumerable<StringVector> GetStringVectorValues(string variableName);
-    IEnumerable<StringVector> GetStringVectorValues(string variableName, IEnumerable<int> rows);
-    ReadOnlyCollection<StringVector> GetReadOnlyStringVectorValues(string variableName);
-
-    DateTimeVector GetDateTimeVectorValue(string variableName, int row);
-    IEnumerable<DateTimeVector> GetDateTimeVectorValues(string variableName);
-    IEnumerable<DateTimeVector> GetDateTimeVectorValues(string variableName, IEnumerable<int> rows);
-    ReadOnlyCollection<DateTimeVector> GetReadOnlyDateTimeVectorValues(string variableName);
   }
 }
Index: anches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/IVector.cs
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/IVector.cs	(revision 17447)
+++ 	(revision )
@@ -1,14 +1,0 @@
-﻿using System.Collections;
-using System.Collections.Generic;
-using HEAL.Attic;
-
-namespace HeuristicLab.Problems.DataAnalysis {
-  [StorableType("E6B5D191-F094-4A6C-91C1-011191C13A16")]
-  public interface IVector : IEnumerable {
-    int Count { get; }
-  }
-
-  [StorableType("FAAFAE70-9240-49FF-9614-EE4A2C17A3C7")]
-  public interface IVector<out T> : IVector, IReadOnlyList<T> {
-  }
-}
Index: /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis/3.4/Plugin.cs.frame
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis/3.4/Plugin.cs.frame	(revision 17447)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis/3.4/Plugin.cs.frame	(revision 17448)
@@ -39,4 +39,5 @@
   [PluginDependency("HeuristicLab.Problems.Instances", "3.3")]  
   [PluginDependency("HeuristicLab.Random", "3.3")]
+  [PluginDependency("HeuristicLab.MathNet.Numerics", "4.9.0")]
   public class HeuristicLabProblemsDataAnalysisPlugin : PluginBase {
   }
Index: /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/TimeSeries/TimeSeriesInstanceProvider.cs
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/TimeSeries/TimeSeriesInstanceProvider.cs	(revision 17447)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/TimeSeries/TimeSeriesInstanceProvider.cs	(revision 17448)
@@ -30,4 +30,6 @@
 using System.Linq;
 using HeuristicLab.Problems.DataAnalysis;
+
+using DoubleVector = MathNet.Numerics.LinearAlgebra.Vector<double>;
 
 namespace HeuristicLab.Problems.Instances.DataAnalysis {
@@ -160,7 +162,6 @@
           var numbers = variable
             .Split(',')
-            .Select(ParseNumber)
-            .ToList();
-          inputsData[i].Add(new DoubleVector(numbers));
+            .Select(ParseNumber);
+          inputsData[i].Add(DoubleVector.Build.DenseOfEnumerable(numbers));
         }
 
Index: /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj	(revision 17447)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj	(revision 17448)
@@ -114,4 +114,8 @@
       <SpecificVersion>False</SpecificVersion>
       <HintPath>..\..\bin\ALGLIB-3.7.0.dll</HintPath>
+    </Reference>
+    <Reference Include="MathNet.Numerics, Version=4.9.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\bin\MathNet.Numerics.dll</HintPath>
     </Reference>
     <Reference Include="System" />
Index: /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Plugin.cs.frame
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Plugin.cs.frame	(revision 17447)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Plugin.cs.frame	(revision 17448)
@@ -35,4 +35,5 @@
   [PluginDependency("HeuristicLab.Problems.Instances", "3.3")]
   [PluginDependency("HeuristicLab.Random", "3.3")]
+  [PluginDependency("HeuristicLab.MathNet.Numerics", "4.9.0")]
   public class HeuristicLabProblemsInstancesDataAnalysisPlugin : PluginBase {
   }
Index: /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/VectorData/AzzaliBenchmark1.cs
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/VectorData/AzzaliBenchmark1.cs	(revision 17447)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/VectorData/AzzaliBenchmark1.cs	(revision 17448)
@@ -1,3 +1,24 @@
-﻿using System;
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
 using System.Collections;
 using System.Collections.Generic;
@@ -7,4 +28,7 @@
 using HeuristicLab.Problems.DataAnalysis;
 using HeuristicLab.Random;
+using MathNet.Numerics.Statistics;
+
+using DoubleVector = MathNet.Numerics.LinearAlgebra.Vector<double>;
 
 namespace HeuristicLab.Problems.Instances.DataAnalysis {
Index: /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/VectorData/AzzaliBenchmark2.cs
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/VectorData/AzzaliBenchmark2.cs	(revision 17447)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/VectorData/AzzaliBenchmark2.cs	(revision 17448)
@@ -1,3 +1,24 @@
-﻿using System;
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
 using System.Collections;
 using System.Collections.Generic;
@@ -7,8 +28,11 @@
 using HeuristicLab.Problems.DataAnalysis;
 using HeuristicLab.Random;
+using MathNet.Numerics.Statistics;
+
+using DoubleVector = MathNet.Numerics.LinearAlgebra.Vector<double>;
 
 namespace HeuristicLab.Problems.Instances.DataAnalysis {
   public class AzzaliBenchmark2 : ArtificialRegressionDataDescriptor {
-    public override string Name { get { return "Azzali Benchmark2 B2 = ((X3 + X1) / mean(X4)) * X2"; } }
+    public override string Name { get { return "Azzali Benchmark2 B2 = ((X3 + X1) / CumMean(X4)) * X2"; } }
     public override string Description { get { return "I. Azzali, L. Vanneschi, S. Silva, I. Bakurov, and M. Giacobini, “A Vectorial Approach to Genetic Programming,” EuroGP, pp. 213–227, 2019."; } }
 
@@ -47,5 +71,6 @@
         var x4 = rand.NextDoubleVector(-5, +5, 10);
 
-        var b2 = ((x3 + x1) / x4.CumulativeMean()) * x2;
+        var cumMean = x4.MapIndexed((j, v) => x4.SubVector(0, j + 1).Mean());
+        var b2 = ((x3 + x1) / cumMean) * x2;
 
         x1Column.Add(x1);
Index: /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/VectorData/AzzaliBenchmark3.cs
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/VectorData/AzzaliBenchmark3.cs	(revision 17447)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/VectorData/AzzaliBenchmark3.cs	(revision 17448)
@@ -1,3 +1,24 @@
-﻿using System;
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
 using System.Collections;
 using System.Collections.Generic;
@@ -8,7 +29,9 @@
 using HeuristicLab.Random;
 
+using DoubleVector = MathNet.Numerics.LinearAlgebra.Vector<double>;
+
 namespace HeuristicLab.Problems.Instances.DataAnalysis {
   public class AzzaliBenchmark3 : ArtificialRegressionDataDescriptor {
-    public override string Name { get { return "Azzali Benchmark2 B3 = "; } }
+    public override string Name { get { return "Azzali Benchmark2 B3 = CumMin[3,3] * (X2 / X3) + X4"; } }
     public override string Description { get { return "I. Azzali, L. Vanneschi, S. Silva, I. Bakurov, and M. Giacobini, “A Vectorial Approach to Genetic Programming,” EuroGP, pp. 213–227, 2019."; } }
 
@@ -49,6 +72,6 @@
         var x5 = rand.NextDouble(0, 1);
 
-        int p = 3, q = 3;
-        var cumulativeMin = new DoubleVector(
+        const int p = 3, q = 3;
+        var cumulativeMin = DoubleVector.Build.DenseOfEnumerable(
           Enumerable.Range(0, x1.Count)
             .Select(idx => Enumerable.Range(idx - p, q)) // build index ranges for each target entry
Index: /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/VectorData/AzzaliKorns5.cs
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/VectorData/AzzaliKorns5.cs	(revision 17447)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/VectorData/AzzaliKorns5.cs	(revision 17448)
@@ -1,3 +1,24 @@
-﻿using System;
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
 using System.Collections;
 using System.Collections.Generic;
@@ -8,7 +29,9 @@
 using HeuristicLab.Random;
 
+using DoubleVector = MathNet.Numerics.LinearAlgebra.Vector<double>;
+
 namespace HeuristicLab.Problems.Instances.DataAnalysis {
   public class AzzaliKorns5 : ArtificialRegressionDataDescriptor {
-    public override string Name { get { return "Azzali Korns5 K5 ="; } }
+    public override string Name { get { return "Azzali Korns5 K5 = 3.0 + 2.23 * log(X4)"; } }
     public override string Description { get { return "I. Azzali, L. Vanneschi, S. Silva, I. Bakurov, and M. Giacobini, “A Vectorial Approach to Genetic Programming,” EuroGP, pp. 213–227, 2019."; } }
 
@@ -47,5 +70,5 @@
         var x4 = rand.NextDoubleVector(-50, +50, 10);
 
-        var k5 = 3 + 2.13 * new DoubleVector(x4.Select(d4 => Math.Log(d4)));
+        var k5 = 3 + 2.13 * x4.PointwiseLog();
 
         x1Column.Add(x1);
Index: /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/VectorData/RandomExtensions.cs
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/VectorData/RandomExtensions.cs	(revision 17447)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/VectorData/RandomExtensions.cs	(revision 17448)
@@ -1,4 +1,27 @@
-﻿using HeuristicLab.Core;
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Core;
 using HeuristicLab.Problems.DataAnalysis;
+
+using DoubleVector = MathNet.Numerics.LinearAlgebra.Vector<double>;
 
 namespace HeuristicLab.Problems.Instances.DataAnalysis {
@@ -12,5 +35,5 @@
         values[i] = rand.NextDouble(min, max);
       }
-      return new DoubleVector(values);
+      return DoubleVector.Build.Dense(values);
     }
   }
Index: /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/VectorData/VectorDataTestOne.cs
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/VectorData/VectorDataTestOne.cs	(revision 17447)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/VectorData/VectorDataTestOne.cs	(revision 17448)
@@ -27,4 +27,7 @@
 using HeuristicLab.Problems.DataAnalysis;
 using HeuristicLab.Random;
+using MathNet.Numerics.Statistics;
+
+using DoubleVector = MathNet.Numerics.LinearAlgebra.Vector<double>;
 
 namespace HeuristicLab.Problems.Instances.DataAnalysis {
Index: /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/TableFileParser.cs
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/TableFileParser.cs	(revision 17447)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/TableFileParser.cs	(revision 17448)
@@ -30,4 +30,6 @@
 using HeuristicLab.Problems.DataAnalysis;
 
+using DoubleVector = MathNet.Numerics.LinearAlgebra.Vector<double>;
+
 namespace HeuristicLab.Problems.Instances.DataAnalysis {
   public class TableFileParser : Progress<long> { // reports the number of bytes read
@@ -272,5 +274,5 @@
             var vectorList = new List<DoubleVector>(stringList.Count);
             for (int j = 0; j < doubles.Length; j++) {
-              vectorList.Add(new DoubleVector(doubles[j]));
+              vectorList.Add(DoubleVector.Build.Dense(doubles[j]));
             }
 
