Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/CSV/ClassifiactionCSVInstanceProvider.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/CSV/ClassifiactionCSVInstanceProvider.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/CSV/ClassifiactionCSVInstanceProvider.cs	(revision 8430)
@@ -20,12 +20,15 @@
 #endregion
 
-
 using System;
 using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
 using HeuristicLab.Problems.DataAnalysis;
+
 namespace HeuristicLab.Problems.Instances.DataAnalysis {
   public class ClassificationCSVInstanceProvider : ClassificationInstanceProvider {
     public override string Name {
-      get { return "CSV Problem Provider"; }
+      get { return "CSV File"; }
     }
     public override string Description {
@@ -48,4 +51,61 @@
       throw new NotImplementedException();
     }
+
+    public override bool CanImportData {
+      get { return true; }
+    }
+    public override IClassificationProblemData ImportData(string path) {
+      TableFileParser csvFileParser = new TableFileParser();
+
+      csvFileParser.Parse(path);
+
+      Dataset dataset = new Dataset(csvFileParser.VariableNames, csvFileParser.Values);
+      string targetVar = csvFileParser.VariableNames.Where(x => dataset.DoubleVariables.Contains(x)).Last();
+      IEnumerable<string> allowedInputVars = dataset.DoubleVariables.Where(x => !x.Equals(targetVar));
+
+      ClassificationProblemData claData = new ClassificationProblemData(dataset, allowedInputVars, targetVar);
+
+      int trainingPartEnd = csvFileParser.Rows * 2 / 3;
+      claData.TrainingPartition.Start = 0;
+      claData.TrainingPartition.End = trainingPartEnd;
+      claData.TestPartition.Start = trainingPartEnd;
+      claData.TestPartition.End = csvFileParser.Rows;
+      int pos = path.LastIndexOf('\\');
+      if (pos < 0)
+        claData.Name = path;
+      else {
+        pos++;
+        claData.Name = path.Substring(pos, path.Length - pos);
+      }
+
+      return claData;
+    }
+
+    public override bool CanExportData {
+      get { return true; }
+    }
+    public override void ExportData(IClassificationProblemData instance, string path) {
+      StringBuilder strBuilder = new StringBuilder();
+
+      foreach (var variable in instance.InputVariables) {
+        strBuilder.Append(variable + ";");
+      }
+      strBuilder.Remove(strBuilder.Length - 1, 1);
+      strBuilder.AppendLine();
+
+      Dataset dataset = instance.Dataset;
+
+      for (int i = 0; i < dataset.Rows; i++) {
+        for (int j = 0; j < dataset.Columns; j++) {
+          strBuilder.Append(dataset.GetValue(i, j) + ";");
+        }
+        strBuilder.Remove(strBuilder.Length - 1, 1);
+        strBuilder.AppendLine();
+      }
+
+      using (StreamWriter writer = new StreamWriter(path)) {
+        writer.Write(strBuilder);
+      }
+    }
   }
 }
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/ClassificationInstanceProvider.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/ClassificationInstanceProvider.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/ClassificationInstanceProvider.cs	(revision 8430)
@@ -20,72 +20,8 @@
 #endregion
 
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Text;
 using HeuristicLab.Problems.DataAnalysis;
 
 namespace HeuristicLab.Problems.Instances.DataAnalysis {
-  public abstract class ClassificationInstanceProvider : IProblemInstanceProvider<IClassificationProblemData> {
-    public IClassificationProblemData LoadData(string path) {
-      TableFileParser csvFileParser = new TableFileParser();
-
-      csvFileParser.Parse(path);
-
-      Dataset dataset = new Dataset(csvFileParser.VariableNames, csvFileParser.Values);
-      string targetVar = csvFileParser.VariableNames.Last();
-      IEnumerable<string> allowedInputVars = csvFileParser.VariableNames.Where(x => !x.Equals(targetVar));
-
-      ClassificationProblemData claData = new ClassificationProblemData(dataset, allowedInputVars, targetVar);
-
-      int trainingPartEnd = csvFileParser.Rows * 2 / 3;
-      claData.TrainingPartition.Start = 0;
-      claData.TrainingPartition.End = trainingPartEnd;
-      claData.TestPartition.Start = trainingPartEnd;
-      claData.TestPartition.End = csvFileParser.Rows;
-      int pos = path.LastIndexOf('\\');
-      if (pos < 0)
-        claData.Name = path;
-      else {
-        pos++;
-        claData.Name = path.Substring(pos, path.Length - pos);
-      }
-
-      return claData;
-    }
-
-    public void SaveData(IClassificationProblemData instance, string path) {
-      StringBuilder strBuilder = new StringBuilder();
-
-      foreach (var variable in instance.InputVariables) {
-        strBuilder.Append(variable + ";");
-      }
-      strBuilder.Remove(strBuilder.Length - 1, 1);
-      strBuilder.AppendLine();
-
-      Dataset dataset = instance.Dataset;
-
-      for (int i = 0; i < dataset.Rows; i++) {
-        for (int j = 0; j < dataset.Columns; j++) {
-          strBuilder.Append(dataset.GetValue(i, j) + ";");
-        }
-        strBuilder.Remove(strBuilder.Length - 1, 1);
-        strBuilder.AppendLine();
-      }
-
-      using (StreamWriter writer = new StreamWriter(path)) {
-        writer.Write(strBuilder);
-      }
-    }
-
-    public abstract IEnumerable<IDataDescriptor> GetDataDescriptors();
-    public abstract IClassificationProblemData LoadData(IDataDescriptor descriptor);
-
-    public abstract string Name { get; }
-    public abstract string Description { get; }
-    public abstract Uri WebLink { get; }
-    public abstract string ReferencePublication { get; }
+  public abstract class ClassificationInstanceProvider : ProblemInstanceProvider<IClassificationProblemData> {
   }
 }
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/RealWorld/ClassificationRealWorldInstanceProvider.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/RealWorld/ClassificationRealWorldInstanceProvider.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/RealWorld/ClassificationRealWorldInstanceProvider.cs	(revision 8430)
@@ -47,5 +47,4 @@
     public override IEnumerable<IDataDescriptor> GetDataDescriptors() {
       List<IDataDescriptor> descriptorList = new List<IDataDescriptor>();
-      descriptorList.Add(new Iris());
       descriptorList.Add(new Mammography());
       var solutionsArchiveName = GetResourceName(FileName + @"\.zip");
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/ResourceClassificationInstanceProvider.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/ResourceClassificationInstanceProvider.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/ResourceClassificationInstanceProvider.cs	(revision 8430)
@@ -70,6 +70,6 @@
 
         Dataset dataset = new Dataset(csvFileParser.VariableNames, csvFileParser.Values);
-        string targetVar = csvFileParser.VariableNames.Last();
-        IEnumerable<string> allowedInputVars = csvFileParser.VariableNames.Where(x => !x.Equals(targetVar));
+        string targetVar = csvFileParser.VariableNames.Where(x => dataset.DoubleVariables.Contains(x)).Last();
+        IEnumerable<string> allowedInputVars = dataset.DoubleVariables.Where(x => !x.Equals(targetVar));
 
         ClassificationProblemData claData = new ClassificationProblemData(dataset, allowedInputVars, targetVar);
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Clustering/CSV/ClusteringCSVInstanceProvider.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Clustering/CSV/ClusteringCSVInstanceProvider.cs	(revision 8430)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Clustering/CSV/ClusteringCSVInstanceProvider.cs	(revision 8430)
@@ -0,0 +1,107 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.Generic;
+using System.IO;
+using System.Text;
+using HeuristicLab.Problems.DataAnalysis;
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class ClusteringCSVInstanceProvider : ClusteringInstanceProvider {
+    public override string Name {
+      get { return "CSV File"; }
+    }
+    public override string Description {
+      get {
+        return "";
+      }
+    }
+    public override Uri WebLink {
+      get { return new Uri("http://dev.heuristiclab.com/trac/hl/core/wiki/UsersFAQ#DataAnalysisImportFileFormat"); }
+    }
+    public override string ReferencePublication {
+      get { return ""; }
+    }
+
+    public override IEnumerable<IDataDescriptor> GetDataDescriptors() {
+      return new List<IDataDescriptor>();
+    }
+
+    public override IClusteringProblemData LoadData(IDataDescriptor descriptor) {
+      throw new NotImplementedException();
+    }
+
+    public override bool CanImportData {
+      get { return true; }
+    }
+    public override IClusteringProblemData ImportData(string path) {
+      var csvFileParser = new TableFileParser();
+
+      csvFileParser.Parse(path);
+
+      var dataset = new Dataset(csvFileParser.VariableNames, csvFileParser.Values);
+      var claData = new ClusteringProblemData(dataset, dataset.DoubleVariables);
+
+      int trainingPartEnd = csvFileParser.Rows * 2 / 3;
+      claData.TrainingPartition.Start = 0;
+      claData.TrainingPartition.End = trainingPartEnd;
+      claData.TestPartition.Start = trainingPartEnd;
+      claData.TestPartition.End = csvFileParser.Rows;
+      int pos = path.LastIndexOf('\\');
+      if (pos < 0)
+        claData.Name = path;
+      else {
+        pos++;
+        claData.Name = path.Substring(pos, path.Length - pos);
+      }
+
+      return claData;
+    }
+
+    public override bool CanExportData {
+      get { return true; }
+    }
+    public override void ExportData(IClusteringProblemData instance, string path) {
+      var strBuilder = new StringBuilder();
+
+      foreach (var variable in instance.InputVariables) {
+        strBuilder.Append(variable + ";");
+      }
+      strBuilder.Remove(strBuilder.Length - 1, 1);
+      strBuilder.AppendLine();
+
+      var dataset = instance.Dataset;
+
+      for (int i = 0; i < dataset.Rows; i++) {
+        for (int j = 0; j < dataset.Columns; j++) {
+          strBuilder.Append(dataset.GetValue(i, j) + ";");
+        }
+        strBuilder.Remove(strBuilder.Length - 1, 1);
+        strBuilder.AppendLine();
+      }
+
+      using (var writer = new StreamWriter(path)) {
+        writer.Write(strBuilder);
+      }
+    }
+  }
+}
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Clustering/ClusteringInstanceProvider.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Clustering/ClusteringInstanceProvider.cs	(revision 8430)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Clustering/ClusteringInstanceProvider.cs	(revision 8430)
@@ -0,0 +1,27 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.Problems.DataAnalysis;
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public abstract class ClusteringInstanceProvider : ProblemInstanceProvider<IClusteringProblemData> {
+  }
+}
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj	(revision 8430)
@@ -37,4 +37,64 @@
     <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\..\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <CodeAnalysisLogFile>..\..\bin\HeuristicLab.Problems.Instances.DataAnalysis-3.3.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+    <OutputPath>..\..\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <CodeAnalysisLogFile>..\..\bin\HeuristicLab.Problems.Instances.DataAnalysis-3.3.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\..\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <CodeAnalysisLogFile>..\..\bin\HeuristicLab.Problems.Instances.DataAnalysis-3.3.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>..\..\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <CodeAnalysisLogFile>..\..\bin\HeuristicLab.Problems.Instances.DataAnalysis-3.3.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
+  </PropertyGroup>
   <ItemGroup>
     <Reference Include="HeuristicLab.Collections-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
@@ -82,4 +142,6 @@
     <Compile Include="Classification\ResourceClassificationDataDescriptor.cs" />
     <Compile Include="Classification\ResourceClassificationInstanceProvider.cs" />
+    <Compile Include="Clustering\ClusteringInstanceProvider.cs" />
+    <Compile Include="Clustering\CSV\ClusteringCSVInstanceProvider.cs" />
     <Compile Include="Plugin.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
@@ -89,14 +151,17 @@
     <Compile Include="Regression\Keijzer\KeijzerFunctionFourteen.cs" />
     <Compile Include="Regression\Keijzer\KeijzerFunctionEleven.cs" />
-    <Compile Include="Regression\Keijzer\KeijzerFunctionNine.cs" />
     <Compile Include="Regression\Keijzer\KeijzerFunctionFive.cs" />
     <Compile Include="Regression\Keijzer\KeijzerFunctionEight.cs" />
     <Compile Include="Regression\Keijzer\KeijzerFunctionFifteen.cs" />
     <Compile Include="Regression\Keijzer\KeijzerFunctionFour.cs" />
+    <Compile Include="Regression\Keijzer\KeijzerFunctionNine.cs" />
+    <Compile Include="Regression\Keijzer\KeijzerFunctionOne.cs" />
     <Compile Include="Regression\Keijzer\KeijzerFunctionSeven.cs" />
     <Compile Include="Regression\Keijzer\KeijzerFunctionSix.cs" />
-    <Compile Include="Regression\Keijzer\KeijzerFunctionSixteen.cs" />
+    <Compile Include="Regression\Keijzer\KeijzerFunctionTen.cs" />
     <Compile Include="Regression\Keijzer\KeijzerFunctionThirteen.cs" />
+    <Compile Include="Regression\Keijzer\KeijzerFunctionThree.cs" />
     <Compile Include="Regression\Keijzer\KeijzerFunctionTwelve.cs" />
+    <Compile Include="Regression\Keijzer\KeijzerFunctionTwo.cs" />
     <Compile Include="Regression\Keijzer\KeijzerInstanceProvider.cs" />
     <Compile Include="Regression\Korns\KornsFunctionEight.cs" />
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Plugin.cs.frame
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Plugin.cs.frame	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Plugin.cs.frame	(revision 8430)
@@ -23,7 +23,6 @@
 
 namespace HeuristicLab.Problems.Instances.DataAnalysis {
-  [Plugin("HeuristicLab.Problems.Instances.DataAnalysis", "3.3.6.$WCREV$")]
+  [Plugin("HeuristicLab.Problems.Instances.DataAnalysis", "3.3.7.$WCREV$")]
   [PluginFile("HeuristicLab.Problems.Instances.DataAnalysis-3.3.dll", PluginFileType.Assembly)]
-  [PluginDependency("HeuristicLab.Common", "3.3")]
   [PluginDependency("HeuristicLab.Core", "3.3")]
   [PluginDependency("HeuristicLab.Data", "3.3")]
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Properties/AssemblyInfo.cs.frame	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Properties/AssemblyInfo.cs.frame	(revision 8430)
@@ -55,3 +55,3 @@
 // [assembly: AssemblyVersion("1.0.*")]
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.6.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.7.$WCREV$")]
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/CSV/RegressionCSVInstanceProvider.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/CSV/RegressionCSVInstanceProvider.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/CSV/RegressionCSVInstanceProvider.cs	(revision 8430)
@@ -20,12 +20,15 @@
 #endregion
 
-
 using System;
 using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
 using HeuristicLab.Problems.DataAnalysis;
+
 namespace HeuristicLab.Problems.Instances.DataAnalysis {
   public class RegressionCSVInstanceProvider : RegressionInstanceProvider {
     public override string Name {
-      get { return "CSV Problem Provider"; }
+      get { return "CSV File"; }
     }
     public override string Description {
@@ -44,8 +47,64 @@
       return new List<IDataDescriptor>();
     }
-
     public override IRegressionProblemData LoadData(IDataDescriptor descriptor) {
       throw new NotImplementedException();
     }
+
+    public override bool CanImportData {
+      get { return true; }
+    }
+    public override IRegressionProblemData ImportData(string path) {
+      TableFileParser csvFileParser = new TableFileParser();
+      csvFileParser.Parse(path);
+
+      Dataset dataset = new Dataset(csvFileParser.VariableNames, csvFileParser.Values);
+      string targetVar = csvFileParser.VariableNames.Where(x => dataset.DoubleVariables.Contains(x)).Last();
+
+      IEnumerable<string> allowedInputVars = dataset.DoubleVariables.Where(x => !x.Equals(targetVar));
+
+      IRegressionProblemData regData = new RegressionProblemData(dataset, allowedInputVars, targetVar);
+
+      int trainingPartEnd = csvFileParser.Rows * 2 / 3;
+      regData.TrainingPartition.Start = 0;
+      regData.TrainingPartition.End = trainingPartEnd;
+      regData.TestPartition.Start = trainingPartEnd;
+      regData.TestPartition.End = csvFileParser.Rows;
+
+      int pos = path.LastIndexOf('\\');
+      if (pos < 0)
+        regData.Name = path;
+      else {
+        pos++;
+        regData.Name = path.Substring(pos, path.Length - pos);
+      }
+      return regData;
+    }
+
+    public override bool CanExportData {
+      get { return true; }
+    }
+    public override void ExportData(IRegressionProblemData instance, string path) {
+      StringBuilder strBuilder = new StringBuilder();
+
+      foreach (var variable in instance.InputVariables) {
+        strBuilder.Append(variable + ";");
+      }
+      strBuilder.Remove(strBuilder.Length - 1, 1);
+      strBuilder.AppendLine();
+
+      Dataset dataset = instance.Dataset;
+
+      for (int i = 0; i < dataset.Rows; i++) {
+        for (int j = 0; j < dataset.Columns; j++) {
+          strBuilder.Append(dataset.GetValue(i, j) + ";");
+        }
+        strBuilder.Remove(strBuilder.Length - 1, 1);
+        strBuilder.AppendLine();
+      }
+
+      using (StreamWriter writer = new StreamWriter(path)) {
+        writer.Write(strBuilder);
+      }
+    }
   }
 }
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionEight.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionEight.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionEight.cs	(revision 8430)
@@ -27,14 +27,13 @@
   public class KeijzerFunctionEight : ArtificialRegressionDataDescriptor {
 
-    public override string Name { get { return "Keijzer 8 f(x) = log(x)"; } }
+    public override string Name { get { return "Keijzer 8 f(x) = sqrt(x)"; } }
     public override string Description {
       get {
         return "Paper: Improving Symbolic Regression with Interval Arithmetic and Linear Scaling" + Environment.NewLine
-          + "Authors: Maarten Keijzer" + Environment.NewLine
-          + "Function: f(x) = log(x)" + Environment.NewLine
-          + "range(train): x = [0:1:100]" + Environment.NewLine
-          + "range(test): x = [0:0.1:100]" + Environment.NewLine
-          + "Function Set: x + y, x * y, 1/x, -x, sqrt(x)" + Environment.NewLine + Environment.NewLine
-          + "Note: The problem starts with 1 to avoid log(0), which is minus infinity!";
+        + "Authors: Maarten Keijzer" + Environment.NewLine
+        + "Function: f(x) = sqrt(x)" + Environment.NewLine
+        + "range(train): x = [0:1:100]" + Environment.NewLine
+        + "range(test): x = [0:0.1:100]" + Environment.NewLine
+        + "Function Set: x + y, x * y, 1/x, -x, sqrt(x)";
       }
     }
@@ -43,12 +42,12 @@
     protected override string[] AllowedInputVariables { get { return new string[] { "X" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
-    protected override int TrainingPartitionEnd { get { return 100; } }
-    protected override int TestPartitionStart { get { return 100; } }
-    protected override int TestPartitionEnd { get { return 1091; } }
+    protected override int TrainingPartitionEnd { get { return 101; } }
+    protected override int TestPartitionStart { get { return 101; } }
+    protected override int TestPartitionEnd { get { return 1102; } }
 
     protected override List<List<double>> GenerateValues() {
       List<List<double>> data = new List<List<double>>();
-      data.Add(ValueGenerator.GenerateSteps(1, 100, 1).ToList());
-      data[0].AddRange(ValueGenerator.GenerateSteps(1, 100, 0.1));
+      data.Add(ValueGenerator.GenerateSteps(0, 100, 1).ToList());
+      data[0].AddRange(ValueGenerator.GenerateSteps(0, 100, 0.1));
 
       double x;
@@ -56,5 +55,5 @@
       for (int i = 0; i < data[0].Count; i++) {
         x = data[0][i];
-        results.Add(Math.Log(x));
+        results.Add(Math.Sqrt(x));
       }
       data.Add(results);
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionEleven.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionEleven.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionEleven.cs	(revision 8430)
@@ -27,13 +27,16 @@
   public class KeijzerFunctionEleven : ArtificialRegressionDataDescriptor {
 
-    public override string Name { get { return "Keijzer 11 f(x, y) = x ^ y"; } }
+    public override string Name { get { return "Keijzer 11 f(x, y) = xy + sin((x - 1)(y - 1))"; } }
     public override string Description {
       get {
-        return "Paper: Improving Symbolic Regression with Interval Arithmetic and Linear Scaling" + Environment.NewLine
-        + "Authors: Maarten Keijzer" + Environment.NewLine
-        + "Function: f(x, y) = x ^ y" + Environment.NewLine
-        + "range(train): 100 Train cases x,y = rnd(0, 1)" + Environment.NewLine
-        + "range(test): x,y = [0:0.01:1]" + Environment.NewLine
-        + "Function Set: x + y, x * y, 1/x, -x, sqrt(x)";
+        return
+          "Paper: Improving Symbolic Regression with Interval Arithmetic and Linear Scaling" + Environment.NewLine
+          + "Authors: Maarten Keijzer" + Environment.NewLine
+          + "Function: f(x, y) = xy + sin((x - 1)(y - 1))" + Environment.NewLine
+          + "range(train): 20 Training cases x,y = rnd(-3, 3)" + Environment.NewLine
+          + "range(test): x,y = [-3:0.01:3]" + Environment.NewLine
+          + "Function Set: x + y, x * y, 1/x, -x, sqrt(x)" + Environment.NewLine + Environment.NewLine
+          + "Note: Test partition has been adjusted to only 100 random uniformly distributed test cases in the interval [-3, 3] (not ca. 360000 as described) "
+          + ", but 5000 cases are created";
       }
     }
@@ -42,18 +45,12 @@
     protected override string[] AllowedInputVariables { get { return new string[] { "X", "Y" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
-    protected override int TrainingPartitionEnd { get { return 100; } }
-    protected override int TestPartitionStart { get { return 100; } }
-    protected override int TestPartitionEnd { get { return 10301; } }
+    protected override int TrainingPartitionEnd { get { return 20; } }
+    protected override int TestPartitionStart { get { return 2500; } }
+    protected override int TestPartitionEnd { get { return 2600; } }
 
     protected override List<List<double>> GenerateValues() {
       List<List<double>> data = new List<List<double>>();
-
-      List<double> oneVariableTestData = ValueGenerator.GenerateSteps(0, 1, 0.01).ToList();
-      List<List<double>> testData = new List<List<double>>() { oneVariableTestData, oneVariableTestData };
-
-      var combinations = ValueGenerator.GenerateAllCombinationsOfValuesInLists(testData).ToList<IEnumerable<double>>();
       for (int i = 0; i < AllowedInputVariables.Count(); i++) {
-        data.Add(ValueGenerator.GenerateUniformDistributedValues(100, 0, 1).ToList());
-        data[i].AddRange(combinations[i]);
+        data.Add(ValueGenerator.GenerateUniformDistributedValues(5020, -3, 3).ToList());
       }
 
@@ -63,5 +60,5 @@
         x = data[0][i];
         y = data[1][i];
-        results.Add(Math.Pow(x, y));
+        results.Add(x * y + Math.Sin((x - 1) * (y - 1)));
       }
       data.Add(results);
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionFifteen.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionFifteen.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionFifteen.cs	(revision 8430)
@@ -27,14 +27,14 @@
   public class KeijzerFunctionFifteen : ArtificialRegressionDataDescriptor {
 
-    public override string Name { get { return "Keijzer 15 f(x, y) = 8 / (2 + x^2 + y^2)"; } }
+    public override string Name { get { return "Keijzer 15 f(x, y) = x³ / 5 + y³ / 2 - y - x"; } }
     public override string Description {
       get {
         return "Paper: Improving Symbolic Regression with Interval Arithmetic and Linear Scaling" + Environment.NewLine
         + "Authors: Maarten Keijzer" + Environment.NewLine
-        + "Function: f(x, y) = 8 / (2 + x^2 + y^2)" + Environment.NewLine
-        + "range(train): 20 Train cases x,y = rnd(-3, 3)" + Environment.NewLine
+        + "Function: f(x, y) = x³ / 5 + y³ / 2 - y - x" + Environment.NewLine
+        + "range(train): 20 Training cases x,y = rnd(-3, 3)" + Environment.NewLine
         + "range(test): x,y = [-3:0.01:3]" + Environment.NewLine
         + "Function Set: x + y, x * y, 1/x, -x, sqrt(x)" + Environment.NewLine + Environment.NewLine
-        + "Note: Test partition has been adjusted to only 100 random uniformly distributed test cases in the intercal [-3, 3] (not ca. 360000 as described) "
+        + "Note: Test partition has been adjusted to only 100 random uniformly distributed test cases in the interval [-3, 3] (not ca. 360000 as described) "
         + ", but 5000 cases are created";
       }
@@ -46,5 +46,5 @@
     protected override int TrainingPartitionEnd { get { return 20; } }
     protected override int TestPartitionStart { get { return 2500; } }
-    protected override int TestPartitionEnd { get { return 5000; } }
+    protected override int TestPartitionEnd { get { return 2600; } }
 
     protected override List<List<double>> GenerateValues() {
@@ -59,5 +59,5 @@
         x = data[0][i];
         y = data[1][i];
-        results.Add(8 / (2 + Math.Pow(x, 2) + Math.Pow(y, 2)));
+        results.Add(Math.Pow(x, 3) / 5 + Math.Pow(y, 3) / 2 - y - x);
       }
       data.Add(results);
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionFive.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionFive.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionFive.cs	(revision 8430)
@@ -27,34 +27,36 @@
   public class KeijzerFunctionFive : ArtificialRegressionDataDescriptor {
 
-    public override string Name { get { return "Keijzer 5 f(x) = x ^ 3  * exp(-x) * cos(x) * sin(x) * (sin(x) ^ 2 * cos(x) - 1)"; } }
+    public override string Name { get { return "Keijzer 5 f(x) = (30 * x * z) / ((x - 10)  * y²)"; } }
     public override string Description {
       get {
         return "Paper: Improving Symbolic Regression with Interval Arithmetic and Linear Scaling" + Environment.NewLine
         + "Authors: Maarten Keijzer" + Environment.NewLine
-        + "Function: f(x) = x ^ 3  * exp(-x) * cos(x) * sin(x) * (sin(x) ^ 2 * cos(x) - 1)" + Environment.NewLine
-        + "range(train): x = [0:0.05:10]" + Environment.NewLine
-        + "range(test): x = [0.05:0.05:10.05]" + Environment.NewLine
-        + "Function Set: x + y, x * y, 1/x, -x, sqrt(x)" + Environment.NewLine
-        + "Note: {exp, log, sin, cos}, 100000 evals";
+        + "Function: f(x) = (30 * x * z) / ((x - 10)  * y²)" + Environment.NewLine
+        + "range(train): 1000 points x,z = rnd(-1, 1), y = rnd(1, 2)" + Environment.NewLine
+        + "range(test): 10000 points x,z = rnd(-1, 1), y = rnd(1, 2)" + Environment.NewLine
+        + "Function Set: x + y, x * y, 1/x, -x, sqrt(x)";
       }
     }
     protected override string TargetVariable { get { return "F"; } }
-    protected override string[] InputVariables { get { return new string[] { "X", "F" }; } }
-    protected override string[] AllowedInputVariables { get { return new string[] { "X" }; } }
+    protected override string[] InputVariables { get { return new string[] { "X", "Y", "Z", "F" }; } }
+    protected override string[] AllowedInputVariables { get { return new string[] { "X", "Y", "Z" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
-    protected override int TrainingPartitionEnd { get { return 201; } }
-    protected override int TestPartitionStart { get { return 201; } }
-    protected override int TestPartitionEnd { get { return 402; } }
+    protected override int TrainingPartitionEnd { get { return 1000; } }
+    protected override int TestPartitionStart { get { return 1000; } }
+    protected override int TestPartitionEnd { get { return 11000; } }
 
     protected override List<List<double>> GenerateValues() {
       List<List<double>> data = new List<List<double>>();
-      data.Add(ValueGenerator.GenerateSteps(0, 10, 0.05).ToList());
-      data[0].AddRange(ValueGenerator.GenerateSteps(0.05, 10.05, 0.05));
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(TestPartitionEnd, -1, 1).ToList());
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(TestPartitionEnd, 1, 2).ToList());
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(TestPartitionEnd, -1, 1).ToList());
 
-      double x;
+      double x, y, z;
       List<double> results = new List<double>();
       for (int i = 0; i < data[0].Count; i++) {
         x = data[0][i];
-        results.Add(Math.Pow(x, 3) * Math.Exp(-x) * Math.Cos(x) * Math.Sin(x) * (Math.Pow(Math.Sin(x), 2) * Math.Cos(x) - 1));
+        y = data[1][i];
+        z = data[2][i];
+        results.Add((30 * x * z) / ((x - 10) * Math.Pow(y, 2)));
       }
       data.Add(results);
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionFour.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionFour.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionFour.cs	(revision 8430)
@@ -27,13 +27,14 @@
   public class KeijzerFunctionFour : ArtificialRegressionDataDescriptor {
 
-    public override string Name { get { return "Keijzer 4 f(x) = 0.3 * x *sin(2 * PI * x)"; } }
+    public override string Name { get { return "Keijzer 4 f(x) = x³  * exp(-x) * cos(x) * sin(x) * (sin(x)² * cos(x) - 1)"; } }
     public override string Description {
       get {
         return "Paper: Improving Symbolic Regression with Interval Arithmetic and Linear Scaling" + Environment.NewLine
         + "Authors: Maarten Keijzer" + Environment.NewLine
-        + "Function: f(x) = 0.3 * x *sin(2 * PI * x)" + Environment.NewLine
-        + "range(train): x = [-1:0.1:1]" + Environment.NewLine
-        + "range(test): x = [-1:0.001:1]" + Environment.NewLine
-        + "Function Set: x + y, x * y, 1/x, -x, sqrt(x)";
+        + "Function: f(x) = x³  * exp(-x) * cos(x) * sin(x) * (sin(x)² * cos(x) - 1)" + Environment.NewLine
+        + "range(train): x = [0:0.05:10]" + Environment.NewLine
+        + "range(test): x = [0.05:0.05:10.05]" + Environment.NewLine
+        + "Function Set: x + y, x * y, 1/x, -x, sqrt(x)" + Environment.NewLine
+        + "Note: {exp, log, sin, cos}, 100000 evals";
       }
     }
@@ -42,12 +43,12 @@
     protected override string[] AllowedInputVariables { get { return new string[] { "X" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
-    protected override int TrainingPartitionEnd { get { return 21; } }
-    protected override int TestPartitionStart { get { return 21; } }
-    protected override int TestPartitionEnd { get { return 2022; } }
+    protected override int TrainingPartitionEnd { get { return 201; } }
+    protected override int TestPartitionStart { get { return 201; } }
+    protected override int TestPartitionEnd { get { return 402; } }
 
     protected override List<List<double>> GenerateValues() {
       List<List<double>> data = new List<List<double>>();
-      data.Add(ValueGenerator.GenerateSteps(-1, 1, 0.1).ToList());
-      data[0].AddRange(ValueGenerator.GenerateSteps(-1, 1, 0.001));
+      data.Add(ValueGenerator.GenerateSteps(0, 10, 0.05).ToList());
+      data[0].AddRange(ValueGenerator.GenerateSteps(0.05, 10.05, 0.05));
 
       double x;
@@ -55,5 +56,5 @@
       for (int i = 0; i < data[0].Count; i++) {
         x = data[0][i];
-        results.Add(0.3 * x * Math.Sin(2 * Math.PI * x));
+        results.Add(Math.Pow(x, 3) * Math.Exp(-x) * Math.Cos(x) * Math.Sin(x) * (Math.Pow(Math.Sin(x), 2) * Math.Cos(x) - 1));
       }
       data.Add(results);
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionFourteen.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionFourteen.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionFourteen.cs	(revision 8430)
@@ -27,14 +27,14 @@
   public class KeijzerFunctionFourteen : ArtificialRegressionDataDescriptor {
 
-    public override string Name { get { return "Keijzer 14 f(x, y) = 6 * sin(x) * cos(y)"; } }
+    public override string Name { get { return "Keijzer 14 f(x, y) = 8 / (2 + x² + y²)"; } }
     public override string Description {
       get {
         return "Paper: Improving Symbolic Regression with Interval Arithmetic and Linear Scaling" + Environment.NewLine
         + "Authors: Maarten Keijzer" + Environment.NewLine
-        + "Function: f(x, y) = 6 * sin(x) * cos(y)" + Environment.NewLine
+        + "Function: f(x, y) = 8 / (2 + x² + y²)" + Environment.NewLine
         + "range(train): 20 Train cases x,y = rnd(-3, 3)" + Environment.NewLine
         + "range(test): x,y = [-3:0.01:3]" + Environment.NewLine
         + "Function Set: x + y, x * y, 1/x, -x, sqrt(x)" + Environment.NewLine + Environment.NewLine
-        + "Note: Test partition has been adjusted to only 100 random uniformly distributed test cases in the intercal [-3, 3] (not ca. 360000 as described) "
+        + "Note: Test partition has been adjusted to only 100 random uniformly distributed test cases in the interval [-3, 3] (not ca. 360000 as described) "
         + ", but 5000 cases are created";
       }
@@ -46,5 +46,5 @@
     protected override int TrainingPartitionEnd { get { return 20; } }
     protected override int TestPartitionStart { get { return 2500; } }
-    protected override int TestPartitionEnd { get { return 5000; } }
+    protected override int TestPartitionEnd { get { return 2600; } }
 
     protected override List<List<double>> GenerateValues() {
@@ -59,5 +59,5 @@
         x = data[0][i];
         y = data[1][i];
-        results.Add(6 * Math.Sin(x) * Math.Cos(y));
+        results.Add(8 / (2 + Math.Pow(x, 2) + Math.Pow(y, 2)));
       }
       data.Add(results);
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionNine.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionNine.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionNine.cs	(revision 8430)
@@ -27,10 +27,10 @@
   public class KeijzerFunctionNine : ArtificialRegressionDataDescriptor {
 
-    public override string Name { get { return "Keijzer 9 f(x) = sqrt(x)"; } }
+    public override string Name { get { return "Keijzer 9 f(x) = arcsinh(x)  i.e. ln(x + sqrt(x² + 1))"; } }
     public override string Description {
       get {
         return "Paper: Improving Symbolic Regression with Interval Arithmetic and Linear Scaling" + Environment.NewLine
         + "Authors: Maarten Keijzer" + Environment.NewLine
-        + "Function: f(x) = sqrt(x)" + Environment.NewLine
+        + "Function: f(x) = arcsinh(x)  i.e. ln(x + sqrt(x² + 1))" + Environment.NewLine
         + "range(train): x = [0:1:100]" + Environment.NewLine
         + "range(test): x = [0:0.1:100]" + Environment.NewLine
@@ -42,7 +42,7 @@
     protected override string[] AllowedInputVariables { get { return new string[] { "X" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
-    protected override int TrainingPartitionEnd { get { return 101; } }
-    protected override int TestPartitionStart { get { return 101; } }
-    protected override int TestPartitionEnd { get { return 1102; } }
+    protected override int TrainingPartitionEnd { get { return 100; } }
+    protected override int TestPartitionStart { get { return 100; } }
+    protected override int TestPartitionEnd { get { return 1100; } }
 
     protected override List<List<double>> GenerateValues() {
@@ -55,5 +55,5 @@
       for (int i = 0; i < data[0].Count; i++) {
         x = data[0][i];
-        results.Add(Math.Sqrt(x));
+        results.Add(Math.Log(x + Math.Sqrt(x*x + 1)));
       }
       data.Add(results);
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionOne.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionOne.cs	(revision 8430)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionOne.cs	(revision 8430)
@@ -0,0 +1,64 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.Generic;
+using System.Linq;
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class KeijzerFunctionOne : ArtificialRegressionDataDescriptor {
+
+    public override string Name { get { return "Keijzer 1 f(x) = 0.3 * x *sin(2 * PI * x)"; } }
+    public override string Description {
+      get {
+        return "Paper: Improving Symbolic Regression with Interval Arithmetic and Linear Scaling" + Environment.NewLine
+        + "Authors: Maarten Keijzer" + Environment.NewLine
+        + "Function: f(x) = 0.3 * x *sin(2 * PI * x)" + Environment.NewLine
+        + "range(train): x = [-1:0.1:1]" + Environment.NewLine
+        + "range(test): x = [-1:0.001:1]" + Environment.NewLine
+        + "Function Set: x + y, x * y, 1/x, -x, sqrt(x)";
+      }
+    }
+    protected override string TargetVariable { get { return "F"; } }
+    protected override string[] InputVariables { get { return new string[] { "X", "F" }; } }
+    protected override string[] AllowedInputVariables { get { return new string[] { "X" }; } }
+    protected override int TrainingPartitionStart { get { return 0; } }
+    protected override int TrainingPartitionEnd { get { return 21; } }
+    protected override int TestPartitionStart { get { return 21; } }
+    protected override int TestPartitionEnd { get { return 2022; } }
+
+    protected override List<List<double>> GenerateValues() {
+      List<List<double>> data = new List<List<double>>();
+      data.Add(ValueGenerator.GenerateSteps(-1, 1, 0.1).ToList());
+      data[0].AddRange(ValueGenerator.GenerateSteps(-1, 1, 0.001));
+
+      double x;
+      List<double> results = new List<double>();
+      for (int i = 0; i < data[0].Count; i++) {
+        x = data[0][i];
+        results.Add(0.3 * x * Math.Sin(2 * Math.PI * x));
+      }
+      data.Add(results);
+
+      return data;
+    }
+  }
+}
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionSeven.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionSeven.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionSeven.cs	(revision 8430)
@@ -27,13 +27,14 @@
   public class KeijzerFunctionSeven : ArtificialRegressionDataDescriptor {
 
-    public override string Name { get { return "Keijzer 7 f(x) = Sum(1 / i) From 1 to X"; } }
+    public override string Name { get { return "Keijzer 7 f(x) = ln(x)"; } }
     public override string Description {
       get {
         return "Paper: Improving Symbolic Regression with Interval Arithmetic and Linear Scaling" + Environment.NewLine
-        + "Authors: Maarten Keijzer" + Environment.NewLine
-        + "Function: f(x) = (30 * x * y) / ((x - 10)  * y^2)" + Environment.NewLine
-        + "range(train): x = [1:1:50]" + Environment.NewLine
-        + "range(test): x = [1:1:120]" + Environment.NewLine
-        + "Function Set: x + y, x * y, 1/x, -x, sqrt(x)";
+          + "Authors: Maarten Keijzer" + Environment.NewLine
+          + "Function: f(x) = ln(x)" + Environment.NewLine
+          + "range(train): x = [1:1:100]" + Environment.NewLine
+          + "range(test): x = [1:0.1:100]" + Environment.NewLine
+          + "Function Set: x + y, x * y, 1/x, -x, sqrt(x)" + Environment.NewLine + Environment.NewLine
+          + "Note: The problem starts with 1 to avoid log(0), which is minus infinity!";
       }
     }
@@ -42,12 +43,12 @@
     protected override string[] AllowedInputVariables { get { return new string[] { "X" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
-    protected override int TrainingPartitionEnd { get { return 50; } }
-    protected override int TestPartitionStart { get { return 50; } }
-    protected override int TestPartitionEnd { get { return 170; } }
+    protected override int TrainingPartitionEnd { get { return 100; } }
+    protected override int TestPartitionStart { get { return 100; } }
+    protected override int TestPartitionEnd { get { return 1091; } }
 
     protected override List<List<double>> GenerateValues() {
       List<List<double>> data = new List<List<double>>();
-      data.Add(ValueGenerator.GenerateSteps(1, 50, 1).ToList());
-      data[0].AddRange(ValueGenerator.GenerateSteps(1, 120, 1));
+      data.Add(ValueGenerator.GenerateSteps(1, 100, 1).ToList());
+      data[0].AddRange(ValueGenerator.GenerateSteps(1, 100, 0.1));
 
       double x;
@@ -55,5 +56,5 @@
       for (int i = 0; i < data[0].Count; i++) {
         x = data[0][i];
-        results.Add(Enumerable.Range(1, (int)x).Sum(j => 1.0 / j));
+        results.Add(Math.Log(x));
       }
       data.Add(results);
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionSix.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionSix.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionSix.cs	(revision 8430)
@@ -27,36 +27,33 @@
   public class KeijzerFunctionSix : ArtificialRegressionDataDescriptor {
 
-    public override string Name { get { return "Keijzer 6 f(x) = (30 * x * z) / ((x - 10)  * y^2)"; } }
+    public override string Name { get { return "Keijzer 6 f(x) = Sum(1 / i) From 1 to X"; } }
     public override string Description {
       get {
         return "Paper: Improving Symbolic Regression with Interval Arithmetic and Linear Scaling" + Environment.NewLine
         + "Authors: Maarten Keijzer" + Environment.NewLine
-        + "Function: f(x) = (30 * x * z) / ((x - 10)  * y^2)" + Environment.NewLine
-        + "range(train): 1000 points x,z = rnd(-1, 1), y = rnd(1, 2)" + Environment.NewLine
-        + "range(test): 10000 points x,z = rnd(-1, 1), y = rnd(1, 2)" + Environment.NewLine
+        + "Function: f(x) = Sum(1 / i) From 1 to X" + Environment.NewLine
+        + "range(train): x = [1:1:50]" + Environment.NewLine
+        + "range(test): x = [1:1:120]" + Environment.NewLine
         + "Function Set: x + y, x * y, 1/x, -x, sqrt(x)";
       }
     }
     protected override string TargetVariable { get { return "F"; } }
-    protected override string[] InputVariables { get { return new string[] { "X", "Y", "Z", "F" }; } }
-    protected override string[] AllowedInputVariables { get { return new string[] { "X", "Y", "Z" }; } }
+    protected override string[] InputVariables { get { return new string[] { "X", "F" }; } }
+    protected override string[] AllowedInputVariables { get { return new string[] { "X" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
-    protected override int TrainingPartitionEnd { get { return 1000; } }
-    protected override int TestPartitionStart { get { return 1000; } }
-    protected override int TestPartitionEnd { get { return 11000; } }
+    protected override int TrainingPartitionEnd { get { return 50; } }
+    protected override int TestPartitionStart { get { return 50; } }
+    protected override int TestPartitionEnd { get { return 170; } }
 
     protected override List<List<double>> GenerateValues() {
       List<List<double>> data = new List<List<double>>();
-      data.Add(ValueGenerator.GenerateUniformDistributedValues(TestPartitionEnd, -1, 1).ToList());
-      data.Add(ValueGenerator.GenerateUniformDistributedValues(TestPartitionEnd, 1, 2).ToList());
-      data.Add(ValueGenerator.GenerateUniformDistributedValues(TestPartitionEnd, -1, 1).ToList());
+      data.Add(ValueGenerator.GenerateSteps(1, 50, 1).ToList());
+      data[0].AddRange(ValueGenerator.GenerateSteps(1, 120, 1));
 
-      double x, y, z;
+      double x;
       List<double> results = new List<double>();
       for (int i = 0; i < data[0].Count; i++) {
         x = data[0][i];
-        y = data[1][i];
-        z = data[2][i];
-        results.Add((30 * x * z) / ((x - 10) * Math.Pow(y, 2)));
+        results.Add(Enumerable.Range(1, (int)x).Sum(j => 1.0 / j));
       }
       data.Add(results);
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionSixteen.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionSixteen.cs	(revision 7998)
+++ 	(revision )
@@ -1,68 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2012 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.Generic;
-using System.Linq;
-
-namespace HeuristicLab.Problems.Instances.DataAnalysis {
-  public class KeijzerFunctionSixteen : ArtificialRegressionDataDescriptor {
-
-    public override string Name { get { return "Keijzer 16 f(x, y) = x^3 / 5 + y^3 / 2 - y - x"; } }
-    public override string Description {
-      get {
-        return "Paper: Improving Symbolic Regression with Interval Arithmetic and Linear Scaling" + Environment.NewLine
-        + "Authors: Maarten Keijzer" + Environment.NewLine
-        + "Function: f(x, y) = x^3 / 5 + y^3 / 2 - y - x" + Environment.NewLine
-        + "range(train): 20 Training cases x,y = rnd(-3, 3)" + Environment.NewLine
-        + "range(test): x,y = [-3:0.01:3]" + Environment.NewLine
-        + "Function Set: x + y, x * y, 1/x, -x, sqrt(x)" + Environment.NewLine + Environment.NewLine
-        + "Note: Test partition has been adjusted to only 100 random uniformly distributed test cases in the intercal [-3, 3] (not ca. 360000 as described) "
-        + ", but 5000 cases are created";
-      }
-    }
-    protected override string TargetVariable { get { return "F"; } }
-    protected override string[] InputVariables { get { return new string[] { "X", "Y", "F" }; } }
-    protected override string[] AllowedInputVariables { get { return new string[] { "X", "Y" }; } }
-    protected override int TrainingPartitionStart { get { return 0; } }
-    protected override int TrainingPartitionEnd { get { return 20; } }
-    protected override int TestPartitionStart { get { return 2500; } }
-    protected override int TestPartitionEnd { get { return 5000; } }
-
-    protected override List<List<double>> GenerateValues() {
-      List<List<double>> data = new List<List<double>>();
-      for (int i = 0; i < AllowedInputVariables.Count(); i++) {
-        data.Add(ValueGenerator.GenerateUniformDistributedValues(5000, -3, 3).ToList());
-      }
-
-      double x, y;
-      List<double> results = new List<double>();
-      for (int i = 0; i < data[0].Count; i++) {
-        x = data[0][i];
-        y = data[1][i];
-        results.Add(Math.Pow(x, 3) / 5 + Math.Pow(y, 3) / 2 - y - x);
-      }
-      data.Add(results);
-
-      return data;
-    }
-  }
-}
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionTen.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionTen.cs	(revision 8430)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionTen.cs	(revision 8430)
@@ -0,0 +1,72 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.Generic;
+using System.Linq;
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class KeijzerFunctionTen : ArtificialRegressionDataDescriptor {
+
+    public override string Name { get { return "Keijzer 10 f(x, y) = x ^ y"; } }
+    public override string Description {
+      get {
+        return "Paper: Improving Symbolic Regression with Interval Arithmetic and Linear Scaling" + Environment.NewLine
+        + "Authors: Maarten Keijzer" + Environment.NewLine
+        + "Function: f(x, y) = x ^ y" + Environment.NewLine
+        + "range(train): 100 Train cases x,y = rnd(0, 1)" + Environment.NewLine
+        + "range(test): x,y = [0:0.01:1]" + Environment.NewLine
+        + "Function Set: x + y, x * y, 1/x, -x, sqrt(x)";
+      }
+    }
+    protected override string TargetVariable { get { return "F"; } }
+    protected override string[] InputVariables { get { return new string[] { "X", "Y", "F" }; } }
+    protected override string[] AllowedInputVariables { get { return new string[] { "X", "Y" }; } }
+    protected override int TrainingPartitionStart { get { return 0; } }
+    protected override int TrainingPartitionEnd { get { return 100; } }
+    protected override int TestPartitionStart { get { return 100; } }
+    protected override int TestPartitionEnd { get { return 10100; } }
+
+    protected override List<List<double>> GenerateValues() {
+      List<List<double>> data = new List<List<double>>();
+
+      List<double> oneVariableTestData = ValueGenerator.GenerateSteps(0, 1, 0.01).ToList();
+      List<List<double>> testData = new List<List<double>>() { oneVariableTestData, oneVariableTestData };
+
+      var combinations = ValueGenerator.GenerateAllCombinationsOfValuesInLists(testData).ToList<IEnumerable<double>>();
+      for (int i = 0; i < AllowedInputVariables.Count(); i++) {
+        data.Add(ValueGenerator.GenerateUniformDistributedValues(100, 0, 1).ToList());
+        data[i].AddRange(combinations[i]);
+      }
+
+      double x, y;
+      List<double> results = new List<double>();
+      for (int i = 0; i < data[0].Count; i++) {
+        x = data[0][i];
+        y = data[1][i];
+        results.Add(Math.Pow(x, y));
+      }
+      data.Add(results);
+
+      return data;
+    }
+  }
+}
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionThirteen.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionThirteen.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionThirteen.cs	(revision 8430)
@@ -27,14 +27,14 @@
   public class KeijzerFunctionThirteen : ArtificialRegressionDataDescriptor {
 
-    public override string Name { get { return "Keijzer 13 f(x, y) = x^4 - x^3 + y^2 / 2 - y"; } }
+    public override string Name { get { return "Keijzer 13 f(x, y) = 6 * sin(x) * cos(y)"; } }
     public override string Description {
       get {
         return "Paper: Improving Symbolic Regression with Interval Arithmetic and Linear Scaling" + Environment.NewLine
         + "Authors: Maarten Keijzer" + Environment.NewLine
-        + "Function: f(x, y) = x^4 - x^3 + y^2 / 2 - y" + Environment.NewLine
-        + "range(train): 20 Training cases x,y = rnd(-3, 3)" + Environment.NewLine
+        + "Function: f(x, y) = 6 * sin(x) * cos(y)" + Environment.NewLine
+        + "range(train): 20 Train cases x,y = rnd(-3, 3)" + Environment.NewLine
         + "range(test): x,y = [-3:0.01:3]" + Environment.NewLine
         + "Function Set: x + y, x * y, 1/x, -x, sqrt(x)" + Environment.NewLine + Environment.NewLine
-        + "Note: Test partition has been adjusted to only 100 random uniformly distributed test cases in the intercal [-3, 3] (not ca. 360000 as described) "
+        + "Note: Test partition has been adjusted to only 100 random uniformly distributed test cases in the interval [-3, 3] (not ca. 360000 as described) "
         + ", but 5000 cases are created";
       }
@@ -46,5 +46,5 @@
     protected override int TrainingPartitionEnd { get { return 20; } }
     protected override int TestPartitionStart { get { return 2500; } }
-    protected override int TestPartitionEnd { get { return 5000; } }
+    protected override int TestPartitionEnd { get { return 2600; } }
 
     protected override List<List<double>> GenerateValues() {
@@ -59,5 +59,5 @@
         x = data[0][i];
         y = data[1][i];
-        results.Add(Math.Pow(x, 4) - Math.Pow(x, 3) + Math.Pow(y, 2) / 2 - y);
+        results.Add(6 * Math.Sin(x) * Math.Cos(y));
       }
       data.Add(results);
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionThree.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionThree.cs	(revision 8430)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionThree.cs	(revision 8430)
@@ -0,0 +1,64 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.Generic;
+using System.Linq;
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class KeijzerFunctionThree : ArtificialRegressionDataDescriptor {
+
+    public override string Name { get { return "Keijzer 3 f(x) = 0.3 * x *sin(2 * PI * x)"; } }
+    public override string Description {
+      get {
+        return "Paper: Improving Symbolic Regression with Interval Arithmetic and Linear Scaling" + Environment.NewLine
+        + "Authors: Maarten Keijzer" + Environment.NewLine
+        + "Function: f(x) = 0.3 * x *sin(2 * PI * x)" + Environment.NewLine
+        + "range(train): x = [-3:0.1:3]" + Environment.NewLine
+        + "range(test): x = [-3:0.001:3]" + Environment.NewLine
+        + "Function Set: x + y, x * y, 1/x, -x, sqrt(x)";
+      }
+    }
+    protected override string TargetVariable { get { return "F"; } }
+    protected override string[] InputVariables { get { return new string[] { "X", "F" }; } }
+    protected override string[] AllowedInputVariables { get { return new string[] { "X" }; } }
+    protected override int TrainingPartitionStart { get { return 0; } }
+    protected override int TrainingPartitionEnd { get { return 61; } }
+    protected override int TestPartitionStart { get { return 61; } }
+    protected override int TestPartitionEnd { get { return 6062; } }
+
+    protected override List<List<double>> GenerateValues() {
+      List<List<double>> data = new List<List<double>>();
+      data.Add(ValueGenerator.GenerateSteps(-3, 3, 0.1).ToList());
+      data[0].AddRange(ValueGenerator.GenerateSteps(-3, 3, 0.001));
+
+      double x;
+      List<double> results = new List<double>();
+      for (int i = 0; i < data[0].Count; i++) {
+        x = data[0][i];
+        results.Add(0.3 * x * Math.Sin(2 * Math.PI * x));
+      }
+      data.Add(results);
+
+      return data;
+    }
+  }
+}
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionTwelve.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionTwelve.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionTwelve.cs	(revision 8430)
@@ -27,14 +27,14 @@
   public class KeijzerFunctionTwelve : ArtificialRegressionDataDescriptor {
 
-    public override string Name { get { return "Keijzer 12 f(x, y) = xy + sin((x - 1)(y - 1))"; } }
+    public override string Name { get { return "Keijzer 12 f(x, y) = x^4 - x³ + y² / 2 - y"; } }
     public override string Description {
       get {
         return "Paper: Improving Symbolic Regression with Interval Arithmetic and Linear Scaling" + Environment.NewLine
         + "Authors: Maarten Keijzer" + Environment.NewLine
-        + "Function: f(x, y) = xy + sin((x - 1)(y - 1))" + Environment.NewLine
+        + "Function: f(x, y) = x^4 - x³ + y² / 2 - y" + Environment.NewLine
         + "range(train): 20 Training cases x,y = rnd(-3, 3)" + Environment.NewLine
         + "range(test): x,y = [-3:0.01:3]" + Environment.NewLine
         + "Function Set: x + y, x * y, 1/x, -x, sqrt(x)" + Environment.NewLine + Environment.NewLine
-        + "Note: Test partition has been adjusted to only 100 random uniformly distributed test cases in the intercal [-3, 3] (not ca. 360000 as described) "
+        + "Note: Test partition has been adjusted to only 100 random uniformly distributed test cases in the interval [-3, 3] (not ca. 360000 as described) "
         + ", but 5000 cases are created";
       }
@@ -46,5 +46,5 @@
     protected override int TrainingPartitionEnd { get { return 20; } }
     protected override int TestPartitionStart { get { return 2500; } }
-    protected override int TestPartitionEnd { get { return 5000; } }
+    protected override int TestPartitionEnd { get { return 2600; } }
 
     protected override List<List<double>> GenerateValues() {
@@ -59,5 +59,5 @@
         x = data[0][i];
         y = data[1][i];
-        results.Add(x * y + Math.Sin((x - 1) * (y - 1)));
+        results.Add(Math.Pow(x, 4) - Math.Pow(x, 3) + Math.Pow(y, 2) / 2 - y);
       }
       data.Add(results);
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionTwo.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionTwo.cs	(revision 8430)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionTwo.cs	(revision 8430)
@@ -0,0 +1,64 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.Generic;
+using System.Linq;
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class KeijzerFunctionTwo : ArtificialRegressionDataDescriptor {
+
+    public override string Name { get { return "Keijzer 2 f(x) = 0.3 * x *sin(2 * PI * x)"; } }
+    public override string Description {
+      get {
+        return "Paper: Improving Symbolic Regression with Interval Arithmetic and Linear Scaling" + Environment.NewLine
+        + "Authors: Maarten Keijzer" + Environment.NewLine
+        + "Function: f(x) = 0.3 * x *sin(2 * PI * x)" + Environment.NewLine
+        + "range(train): x = [-2:0.1:2]" + Environment.NewLine
+        + "range(test): x = [-2:0.001:2]" + Environment.NewLine
+        + "Function Set: x + y, x * y, 1/x, -x, sqrt(x)";
+      }
+    }
+    protected override string TargetVariable { get { return "F"; } }
+    protected override string[] InputVariables { get { return new string[] { "X", "F" }; } }
+    protected override string[] AllowedInputVariables { get { return new string[] { "X" }; } }
+    protected override int TrainingPartitionStart { get { return 0; } }
+    protected override int TrainingPartitionEnd { get { return 41; } }
+    protected override int TestPartitionStart { get { return 41; } }
+    protected override int TestPartitionEnd { get { return 4042; } }
+
+    protected override List<List<double>> GenerateValues() {
+      List<List<double>> data = new List<List<double>>();
+      data.Add(ValueGenerator.GenerateSteps(-2, 2, 0.1).ToList());
+      data[0].AddRange(ValueGenerator.GenerateSteps(-2, 2, 0.001));
+
+      double x;
+      List<double> results = new List<double>();
+      for (int i = 0; i < data[0].Count; i++) {
+        x = data[0][i];
+        results.Add(0.3 * x * Math.Sin(2 * Math.PI * x));
+      }
+      data.Add(results);
+
+      return data;
+    }
+  }
+}
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerInstanceProvider.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerInstanceProvider.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerInstanceProvider.cs	(revision 8430)
@@ -32,12 +32,15 @@
     }
     public override Uri WebLink {
-      get { return new Uri("http://groups.csail.mit.edu/EVO-DesignOpt/GPBenchmarks/"); }
+      get { return new Uri("http://www.gpbenchmarks.org/wiki/index.php?title=Problem_Classification#Keijzer"); }
     }
     public override string ReferencePublication {
-      get { return ""; }
+      get { return "McDermott et al., 2012 \"Genetic Programming Needs Better Benchmarks\", in Proc. of GECCO 2012."; }
     }
 
     public override IEnumerable<IDataDescriptor> GetDataDescriptors() {
       List<IDataDescriptor> descriptorList = new List<IDataDescriptor>();
+      descriptorList.Add(new KeijzerFunctionOne());
+      descriptorList.Add(new KeijzerFunctionTwo());
+      descriptorList.Add(new KeijzerFunctionThree());
       descriptorList.Add(new KeijzerFunctionFour());
       descriptorList.Add(new KeijzerFunctionFive());
@@ -46,4 +49,5 @@
       descriptorList.Add(new KeijzerFunctionEight());
       descriptorList.Add(new KeijzerFunctionNine());
+      descriptorList.Add(new KeijzerFunctionTen());
       descriptorList.Add(new KeijzerFunctionEleven());
       descriptorList.Add(new KeijzerFunctionTwelve());
@@ -51,5 +55,4 @@
       descriptorList.Add(new KeijzerFunctionFourteen());
       descriptorList.Add(new KeijzerFunctionFifteen());
-      descriptorList.Add(new KeijzerFunctionSixteen());
       return descriptorList;
     }
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionEight.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionEight.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionEight.cs	(revision 8430)
@@ -33,8 +33,7 @@
         + "Authors: Michael F. Korns" + Environment.NewLine
         + "Function: y = 6.87 + (11 * sqrt(7.23 * X0 * X3 * X4))" + Environment.NewLine
-        + "Real Numbers: 3.45, -.982, 100.389, and all other real constants" + Environment.NewLine
-        + "Row Features: x1, x2, x9, and all other features" + Environment.NewLine
-        + "Binary Operators: +, -, *, /" + Environment.NewLine
-        + "Unary Operators: sqrt, square, cube, cos, sin, tan, tanh, log, exp" + Environment.NewLine
+        + "Binary Operators: +, -, *, % (protected division)" + Environment.NewLine
+        + "Unary Operators: sqrt, square, cube, cos, sin, tan, tanh, ln(|x|) (protected log), exp" + Environment.NewLine
+        + "Constants: random finit 64-bit IEEE double" + Environment.NewLine
         + "\"Our testing regimen uses only statistical best practices out-of-sample testing techniques. "
         + "We test each of the test cases on matrices of 10000 rows by 1 to 5 columns with no noise. "
@@ -48,13 +47,15 @@
     protected override string[] AllowedInputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
-    protected override int TrainingPartitionEnd { get { return 5000; } }
-    protected override int TestPartitionStart { get { return 5000; } }
-    protected override int TestPartitionEnd { get { return 10000; } }
+    protected override int TrainingPartitionEnd { get { return 10000; } }
+    protected override int TestPartitionStart { get { return 10000; } }
+    protected override int TestPartitionEnd { get { return 20000; } }
 
     protected override List<List<double>> GenerateValues() {
       List<List<double>> data = new List<List<double>>();
-      for (int i = 0; i < AllowedInputVariables.Count(); i++) {
-        data.Add(ValueGenerator.GenerateUniformDistributedValues(TestPartitionEnd, 0, 50).ToList());
-      }
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(TestPartitionEnd, 0, 50).ToList()); // note: range is only [0,50] to prevent NaN values (deviates from gp benchmark paper)
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(TestPartitionEnd, -50, 50).ToList());
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(TestPartitionEnd, -50, 50).ToList());
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(TestPartitionEnd, 0, 50).ToList()); // note: range is only [0,50] to prevent NaN values (deviates from gp benchmark paper)
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(TestPartitionEnd, 0, 50).ToList()); // note: range is only [0,50] to prevent NaN values (deviates from gp benchmark paper)
 
       double x0, x3, x4;
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionEleven.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionEleven.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionEleven.cs	(revision 8430)
@@ -33,8 +33,7 @@
         + "Authors: Michael F. Korns" + Environment.NewLine
         + "Function: y = 6.87 + (11 * cos(7.23 * X0 * X0 * X0))" + Environment.NewLine
-        + "Real Numbers: 3.45, -.982, 100.389, and all other real constants" + Environment.NewLine
-        + "Row Features: x1, x2, x9, and all other features" + Environment.NewLine
-        + "Binary Operators: +, -, *, /" + Environment.NewLine
-        + "Unary Operators: sqrt, square, cube, cos, sin, tan, tanh, log, exp" + Environment.NewLine
+        + "Binary Operators: +, -, *, % (protected division)" + Environment.NewLine
+        + "Unary Operators: sqrt, square, cube, cos, sin, tan, tanh, ln(|x|) (protected log), exp" + Environment.NewLine
+        + "Constants: random finit 64-bit IEEE double" + Environment.NewLine
         + "\"Our testing regimen uses only statistical best practices out-of-sample testing techniques. "
         + "We test each of the test cases on matrices of 10000 rows by 1 to 5 columns with no noise. "
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionFive.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionFive.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionFive.cs	(revision 8430)
@@ -33,8 +33,7 @@
         + "Authors: Michael F. Korns" + Environment.NewLine
         + "Function: y = 3.0 + (2.13 * log(X4))" + Environment.NewLine
-        + "Real Numbers: 3.45, -.982, 100.389, and all other real constants" + Environment.NewLine
-        + "Row Features: x1, x2, x9, and all other features" + Environment.NewLine
-        + "Binary Operators: +, -, *, /" + Environment.NewLine
-        + "Unary Operators: sqrt, square, cube, cos, sin, tan, tanh, log, exp" + Environment.NewLine
+        + "Binary Operators: +, -, *, % (protected division)" + Environment.NewLine
+        + "Unary Operators: sqrt, square, cube, cos, sin, tan, tanh, ln(|x|) (protected log), exp" + Environment.NewLine
+        + "Constants: random finit 64-bit IEEE double" + Environment.NewLine
         + "\"Our testing regimen uses only statistical best practices out-of-sample testing techniques. "
         + "We test each of the test cases on matrices of 10000 rows by 1 to 5 columns with no noise. "
@@ -48,13 +47,15 @@
     protected override string[] AllowedInputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
-    protected override int TrainingPartitionEnd { get { return 5000; } }
-    protected override int TestPartitionStart { get { return 5000; } }
-    protected override int TestPartitionEnd { get { return 10000; } }
+    protected override int TrainingPartitionEnd { get { return 10000; } }
+    protected override int TestPartitionStart { get { return 10000; } }
+    protected override int TestPartitionEnd { get { return 20000; } }
 
     protected override List<List<double>> GenerateValues() {
       List<List<double>> data = new List<List<double>>();
-      for (int i = 0; i < AllowedInputVariables.Count(); i++) {
-        data.Add(ValueGenerator.GenerateUniformDistributedValues(TestPartitionEnd, 0, 50).ToList());
-      }
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(TestPartitionEnd, -50, 50).ToList());
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(TestPartitionEnd, -50, 50).ToList());
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(TestPartitionEnd, -50, 50).ToList());
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(TestPartitionEnd, -50, 50).ToList());
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(TestPartitionEnd, 0, 50).ToList()); // note: range is only [0,50] to prevent NaN values (deviates from gp benchmark paper)
 
       double x4;
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionFiveteen.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionFiveteen.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionFiveteen.cs	(revision 8430)
@@ -27,14 +27,13 @@
   public class KornsFunctionFiveteen : ArtificialRegressionDataDescriptor {
 
-    public override string Name { get { return "Korns 15 y = 12.0 - (6.0 * ((tan(X0) / exp(X1)) * (log(X2) - tan(X3))))"; } }
+    public override string Name { get { return "Korns 15 y = 12.0 - (6.0 * ((tan(X0) / exp(X1)) * (ln(X2) - tan(X3))))"; } }
     public override string Description {
       get {
         return "Paper: Accuracy in Symbolic Regression" + Environment.NewLine
         + "Authors: Michael F. Korns" + Environment.NewLine
-        + "Function: y = 12.0 - (6.0 * ((tan(X0) / exp(X1)) * (log(X2) - tan(X3))))" + Environment.NewLine
-        + "Real Numbers: 3.45, -.982, 100.389, and all other real constants" + Environment.NewLine
-        + "Row Features: x1, x2, x9, and all other features" + Environment.NewLine
-        + "Binary Operators: +, -, *, /" + Environment.NewLine
-        + "Unary Operators: sqrt, square, cube, cos, sin, tan, tanh, log, exp" + Environment.NewLine
+        + "Function: y = 12.0 - (6.0 * ((tan(X0) / exp(X1)) * (ln(X2) - tan(X3))))" + Environment.NewLine
+        + "Binary Operators: +, -, *, % (protected division)" + Environment.NewLine
+        + "Unary Operators: sqrt, square, cube, cos, sin, tan, tanh, ln(|x|) (protected log), exp" + Environment.NewLine
+        + "Constants: random finit 64-bit IEEE double" + Environment.NewLine
         + "\"Our testing regimen uses only statistical best practices out-of-sample testing techniques. "
         + "We test each of the test cases on matrices of 10000 rows by 1 to 5 columns with no noise. "
@@ -48,13 +47,15 @@
     protected override string[] AllowedInputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
-    protected override int TrainingPartitionEnd { get { return 5000; } }
-    protected override int TestPartitionStart { get { return 5000; } }
-    protected override int TestPartitionEnd { get { return 10000; } }
+    protected override int TrainingPartitionEnd { get { return 10000; } }
+    protected override int TestPartitionStart { get { return 10000; } }
+    protected override int TestPartitionEnd { get { return 20000; } }
 
     protected override List<List<double>> GenerateValues() {
       List<List<double>> data = new List<List<double>>();
-      for (int i = 0; i < AllowedInputVariables.Count(); i++) {
-        data.Add(ValueGenerator.GenerateUniformDistributedValues(TestPartitionEnd, 0, 50).ToList());
-      }
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(TestPartitionEnd, -50, 50).ToList());
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(TestPartitionEnd, -50, 50).ToList());
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(TestPartitionEnd, 0, 50).ToList()); // note: range is only [0,50] to prevent NaN values (deviates from gp benchmark paper)
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(TestPartitionEnd, -50, 50).ToList());
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(TestPartitionEnd, -50, 50).ToList());
 
       double x0, x1, x2, x3;
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionFour.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionFour.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionFour.cs	(revision 8430)
@@ -33,8 +33,7 @@
         + "Authors: Michael F. Korns" + Environment.NewLine
         + "Function: y = -2.3 + (0.13 * sin(X2))" + Environment.NewLine
-        + "Real Numbers: 3.45, -.982, 100.389, and all other real constants" + Environment.NewLine
-        + "Row Features: x1, x2, x9, and all other features" + Environment.NewLine
-        + "Binary Operators: +, -, *, /" + Environment.NewLine
-        + "Unary Operators: sqrt, square, cube, cos, sin, tan, tanh, log, exp" + Environment.NewLine
+        + "Binary Operators: +, -, *, % (protected division)" + Environment.NewLine
+        + "Unary Operators: sqrt, square, cube, cos, sin, tan, tanh, ln(|x|) (protected log), exp" + Environment.NewLine
+        + "Constants: random finit 64-bit IEEE double" + Environment.NewLine
         + "\"Our testing regimen uses only statistical best practices out-of-sample testing techniques. "
         + "We test each of the test cases on matrices of 10000 rows by 1 to 5 columns with no noise. "
@@ -47,7 +46,8 @@
     protected override string[] AllowedInputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
-    protected override int TrainingPartitionEnd { get { return 5000; } }
-    protected override int TestPartitionStart { get { return 5000; } }
-    protected override int TestPartitionEnd { get { return 10000; } }
+    protected override int TrainingPartitionEnd { get { return 10000; } }
+    protected override int TestPartitionStart { get { return 10000; } }
+    protected override int TestPartitionEnd { get { return 20000; } }
+
 
     protected override List<List<double>> GenerateValues() {
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionFourteen.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionFourteen.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionFourteen.cs	(revision 8430)
@@ -33,8 +33,7 @@
         + "Authors: Michael F. Korns" + Environment.NewLine
         + "Function: y = 22.0 + (4.2 * ((cos(X0) - tan(X1)) * (tanh(X2) / sin(X3))))" + Environment.NewLine
-        + "Real Numbers: 3.45, -.982, 100.389, and all other real constants" + Environment.NewLine
-        + "Row Features: x1, x2, x9, and all other features" + Environment.NewLine
-        + "Binary Operators: +, -, *, /" + Environment.NewLine
-        + "Unary Operators: sqrt, square, cube, cos, sin, tan, tanh, log, exp" + Environment.NewLine
+        + "Binary Operators: +, -, *, % (protected division)" + Environment.NewLine
+        + "Unary Operators: sqrt, square, cube, cos, sin, tan, tanh, ln(|x|) (protected log), exp" + Environment.NewLine
+        + "Constants: random finit 64-bit IEEE double" + Environment.NewLine
         + "\"Our testing regimen uses only statistical best practices out-of-sample testing techniques. "
         + "We test each of the test cases on matrices of 10000 rows by 1 to 5 columns with no noise. "
@@ -47,7 +46,7 @@
     protected override string[] AllowedInputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
-    protected override int TrainingPartitionEnd { get { return 5000; } }
-    protected override int TestPartitionStart { get { return 5000; } }
-    protected override int TestPartitionEnd { get { return 10000; } }
+    protected override int TrainingPartitionEnd { get { return 10000; } }
+    protected override int TestPartitionStart { get { return 10000; } }
+    protected override int TestPartitionEnd { get { return 20000; } }
 
     protected override List<List<double>> GenerateValues() {
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionNine.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionNine.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionNine.cs	(revision 8430)
@@ -27,14 +27,13 @@
   public class KornsFunctionNine : ArtificialRegressionDataDescriptor {
 
-    public override string Name { get { return "Korns 9 y = ((sqrt(X0) / log(X1)) * (exp(X2) / square(X3)))"; } }
+    public override string Name { get { return "Korns 9 y = ((sqrt(X0) / log(X1)) * (exp(X2) / X3²)"; } }
     public override string Description {
       get {
         return "Paper: Accuracy in Symbolic Regression" + Environment.NewLine
         + "Authors: Michael F. Korns" + Environment.NewLine
-        + "Function: y = ((sqrt(X0) / log(X1)) * (exp(X2) / square(X3)))" + Environment.NewLine
-        + "Real Numbers: 3.45, -.982, 100.389, and all other real constants" + Environment.NewLine
-        + "Row Features: x1, x2, x9, and all other features" + Environment.NewLine
-        + "Binary Operators: +, -, *, /" + Environment.NewLine
-        + "Unary Operators: sqrt, square, cube, cos, sin, tan, tanh, log, exp" + Environment.NewLine
+        + "Function: y = (sqrt(X0) / log(X1)) * (exp(X2) / X3²)" + Environment.NewLine
+        + "Binary Operators: +, -, *, % (protected division)" + Environment.NewLine
+        + "Unary Operators: sqrt, square, cube, cos, sin, tan, tanh, ln(|x|) (protected log), exp" + Environment.NewLine
+        + "Constants: random finit 64-bit IEEE double" + Environment.NewLine
         + "\"Our testing regimen uses only statistical best practices out-of-sample testing techniques. "
         + "We test each of the test cases on matrices of 10000 rows by 1 to 5 columns with no noise. "
@@ -48,13 +47,15 @@
     protected override string[] AllowedInputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
-    protected override int TrainingPartitionEnd { get { return 5000; } }
-    protected override int TestPartitionStart { get { return 5000; } }
-    protected override int TestPartitionEnd { get { return 10000; } }
+    protected override int TrainingPartitionEnd { get { return 10000; } }
+    protected override int TestPartitionStart { get { return 10000; } }
+    protected override int TestPartitionEnd { get { return 20000; } }
 
     protected override List<List<double>> GenerateValues() {
       List<List<double>> data = new List<List<double>>();
-      for (int i = 0; i < AllowedInputVariables.Count(); i++) {
-        data.Add(ValueGenerator.GenerateUniformDistributedValues(TestPartitionEnd, 0, 50).ToList());
-      }
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(TestPartitionEnd, 0, 50).ToList()); // note: range is only [0,50] to prevent NaN values (deviates from gp benchmark paper)
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(TestPartitionEnd, 0, 50).ToList()); // note: range is only [0,50] to prevent NaN values (deviates from gp benchmark paper)
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(TestPartitionEnd, -50, 50).ToList()); 
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(TestPartitionEnd, -50, 50).ToList()); 
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(TestPartitionEnd, -50, 50).ToList()); 
 
       double x0, x1, x2, x3;
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionOne.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionOne.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionOne.cs	(revision 8430)
@@ -33,8 +33,8 @@
         + "Authors: Michael F. Korns" + Environment.NewLine
         + "Function: y = 1.57 + (24.3 * X3)" + Environment.NewLine
-        + "Real Numbers: 3.45, -.982, 100.389, and all other real constants" + Environment.NewLine
         + "Row Features: x1, x2, x9, and all other features" + Environment.NewLine
-        + "Binary Operators: +, -, *, /" + Environment.NewLine
-        + "Unary Operators: sqrt, square, cube, cos, sin, tan, tanh, log, exp" + Environment.NewLine
+        + "Binary Operators: +, -, *, % (protected division)" + Environment.NewLine
+        + "Unary Operators: sqrt, square, cube, cos, sin, tan, tanh, ln(|x|) (protected log), exp" + Environment.NewLine
+        + "Constants: random finit 64-bit IEEE double" + Environment.NewLine
         + "\"Our testing regimen uses only statistical best practices out-of-sample testing techniques. "
         + "We test each of the test cases on matrices of 10000 rows by 1 to 5 columns with no noise. "
@@ -47,7 +47,7 @@
     protected override string[] AllowedInputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
-    protected override int TrainingPartitionEnd { get { return 5000; } }
-    protected override int TestPartitionStart { get { return 5000; } }
-    protected override int TestPartitionEnd { get { return 10000; } }
+    protected override int TrainingPartitionEnd { get { return 10000; } }
+    protected override int TestPartitionStart { get { return 10000; } }
+    protected override int TestPartitionEnd { get { return 20000; } }
 
     protected override List<List<double>> GenerateValues() {
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionSeven.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionSeven.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionSeven.cs	(revision 8430)
@@ -33,8 +33,7 @@
         + "Authors: Michael F. Korns" + Environment.NewLine
         + "Function: y = 213.80940889 - (213.80940889 * exp(-0.54723748542 * X0))" + Environment.NewLine
-        + "Real Numbers: 3.45, -.982, 100.389, and all other real constants" + Environment.NewLine
-        + "Row Features: x1, x2, x9, and all other features" + Environment.NewLine
-        + "Binary Operators: +, -, *, /" + Environment.NewLine
-        + "Unary Operators: sqrt, square, cube, cos, sin, tan, tanh, log, exp" + Environment.NewLine
+        + "Binary Operators: +, -, *, % (protected division)" + Environment.NewLine
+        + "Unary Operators: sqrt, square, cube, cos, sin, tan, tanh, ln(|x|) (protected log), exp" + Environment.NewLine
+        + "Constants: random finit 64-bit IEEE double" + Environment.NewLine
         + "\"Our testing regimen uses only statistical best practices out-of-sample testing techniques. "
         + "We test each of the test cases on matrices of 10000 rows by 1 to 5 columns with no noise. "
@@ -47,7 +46,7 @@
     protected override string[] AllowedInputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
-    protected override int TrainingPartitionEnd { get { return 5000; } }
-    protected override int TestPartitionStart { get { return 5000; } }
-    protected override int TestPartitionEnd { get { return 10000; } }
+    protected override int TrainingPartitionEnd { get { return 10000; } }
+    protected override int TestPartitionStart { get { return 10000; } }
+    protected override int TestPartitionEnd { get { return 20000; } }
 
     protected override List<List<double>> GenerateValues() {
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionSix.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionSix.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionSix.cs	(revision 8430)
@@ -33,8 +33,7 @@
         + "Authors: Michael F. Korns" + Environment.NewLine
         + "Function: y = 1.3 + (0.13 * sqrt(X0))" + Environment.NewLine
-        + "Real Numbers: 3.45, -.982, 100.389, and all other real constants" + Environment.NewLine
-        + "Row Features: x1, x2, x9, and all other features" + Environment.NewLine
-        + "Binary Operators: +, -, *, /" + Environment.NewLine
-        + "Unary Operators: sqrt, square, cube, cos, sin, tan, tanh, log, exp" + Environment.NewLine
+        + "Binary Operators: +, -, *, % (protected division)" + Environment.NewLine
+        + "Unary Operators: sqrt, square, cube, cos, sin, tan, tanh, ln(|x|) (protected log), exp" + Environment.NewLine
+        + "Constants: random finit 64-bit IEEE double" + Environment.NewLine
         + "\"Our testing regimen uses only statistical best practices out-of-sample testing techniques. "
         + "We test each of the test cases on matrices of 10000 rows by 1 to 5 columns with no noise. "
@@ -48,13 +47,15 @@
     protected override string[] AllowedInputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
-    protected override int TrainingPartitionEnd { get { return 5000; } }
-    protected override int TestPartitionStart { get { return 5000; } }
-    protected override int TestPartitionEnd { get { return 10000; } }
+    protected override int TrainingPartitionEnd { get { return 10000; } }
+    protected override int TestPartitionStart { get { return 10000; } }
+    protected override int TestPartitionEnd { get { return 20000; } }
 
     protected override List<List<double>> GenerateValues() {
       List<List<double>> data = new List<List<double>>();
-      for (int i = 0; i < AllowedInputVariables.Count(); i++) {
-        data.Add(ValueGenerator.GenerateUniformDistributedValues(TestPartitionEnd, 0, 50).ToList());
-      }
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(TestPartitionEnd, 0, 50).ToList()); // note: range is only [0,50] to prevent NaN values (deviates from gp benchmark paper)
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(TestPartitionEnd, -50, 50).ToList()); 
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(TestPartitionEnd, -50, 50).ToList());
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(TestPartitionEnd, -50, 50).ToList());
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(TestPartitionEnd, -50, 50).ToList()); 
 
       double x0;
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionTen.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionTen.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionTen.cs	(revision 8430)
@@ -27,14 +27,13 @@
   public class KornsFunctionTen : ArtificialRegressionDataDescriptor {
 
-    public override string Name { get { return "Korns 10 y = 0.81 + (24.3 * (((2.0 * X1) + (3.0 * square(X2))) / ((4.0 * cube(X3)) + (5.0 * quart(X4)))))"; } }
+    public override string Name { get { return "Korns 10 y = 0.81 + (24.3 * (((2.0 * X1) + (3.0 * X2²)) / ((4.0 * X3³) + (5.0 * X4^4))))"; } }
     public override string Description {
       get {
         return "Paper: Accuracy in Symbolic Regression" + Environment.NewLine
         + "Authors: Michael F. Korns" + Environment.NewLine
-        + "Function: y = 0.81 + (24.3 * (((2.0 * X1) + (3.0 * square(X2))) / ((4.0 * cube(X3)) + (5.0 * quart(X4)))))" + Environment.NewLine
-        + "Real Numbers: 3.45, -.982, 100.389, and all other real constants" + Environment.NewLine
-        + "Row Features: x1, x2, x9, and all other features" + Environment.NewLine
-        + "Binary Operators: +, -, *, /" + Environment.NewLine
-        + "Unary Operators: sqrt, square, cube, cos, sin, tan, tanh, log, exp" + Environment.NewLine
+        + "Function: y =  0.81 + (24.3 * (((2.0 * X1) + (3.0 * X2²)) / ((4.0 * X3³) + (5.0 * X4^4))))" + Environment.NewLine
+        + "Binary Operators: +, -, *, % (protected division)" + Environment.NewLine
+        + "Unary Operators: sqrt, square, cube, cos, sin, tan, tanh, ln(|x|) (protected log), exp" + Environment.NewLine
+        + "Constants: random finit 64-bit IEEE double" + Environment.NewLine
         + "\"Our testing regimen uses only statistical best practices out-of-sample testing techniques. "
         + "We test each of the test cases on matrices of 10000 rows by 1 to 5 columns with no noise. "
@@ -47,7 +46,7 @@
     protected override string[] AllowedInputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
-    protected override int TrainingPartitionEnd { get { return 5000; } }
-    protected override int TestPartitionStart { get { return 5000; } }
-    protected override int TestPartitionEnd { get { return 10000; } }
+    protected override int TrainingPartitionEnd { get { return 10000; } }
+    protected override int TestPartitionStart { get { return 10000; } }
+    protected override int TestPartitionEnd { get { return 20000; } }
 
     protected override List<List<double>> GenerateValues() {
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionThirteen.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionThirteen.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionThirteen.cs	(revision 8430)
@@ -33,8 +33,7 @@
         + "Authors: Michael F. Korns" + Environment.NewLine
         + "Function: y = 32.0 - (3.0 * ((tan(X0) / tan(X1)) * (tan(X2) / tan(X3))))" + Environment.NewLine
-        + "Real Numbers: 3.45, -.982, 100.389, and all other real constants" + Environment.NewLine
-        + "Row Features: x1, x2, x9, and all other features" + Environment.NewLine
-        + "Binary Operators: +, -, *, /" + Environment.NewLine
-        + "Unary Operators: sqrt, square, cube, cos, sin, tan, tanh, log, exp" + Environment.NewLine
+        + "Binary Operators: +, -, *, % (protected division)" + Environment.NewLine
+        + "Unary Operators: sqrt, square, cube, cos, sin, tan, tanh, ln(|x|) (protected log), exp" + Environment.NewLine
+        + "Constants: random finit 64-bit IEEE double" + Environment.NewLine
         + "\"Our testing regimen uses only statistical best practices out-of-sample testing techniques. "
         + "We test each of the test cases on matrices of 10000 rows by 1 to 5 columns with no noise. "
@@ -47,7 +46,7 @@
     protected override string[] AllowedInputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
-    protected override int TrainingPartitionEnd { get { return 5000; } }
-    protected override int TestPartitionStart { get { return 5000; } }
-    protected override int TestPartitionEnd { get { return 10000; } }
+    protected override int TrainingPartitionEnd { get { return 10000; } }
+    protected override int TestPartitionStart { get { return 10000; } }
+    protected override int TestPartitionEnd { get { return 20000; } }
 
     protected override List<List<double>> GenerateValues() {
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionThree.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionThree.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionThree.cs	(revision 8430)
@@ -33,8 +33,7 @@
         + "Authors: Michael F. Korns" + Environment.NewLine
         + "Function: y = 1.57 + (24.3 * X3)" + Environment.NewLine
-        + "Real Numbers: 3.45, -.982, 100.389, and all other real constants" + Environment.NewLine
-        + "Row Features: x1, x2, x9, and all other features" + Environment.NewLine
-        + "Binary Operators: +, -, *, /" + Environment.NewLine
-        + "Unary Operators: sqrt, square, cube, cos, sin, tan, tanh, log, exp" + Environment.NewLine
+        + "Binary Operators: +, -, *, % (protected division)" + Environment.NewLine
+        + "Unary Operators: sqrt, square, cube, cos, sin, tan, tanh, ln(|x|) (protected log), exp" + Environment.NewLine
+        + "Constants: random finit 64-bit IEEE double" + Environment.NewLine
         + "\"Our testing regimen uses only statistical best practices out-of-sample testing techniques. "
         + "We test each of the test cases on matrices of 10000 rows by 1 to 5 columns with no noise. "
@@ -47,7 +46,7 @@
     protected override string[] AllowedInputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
-    protected override int TrainingPartitionEnd { get { return 5000; } }
-    protected override int TestPartitionStart { get { return 5000; } }
-    protected override int TestPartitionEnd { get { return 10000; } }
+    protected override int TrainingPartitionEnd { get { return 10000; } }
+    protected override int TestPartitionStart { get { return 10000; } }
+    protected override int TestPartitionEnd { get { return 20000; } }
 
     protected override List<List<double>> GenerateValues() {
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionTwelve.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionTwelve.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionTwelve.cs	(revision 8430)
@@ -33,8 +33,7 @@
         + "Authors: Michael F. Korns" + Environment.NewLine
         + "Function: y = 2.0 - (2.1 * (cos(9.8 * X0) * sin(1.3 * X4)))" + Environment.NewLine
-        + "Real Numbers: 3.45, -.982, 100.389, and all other real constants" + Environment.NewLine
-        + "Row Features: x1, x2, x9, and all other features" + Environment.NewLine
-        + "Binary Operators: +, -, *, /" + Environment.NewLine
-        + "Unary Operators: sqrt, square, cube, cos, sin, tan, tanh, log, exp" + Environment.NewLine
+        + "Binary Operators: +, -, *, % (protected division)" + Environment.NewLine
+        + "Unary Operators: sqrt, square, cube, cos, sin, tan, tanh, ln(|x|) (protected log), exp" + Environment.NewLine
+        + "Constants: random finit 64-bit IEEE double" + Environment.NewLine
         + "\"Our testing regimen uses only statistical best practices out-of-sample testing techniques. "
         + "We test each of the test cases on matrices of 10000 rows by 1 to 5 columns with no noise. "
@@ -47,7 +46,7 @@
     protected override string[] AllowedInputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
-    protected override int TrainingPartitionEnd { get { return 5000; } }
-    protected override int TestPartitionStart { get { return 5000; } }
-    protected override int TestPartitionEnd { get { return 10000; } }
+    protected override int TrainingPartitionEnd { get { return 10000; } }
+    protected override int TestPartitionStart { get { return 10000; } }
+    protected override int TestPartitionEnd { get { return 20000; } }
 
     protected override List<List<double>> GenerateValues() {
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionTwo.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionTwo.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionTwo.cs	(revision 8430)
@@ -33,8 +33,7 @@
         + "Authors: Michael F. Korns" + Environment.NewLine
         + "Function: y = 0.23 + (14.2 * ((X3 + X1) / (3.0 * X4)))" + Environment.NewLine
-        + "Real Numbers: 3.45, -.982, 100.389, and all other real constants" + Environment.NewLine
-        + "Row Features: x1, x2, x9, and all other features" + Environment.NewLine
-        + "Binary Operators: +, -, *, /" + Environment.NewLine
-        + "Unary Operators: sqrt, square, cube, cos, sin, tan, tanh, log, exp" + Environment.NewLine
+        + "Binary Operators: +, -, *, % (protected division)" + Environment.NewLine
+        + "Unary Operators: sqrt, square, cube, cos, sin, tan, tanh, ln(|x|) (protected log), exp" + Environment.NewLine
+        + "Constants: random finit 64-bit IEEE double" + Environment.NewLine
         + "\"Our testing regimen uses only statistical best practices out-of-sample testing techniques. "
         + "We test each of the test cases on matrices of 10000 rows by 1 to 5 columns with no noise. "
@@ -47,7 +46,7 @@
     protected override string[] AllowedInputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
-    protected override int TrainingPartitionEnd { get { return 5000; } }
-    protected override int TestPartitionStart { get { return 5000; } }
-    protected override int TestPartitionEnd { get { return 10000; } }
+    protected override int TrainingPartitionEnd { get { return 10000; } }
+    protected override int TestPartitionStart { get { return 10000; } }
+    protected override int TestPartitionEnd { get { return 20000; } }
 
     protected override List<List<double>> GenerateValues() {
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsInstanceProvider.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsInstanceProvider.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsInstanceProvider.cs	(revision 8430)
@@ -32,8 +32,8 @@
     }
     public override Uri WebLink {
-      get { return new Uri("http://groups.csail.mit.edu/EVO-DesignOpt/GPBenchmarks/"); }
+      get { return new Uri("http://www.gpbenchmarks.org/wiki/index.php?title=Problem_Classification#Korns"); }
     }
     public override string ReferencePublication {
-      get { return ""; }
+      get { return "McDermott et al., 2012 \"Genetic Programming Needs Better Benchmarks\", in Proc. of GECCO 2012."; }
     }
 
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionEight.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionEight.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionEight.cs	(revision 8430)
@@ -33,7 +33,7 @@
         + "Authors: Nguyen Quang Uy · Nguyen Xuan Hoai · Michael O’Neill · R.I. McKay · Edgar Galvan-Lopez" + Environment.NewLine
         + "Function: F8 = Sqrt(x)" + Environment.NewLine
-        + "Fitcases: 20 random points ⊆ [0, 4]" + Environment.NewLine
-        + "Non-terminals: +, -, *, /, sin, cos, exp, log (protected version)" + Environment.NewLine
-        + "Terminals: X, 1 for single variable problems, and X, Y for bivariable problems";
+        + "Fitcases: 20 random points in [0, 4]" + Environment.NewLine
+        + "Non-terminals: +, -, *, % (protected division), sin, cos, exp, ln(|x|) (protected log)" + Environment.NewLine
+        + "Terminals: only variables (no random constants)";
       }
     }
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionEleven.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionEleven.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionEleven.cs	(revision 8430)
@@ -33,7 +33,7 @@
         + "Authors: Nguyen Quang Uy · Nguyen Xuan Hoai · Michael O’Neill · R.I. McKay · Edgar Galvan-Lopez" + Environment.NewLine
         + "Function: F11 = x^y" + Environment.NewLine
-        + "Fitcases: 100 random points ⊆ [0, 1]x[0, 1]" + Environment.NewLine
-        + "Non-terminals: +, -, *, /, sin, cos, exp, log (protected version)" + Environment.NewLine
-        + "Terminals: X, 1 for single variable problems, and X, Y for bivariable problems";
+        + "Fitcases: 20 random points in [0, 1]x[0, 1]" + Environment.NewLine
+        + "Non-terminals: +, -, *, % (protected division), sin, cos, exp, ln(|x|) (protected log)" + Environment.NewLine
+        + "Terminals: only variables (no random constants)";
       }
     }
@@ -42,5 +42,5 @@
     protected override string[] AllowedInputVariables { get { return new string[] { "X", "Y" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
-    protected override int TrainingPartitionEnd { get { return 100; } }
+    protected override int TrainingPartitionEnd { get { return 20; } }
     protected override int TestPartitionStart { get { return 500; } }
     protected override int TestPartitionEnd { get { return 1000; } }
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionFive.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionFive.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionFive.cs	(revision 8430)
@@ -27,13 +27,13 @@
   public class NguyenFunctionFive : ArtificialRegressionDataDescriptor {
 
-    public override string Name { get { return "Nguyen F5 = sin(x^2)cos(x) - 1"; } }
+    public override string Name { get { return "Nguyen F5 = sin(x²)cos(x) - 1"; } }
     public override string Description {
       get {
         return "Paper: Semantically-based Crossover in Genetic Programming: Application to Real-valued Symbolic Regression" + Environment.NewLine
         + "Authors: Nguyen Quang Uy · Nguyen Xuan Hoai · Michael O’Neill · R.I. McKay · Edgar Galvan-Lopez" + Environment.NewLine
-        + "Function: F5 = sin(x^2)cos(x) - 1" + Environment.NewLine
-        + "Fitcases: 20 random points ⊆ [-1, 1]" + Environment.NewLine
-        + "Non-terminals: +, -, *, /, sin, cos, exp, log (protected version)" + Environment.NewLine
-        + "Terminals: X, 1 for single variable problems, and X, Y for bivariable problems";
+        + "Function: F5 = sin(x²)cos(x) - 1" + Environment.NewLine
+        + "Fitcases: 20 random points in [-1, 1]" + Environment.NewLine
+        + "Non-terminals: +, -, *, % (protected division), sin, cos, exp, ln(|x|) (protected log)" + Environment.NewLine
+        + "Terminals: only variables (no random constants)";
       }
     }
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionFour.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionFour.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionFour.cs	(revision 8430)
@@ -27,13 +27,13 @@
   public class NguyenFunctionFour : ArtificialRegressionDataDescriptor {
 
-    public override string Name { get { return "Nguyen F4 = x^6 + x^5 + x^4 + x^3 + x^2 + x"; } }
+    public override string Name { get { return "Nguyen F4 = x^6 + x^5 + x^4 + x³ + x² + x"; } }
     public override string Description {
       get {
         return "Paper: Semantically-based Crossover in Genetic Programming: Application to Real-valued Symbolic Regression" + Environment.NewLine
         + "Authors: Nguyen Quang Uy · Nguyen Xuan Hoai · Michael O’Neill · R.I. McKay · Edgar Galvan-Lopez" + Environment.NewLine
-        + "Function: F4 = x^6 + x^5 + x^4 + x^3 + x^2 + x" + Environment.NewLine
-        + "Fitcases: 20 random points ⊆ [-1, 1]" + Environment.NewLine
-        + "Non-terminals: +, -, *, /, sin, cos, exp, log (protected version)" + Environment.NewLine
-        + "Terminals: X, 1 for single variable problems, and X, Y for bivariable problems";
+        + "Function: F4 = x^6 + x^5 + x^4 + x³ + x² + x" + Environment.NewLine
+        + "Fitcases: 20 random points in [-1, 1]" + Environment.NewLine
+        + "Non-terminals: +, -, *, % (protected division), sin, cos, exp, ln(|x|) (protected log)" + Environment.NewLine
+        + "Terminals: only variables (no random constants)";
       }
     }
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionNine.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionNine.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionNine.cs	(revision 8430)
@@ -27,13 +27,13 @@
   public class NguyenFunctionNine : ArtificialRegressionDataDescriptor {
 
-    public override string Name { get { return "Nguyen F9 = sin(x) + sin(y^2)"; } }
+    public override string Name { get { return "Nguyen F9 = sin(x) + sin(y²)"; } }
     public override string Description {
       get {
         return "Paper: Semantically-based Crossover in Genetic Programming: Application to Real-valued Symbolic Regression" + Environment.NewLine
         + "Authors: Nguyen Quang Uy · Nguyen Xuan Hoai · Michael O’Neill · R.I. McKay · Edgar Galvan-Lopez" + Environment.NewLine
-        + "Function: F9 = sin(x) + sin(y^2)" + Environment.NewLine
-        + "Fitcases: 100 random points ⊆ [0, 1]x[0, 1]" + Environment.NewLine
-        + "Non-terminals: +, -, *, /, sin, cos, exp, log (protected version)" + Environment.NewLine
-        + "Terminals: X, 1 for single variable problems, and X, Y for bivariable problems";
+        + "Function: F9 = sin(x) + sin(y²)" + Environment.NewLine
+        + "Fitcases: 20 random points in [0, 1]x[0, 1]" + Environment.NewLine
+        + "Non-terminals: +, -, *, % (protected division), sin, cos, exp, ln(|x|) (protected log)" + Environment.NewLine
+        + "Terminals: only variables (no random constants)";
       }
     }
@@ -42,5 +42,5 @@
     protected override string[] AllowedInputVariables { get { return new string[] { "X", "Y" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
-    protected override int TrainingPartitionEnd { get { return 100; } }
+    protected override int TrainingPartitionEnd { get { return 20; } }
     protected override int TestPartitionStart { get { return 500; } }
     protected override int TestPartitionEnd { get { return 1000; } }
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionOne.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionOne.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionOne.cs	(revision 8430)
@@ -27,13 +27,13 @@
   public class NguyenFunctionOne : ArtificialRegressionDataDescriptor {
 
-    public override string Name { get { return "Nguyen F1 = x^3 + x^2 + x"; } }
+    public override string Name { get { return "Nguyen F1 = x³ + x² + x"; } }
     public override string Description {
       get {
         return "Paper: Semantically-based Crossover in Genetic Programming: Application to Real-valued Symbolic Regression" + Environment.NewLine
         + "Authors: Nguyen Quang Uy · Nguyen Xuan Hoai · Michael O’Neill · R.I. McKay · Edgar Galvan-Lopez" + Environment.NewLine
-        + "Function: F1 = x^3 + x^2 + x" + Environment.NewLine
-        + "Fitcases: 20 random points ⊆ [-1, 1]" + Environment.NewLine
-        + "Non-terminals: +, -, *, /, sin, cos, exp, log (protected version)" + Environment.NewLine
-        + "Terminals: X, 1 for single variable problems, and X, Y for bivariable problems";
+        + "Function: F1 = x³ + x² + x" + Environment.NewLine
+        + "Fitcases: 20 random points in [-1, 1]" + Environment.NewLine
+        + "Non-terminals: +, -, *, % (protected division), sin, cos, exp, ln(|x|) (protected log)" + Environment.NewLine
+        + "Terminals: only variables (no random constants)";
       }
     }
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionSeven.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionSeven.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionSeven.cs	(revision 8430)
@@ -27,13 +27,13 @@
   public class NguyenFunctionSeven : ArtificialRegressionDataDescriptor {
 
-    public override string Name { get { return "Nguyen F7 = log(x + 1) + log(x^2 + 1)"; } }
+    public override string Name { get { return "Nguyen F7 = log(x + 1) + log(x² + 1)"; } }
     public override string Description {
       get {
         return "Paper: Semantically-based Crossover in Genetic Programming: Application to Real-valued Symbolic Regression" + Environment.NewLine
         + "Authors: Nguyen Quang Uy · Nguyen Xuan Hoai · Michael O’Neill · R.I. McKay · Edgar Galvan-Lopez" + Environment.NewLine
-        + "Function: F7 = log(x + 1) + log(x^2 + 1)" + Environment.NewLine
-        + "Fitcases: 20 random points ⊆ [0, 2]" + Environment.NewLine
-        + "Non-terminals: +, -, *, /, sin, cos, exp, log (protected version)" + Environment.NewLine
-        + "Terminals: X, 1 for single variable problems, and X, Y for bivariable problems";
+        + "Function: F7 = ln(x + 1) + ln(x² + 1)" + Environment.NewLine
+        + "Fitcases: 20 random points in [0, 2]" + Environment.NewLine
+        + "Non-terminals: +, -, *, % (protected division), sin, cos, exp, ln(|x|) (protected log)" + Environment.NewLine
+        + "Terminals: only variables (no random constants)";
       }
     }
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionSix.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionSix.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionSix.cs	(revision 8430)
@@ -27,13 +27,13 @@
   public class NguyenFunctionSix : ArtificialRegressionDataDescriptor {
 
-    public override string Name { get { return "Nguyen F6 = sin(x) + sin(x + x^2)"; } }
+    public override string Name { get { return "Nguyen F6 = sin(x) + sin(x + x²)"; } }
     public override string Description {
       get {
         return "Paper: Semantically-based Crossover in Genetic Programming: Application to Real-valued Symbolic Regression" + Environment.NewLine
         + "Authors: Nguyen Quang Uy · Nguyen Xuan Hoai · Michael O’Neill · R.I. McKay · Edgar Galvan-Lopez" + Environment.NewLine
-        + "Function: F6 = sin(x) + sin(x + x^2)" + Environment.NewLine
-        + "Fitcases: 20 random points ⊆ [-1, 1]" + Environment.NewLine
-        + "Non-terminals: +, -, *, /, sin, cos, exp, log (protected version)" + Environment.NewLine
-        + "Terminals: X, 1 for single variable problems, and X, Y for bivariable problems";
+        + "Function: F6 = sin(x) + sin(x + x²)" + Environment.NewLine
+        + "Fitcases: 20 random points in [-1, 1]" + Environment.NewLine
+        + "Non-terminals: +, -, *, % (protected division), sin, cos, exp, ln(|x|) (protected log)" + Environment.NewLine
+        + "Terminals: only variables (no random constants)";
       }
     }
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionTen.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionTen.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionTen.cs	(revision 8430)
@@ -33,7 +33,7 @@
         + "Authors: Nguyen Quang Uy · Nguyen Xuan Hoai · Michael O’Neill · R.I. McKay · Edgar Galvan-Lopez" + Environment.NewLine
         + "Function: F10 = 2sin(x)cos(y)" + Environment.NewLine
-        + "Fitcases: 100 random points ⊆ [0, 1]x[0, 1]" + Environment.NewLine
-        + "Non-terminals: +, -, *, /, sin, cos, exp, log (protected version)" + Environment.NewLine
-        + "Terminals: X, 1 for single variable problems, and X, Y for bivariable problems";
+        + "Fitcases: 20 random points in [0, 1]x[0, 1]" + Environment.NewLine
+        + "Non-terminals: +, -, *, % (protected division), sin, cos, exp, ln(|x|) (protected log)" + Environment.NewLine
+        + "Terminals: only variables (no random constants)";
       }
     }
@@ -42,5 +42,5 @@
     protected override string[] AllowedInputVariables { get { return new string[] { "X", "Y" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
-    protected override int TrainingPartitionEnd { get { return 100; } }
+    protected override int TrainingPartitionEnd { get { return 20; } }
     protected override int TestPartitionStart { get { return 500; } }
     protected override int TestPartitionEnd { get { return 1000; } }
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionThree.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionThree.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionThree.cs	(revision 8430)
@@ -27,13 +27,13 @@
   public class NguyenFunctionThree : ArtificialRegressionDataDescriptor {
 
-    public override string Name { get { return "Nguyen F3 = x^5 + x^4 + x^3 + x^2 + x"; } }
+    public override string Name { get { return "Nguyen F3 = x^5 + x^4 + x³ + x² + x"; } }
     public override string Description {
       get {
         return "Paper: Semantically-based Crossover in Genetic Programming: Application to Real-valued Symbolic Regression" + Environment.NewLine
         + "Authors: Nguyen Quang Uy · Nguyen Xuan Hoai · Michael O’Neill · R.I. McKay · Edgar Galvan-Lopez" + Environment.NewLine
-        + "Function: F3 = x^5 + x^4 + x^3 + x^2 + x" + Environment.NewLine
-        + "Fitcases: 20 random points ⊆ [-1, 1]" + Environment.NewLine
-        + "Non-terminals: +, -, *, /, sin, cos, exp, log (protected version)" + Environment.NewLine
-        + "Terminals: X, 1 for single variable problems, and X, Y for bivariable problems";
+        + "Function: F3 = x^5 + x^4 + x³ + x² + x" + Environment.NewLine
+        + "Fitcases: 20 random points in [-1, 1]" + Environment.NewLine
+        + "Non-terminals: +, -, *, % (protected division), sin, cos, exp, ln(|x|) (protected log)" + Environment.NewLine
+        + "Terminals: only variables (no random constants)";
       }
     }
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionTwelve.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionTwelve.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionTwelve.cs	(revision 8430)
@@ -27,13 +27,13 @@
   public class NguyenFunctionTwelve : ArtificialRegressionDataDescriptor {
 
-    public override string Name { get { return "Nguyen F12 = x^4 - x^3 + y^2/2 - y"; } }
+    public override string Name { get { return "Nguyen F12 = x^4 - x³ + y²/2 - y"; } }
     public override string Description {
       get {
         return "Paper: Semantically-based Crossover in Genetic Programming: Application to Real-valued Symbolic Regression" + Environment.NewLine
         + "Authors: Nguyen Quang Uy · Nguyen Xuan Hoai · Michael O’Neill · R.I. McKay · Edgar Galvan-Lopez" + Environment.NewLine
-        + "Function: F12 = x^4 - x^3 + y^2/2 - y" + Environment.NewLine
-        + "Fitcases: 100 random points ⊆ [0, 1]x[0, 1]" + Environment.NewLine
-        + "Non-terminals: +, -, *, /, sin, cos, exp, log (protected version)" + Environment.NewLine
-        + "Terminals: X, 1 for single variable problems, and X, Y for bivariable problems";
+        + "Function: F12 = x^4 - x³ + y²/2 - y" + Environment.NewLine
+        + "Fitcases: 20 random points in [0, 1]x[0, 1]" + Environment.NewLine
+        + "Non-terminals: +, -, *, % (protected division), sin, cos, exp, ln(|x|) (protected log)" + Environment.NewLine
+        + "Terminals: only variables (no random constants)";
       }
     }
@@ -42,5 +42,5 @@
     protected override string[] AllowedInputVariables { get { return new string[] { "X", "Y" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
-    protected override int TrainingPartitionEnd { get { return 100; } }
+    protected override int TrainingPartitionEnd { get { return 20; } }
     protected override int TestPartitionStart { get { return 500; } }
     protected override int TestPartitionEnd { get { return 1000; } }
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionTwo.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionTwo.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionTwo.cs	(revision 8430)
@@ -27,13 +27,13 @@
   public class NguyenFunctionTwo : ArtificialRegressionDataDescriptor {
 
-    public override string Name { get { return "Nguyen F2 = x^4 + x^3 + x^2 + x"; } }
+    public override string Name { get { return "Nguyen F2 = x^4 + x³ + x² + x"; } }
     public override string Description {
       get {
         return "Paper: Semantically-based Crossover in Genetic Programming: Application to Real-valued Symbolic Regression" + Environment.NewLine
         + "Authors: Nguyen Quang Uy · Nguyen Xuan Hoai · Michael O’Neill · R.I. McKay · Edgar Galvan-Lopez" + Environment.NewLine
-        + "Function: F2 = x^4 + x^3 + x^2 + x" + Environment.NewLine
-        + "Fitcases: 20 random points ⊆ [-1, 1]" + Environment.NewLine
-        + "Non-terminals: +, -, *, /, sin, cos, exp, log (protected version)" + Environment.NewLine
-        + "Terminals: X, 1 for single variable problems, and X, Y for bivariable problems";
+        + "Function: F2 = x^4 + x³ + x² + x" + Environment.NewLine
+        + "Fitcases: 20 random points in [-1, 1]" + Environment.NewLine
+        + "Non-terminals: +, -, *, % (protected division), sin, cos, exp, ln(|x|) (protected log)" + Environment.NewLine
+        + "Terminals: only variables (no random constants)";
       }
     }
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenInstanceProvider.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenInstanceProvider.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenInstanceProvider.cs	(revision 8430)
@@ -32,8 +32,8 @@
     }
     public override Uri WebLink {
-      get { return new Uri("http://groups.csail.mit.edu/EVO-DesignOpt/GPBenchmarks/"); }
+      get { return new Uri("http://www.gpbenchmarks.org/wiki/index.php?title=Problem_Classification#Nguyen_et_al"); }
     }
     public override string ReferencePublication {
-      get { return ""; }
+      get { return "McDermott et al., 2012 \"Genetic Programming Needs Better Benchmarks\", in Proc. of GECCO 2012."; }
     }
 
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/RegressionInstanceProvider.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/RegressionInstanceProvider.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/RegressionInstanceProvider.cs	(revision 8430)
@@ -20,73 +20,8 @@
 #endregion
 
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Text;
 using HeuristicLab.Problems.DataAnalysis;
 
 namespace HeuristicLab.Problems.Instances.DataAnalysis {
-  public abstract class RegressionInstanceProvider : IProblemInstanceProvider<IRegressionProblemData> {
-
-    public IRegressionProblemData LoadData(string path) {
-      TableFileParser csvFileParser = new TableFileParser();
-      csvFileParser.Parse(path);
-
-      Dataset dataset = new Dataset(csvFileParser.VariableNames, csvFileParser.Values);
-      string targetVar = csvFileParser.VariableNames.Last();
-
-      IEnumerable<string> allowedInputVars = csvFileParser.VariableNames.Where(x => !x.Equals(targetVar));
-
-      IRegressionProblemData regData = new RegressionProblemData(dataset, allowedInputVars, targetVar);
-
-      int trainingPartEnd = csvFileParser.Rows * 2 / 3;
-      regData.TrainingPartition.Start = 0;
-      regData.TrainingPartition.End = trainingPartEnd;
-      regData.TestPartition.Start = trainingPartEnd;
-      regData.TestPartition.End = csvFileParser.Rows;
-
-      int pos = path.LastIndexOf('\\');
-      if (pos < 0)
-        regData.Name = path;
-      else {
-        pos++;
-        regData.Name = path.Substring(pos, path.Length - pos);
-      }
-      return regData;
-    }
-
-    public void SaveData(IRegressionProblemData instance, string path) {
-      StringBuilder strBuilder = new StringBuilder();
-
-      foreach (var variable in instance.InputVariables) {
-        strBuilder.Append(variable + ";");
-      }
-      strBuilder.Remove(strBuilder.Length - 1, 1);
-      strBuilder.AppendLine();
-
-      Dataset dataset = instance.Dataset;
-
-      for (int i = 0; i < dataset.Rows; i++) {
-        for (int j = 0; j < dataset.Columns; j++) {
-          strBuilder.Append(dataset.GetValue(i, j) + ";");
-        }
-        strBuilder.Remove(strBuilder.Length - 1, 1);
-        strBuilder.AppendLine();
-      }
-
-      using (StreamWriter writer = new StreamWriter(path)) {
-        writer.Write(strBuilder);
-      }
-    }
-
-    public abstract IEnumerable<IDataDescriptor> GetDataDescriptors();
-    public abstract IRegressionProblemData LoadData(IDataDescriptor descriptor);
-
-    public abstract string Name { get; }
-    public abstract string Description { get; }
-    public abstract Uri WebLink { get; }
-    public abstract string ReferencePublication { get; }
+  public abstract class RegressionInstanceProvider : ProblemInstanceProvider<IRegressionProblemData> {
   }
 }
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/ResourceRegressionInstanceProvider.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/ResourceRegressionInstanceProvider.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/ResourceRegressionInstanceProvider.cs	(revision 8430)
@@ -70,6 +70,6 @@
 
         Dataset dataset = new Dataset(csvFileParser.VariableNames, csvFileParser.Values);
-        string targetVar = csvFileParser.VariableNames.Last();
-        IEnumerable<string> allowedInputVars = csvFileParser.VariableNames.Where(x => !x.Equals(targetVar));
+        string targetVar = csvFileParser.VariableNames.Where(x => dataset.DoubleVariables.Contains(x)).Last();
+        IEnumerable<string> allowedInputVars = dataset.DoubleVariables.Where(x => !x.Equals(targetVar));
 
         IRegressionProblemData regData = new RegressionProblemData(dataset, allowedInputVars, targetVar);
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/ValueGenerator.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/ValueGenerator.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/ValueGenerator.cs	(revision 8430)
@@ -29,17 +29,46 @@
     private static FastRandom rand = new FastRandom();
 
+    /// <summary>
+    /// Generates a sequence of evenly spaced points between start and end (inclusive!).
+    /// </summary>
+    /// <param name="start">The smallest and first value of the sequence.</param>
+    /// <param name="end">The largest and last value of the sequence.</param>
+    /// <param name="stepWidth">The step size between subsequent values.</param>
+    /// <returns>An sequence of values from start to end (inclusive)</returns>
     public static IEnumerable<double> GenerateSteps(double start, double end, double stepWidth) {
-      int steps = (int)Math.Round(((end - start) / stepWidth) + 1);
-      for (int i = 0; i < steps; i++)
-        yield return start + i * stepWidth;
+      if (start > end) throw new ArgumentException("start must be less than or equal end.");
+      if (stepWidth <= 0) throw new ArgumentException("stepwith must be larger than zero.", "stepWidth");
+      double x = start;
+      while (x <= end) {
+        yield return x;
+        x += stepWidth;
+      }
     }
 
-    public static IEnumerable<double> GenerateUniformDistributedValues(int amount, double start, double end) {
-      for (int i = 0; i < amount; i++)
-        yield return rand.NextDouble() * (end - start) + start;
+    /// <summary>
+    /// Generates uniformly distributed values between start and end (inclusive!) 
+    /// </summary>
+    /// <param name="n">Number of values to generate.</param>
+    /// <param name="start">The lower value (inclusive)</param>
+    /// <param name="end">The upper value (inclusive)</param>
+    /// <returns>An enumerable including n values in [start, end]</returns>
+    public static IEnumerable<double> GenerateUniformDistributedValues(int n, double start, double end) {
+      for (int i = 0; i < n; i++) {
+        // we need to return a random value including end.
+        // so we cannot use rand.NextDouble() as it returns a value strictly smaller than 1.
+        double r = rand.NextUInt() / (double)uint.MaxValue;    // r \in [0,1]
+        yield return r * (end - start) + start;
+      }
     }
 
-    public static IEnumerable<double> GenerateNormalDistributedValues(int amount, double mu, double sigma) {
-      for (int i = 0; i < amount; i++)
+    /// <summary>
+    /// Generates normally distributed values sampling from N(mu, sigma) 
+    /// </summary>
+    /// <param name="n">Number of values to generate.</param>
+    /// <param name="mu">The mu parameter of the normal distribution</param>
+    /// <param name="sigma">The sigma parameter of the normal distribution</param>
+    /// <returns>An enumerable including n values ~ N(mu, sigma)</returns>
+    public static IEnumerable<double> GenerateNormalDistributedValues(int n, double mu, double sigma) {
+      for (int i = 0; i < n; i++)
         yield return NormalDistributedRandom.NextDouble(rand, mu, sigma);
     }
@@ -82,65 +111,4 @@
       }
     }
-
-    //recursive approach
-    /*public static IEnumerable<IEnumerable<double>> GenerateAllCombinationsOfValuesInLists(List<List<double>> lists) {
-      int cur = 0;
-      List<double> curCombination = new List<double>();
-      List<List<double>> allCombinations = new List<List<double>>();
-      for (int i = 0; i < lists.Count; i++) {
-        allCombinations.Add(new List<double>());
-      }
-      if (lists.Count() > cur) {
-        foreach (var item in lists[cur]) {
-          curCombination.Clear();
-          curCombination.Add(item);
-          GetCombination(lists, cur + 1, curCombination, allCombinations);
-        }
-      }
-      return allCombinations;
-    }
-
-    private static void GetCombination(List<List<double>> lists, int cur, List<double> curCombinations, List<List<double>> allCombinations) {
-      if (lists.Count > cur) {
-        foreach (var item in lists[cur]) {
-          if (curCombinations.Count > cur) {
-            curCombinations.RemoveAt(cur);
-          }
-          curCombinations.Add(item);
-          GetCombination(lists, cur + 1, curCombinations, allCombinations);
-        }
-      } else {
-        for (int i = 0; i < curCombinations.Count; i++) {
-          allCombinations[i].Add(curCombinations[i]);
-        }
-      }
-    }         */
-
-    //original
-    /*public static IEnumerable<IEnumerable<double>> GenerateAllCombinationsOfValuesInLists(List<List<double>> sets) {
-
-      var combinations = new List<List<double>>();
-
-      foreach (var value in sets[0])
-        combinations.Add(new List<double> { value });
-
-      foreach (var set in sets.Skip(1))
-        combinations = AddListToCombinations(combinations, set);
-
-      IEnumerable<IEnumerable<double>> res = (from i in Enumerable.Range(0, sets.Count)
-                                              select (from list in combinations
-                                                      select list.ElementAt(i)));
-
-      return res;
-    }
-
-    private static List<List<double>> AddListToCombinations
-         (List<List<double>> combinations, List<double> set) {
-      var newCombinations = from value in set
-                            from combination in combinations
-                            select new List<double>(combination) { value };
-
-      return newCombinations.ToList();
-    }    */
   }
 }
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Various/SpatialCoevolution.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Various/SpatialCoevolution.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Various/SpatialCoevolution.cs	(revision 8430)
@@ -27,16 +27,17 @@
   public class SpatialCoevolution : ArtificialRegressionDataDescriptor {
 
-    public override string Name { get { return "Spatial co-evolution F(x,y) = 1/(1+power(x,-4)) + 1/(1+pow(y,-4))"; } }
+    public override string Name { get { return "Spatial co-evolution F(x,y) = 1/(1 + x^(-4)) + 1/(1 + y^(-4))"; } }
     public override string Description {
       get {
         return "Paper: Evolutionary consequences of coevolving targets" + Environment.NewLine
         + "Authors: Ludo Pagie and Paulien Hogeweg" + Environment.NewLine
-        + "Function: F(x,y) = 1/(1+power(x,-4)) + 1/(1+pow(y,-4))" + Environment.NewLine
-        + "Terminal set: x, y" + Environment.NewLine
+        + "Function: F(x,y) = 1/(1 + x^(-4)) + 1/(1 + y^(-4))" + Environment.NewLine
+        + "Non-terminals: +, -, *, % (protected division), sin, cos, exp, ln(|x|) (protected log)" + Environment.NewLine
+        + "Terminals: only variables (no random constants)" + Environment.NewLine
         + "The fitness of a solution is defined as the mean of the absolute differences between "
         + "the target function and the solution over all problems on the basis of which it is evaluated. "
         + "A solution is considered completely ’correct’ if, for all 676 problems in the ’complete’ "
         + "problem set used in the static evaluation scheme, the absolute difference between "
-        + "solution and target function is less than 0:01 (this is a so-called hit).";
+        + "solution and target function is less than 0.01 (this is a so-called hit).";
       }
     }
@@ -45,18 +46,18 @@
     protected override string[] AllowedInputVariables { get { return new string[] { "X", "Y" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
-    protected override int TrainingPartitionEnd { get { return 250; } }
-    protected override int TestPartitionStart { get { return 250; } }
-    protected override int TestPartitionEnd { get { return 500; } }
+    protected override int TrainingPartitionEnd { get { return 676; } }
+    protected override int TestPartitionStart { get { return 676; } }
+    protected override int TestPartitionEnd { get { return 1676; } }
 
     protected override List<List<double>> GenerateValues() {
       List<List<double>> data = new List<List<double>>();
 
-      List<double> oneVariableTestData = ValueGenerator.GenerateSteps(-5, 5, 0.4).ToList();
-      List<List<double>> testData = new List<List<double>>() { oneVariableTestData, oneVariableTestData };
-      var combinations = ValueGenerator.GenerateAllCombinationsOfValuesInLists(testData).ToList<IEnumerable<double>>();
+      List<double> evenlySpacedSequence = ValueGenerator.GenerateSteps(-5, 5, 0.4).ToList();
+      List<List<double>> trainingData = new List<List<double>>() { evenlySpacedSequence, evenlySpacedSequence };
+      var combinations = ValueGenerator.GenerateAllCombinationsOfValuesInLists(trainingData).ToList();
 
       for (int i = 0; i < AllowedInputVariables.Count(); i++) {
-        data.Add(ValueGenerator.GenerateUniformDistributedValues(1000, -5, 5).ToList());
-        data[i].AddRange(combinations[i]);
+        data.Add(combinations[i].ToList());
+        data[i].AddRange(ValueGenerator.GenerateUniformDistributedValues(1000, -5, 5).ToList());
       }
 
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/KotanchekFunction.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/KotanchekFunction.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/KotanchekFunction.cs	(revision 8430)
@@ -27,13 +27,13 @@
   public class KotanchekFunction : ArtificialRegressionDataDescriptor {
 
-    public override string Name { get { return "Vladislavleva Kotanchek"; } }
+    public override string Name { get { return "Vladislavleva-1 F1(X1,X2) = exp(-(X1 - 1))² / (1.2 + (X2 -2.5)²"; } }
     public override string Description {
       get {
         return "Paper: Order of Nonlinearity as a Complexity Measure for Models Generated by Symbolic Regression via Pareto Genetic Programming " + Environment.NewLine
         + "Authors: Ekaterina J. Vladislavleva, Member, IEEE, Guido F. Smits, Member, IEEE, and Dick den Hertog" + Environment.NewLine
-        + "Function: F1(X1, X2) = e^-(X1 - 1)^2 / (1.2 + (X2 -2.5)^2" + Environment.NewLine
+        + "Function: F1(X1, X2) = exp(-(X1 - 1))² / (1.2 + (X2 -2.5)²" + Environment.NewLine
         + "Training Data: 100 points X1, X2 = Rand(0.3, 4)" + Environment.NewLine
         + "Test Data: 2026 points (X1, X2) = (-0.2:0.1:4.2)" + Environment.NewLine
-        + "Function Set: +, -, *, /, sqaure, x^real, x + real, x + real, e^x, e^-x";
+        + "Function Set: +, -, *, /, square, e^x, e^-x, x^eps, x + eps, x * eps";
       }
     }
@@ -43,6 +43,6 @@
     protected override int TrainingPartitionStart { get { return 0; } }
     protected override int TrainingPartitionEnd { get { return 100; } }
-    protected override int TestPartitionStart { get { return 1000; } }
-    protected override int TestPartitionEnd { get { return 3025; } }
+    protected override int TestPartitionStart { get { return 100; } }
+    protected override int TestPartitionEnd { get { return 2126; } }
 
     protected override List<List<double>> GenerateValues() {
@@ -53,5 +53,5 @@
       var combinations = ValueGenerator.GenerateAllCombinationsOfValuesInLists(testData).ToList<IEnumerable<double>>();
       for (int i = 0; i < AllowedInputVariables.Count(); i++) {
-        data.Add(ValueGenerator.GenerateUniformDistributedValues(1000, 0.3, 4).ToList());
+        data.Add(ValueGenerator.GenerateUniformDistributedValues(100, 0.3, 4).ToList());
         data[i].AddRange(combinations[i]);
       }
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/RationalPolynomialThreeDimensional.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/RationalPolynomialThreeDimensional.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/RationalPolynomialThreeDimensional.cs	(revision 8430)
@@ -27,13 +27,13 @@
   public class RationalPolynomialThreeDimensional : ArtificialRegressionDataDescriptor {
 
-    public override string Name { get { return "Vladislavleva RatPol3D"; } }
+    public override string Name { get { return "Vladislavleva-5 F5(X1, X2, X3) = 30 * ((X1 - 1) * (X3 -1)) / (X2² * (X1 - 10))"; } }
     public override string Description {
       get {
         return "Paper: Order of Nonlinearity as a Complexity Measure for Models Generated by Symbolic Regression via Pareto Genetic Programming " + Environment.NewLine
         + "Authors: Ekaterina J. Vladislavleva, Member, IEEE, Guido F. Smits, Member, IEEE, and Dick den Hertog" + Environment.NewLine
-        + "Function: F5(X1, X2, X3) = 30 * ((X1 - 1) * (X3 -1)) / (X2^2 * (X1 - 10))" + Environment.NewLine
+        + "Function: F5(X1, X2, X3) = 30 * ((X1 - 1) * (X3 -1)) / (X2² * (X1 - 10))" + Environment.NewLine
         + "Training Data: 300 points X1, X3 = Rand(0.05, 2), X2 = Rand(1, 2)" + Environment.NewLine
         + "Test Data: 2701 points X1, X3 = (-0.05:0.15:2.1), X2 = (0.95:0.1:2.05)" + Environment.NewLine
-        + "Function Set: +, -, *, /, sqaure, x^real, x + real, x + real";
+        + "Function Set: +, -, *, /, square, x^eps, x + eps, x * eps";
       }
     }
@@ -49,8 +49,8 @@
       List<List<double>> data = new List<List<double>>();
 
-      int amountOfPoints = 1000;
-      data.Add(ValueGenerator.GenerateUniformDistributedValues(amountOfPoints, 0.05, 2).ToList());
-      data.Add(ValueGenerator.GenerateUniformDistributedValues(amountOfPoints, 1, 2).ToList());
-      data.Add(ValueGenerator.GenerateUniformDistributedValues(amountOfPoints, 0.05, 2).ToList());
+      int n = 1000;
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(n, 0.05, 2).ToList());
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(n, 1, 2).ToList());
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(n, 0.05, 2).ToList());
 
       List<List<double>> testData = new List<List<double>>() { 
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/RationalPolynomialTwoDimensional.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/RationalPolynomialTwoDimensional.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/RationalPolynomialTwoDimensional.cs	(revision 8430)
@@ -27,13 +27,13 @@
   public class RationalPolynomialTwoDimensional : ArtificialRegressionDataDescriptor {
 
-    public override string Name { get { return "Vladislavleva RatPol2D"; } }
+    public override string Name { get { return "Vladislavleva-8 F8(X1, X2) = ((X1 - 3)^4 + (X2 - 3)³ - (X2 -3)) / ((X2 - 2)^4 + 10)"; } }
     public override string Description {
       get {
         return "Paper: Order of Nonlinearity as a Complexity Measure for Models Generated by Symbolic Regression via Pareto Genetic Programming " + Environment.NewLine
         + "Authors: Ekaterina J. Vladislavleva, Member, IEEE, Guido F. Smits, Member, IEEE, and Dick den Hertog" + Environment.NewLine
-        + "Function: F8(X1, X2) = ((X1 - 3)^4 + (X2 - 3)^3 - (X2 -3)) / ((X2 - 2)^4 + 10)" + Environment.NewLine
+        + "Function: F8(X1, X2) = ((X1 - 3)^4 + (X2 - 3)³ - (X2 -3)) / ((X2 - 2)^4 + 10)" + Environment.NewLine
         + "Training Data: 50 points X1, X2 = Rand(0.05, 6.05)" + Environment.NewLine
         + "Test Data: 1157 points X1, X2 = (-0.25:0.2:6.35)" + Environment.NewLine
-        + "Function Set: +, -, *, /, sqaure, x^real, x + real, x + real";
+        + "Function Set: +, -, *, /, square, x^eps, x + eps, x * eps";
       }
     }
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/RippleFunction.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/RippleFunction.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/RippleFunction.cs	(revision 8430)
@@ -27,5 +27,5 @@
   public class RippleFunction : ArtificialRegressionDataDescriptor {
 
-    public override string Name { get { return "Vladislavleva Ripple"; } }
+    public override string Name { get { return "Vladislavleva-7  F7(X1, X2) = (X1 - 3)(X2 - 3) + 2 * sin((X1 - 4)(X2 - 4))"; } }
     public override string Description {
       get {
@@ -35,5 +35,5 @@
         + "Training Data: 300 points X1, X2 = Rand(0.05, 6.05)" + Environment.NewLine
         + "Test Data: 1000 points X1, X2 = Rand(-0.25, 6.35)" + Environment.NewLine
-        + "Function Set: +, -, *, /, sqaure, x^real, x + real, x + real, e^x, e^-x, sin(x), cos(x)";
+        + "Function Set: +, -, *, /, square, e^x, e^-x, sin(x), cos(x), x^eps, x + eps, x + eps";
       }
     }
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/SalutowiczFunctionOneDimensional.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/SalutowiczFunctionOneDimensional.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/SalutowiczFunctionOneDimensional.cs	(revision 8430)
@@ -27,13 +27,13 @@
   public class SalutowiczFunctionOneDimensional : ArtificialRegressionDataDescriptor {
 
-    public override string Name { get { return "Vladislavleva Salutowicz"; } }
+    public override string Name { get { return "Vladislavleva-2 F2(X) = exp(-X) * X³ * cos(X) * sin(X) * (cos(X)sin(X)² - 1)"; } }
     public override string Description {
       get {
         return "Paper: Order of Nonlinearity as a Complexity Measure for Models Generated by Symbolic Regression via Pareto Genetic Programming " + Environment.NewLine
         + "Authors: Ekaterina J. Vladislavleva, Member, IEEE, Guido F. Smits, Member, IEEE, and Dick den Hertog" + Environment.NewLine
-        + "Function: F2(X) = e^-X * X^3 * cos(X) * sin(X) * (cos(X)sin(X)^2 - 1)" + Environment.NewLine
+        + "Function: F2(X) = exp(-X) * X³ * cos(X) * sin(X) * (cos(X)sin(X)² - 1)" + Environment.NewLine
         + "Training Data: 100 points X = (0.05:0.1:10)" + Environment.NewLine
         + "Test Data: 221 points X = (-0.5:0.05:10.5)" + Environment.NewLine
-        + "Function Set: +, -, *, /, sqaure, x^real, x + real, x + real, e^x, e^-x, sin(x), cos(x)";
+        + "Function Set: +, -, *, /, square, e^x, e^-x, sin(x), cos(x), x^eps, x + eps, x + eps";
       }
     }
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/SalutowiczFunctionTwoDimensional.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/SalutowiczFunctionTwoDimensional.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/SalutowiczFunctionTwoDimensional.cs	(revision 8430)
@@ -27,14 +27,13 @@
   public class SalutowiczFunctionTwoDimensional : ArtificialRegressionDataDescriptor {
 
-    public override string Name { get { return "Vladislavleva Salutowicz2D"; } }
+    public override string Name { get { return "Vladislavleva-3 F3(X1, X2) = exp(-X1) * X1³ * cos(X1) * sin(X1) * (cos(X1)sin(X1)² - 1)(X2 - 5)"; } }
     public override string Description {
       get {
         return "Paper: Order of Nonlinearity as a Complexity Measure for Models Generated by Symbolic Regression via Pareto Genetic Programming " + Environment.NewLine
         + "Authors: Ekaterina J. Vladislavleva, Member, IEEE, Guido F. Smits, Member, IEEE, and Dick den Hertog" + Environment.NewLine
-        + "Function: F3(X1, X2) = e^-X1 * X1^3 * cos(X1) * sin(X1) * (cos(X1)sin(X1)^2 - 1)(X2 - 5)" + Environment.NewLine
+        + "Function: F3(X1, X2) = exp(-X1) * X1³ * cos(X1) * sin(X1) * (cos(X1)sin(X1)² - 1)(X2 - 5)" + Environment.NewLine
         + "Training Data: 601 points X1 = (0.05:0.1:10), X2 = (0.05:2:10.05)" + Environment.NewLine
-        + "Test Data: 2554 points X1 = (-0.5:0.05:10.5), X2 = (-0.5:0.5:10.5)" + Environment.NewLine
-        + "Function Set: +, -, *, /, sqaure, x^real, x + real, x + real, e^x, e^-x, sin(x), cos(x)" + Environment.NewLine + Environment.NewLine
-        + "Important: The stepwidth of the variable X1 in the test partition has been set to 0.1, to fit the amount of data points.";
+        + "Test Data: 4840 points X1 = (-0.5:0.05:10.5), X2 = (-0.5:0.5:10.5)" + Environment.NewLine
+        + "Function Set: +, -, *, /, square, e^x, e^-x, sin(x), cos(x), x^eps, x + eps, x + eps";
       }
     }
@@ -45,5 +44,5 @@
     protected override int TrainingPartitionEnd { get { return 601; } }
     protected override int TestPartitionStart { get { return 601; } }
-    protected override int TestPartitionEnd { get { return 3155; } }
+    protected override int TestPartitionEnd { get { return 5441; } }
 
     protected override List<List<double>> GenerateValues() {
@@ -55,5 +54,5 @@
 
       List<List<double>> testData = new List<List<double>>() {
-        ValueGenerator.GenerateSteps(-0.5, 10.5, 0.1).ToList(),
+        ValueGenerator.GenerateSteps(-0.5, 10.5, 0.05).ToList(),
         ValueGenerator.GenerateSteps(-0.5, 10.5, 0.5).ToList()
       };
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/SineCosineFunction.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/SineCosineFunction.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/SineCosineFunction.cs	(revision 8430)
@@ -27,5 +27,5 @@
   public class SineCosineFunction : ArtificialRegressionDataDescriptor {
 
-    public override string Name { get { return "Vladislavleva SineCosine"; } }
+    public override string Name { get { return "Vladislavleva-6 F6(X1, X2) = 6 * sin(X1) * cos(X2)"; } }
     public override string Description {
       get {
@@ -35,5 +35,5 @@
         + "Training Data: 30 points X1, X2 = Rand(0.1, 5.9)" + Environment.NewLine
         + "Test Data: 961 points X1, X2 = (-0.05:0.02:6.05)" + Environment.NewLine
-        + "Function Set: +, -, *, /, sqaure, x^real, x + real, x + real, e^x, e^-x";
+        + "Function Set: +, -, *, /, square, e^x, e^-x, x^eps, x + eps, x * eps";
       }
     }
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/UnwrappedBallFunctionFiveDimensional.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/UnwrappedBallFunctionFiveDimensional.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/UnwrappedBallFunctionFiveDimensional.cs	(revision 8430)
@@ -27,5 +27,5 @@
   public class UnwrappedBallFunctionFiveDimensional : ArtificialRegressionDataDescriptor {
 
-    public override string Name { get { return "Vladislavleva UBall5D"; } }
+    public override string Name { get { return "Vladislavleva-4 F4(X1, X2, X3, X4, X5) = 10 / (5 + Sum(Xi - 3)^2)"; } }
     public override string Description {
       get {
@@ -35,5 +35,5 @@
         + "Training Data: 1024 points Xi = Rand(0.05, 6.05)" + Environment.NewLine
         + "Test Data: 5000 points Xi = Rand(-0.25, 6.35)" + Environment.NewLine
-        + "Function Set: +, -, *, /, sqaure, x^real, x + real, x + real";
+        + "Function Set: +, -, *, /, square, x^eps, x + eps, x * eps";
       }
     }
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/VladislavlevaInstanceProvider.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/VladislavlevaInstanceProvider.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/VladislavlevaInstanceProvider.cs	(revision 8430)
@@ -32,8 +32,8 @@
     }
     public override Uri WebLink {
-      get { return new Uri("http://groups.csail.mit.edu/EVO-DesignOpt/GPBenchmarks/"); }
+      get { return new Uri("http://www.gpbenchmarks.org/wiki/index.php?title=Problem_Classification#Vladislavleva_et_al"); }
     }
     public override string ReferencePublication {
-      get { return ""; }
+      get { return "McDermott et al., 2012 \"Genetic Programming Needs Better Benchmarks\", in Proc. of GECCO 2012."; }
     }
 
@@ -41,10 +41,11 @@
       List<IDataDescriptor> descriptorList = new List<IDataDescriptor>();
       descriptorList.Add(new KotanchekFunction());
-      descriptorList.Add(new RationalPolynomialTwoDimensional());
-      descriptorList.Add(new RationalPolynomialThreeDimensional());
-      descriptorList.Add(new RippleFunction());
       descriptorList.Add(new SalutowiczFunctionOneDimensional());
       descriptorList.Add(new SalutowiczFunctionTwoDimensional());
       descriptorList.Add(new UnwrappedBallFunctionFiveDimensional());
+      descriptorList.Add(new RationalPolynomialThreeDimensional());
+      descriptorList.Add(new SineCosineFunction());
+      descriptorList.Add(new RippleFunction());
+      descriptorList.Add(new RationalPolynomialTwoDimensional());
       return descriptorList;
     }
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/TimeSeries/TimeSeriesPrognosisInstanceProvider.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/TimeSeries/TimeSeriesPrognosisInstanceProvider.cs	(revision 7998)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.DataAnalysis/3.3/TimeSeries/TimeSeriesPrognosisInstanceProvider.cs	(revision 8430)
@@ -29,6 +29,9 @@
 namespace HeuristicLab.Problems.Instances.DataAnalysis {
   public abstract class TimeSeriesPrognosisInstanceProvider : IProblemInstanceProvider<ITimeSeriesPrognosisProblemData> {
+    public bool CanImportData { get { return true; } }
+    public bool CanExportData { get { return true; } }
 
-    public ITimeSeriesPrognosisProblemData LoadData(string path) {
+
+    public ITimeSeriesPrognosisProblemData ImportData(string path) {
       TableFileParser csvFileParser = new TableFileParser();
       csvFileParser.Parse(path);
@@ -36,5 +39,5 @@
       Dataset dataset = new Dataset(csvFileParser.VariableNames, csvFileParser.Values);
       string targetVar = csvFileParser.VariableNames.Last();
-      
+
       IEnumerable<string> allowedInputVars = dataset.DoubleVariables.Where(x => !x.Equals(targetVar));
 
@@ -57,5 +60,5 @@
     }
 
-    public void SaveData(ITimeSeriesPrognosisProblemData instance, string path) {
+    public void ExportData(ITimeSeriesPrognosisProblemData instance, string path) {
       StringBuilder strBuilder = new StringBuilder();
 
