Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/ArtificialClassificationDataDescriptor.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/ArtificialClassificationDataDescriptor.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/ArtificialClassificationDataDescriptor.cs	(revision 9363)
@@ -29,5 +29,5 @@
 
     protected abstract string TargetVariable { get; }
-    protected abstract string[] InputVariables { get; }
+    protected abstract string[] VariableNames { get; }
     protected abstract string[] AllowedInputVariables { get; }
     protected abstract int TrainingPartitionStart { get; }
@@ -37,5 +37,5 @@
 
     public IClassificationProblemData GenerateClassificationData() {
-      Dataset dataset = new Dataset(InputVariables, this.GenerateValues());
+      Dataset dataset = new Dataset(VariableNames, this.GenerateValues());
 
       ClassificationProblemData claData = new ClassificationProblemData(dataset, AllowedInputVariables, TargetVariable);
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/CSV/ClassifiactionCSVInstanceProvider.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/CSV/ClassifiactionCSVInstanceProvider.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/CSV/ClassifiactionCSVInstanceProvider.cs	(revision 9363)
@@ -21,8 +21,9 @@
 
 using System;
+using System.Collections;
 using System.Collections.Generic;
 using System.IO;
 using System.Linq;
-using System.Text;
+using HeuristicLab.Common;
 using HeuristicLab.Problems.DataAnalysis;
 
@@ -61,50 +62,120 @@
 
       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));
+      string targetVar = dataset.DoubleVariables.Last();
 
-      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);
+      // turn of input variables that are constant in the training partition
+      var allowedInputVars = new List<string>();
+      var trainingIndizes = Enumerable.Range(0, (csvFileParser.Rows * 2) / 3);
+      if (trainingIndizes.Count() >= 2) {
+        foreach (var variableName in dataset.DoubleVariables) {
+          if (dataset.GetDoubleValues(variableName, trainingIndizes).Range() > 0 &&
+            variableName != targetVar)
+            allowedInputVars.Add(variableName);
+        }
+      } else {
+        allowedInputVars.AddRange(dataset.DoubleVariables.Where(x => !x.Equals(targetVar)));
       }
 
-      return claData;
+      ClassificationProblemData classificationData = new ClassificationProblemData(dataset, allowedInputVars, targetVar);
+
+      int trainingPartEnd = trainingIndizes.Last();
+      classificationData.TrainingPartition.Start = trainingIndizes.First();
+      classificationData.TrainingPartition.End = trainingPartEnd;
+      classificationData.TestPartition.Start = trainingPartEnd;
+      classificationData.TestPartition.End = csvFileParser.Rows;
+
+      classificationData.Name = Path.GetFileName(path);
+
+      return classificationData;
     }
 
-    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) + ";");
+    protected override IClassificationProblemData ImportData(string path, ClassificationImportType type, TableFileParser csvFileParser) {
+      int trainingPartEnd = (csvFileParser.Rows * type.TrainingPercentage) / 100;
+      List<IList> values = csvFileParser.Values;
+      if (type.Shuffle) {
+        values = Shuffle(values);
+        if (type.UniformlyDistributeClasses) {
+          values = Shuffle(values, csvFileParser.VariableNames.ToList().FindIndex(x => x.Equals(type.TargetVariable)),
+                           type.TrainingPercentage, out trainingPartEnd);
         }
-        strBuilder.Remove(strBuilder.Length - 1, 1);
-        strBuilder.AppendLine();
       }
 
-      using (StreamWriter writer = new StreamWriter(path)) {
-        writer.Write(strBuilder);
+      Dataset dataset = new Dataset(csvFileParser.VariableNames, values);
+
+      // turn of input variables that are constant in the training partition
+      var allowedInputVars = new List<string>();
+      var trainingIndizes = Enumerable.Range(0, trainingPartEnd);
+      if (trainingIndizes.Count() >= 2) {
+        foreach (var variableName in dataset.DoubleVariables) {
+          if (dataset.GetDoubleValues(variableName, trainingIndizes).Range() > 0 &&
+            variableName != type.TargetVariable)
+            allowedInputVars.Add(variableName);
+        }
+      } else {
+        allowedInputVars.AddRange(dataset.DoubleVariables.Where(x => !x.Equals(type.TargetVariable)));
       }
+
+      ClassificationProblemData classificationData = new ClassificationProblemData(dataset, allowedInputVars, type.TargetVariable);
+
+      classificationData.TrainingPartition.Start = 0;
+      classificationData.TrainingPartition.End = trainingPartEnd;
+      classificationData.TestPartition.Start = trainingPartEnd;
+      classificationData.TestPartition.End = csvFileParser.Rows;
+
+      classificationData.Name = Path.GetFileName(path);
+
+      return classificationData;
+    }
+
+    protected List<IList> Shuffle(List<IList> values, int target, int trainingPercentage, out int trainingPartEnd) {
+      IList targetValues = values[target];
+      var group = targetValues.Cast<double>().GroupBy(x => x).Select(g => new { Key = g.Key, Count = g.Count() }).ToList();
+      Dictionary<double, double> taken = new Dictionary<double, double>();
+      foreach (var classCount in group) {
+        taken[classCount.Key] = (classCount.Count * trainingPercentage) / 100.0;
+      }
+
+      List<IList> training = GetListOfIListCopy(values);
+      List<IList> test = GetListOfIListCopy(values);
+
+      for (int i = 0; i < targetValues.Count; i++) {
+        if (taken[(double)targetValues[i]] > 0) {
+          AddRow(training, values, i);
+          taken[(double)targetValues[i]]--;
+        } else {
+          AddRow(test, values, i);
+        }
+      }
+
+      trainingPartEnd = training.First().Count;
+
+      for (int i = 0; i < training.Count; i++) {
+        for (int j = 0; j < test[i].Count; j++) {
+          training[i].Add(test[i][j]);
+        }
+      }
+
+      return training;
+    }
+
+    private void AddRow(List<IList> destination, List<IList> source, int index) {
+      for (int i = 0; i < source.Count; i++) {
+        destination[i].Add(source[i][index]);
+      }
+    }
+
+    private List<IList> GetListOfIListCopy(List<IList> values) {
+      List<IList> newList = new List<IList>(values.Count);
+      foreach (IList t in values) {
+        if (t is List<double>)
+          newList.Add(new List<double>());
+        else if (t is List<DateTime>)
+          newList.Add(new List<DateTime>());
+        else if (t is List<string>)
+          newList.Add(new List<string>());
+        else
+          throw new InvalidOperationException();
+      }
+      return newList;
     }
   }
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/ClassificationDataDescriptor.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/ClassificationDataDescriptor.cs	(revision 9363)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/ClassificationDataDescriptor.cs	(revision 9363)
@@ -0,0 +1,48 @@
+﻿#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 ClassificationDataDescriptor : IDataDescriptor {
+    public abstract string Name { get; }
+    public abstract string Description { get; }
+
+    protected abstract string TargetVariable { get; }
+    protected abstract string[] VariableNames { get; }
+    protected abstract string[] AllowedInputVariables { get; }
+    protected abstract int TrainingPartitionStart { get; }
+    protected abstract int TrainingPartitionEnd { get; }
+    protected abstract int TestPartitionStart { get; }
+    protected abstract int TestPartitionEnd { get; }
+
+    public IClassificationProblemData GenerateClassificationData(Dataset dataset) {
+      IClassificationProblemData claData = new ClassificationProblemData(dataset, AllowedInputVariables, TargetVariable);
+      claData.Name = this.Name;
+      claData.Description = this.Description;
+      claData.TrainingPartition.Start = this.TrainingPartitionStart;
+      claData.TrainingPartition.End = this.TrainingPartitionEnd;
+      claData.TestPartition.Start = this.TestPartitionStart;
+      claData.TestPartition.End = this.TestPartitionEnd;
+      return claData;
+    }
+  }
+}
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/ClassificationImportType.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/ClassificationImportType.cs	(revision 9363)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/ClassificationImportType.cs	(revision 9363)
@@ -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;
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class ClassificationImportType : DataAnalysisImportType {
+    public string TargetVariable { get; set; }
+    public bool UniformlyDistributeClasses { get; set; }
+  }
+}
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/ClassificationInstanceProvider.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/ClassificationInstanceProvider.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/ClassificationInstanceProvider.cs	(revision 9363)
@@ -23,5 +23,5 @@
 
 namespace HeuristicLab.Problems.Instances.DataAnalysis {
-  public abstract class ClassificationInstanceProvider : ProblemInstanceProvider<IClassificationProblemData> {
+  public abstract class ClassificationInstanceProvider : DataAnalysisInstanceProvider<IClassificationProblemData, ClassificationImportType> {
   }
 }
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/ResourceClassificationDataDescriptor.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/ResourceClassificationDataDescriptor.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/ResourceClassificationDataDescriptor.cs	(revision 9363)
@@ -20,15 +20,13 @@
 #endregion
 
+using System.Collections.Generic;
+using System.Linq;
 
 namespace HeuristicLab.Problems.Instances.DataAnalysis {
-  internal class ResourceClassificationDataDescriptor : IDataDescriptor {
-    public string Name { get; internal set; }
-    public string Description { get; internal set; }
+  public abstract class ResourceClassificationDataDescriptor : ClassificationDataDescriptor {
+    internal string ResourceName { get; set; }
 
-    internal string ResourceName { get; set; }
-    internal ResourceClassificationDataDescriptor(string name, string description, string resourceName) {
-      Name = name;
-      Description = description;
-      ResourceName = resourceName;
+    public bool CheckVariableNames(IEnumerable<string> VariableNames) {
+      return this.VariableNames.All(x => VariableNames.Contains(x));
     }
   }
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/ResourceClassificationInstanceProvider.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/ResourceClassificationInstanceProvider.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/ResourceClassificationInstanceProvider.cs	(revision 9363)
@@ -21,5 +21,4 @@
 
 using System;
-using System.Collections.Generic;
 using System.Globalization;
 using System.IO;
@@ -34,20 +33,4 @@
 
     protected abstract string FileName { get; }
-
-    public override IEnumerable<IDataDescriptor> GetDataDescriptors() {
-      var solutionsArchiveName = GetResourceName(FileName + @"\.zip");
-      if (!String.IsNullOrEmpty(solutionsArchiveName)) {
-        using (var solutionsZipFile = new ZipInputStream(GetType().Assembly.GetManifestResourceStream(solutionsArchiveName))) {
-          IList<string> entries = new List<string>();
-          ZipEntry curEntry;
-          while ((curEntry = solutionsZipFile.GetNextEntry()) != null) {
-            entries.Add(curEntry.Name);
-          }
-          foreach (var entry in entries.OrderBy(x => x)) {
-            yield return new ResourceClassificationDataDescriptor(Path.GetFileNameWithoutExtension(entry), Description, entry);
-          }
-        }
-      }
-    }
 
     public override IClassificationProblemData LoadData(IDataDescriptor id) {
@@ -70,18 +53,9 @@
 
         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));
+        if (!descriptor.CheckVariableNames(csvFileParser.VariableNames)) {
+          throw new ArgumentException("Parsed file contains variables which are not in the descriptor.");
+        }
 
-        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;
-
-        claData.Name = descriptor.Name;
-        claData.Description = descriptor.Description;
-        return claData;
+        return descriptor.GenerateClassificationData(dataset);
       }
     }
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/UCI/Iris.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/UCI/Iris.cs	(revision 9363)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/UCI/Iris.cs	(revision 9363)
@@ -0,0 +1,59 @@
+﻿#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;
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class Iris : UCIDataDescriptor {
+    public override string Filename { get { return "Iris"; } }
+    public override string Description {
+      get {
+        return "Data Set Information:" + Environment.NewLine
+        + "This is perhaps the best known database to be found in the pattern " + Environment.NewLine
+        + "recognition literature. Fisher's paper is a classic in the field and "
+        + "is referenced frequently to this day. (See Duda & Hart, for example.) "
+        + "The data set contains 3 classes of 50 instances each, where each class "
+        + "refers to a type of iris plant. One class is linearly separable from the "
+        + "other 2; the latter are NOT linearly separable from each other." + Environment.NewLine
+        + "Predicted attribute: class of iris plant." + Environment.NewLine
+        + "This is an exceedingly simple domain." + Environment.NewLine + Environment.NewLine
+        + "The classes have been converted in the following way" + Environment.NewLine
+        + "Iris-setosa     = 0" + Environment.NewLine
+        + "Iris-versicolor = 1" + Environment.NewLine
+        + "Iris-virginica  = 2";
+      }
+    }
+    public override string Donor { get { return "M. Marshall"; } }
+    public override int Year { get { return 1988; } }
+
+    protected override string TargetVariable { get { return "class"; } }
+    protected override string[] VariableNames {
+      get { return new string[] { "sepal_length", "sepal_width", "petal_length", "petal_width", "class" }; }
+    }
+    protected override string[] AllowedInputVariables {
+      get { return new string[] { "sepal_length", "sepal_width", "petal_length", "petal_width" }; }
+    }
+    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 150; } }
+  }
+}
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/UCI/Mammography.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/UCI/Mammography.cs	(revision 9363)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/UCI/Mammography.cs	(revision 9363)
@@ -0,0 +1,63 @@
+﻿#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;
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class Mammography : UCIDataDescriptor {
+    public override string Filename { get { return "Mammography"; } }
+    public override string Description {
+      get {
+        return "Data Set Information: Features are computed from a digitized image of a fine needle aspirate (FNA) of a breast mass."
+        + "Website: http://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+%28Diagnostic%29" + Environment.NewLine
+        + "Attribute Information:" + Environment.NewLine
+        + "1) ID number" + Environment.NewLine
+        + "2) Diagnosis (M = malignant, B = benign)" + Environment.NewLine
+        + "3-32)" + Environment.NewLine + Environment.NewLine
+        + "Ten real-valued features are computed for each cell nucleus:" + Environment.NewLine + Environment.NewLine
+        + "a) radius (mean of distances from center to points on the perimeter)" + Environment.NewLine
+        + "b) texture (standard deviation of gray-scale values)" + Environment.NewLine
+        + "c) perimeter" + Environment.NewLine
+        + "d) area" + Environment.NewLine
+        + "e) smoothness (local variation in radius lengths)" + Environment.NewLine
+        + "f) compactness (perimeter^2 / area - 1.0)" + Environment.NewLine
+        + "g) concavity (severity of concave portions of the contour)" + Environment.NewLine
+        + "h) concave points (number of concave portions of the contour)" + Environment.NewLine
+        + "i) symmetry" + Environment.NewLine
+        + "j) fractal dimension (\"coastline approximation\" - 1)";
+      }
+    }
+    public override string Donor { get { return "M. Elter"; } }
+    public override int Year { get { return 2007; } }
+
+    protected override string TargetVariable { get { return "Severity"; } }
+    protected override string[] VariableNames {
+      get { return new string[] { "BI-RADS", "Age", "Shape", "Margin", "Density", "Severity" }; }
+    }
+    protected override string[] AllowedInputVariables {
+      get { return new string[] { "BI-RADS", "Age", "Shape", "Margin", "Density" }; }
+    }
+    protected override int TrainingPartitionStart { get { return 0; } }
+    protected override int TrainingPartitionEnd { get { return 641; } }
+    protected override int TestPartitionStart { get { return 641; } }
+    protected override int TestPartitionEnd { get { return 961; } }
+  }
+}
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/UCI/Parkinson.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/UCI/Parkinson.cs	(revision 9363)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/UCI/Parkinson.cs	(revision 9363)
@@ -0,0 +1,57 @@
+﻿#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;
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class Parkinson : UCIDataDescriptor {
+    public override string Filename { get { return "Parkinson"; } }
+    public override string Description {
+      get {
+        return "Data Set Information:" + Environment.NewLine
+        + "This dataset is composed of a range of biomedical voice measurements from 31 people, 23 with "
+        + "Parkinson's disease (PD). Each column in the table is a particular voice measure, and each row "
+        + "corresponds one of 195 voice recording from these individuals (\"name\" column). The main aim of "
+        + "the data is to discriminate healthy people from those with PD, according to \"status\" column which "
+        + "is set to 0 for healthy and 1 for PD." + Environment.NewLine
+        + "Further details are contained in the following reference -- if you use this dataset, please cite: " + Environment.NewLine
+        + "Max A. Little, Patrick E. McSharry, Eric J. Hunter, Lorraine O. Ramig (2008), 'Suitability of "
+        + "dysphonia measurements for telemonitoring of Parkinson's disease', IEEE Transactions on Biomedical "
+        + "Engineering (to appear)." + Environment.NewLine
+        + "Note: The column \"name\" has been removed and the column \"status\" has been moved to the end.";
+      }
+    }
+    public override string Donor { get { return "M. Little"; } }
+    public override int Year { get { return 2008; } }
+
+    protected override string TargetVariable { get { return "status"; } }
+    protected override string[] VariableNames {
+      get { return new string[] { "MDVP:Fo(Hz)", "MDVP:Fhi(Hz)", "MDVP:Flo(Hz)", "MDVP:Jitter(%)", "MDVP:Jitter(Abs)", "MDVP:RAP", "MDVP:PPQ", "Jitter:DDP", "MDVP:Shimmer", "MDVP:Shimmer(dB)", "Shimmer:APQ3", "Shimmer:APQ5", "MDVP:APQ", "Shimmer:DDA", "NHR", "HNR", "RPDE", "DFA", "spread1", "spread2", "D2", "PPE", "status" }; }
+    }
+    protected override string[] AllowedInputVariables {
+      get { return new string[] { "MDVP:Fo(Hz)", "MDVP:Fhi(Hz)", "MDVP:Flo(Hz)", "MDVP:Jitter(%)", "MDVP:Jitter(Abs)", "MDVP:RAP", "MDVP:PPQ", "Jitter:DDP", "MDVP:Shimmer", "MDVP:Shimmer(dB)", "Shimmer:APQ3", "Shimmer:APQ5", "MDVP:APQ", "Shimmer:DDA", "NHR", "HNR", "RPDE", "DFA", "spread1", "spread2", "D2", "PPE" }; }
+    }
+    protected override int TrainingPartitionStart { get { return 0; } }
+    protected override int TrainingPartitionEnd { get { return 130; } }
+    protected override int TestPartitionStart { get { return 130; } }
+    protected override int TestPartitionEnd { get { return 195; } }
+  }
+}
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/UCI/Thyroid.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/UCI/Thyroid.cs	(revision 9363)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/UCI/Thyroid.cs	(revision 9363)
@@ -0,0 +1,56 @@
+﻿#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;
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class Thyroid : UCIDataDescriptor {
+    public override string Filename { get { return "Thyroid"; } }
+    public override string Description {
+      get {
+        return "Thyroid gland data. ('normal', hypo and hyper functioning)" + Environment.NewLine + Environment.NewLine +
+        "Attr. no :" + Environment.NewLine +
+        "1: Class attribute (1 = normal, 2 = hyper, 3 = hypo)" + Environment.NewLine +
+        "2: T3-resin uptake test. (A percentage)" + Environment.NewLine +
+        "3: Total Serum thyroxin as measured by the isotopic displacement method." + Environment.NewLine +
+        "4: Total serum triiodothyronine as measured by radioimmuno	assay." + Environment.NewLine +
+        "5: basal thyroid-stimulating hormone (TSH) as measured by radioimmuno assay." + Environment.NewLine +
+        "6: Maximal absolute difference of TSH value after injection of 200 micro grams of " +
+        "thyrotropin-releasing hormone as compared to the basal value." + Environment.NewLine +
+        "All attributes are continuous.";
+      }
+    }
+    public override string Donor { get { return "S. Aeberhard"; } }
+    public override int Year { get { return 1992; } }
+
+    protected override string TargetVariable { get { return "X000"; } }
+    protected override string[] VariableNames {
+      get { return new string[] { "X001", "X002", "X003", "X004", "X005", "X000" }; }
+    }
+    protected override string[] AllowedInputVariables {
+      get { return new string[] { "X001", "X002", "X003", "X004", "X005" }; }
+    }
+    protected override int TrainingPartitionStart { get { return 0; } }
+    protected override int TrainingPartitionEnd { get { return 143; } }
+    protected override int TestPartitionStart { get { return 143; } }
+    protected override int TestPartitionEnd { get { return 215; } }
+  }
+}
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/UCI/UCIDataDescriptor.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/UCI/UCIDataDescriptor.cs	(revision 9363)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/UCI/UCIDataDescriptor.cs	(revision 9363)
@@ -0,0 +1,31 @@
+﻿#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;
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public abstract class UCIDataDescriptor : ResourceClassificationDataDescriptor {
+    public override string Name { get { return String.Format("{0}, {1}, {2}", Filename, Donor, Year); } }
+    public abstract string Filename { get; }
+    public abstract string Donor { get; }
+    public abstract int Year { get; }
+  }
+}
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/UCI/UCIInstanceProvider.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/UCI/UCIInstanceProvider.cs	(revision 9363)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/UCI/UCIInstanceProvider.cs	(revision 9363)
@@ -0,0 +1,77 @@
+﻿#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.Linq;
+using ICSharpCode.SharpZipLib.Zip;
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class UCIInstanceProvider : ResourceClassificationInstanceProvider {
+    public override string Name {
+      get { return "UCI Problems"; }
+    }
+    public override string Description {
+      get {
+        return "";
+      }
+    }
+    public override Uri WebLink {
+      get { return new Uri("http://archive.ics.uci.edu/ml/datasets.html"); }
+    }
+    public override string ReferencePublication {
+      get { return ""; }
+    }
+
+    protected override string FileName { get { return "UCI"; } }
+
+    public override IEnumerable<IDataDescriptor> GetDataDescriptors() {
+      List<UCIDataDescriptor> descriptorList = new List<UCIDataDescriptor>();
+      descriptorList.Add(new Iris());
+      descriptorList.Add(new Mammography());
+      descriptorList.Add(new Parkinson());
+      descriptorList.Add(new Thyroid());
+      descriptorList.Add(new Vertebral_3C());
+      descriptorList.Add(new Wine());
+      descriptorList.Add(new WisconsinDiagnosticBreastCancer());
+      var solutionsArchiveName = GetResourceName(FileName + @"\.zip");
+      if (!String.IsNullOrEmpty(solutionsArchiveName)) {
+        using (var solutionsZipFile = new ZipInputStream(GetType().Assembly.GetManifestResourceStream(solutionsArchiveName))) {
+          IList<string> entries = new List<string>();
+          ZipEntry curEntry;
+          while ((curEntry = solutionsZipFile.GetNextEntry()) != null) {
+            entries.Add(curEntry.Name);
+          }
+          foreach (var entry in entries.OrderBy(x => x)) {
+            string filename = Path.GetFileNameWithoutExtension(entry);
+            UCIDataDescriptor desc = descriptorList.Where(x => x.Filename.Equals(filename)).FirstOrDefault();
+            if (desc != null) {
+              desc.ResourceName = entry;
+              yield return desc;
+            } else
+              throw new ArgumentNullException("No Descriptor could be found for this entry.");
+          }
+        }
+      }
+    }
+  }
+}
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/UCI/Vertebral_3C.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/UCI/Vertebral_3C.cs	(revision 9363)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/UCI/Vertebral_3C.cs	(revision 9363)
@@ -0,0 +1,57 @@
+﻿#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;
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class Vertebral_3C : UCIDataDescriptor {
+    public override string Filename { get { return "Vertebral_3C"; } }
+    public override string Description {
+      get {
+        return "Data Set Information:" + Environment.NewLine
+        + "Biomedical data set built by Dr. Henrique da Mota during a medical residence "
+        + "period in the Group of Applied Research in Orthopaedics (GARO) of the Centre "
+        + "Médico-Chirurgical de Réadaptation des Massues, Lyon, France. The data have been "
+        + "organized in two different but related classification tasks. The first task consists "
+        + "in classifying patients as belonging to one out of three categories: Normal (100 patients), "
+        + "Disk Hernia (60 patients) or Spondylolisthesis (150 patients)." + Environment.NewLine
+        + "Each patient is represented in the data set by six biomechanical attributes derived from "
+        + "the shape and orientation of the pelvis and lumbar spine (in this order): pelvic incidence, "
+        + "pelvic tilt, lumbar lordosis angle, sacral slope, pelvic radius and grade of spondylolisthesis." + Environment.NewLine
+        + "Note: Normal has the value '0', Spondylolisthesis is '1' and Disk Hernia = '2'.";
+      }
+    }
+    public override string Donor { get { return "H. da Mota"; } }
+    public override int Year { get { return 2011; } }
+
+    protected override string TargetVariable { get { return "class"; } }
+    protected override string[] VariableNames {
+      get { return new string[] { "pelvic_incidence", "pelvic_tilt", "lumbar_lordosis_angle", "sacral_slope", "pelvic_radius", "degree_1", "class" }; }
+    }
+    protected override string[] AllowedInputVariables {
+      get { return new string[] { "pelvic_incidence", "pelvic_tilt", "lumbar_lordosis_angle", "sacral_slope", "pelvic_radius", "degree_1" }; }
+    }
+    protected override int TrainingPartitionStart { get { return 0; } }
+    protected override int TrainingPartitionEnd { get { return 207; } }
+    protected override int TestPartitionStart { get { return 207; } }
+    protected override int TestPartitionEnd { get { return 310; } }
+  }
+}
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/UCI/Wine.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/UCI/Wine.cs	(revision 9363)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/UCI/Wine.cs	(revision 9363)
@@ -0,0 +1,68 @@
+﻿#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;
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class Wine : UCIDataDescriptor {
+    public override string Filename { get { return "Wine"; } }
+    public override string Description {
+      get {
+        return "These data are the results of a chemical analysis of wines grown in the same region " +
+        "in Italy but derived from three different cultivars. The analysis determined the quantities " +
+        "of 13 constituents found in each of the three types of wines." + Environment.NewLine + Environment.NewLine +
+        "I think that the initial data set had around 30 variables, but for some reason I only have the " +
+        "13 dimensional version. I had a list of what the 30 or so variables were, but a.) I lost it, and b.), " +
+        "I would not know which 13 variables are included in the set." + Environment.NewLine + Environment.NewLine +
+        "The attributes are (dontated by Riccardo Leardi, riclea '@' anchem.unige.it )" + Environment.NewLine +
+        "1) Alcohol" + Environment.NewLine +
+        "2) Malic acid" + Environment.NewLine +
+        "3) Ash" + Environment.NewLine +
+        "4) Alcalinity of ash" + Environment.NewLine +
+        "5) Magnesium" + Environment.NewLine +
+        "6) Total phenols" + Environment.NewLine +
+        "7) Flavanoids" + Environment.NewLine +
+        "8) Nonflavanoid phenols" + Environment.NewLine +
+        "9) Proanthocyanins" + Environment.NewLine +
+        "10)Color intensity" + Environment.NewLine +
+        "11)Hue" + Environment.NewLine +
+        "12)OD280/OD315 of diluted wines" + Environment.NewLine +
+        "13)Proline" + Environment.NewLine + Environment.NewLine +
+        "In a classification context, this is a well posed problem with \"well behaved\" class structures. A " +
+        "good data set for first testing of a new classifier, but not very challenging. ";
+      }
+    }
+    public override string Donor { get { return "S. Aeberhard"; } }
+    public override int Year { get { return 1991; } }
+
+    protected override string TargetVariable { get { return "Class"; } }
+    protected override string[] VariableNames {
+      get { return new string[] { "Alcohol", "Malic acid", "Ash", "Alcalinity of ash", "Magnesium", "Total phenols", "Flavanoids", "Nonflavanoid phenols", "Proanthocyanins", "Color intensity", "Hue", "OD280/OD315 of diluted wines", "Proline", "Class" }; }
+    }
+    protected override string[] AllowedInputVariables {
+      get { return new string[] { "Alcohol", "Malic acid", "Ash", "Alcalinity of ash", "Magnesium", "Total phenols", "Flavanoids", "Nonflavanoid phenols", "Proanthocyanins", "Color intensity", "Hue", "OD280/OD315 of diluted wines", "Proline" }; }
+    }
+    protected override int TrainingPartitionStart { get { return 0; } }
+    protected override int TrainingPartitionEnd { get { return 119; } }
+    protected override int TestPartitionStart { get { return 119; } }
+    protected override int TestPartitionEnd { get { return 178; } }
+  }
+}
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/UCI/WisconsinDiagnosticBreastCancer.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/UCI/WisconsinDiagnosticBreastCancer.cs	(revision 9363)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/UCI/WisconsinDiagnosticBreastCancer.cs	(revision 9363)
@@ -0,0 +1,58 @@
+﻿#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;
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class WisconsinDiagnosticBreastCancer : UCIDataDescriptor {
+    public override string Filename { get { return "Wisconsin Diagnostic Breast Cancer"; } }
+    public override string Description {
+      get {
+        return "Data Set Information:" + Environment.NewLine
+        + "Results:" + Environment.NewLine
+        + "- predicting field 2, diagnosis: B = benign, M = malignant" + Environment.NewLine
+        + "- sets are linearly separable using all 30 input features" + Environment.NewLine
+        + "- best predictive accuracy obtained using one separating plane" + Environment.NewLine
+        + "  in the 3-D space of Worst Area, Worst Smoothness and" + Environment.NewLine
+        + "  Mean Texture.  Estimated accuracy 97.5% using repeated" + Environment.NewLine
+        + "  10-fold crossvalidations.  Classifier has correctly" + Environment.NewLine
+        + "  diagnosed 176 consecutive new patients as of November 1995." + Environment.NewLine + Environment.NewLine
+        + "The classes have been converted in the following way" + Environment.NewLine
+        + "B = benign    = 0" + Environment.NewLine
+        + "M = malignant = 1";
+      }
+    }
+    public override string Donor { get { return "Nick Street"; } }
+    public override int Year { get { return 1995; } }
+
+    protected override string TargetVariable { get { return "Diagnosis"; } }
+    protected override string[] VariableNames {
+      get { return new string[] { "ID number", "Diagnosis", "mean radius", "mean texture", "mean perimeter", "mean area", "mean smoothness", "mean compactness", "mean concavity", "mean concave points", "mean symmetry", "mean fractal dimension", "radius SE", "texture SE", "perimeter SE", "area SE", "smoothness SE", "compactness SE", "concavity SE", "concave points SE", "symmetry SE", "fractal dimension SE", "worst radius", "worst texture", "worst perimeter", "worst area", "worst smoothness", "worst compactness", "worst concavity", "worst concave points", "worst symmetry", "worst fractal dimension" }; }
+    }
+    protected override string[] AllowedInputVariables {
+      get { return new string[] { "mean radius", "mean texture", "mean perimeter", "mean area", "mean smoothness", "mean compactness", "mean concavity", "mean concave points", "mean symmetry", "mean fractal dimension", "radius SE", "texture SE", "perimeter SE", "area SE", "smoothness SE", "compactness SE", "concavity SE", "concave points SE", "symmetry SE", "fractal dimension SE", "worst radius", "worst texture", "worst perimeter", "worst area", "worst smoothness", "worst compactness", "worst concavity", "worst concave points", "worst symmetry", "worst fractal dimension" }; }
+    }
+    protected override int TrainingPartitionStart { get { return 0; } }
+    protected override int TrainingPartitionEnd { get { return 380; } }
+    protected override int TestPartitionStart { get { return 380; } }
+    protected override int TestPartitionEnd { get { return 569; } }
+  }
+}
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Clustering/CSV/ClusteringCSVInstanceProvider.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Clustering/CSV/ClusteringCSVInstanceProvider.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Clustering/CSV/ClusteringCSVInstanceProvider.cs	(revision 9363)
@@ -21,7 +21,9 @@
 
 using System;
+using System.Collections;
 using System.Collections.Generic;
 using System.IO;
-using System.Text;
+using System.Linq;
+using HeuristicLab.Common;
 using HeuristicLab.Problems.DataAnalysis;
 
@@ -56,51 +58,68 @@
     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);
+      Dataset dataset = new Dataset(csvFileParser.VariableNames, csvFileParser.Values);
+      string targetVar = dataset.DoubleVariables.Last();
 
-      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);
+      // turn of input variables that are constant in the training partition
+      var allowedInputVars = new List<string>();
+      var trainingIndizes = Enumerable.Range(0, (csvFileParser.Rows * 2) / 3);
+      if (trainingIndizes.Count() >= 2) {
+        foreach (var variableName in dataset.DoubleVariables) {
+          if (dataset.GetDoubleValues(variableName, trainingIndizes).Range() > 0 &&
+            variableName != targetVar)
+            allowedInputVars.Add(variableName);
+        }
+      } else {
+        allowedInputVars.AddRange(dataset.DoubleVariables.Where(x => !x.Equals(targetVar)));
       }
 
-      return claData;
+      ClusteringProblemData clusteringData = new ClusteringProblemData(dataset, allowedInputVars);
+
+      int trainingPartEnd = trainingIndizes.Last();
+      clusteringData.TrainingPartition.Start = trainingIndizes.First();
+      clusteringData.TrainingPartition.End = trainingPartEnd;
+      clusteringData.TestPartition.Start = trainingPartEnd;
+      clusteringData.TestPartition.End = csvFileParser.Rows;
+
+      clusteringData.Name = Path.GetFileName(path);
+
+      return clusteringData;
     }
 
-    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();
+    protected override IClusteringProblemData ImportData(string path, DataAnalysisImportType type, TableFileParser csvFileParser) {
+      List<IList> values = csvFileParser.Values;
+      if (type.Shuffle) {
+        values = Shuffle(values);
       }
 
-      using (var writer = new StreamWriter(path)) {
-        writer.Write(strBuilder);
+      Dataset dataset = new Dataset(csvFileParser.VariableNames, values);
+      string targetVar = dataset.DoubleVariables.Last();
+
+      // turn of input variables that are constant in the training partition
+      var allowedInputVars = new List<string>();
+      int trainingPartEnd = (csvFileParser.Rows * type.TrainingPercentage) / 100;
+      var trainingIndizes = Enumerable.Range(0, trainingPartEnd);
+      if (trainingIndizes.Count() >= 2) {
+        foreach (var variableName in dataset.DoubleVariables) {
+          if (dataset.GetDoubleValues(variableName, trainingIndizes).Range() > 0 &&
+            variableName != targetVar)
+            allowedInputVars.Add(variableName);
+        }
+      } else {
+        allowedInputVars.AddRange(dataset.DoubleVariables.Where(x => !x.Equals(targetVar)));
       }
+
+      ClusteringProblemData clusteringData = new ClusteringProblemData(dataset, allowedInputVars);
+
+      clusteringData.TrainingPartition.Start = 0;
+      clusteringData.TrainingPartition.End = trainingPartEnd;
+      clusteringData.TestPartition.Start = trainingPartEnd;
+      clusteringData.TestPartition.End = csvFileParser.Rows;
+
+      clusteringData.Name = Path.GetFileName(path);
+
+      return clusteringData;
     }
   }
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Clustering/ClusteringInstanceProvider.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Clustering/ClusteringInstanceProvider.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Clustering/ClusteringInstanceProvider.cs	(revision 9363)
@@ -23,5 +23,5 @@
 
 namespace HeuristicLab.Problems.Instances.DataAnalysis {
-  public abstract class ClusteringInstanceProvider : ProblemInstanceProvider<IClusteringProblemData> {
+  public abstract class ClusteringInstanceProvider : DataAnalysisInstanceProvider<IClusteringProblemData, DataAnalysisImportType> {
   }
 }
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/DataAnalysisCSVFormat.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/DataAnalysisCSVFormat.cs	(revision 9363)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/DataAnalysisCSVFormat.cs	(revision 9363)
@@ -0,0 +1,30 @@
+﻿#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.Globalization;
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class DataAnalysisCSVFormat {
+    public char Separator { get; set; }
+    public NumberFormatInfo NumberFormatInfo { get; set; }
+    public DateTimeFormatInfo DateTimeFormatInfo { get; set; }
+  }
+}
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/DataAnalysisImportType.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/DataAnalysisImportType.cs	(revision 9363)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/DataAnalysisImportType.cs	(revision 9363)
@@ -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;
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class DataAnalysisImportType {
+    public bool Shuffle { get; set; }
+    public int TrainingPercentage { get; set; }
+  }
+}
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/DataAnalysisInstanceProvider.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/DataAnalysisInstanceProvider.cs	(revision 9363)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/DataAnalysisInstanceProvider.cs	(revision 9363)
@@ -0,0 +1,97 @@
+﻿#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;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Problems.DataAnalysis;
+using HeuristicLab.Random;
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public abstract class DataAnalysisInstanceProvider<TData, ImportType> : ProblemInstanceProvider<TData>
+    where TData : class, IDataAnalysisProblemData
+    where ImportType : DataAnalysisImportType {
+
+
+    public TData ImportData(string path, ImportType type, DataAnalysisCSVFormat csvFormat) {
+      TableFileParser csvFileParser = new TableFileParser();
+      csvFileParser.Parse(path, csvFormat.NumberFormatInfo, csvFormat.DateTimeFormatInfo, csvFormat.Separator);
+      return ImportData(path, type, csvFileParser);
+    }
+
+    protected virtual TData ImportData(string path, ImportType type, TableFileParser csvFileParser) {
+      throw new NotSupportedException();
+    }
+
+    protected List<IList> Shuffle(List<IList> values) {
+      int count = values.First().Count;
+      int[] indices = Enumerable.Range(0, count).Shuffle(new FastRandom()).ToArray();
+      List<IList> shuffled = new List<IList>(values.Count);
+      for (int col = 0; col < values.Count; col++) {
+
+        if (values[col] is List<double>)
+          shuffled.Add(new List<double>());
+        else if (values[col] is List<DateTime>)
+          shuffled.Add(new List<DateTime>());
+        else if (values[col] is List<string>)
+          shuffled.Add(new List<string>());
+        else
+          throw new InvalidOperationException();
+
+        for (int i = 0; i < count; i++) {
+          shuffled[col].Add(values[col][indices[i]]);
+        }
+      }
+      return shuffled;
+    }
+
+    public override bool CanExportData {
+      get { return true; }
+    }
+    public override void ExportData(TData instance, string path) {
+      var strBuilder = new StringBuilder();
+      var colSep = CultureInfo.CurrentCulture.TextInfo.ListSeparator;
+      foreach (var variable in instance.Dataset.VariableNames) {
+        strBuilder.Append(variable.Replace(colSep, String.Empty) + colSep);
+      }
+      strBuilder.Remove(strBuilder.Length - colSep.Length, colSep.Length);
+      strBuilder.AppendLine();
+
+      var dataset = instance.Dataset;
+
+      for (int i = 0; i < dataset.Rows; i++) {
+        for (int j = 0; j < dataset.Columns; j++) {
+          if (j > 0) strBuilder.Append(colSep);
+          strBuilder.Append(dataset.GetValue(i, j));
+        }
+        strBuilder.AppendLine();
+      }
+
+      using (var writer = new StreamWriter(path)) {
+        writer.Write(strBuilder);
+      }
+    }
+  }
+}
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj	(revision 9363)
@@ -98,5 +98,6 @@
   </PropertyGroup>
   <ItemGroup>
-    <Reference Include="ICSharpCode.SharpZipLib, Version=0.85.4.369, Culture=neutral, PublicKeyToken=1b03e6acf1164f73, processorArchitecture=MSIL">
+    <Reference Include="ICSharpCode.SharpZipLib">
+      <HintPath>..\..\HeuristicLab.PluginInfrastructure\3.3\ICSharpCode.SharpZipLib.dll</HintPath>
       <Private>False</Private>
     </Reference>
@@ -114,18 +115,32 @@
     <Compile Include="Classification\ArtificialClassificationDataDescriptor.cs" />
     <Compile Include="Classification\ArtificialClassificationInstanceProvider.cs" />
+    <Compile Include="Classification\ClassificationImportType.cs" />
     <Compile Include="Classification\ClassificationInstanceProvider.cs" />
     <Compile Include="Classification\CSV\ClassifiactionCSVInstanceProvider.cs" />
-    <Compile Include="Classification\RealWorld\Iris.cs" />
-    <Compile Include="Classification\RealWorld\Mammography.cs" />
-    <Compile Include="Classification\RealWorld\ClassificationRealWorldInstanceProvider.cs" />
     <Compile Include="Classification\ResourceClassificationDataDescriptor.cs" />
     <Compile Include="Classification\ResourceClassificationInstanceProvider.cs" />
+    <Compile Include="Classification\UCI\WisconsinDiagnosticBreastCancer.cs" />
+    <Compile Include="Classification\UCI\Vertebral_3C.cs" />
+    <Compile Include="Classification\UCI\Parkinson.cs" />
+    <Compile Include="Classification\UCI\Iris.cs" />
+    <Compile Include="Classification\UCI\UCIDataDescriptor.cs" />
+    <Compile Include="Classification\UCI\Mammography.cs" />
+    <Compile Include="Classification\UCI\Thyroid.cs" />
+    <Compile Include="Classification\UCI\UCIInstanceProvider.cs" />
+    <Compile Include="Classification\UCI\Wine.cs" />
     <Compile Include="Clustering\ClusteringInstanceProvider.cs" />
     <Compile Include="Clustering\CSV\ClusteringCSVInstanceProvider.cs" />
+    <Compile Include="DataAnalysisCSVFormat.cs" />
+    <Compile Include="DataAnalysisImportType.cs" />
+    <Compile Include="DataAnalysisInstanceProvider.cs" />
     <Compile Include="Plugin.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Classification\ClassificationDataDescriptor.cs" />
     <Compile Include="Regression\ArtificialRegressionDataDescriptor.cs" />
     <Compile Include="Regression\ArtificialRegressionInstanceProvider.cs" />
     <Compile Include="Regression\CSV\RegressionCSVInstanceProvider.cs" />
+    <Compile Include="Regression\FeatureSelection\FeatureSelectionRegressionProblemData.cs" />
+    <Compile Include="Regression\FeatureSelection\FeatureSelection.cs" />
+    <Compile Include="Regression\FeatureSelection\FeatureSelectionInstanceProvider.cs" />
     <Compile Include="Regression\Keijzer\KeijzerFunctionFourteen.cs" />
     <Compile Include="Regression\Keijzer\KeijzerFunctionEleven.cs" />
@@ -134,4 +149,5 @@
     <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" />
@@ -139,5 +155,7 @@
     <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" />
@@ -170,5 +188,10 @@
     <Compile Include="Regression\Nguyen\NguyenFunctionTwo.cs" />
     <Compile Include="Regression\Nguyen\NguyenInstanceProvider.cs" />
-    <Compile Include="Regression\RealWorld\RegressionRealWorldInstanceProvider.cs" />
+    <Compile Include="Regression\RealWorld\ChemicalOne.cs" />
+    <Compile Include="Regression\RealWorld\Housing.cs" />
+    <Compile Include="Regression\RealWorld\RealWorldRegressionInstanceProvider.cs" />
+    <Compile Include="Regression\RealWorld\Tower.cs" />
+    <Compile Include="Regression\RegressionDataDescriptor.cs" />
+    <Compile Include="Regression\RegressionImportType.cs" />
     <Compile Include="Regression\RegressionInstanceProvider.cs" />
     <Compile Include="Regression\ResourceRegressionDataDescriptor.cs" />
@@ -191,7 +214,10 @@
     <Compile Include="Regression\Vladislavleva\VladislavlevaInstanceProvider.cs" />
     <Compile Include="TableFileParser.cs" />
-  </ItemGroup>
-  <ItemGroup>
-    <EmbeddedResource Include="Classification\Data\ClassificationRealWorld.zip" />
+    <Compile Include="TimeSeries\CSV\TimeSeriesPrognosisCSVInstanceProvider.cs" />
+    <Compile Include="TimeSeries\TimeSeriesPrognosisImportType.cs" />
+    <Compile Include="TimeSeries\TimeSeriesPrognosisInstanceProvider.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Classification\Data\UCI.zip" />
     <None Include="HeuristicLab.snk" />
     <None Include="Plugin.cs.frame" />
@@ -220,4 +246,12 @@
       <Private>False</Private>
     </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Parameters\3.3\HeuristicLab.Parameters-3.3.csproj">
+      <Project>{56F9106A-079F-4C61-92F6-86A84C2D84B7}</Project>
+      <Name>HeuristicLab.Parameters-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Persistence\3.3\HeuristicLab.Persistence-3.3.csproj">
+      <Project>{102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B}</Project>
+      <Name>HeuristicLab.Persistence-3.3</Name>
+    </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\3.3\HeuristicLab.PluginInfrastructure-3.3.csproj">
       <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
@@ -243,5 +277,5 @@
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <PropertyGroup>
-    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+    <PreBuildEvent Condition=" '$(OS)' == 'Windows_NT' ">set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
 set ProjectDir=$(ProjectDir)
 set SolutionDir=$(SolutionDir)
@@ -249,4 +283,10 @@
 
 call PreBuildEvent.cmd</PreBuildEvent>
+    <PreBuildEvent Condition=" '$(OS)' != 'Windows_NT' ">
+export ProjectDir=$(ProjectDir)
+export SolutionDir=$(SolutionDir)
+
+$SolutionDir/PreBuildEvent.sh
+</PreBuildEvent>
   </PropertyGroup>
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Plugin.cs.frame
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Plugin.cs.frame	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Plugin.cs.frame	(revision 9363)
@@ -23,8 +23,12 @@
 
 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.Collections", "3.3")]
   [PluginDependency("HeuristicLab.Core", "3.3")]
   [PluginDependency("HeuristicLab.Data", "3.3")]
+  [PluginDependency("HeuristicLab.Parameters", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]
   [PluginDependency("HeuristicLab.Problems.DataAnalysis", "3.4")]
   [PluginDependency("HeuristicLab.Problems.Instances", "3.3")]
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Properties/AssemblyInfo.cs.frame	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Properties/AssemblyInfo.cs.frame	(revision 9363)
@@ -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/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/ArtificialRegressionDataDescriptor.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/ArtificialRegressionDataDescriptor.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/ArtificialRegressionDataDescriptor.cs	(revision 9363)
@@ -24,27 +24,8 @@
 
 namespace HeuristicLab.Problems.Instances.DataAnalysis {
-  public abstract class ArtificialRegressionDataDescriptor : IDataDescriptor {
-    public abstract string Name { get; }
-    public abstract string Description { get; }
-
-    protected abstract string TargetVariable { get; }
-    protected abstract string[] InputVariables { get; }
-    protected abstract string[] AllowedInputVariables { get; }
-    protected abstract int TrainingPartitionStart { get; }
-    protected abstract int TrainingPartitionEnd { get; }
-    protected abstract int TestPartitionStart { get; }
-    protected abstract int TestPartitionEnd { get; }
-
+  public abstract class ArtificialRegressionDataDescriptor : RegressionDataDescriptor {
     public IRegressionProblemData GenerateRegressionData() {
-      Dataset dataset = new Dataset(InputVariables, this.GenerateValues());
-
-      RegressionProblemData regData = new RegressionProblemData(dataset, AllowedInputVariables, TargetVariable);
-      regData.Name = this.Name;
-      regData.Description = this.Description;
-      regData.TrainingPartition.Start = this.TrainingPartitionStart;
-      regData.TrainingPartition.End = this.TrainingPartitionEnd;
-      regData.TestPartition.Start = this.TestPartitionStart;
-      regData.TestPartition.End = this.TestPartitionEnd;
-      return regData;
+      Dataset dataset = new Dataset(VariableNames, this.GenerateValues());
+      return GenerateRegressionData(dataset);
     }
 
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/CSV/RegressionCSVInstanceProvider.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/CSV/RegressionCSVInstanceProvider.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/CSV/RegressionCSVInstanceProvider.cs	(revision 9363)
@@ -21,8 +21,9 @@
 
 using System;
+using System.Collections;
 using System.Collections.Generic;
 using System.IO;
 using System.Linq;
-using System.Text;
+using HeuristicLab.Common;
 using HeuristicLab.Problems.DataAnalysis;
 
@@ -59,51 +60,64 @@
 
       Dataset dataset = new Dataset(csvFileParser.VariableNames, csvFileParser.Values);
-      string targetVar = csvFileParser.VariableNames.Where(x => dataset.DoubleVariables.Contains(x)).Last();
+      string targetVar = dataset.DoubleVariables.Last();
 
-      IEnumerable<string> allowedInputVars = dataset.DoubleVariables.Where(x => !x.Equals(targetVar));
+      // turn of input variables that are constant in the training partition
+      var allowedInputVars = new List<string>();
+      var trainingIndizes = Enumerable.Range(0, (csvFileParser.Rows * 2) / 3);
+      if (trainingIndizes.Count() >= 2) {
+        foreach (var variableName in dataset.DoubleVariables) {
+          if (dataset.GetDoubleValues(variableName, trainingIndizes).Range() > 0 &&
+            variableName != targetVar)
+            allowedInputVars.Add(variableName);
+        }
+      } else {
+        allowedInputVars.AddRange(dataset.DoubleVariables.Where(x => !x.Equals(targetVar)));
+      }
 
-      IRegressionProblemData regData = new RegressionProblemData(dataset, allowedInputVars, targetVar);
+      IRegressionProblemData regressionData = 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;
+      var trainingPartEnd = trainingIndizes.Last();
+      regressionData.TrainingPartition.Start = trainingIndizes.First();
+      regressionData.TrainingPartition.End = trainingPartEnd;
+      regressionData.TestPartition.Start = trainingPartEnd;
+      regressionData.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;
+      regressionData.Name = Path.GetFileName(path);
+
+      return regressionData;
     }
 
-    public override bool CanExportData {
-      get { return true; }
-    }
-    public override void ExportData(IRegressionProblemData instance, string path) {
-      StringBuilder strBuilder = new StringBuilder();
+    protected override IRegressionProblemData ImportData(string path, RegressionImportType type, TableFileParser csvFileParser) {
+      List<IList> values = csvFileParser.Values;
+      if (type.Shuffle) {
+        values = Shuffle(values);
+      }
+      Dataset dataset = new Dataset(csvFileParser.VariableNames, values);
 
-      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) + ";");
+      // turn of input variables that are constant in the training partition
+      var allowedInputVars = new List<string>();
+      int trainingPartEnd = (csvFileParser.Rows * type.TrainingPercentage) / 100;
+      trainingPartEnd = trainingPartEnd > 0 ? trainingPartEnd : 1;
+      var trainingIndizes = Enumerable.Range(0, trainingPartEnd);
+      if (trainingIndizes.Count() >= 2) {
+        foreach (var variableName in dataset.DoubleVariables) {
+          if (dataset.GetDoubleValues(variableName, trainingIndizes).Range() > 0 &&
+            variableName != type.TargetVariable)
+            allowedInputVars.Add(variableName);
         }
-        strBuilder.Remove(strBuilder.Length - 1, 1);
-        strBuilder.AppendLine();
+      } else {
+        allowedInputVars.AddRange(dataset.DoubleVariables.Where(x => !x.Equals(type.TargetVariable)));
       }
 
-      using (StreamWriter writer = new StreamWriter(path)) {
-        writer.Write(strBuilder);
-      }
+      RegressionProblemData regressionData = new RegressionProblemData(dataset, allowedInputVars, type.TargetVariable);
+
+      regressionData.TrainingPartition.Start = 0;
+      regressionData.TrainingPartition.End = trainingPartEnd;
+      regressionData.TestPartition.Start = trainingPartEnd;
+      regressionData.TestPartition.End = csvFileParser.Rows;
+
+      regressionData.Name = Path.GetFileName(path);
+
+      return regressionData;
     }
   }
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/FeatureSelection/FeatureSelection.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/FeatureSelection/FeatureSelection.cs	(revision 9363)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/FeatureSelection/FeatureSelection.cs	(revision 9363)
@@ -0,0 +1,148 @@
+﻿#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;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Random;
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class FeatureSelection : ArtificialRegressionDataDescriptor {
+    private int nTrainingSamples;
+    private int nTestSamples;
+
+    private int numberOfFeatures;
+    private double selectionProbability;
+    private double noiseRatio;
+    private IRandom xRandom;
+    private IRandom weightRandom;
+
+    public override string Name { get { return string.Format("FeatSel-{0}-{1:0%}-{2:0%}", numberOfFeatures, selectionProbability, noiseRatio); } }
+    public override string Description {
+      get {
+        return "This problem is specifically designed to test feature selection." + Environment.NewLine
+               + "In this instance the number of rows for training (" + nTrainingSamples +
+               ") is only slightly larger than the number of columns (" + numberOfFeatures +
+               ") and only a subset of the columns must be selected for the predictive model." + Environment.NewLine
+               + "The target variable is calculated as a noisy linear combination of randomly selected features: y = w * S + n." + Environment.NewLine
+               + "Where is the S is a N x d matrix containing the selected columns from N x k the matrix of all features X" + Environment.NewLine
+               + "For each feature the probability that it is selected is " + selectionProbability + "%" + Environment.NewLine
+               + "X(i,j) ~ N(0, 1) iid, w(i) ~ U(0, 10) iid, n ~ N(0, sigma(w*S) * SQRT(" + noiseRatio + "))" + Environment.NewLine
+               + "The noise level is " + noiseRatio + " * sigma, thus an optimal model has R² = "
+               + Math.Round(optimalRSquared, 2) + " (or equivalently: NMSE = " + noiseRatio + ")" + Environment.NewLine
+               + "N = " + (nTrainingSamples + nTestSamples) + " (" + nTrainingSamples + " training, " + nTestSamples + " test)" + Environment.NewLine
+               + "k = " + numberOfFeatures;
+        ;
+      }
+    }
+
+    private double[] w;
+    public double[] Weights {
+      get { return w; }
+    }
+
+    private string[] selectedFeatures;
+    public string[] SelectedFeatures {
+      get { return selectedFeatures; }
+    }
+
+    private double optimalRSquared;
+    public double OptimalRSquared {
+      get { return optimalRSquared; }
+    }
+
+
+    public FeatureSelection(int numberOfFeatures, double selectionProbability, double noiseRatio, IRandom xGenerator, IRandom weightGenerator)
+      : this((int)Math.Round(numberOfFeatures * 1.2), 5000, numberOfFeatures,
+      selectionProbability, noiseRatio, xGenerator, weightGenerator) { }
+
+    public FeatureSelection(int nTrainingSamples, int nTestSamples, int numberOfFeatures,
+      double selectionProbability, double noiseRatio, IRandom xGenerator, IRandom weightGenerator) {
+      this.numberOfFeatures = numberOfFeatures;
+      this.nTrainingSamples = nTrainingSamples;
+      this.nTestSamples = nTestSamples;
+      this.selectionProbability = selectionProbability;
+      this.noiseRatio = noiseRatio;
+      this.xRandom = xGenerator;
+      this.weightRandom = weightGenerator;
+    }
+
+    protected override string TargetVariable { get { return "Y"; } }
+
+    protected override string[] VariableNames {
+      get { return AllowedInputVariables.Concat(new string[] { "Y" }).ToArray(); }
+    }
+
+    protected override string[] AllowedInputVariables {
+      get {
+        return Enumerable.Range(1, numberOfFeatures)
+          .Select(i => string.Format("X{0:000}", i))
+          .ToArray();
+      }
+    }
+
+    protected override int TrainingPartitionStart { get { return 0; } }
+    protected override int TrainingPartitionEnd { get { return nTrainingSamples; } }
+    protected override int TestPartitionStart { get { return nTrainingSamples; } }
+    protected override int TestPartitionEnd { get { return nTrainingSamples + nTestSamples; } }
+
+
+    protected override List<List<double>> GenerateValues() {
+      List<List<double>> data = new List<List<double>>();
+      for (int i = 0; i < AllowedInputVariables.Count(); i++) {
+        data.Add(Enumerable.Range(0, TestPartitionEnd)
+          .Select(_ => xRandom.NextDouble())
+          .ToList());
+      }
+
+      var random = new MersenneTwister();
+      var selectedFeatures =
+        Enumerable.Range(0, AllowedInputVariables.Count())
+        .Where(_ => random.NextDouble() < selectionProbability)
+        .ToArray();
+
+      w = selectedFeatures.Select(_ => weightRandom.NextDouble()).ToArray();
+      var target = new List<double>();
+      for (int i = 0; i < data[0].Count; i++) {
+        var s = selectedFeatures
+          .Select(index => data[index][i])
+          .ToArray();
+        target.Add(ScalarProd(s, w));
+      }
+      var targetSigma = target.StandardDeviation();
+      var noisePrng = new NormalDistributedRandom(random, 0, targetSigma * Math.Sqrt(noiseRatio));
+
+      data.Add(target.Select(t => t + noisePrng.NextDouble()).ToList());
+
+      // set property listing the selected features as string[]
+      this.selectedFeatures = selectedFeatures.Select(i => AllowedInputVariables[i]).ToArray();
+      optimalRSquared = 1 - noiseRatio;
+      return data;
+    }
+
+    private double ScalarProd(double[] s, double[] w) {
+      if (s.Length != w.Length) throw new ArgumentException();
+      return s.Zip(w, (a, b) => a * b).Sum();
+    }
+  }
+}
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/FeatureSelection/FeatureSelectionInstanceProvider.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/FeatureSelection/FeatureSelectionInstanceProvider.cs	(revision 9363)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/FeatureSelection/FeatureSelectionInstanceProvider.cs	(revision 9363)
@@ -0,0 +1,81 @@
+﻿#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;
+using HeuristicLab.Data;
+using HeuristicLab.Problems.DataAnalysis;
+using HeuristicLab.Random;
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class FeatureSelectionInstanceProvider : ArtificialRegressionInstanceProvider {
+    public override string Name {
+      get { return "Feature Selection Problems"; }
+    }
+    public override string Description {
+      get { return "A set of artificial feature selection benchmark problems"; }
+    }
+    public override Uri WebLink {
+      get { return new Uri("http://dev.heuristiclab.com"); }
+    }
+    public override string ReferencePublication {
+      get { return ""; }
+    }
+
+    public override IEnumerable<IDataDescriptor> GetDataDescriptors() {
+      var sizes = new int[] { 50, 100, 200 };
+      var pp = new double[] { 0.1, 0.25, 0.5 };
+      var noiseRatios = new double[] { 0.01, 0.05, 0.1, 0.2 };
+      var mt = new MersenneTwister();
+      var xGenerator = new NormalDistributedRandom(mt, 0, 1);
+      var weightGenerator = new UniformDistributedRandom(mt, 0, 10);
+      return (from size in sizes
+              from p in pp
+              from noiseRatio in noiseRatios
+              select new FeatureSelection(size, p, noiseRatio, xGenerator, weightGenerator))
+              .Cast<IDataDescriptor>()
+              .ToList();
+    }
+
+    public override IRegressionProblemData LoadData(IDataDescriptor descriptor) {
+      var featureSelectionDescriptor = descriptor as FeatureSelection;
+      if (featureSelectionDescriptor == null) throw new ArgumentException("FeatureSelectionInstanceProvider expects an FeatureSelection data descriptor.");
+      // base call generates a regression problem data
+      var regProblemData = base.LoadData(featureSelectionDescriptor);
+      var problemData =
+        new FeatureSelectionRegressionProblemData(
+          regProblemData.Dataset, regProblemData.AllowedInputVariables, regProblemData.TargetVariable,
+          featureSelectionDescriptor.SelectedFeatures, featureSelectionDescriptor.Weights,
+          featureSelectionDescriptor.OptimalRSquared);
+
+      // copy values from regProblemData to feature selection problem data
+      problemData.Name = regProblemData.Name;
+      problemData.Description = regProblemData.Description;
+      problemData.TrainingPartition.Start = regProblemData.TrainingPartition.Start;
+      problemData.TrainingPartition.End = regProblemData.TrainingPartition.End;
+      problemData.TestPartition.Start = regProblemData.TestPartition.Start;
+      problemData.TestPartition.End = regProblemData.TestPartition.End;
+
+      return problemData;
+    }
+  }
+}
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/FeatureSelection/FeatureSelectionRegressionProblemData.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/FeatureSelection/FeatureSelectionRegressionProblemData.cs	(revision 9363)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/FeatureSelection/FeatureSelectionRegressionProblemData.cs	(revision 9363)
@@ -0,0 +1,81 @@
+﻿#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;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Problems.DataAnalysis;
+using HeuristicLab.Random;
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class FeatureSelectionRegressionProblemData : RegressionProblemData {
+    private const string SelectedFeaturesParameterName = "SelectedFeatures";
+    private const string WeightsParameterName = "Weights";
+    private const string OptimalRSquaredParameterName = "R² (best solution)";
+
+    public IValueParameter<StringArray> SelectedFeaturesParameter {
+      get { return (IValueParameter<StringArray>)Parameters[SelectedFeaturesParameterName]; }
+    }
+
+    public IValueParameter<DoubleArray> WeightsParameter {
+      get { return (IValueParameter<DoubleArray>)Parameters[WeightsParameterName]; }
+    }
+
+    public IValueParameter<DoubleValue> OptimalRSquaredParameter {
+      get { return (IValueParameter<DoubleValue>)Parameters[OptimalRSquaredParameterName]; }
+    }
+
+    [StorableConstructor]
+    protected FeatureSelectionRegressionProblemData(bool deserializing)
+      : base(deserializing) {
+    }
+    protected FeatureSelectionRegressionProblemData(FeatureSelectionRegressionProblemData original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
+    public FeatureSelectionRegressionProblemData(Dataset ds, IEnumerable<string> allowedInputVariables, string targetVariable, string[] selectedFeatures, double[] weights, double optimalRSquared)
+      : base(ds, allowedInputVariables, targetVariable) {
+      if (selectedFeatures.Length != weights.Length) throw new ArgumentException("Length of selected features vector does not match the length of the weights vector");
+      if (optimalRSquared < 0 || optimalRSquared > 1) throw new ArgumentException("Optimal R² is not in range [0..1]");
+      Parameters.Add(new FixedValueParameter<StringArray>(
+        SelectedFeaturesParameterName,
+        "Array of features used to generate the target values.",
+        new StringArray(selectedFeatures).AsReadOnly()));
+      Parameters.Add(new FixedValueParameter<DoubleArray>(
+        WeightsParameterName,
+        "Array of weights used to generate the target values.",
+        (DoubleArray)(new DoubleArray(weights).AsReadOnly())));
+      Parameters.Add(new FixedValueParameter<DoubleValue>(
+        OptimalRSquaredParameterName,
+        "R² of the optimal solution.",
+        (DoubleValue)(new DoubleValue(optimalRSquared).AsReadOnly())));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new FeatureSelectionRegressionProblemData(this, cloner);
+    }
+  }
+}
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionEight.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionEight.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionEight.cs	(revision 9363)
@@ -25,7 +25,7 @@
 
 namespace HeuristicLab.Problems.Instances.DataAnalysis {
-  public class KeijzerFunctionNine : ArtificialRegressionDataDescriptor {
+  public class KeijzerFunctionEight : ArtificialRegressionDataDescriptor {
 
-    public override string Name { get { return "Keijzer 9 f(x) = sqrt(x)"; } }
+    public override string Name { get { return "Keijzer 8 f(x) = sqrt(x)"; } }
     public override string Description {
       get {
@@ -39,5 +39,5 @@
     }
     protected override string TargetVariable { get { return "F"; } }
-    protected override string[] InputVariables { get { return new string[] { "X", "F" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X", "F" }; } }
     protected override string[] AllowedInputVariables { get { return new string[] { "X" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionEleven.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionEleven.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionEleven.cs	(revision 9363)
@@ -25,31 +25,36 @@
 
 namespace HeuristicLab.Problems.Instances.DataAnalysis {
-  public class KeijzerFunctionTwelve : ArtificialRegressionDataDescriptor {
+  public class KeijzerFunctionEleven : 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 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) = 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 intercal [-3, 3] (not ca. 360000 as described) "
-        + ", but 5000 cases are created";
+        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)";
       }
     }
     protected override string TargetVariable { get { return "F"; } }
-    protected override string[] InputVariables { get { return new string[] { "X", "Y", "F" }; } }
+    protected override string[] VariableNames { 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 int TestPartitionStart { get { return 20; } }
+    protected override int TestPartitionEnd { get { return 20 + (601 * 601); } }
 
     protected override List<List<double>> GenerateValues() {
       List<List<double>> data = new List<List<double>>();
+      List<double> oneVariableTestData = ValueGenerator.GenerateSteps(-3, 3, 0.01).ToList();
+      List<List<double>> testData = new List<List<double>>() { oneVariableTestData, oneVariableTestData };
+
+      var combinations = ValueGenerator.GenerateAllCombinationsOfValuesInLists(testData).ToList();
+
       for (int i = 0; i < AllowedInputVariables.Count(); i++) {
-        data.Add(ValueGenerator.GenerateUniformDistributedValues(5000, -3, 3).ToList());
+        data.Add(ValueGenerator.GenerateUniformDistributedValues(20, -3, 3).ToList());
+        data[i].AddRange(combinations[i]);
       }
 
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionFifteen.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionFifteen.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionFifteen.cs	(revision 9363)
@@ -25,31 +25,35 @@
 
 namespace HeuristicLab.Problems.Instances.DataAnalysis {
-  public class KeijzerFunctionSixteen : ArtificialRegressionDataDescriptor {
+  public class KeijzerFunctionFifteen : ArtificialRegressionDataDescriptor {
 
-    public override string Name { get { return "Keijzer 16 f(x, y) = x^3 / 5 + y^3 / 2 - y - x"; } }
+    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) = x^3 / 5 + y^3 / 2 - y - x" + 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) "
-        + ", but 5000 cases are created";
+        + "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[] VariableNames { 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 int TestPartitionStart { get { return 20; } }
+    protected override int TestPartitionEnd { get { return 20 + (601 * 601); } }
 
     protected override List<List<double>> GenerateValues() {
       List<List<double>> data = new List<List<double>>();
+      List<double> oneVariableTestData = ValueGenerator.GenerateSteps(-3, 3, 0.01).ToList();
+      List<List<double>> testData = new List<List<double>>() { oneVariableTestData, oneVariableTestData };
+
+      var combinations = ValueGenerator.GenerateAllCombinationsOfValuesInLists(testData).ToList();
+
       for (int i = 0; i < AllowedInputVariables.Count(); i++) {
-        data.Add(ValueGenerator.GenerateUniformDistributedValues(5000, -3, 3).ToList());
+        data.Add(ValueGenerator.GenerateUniformDistributedValues(20, -3, 3).ToList());
+        data[i].AddRange(combinations[i]);
       }
 
@@ -59,5 +63,5 @@
         x = data[0][i];
         y = data[1][i];
-        results.Add(Math.Pow(x, 3) / 5 + Math.Pow(y, 3) / 2 - y - x);
+        results.Add(x * x * x / 5.0 + y * y * y / 2.0 - y - x);
       }
       data.Add(results);
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionFive.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionFive.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionFive.cs	(revision 9363)
@@ -25,12 +25,12 @@
 
 namespace HeuristicLab.Problems.Instances.DataAnalysis {
-  public class KeijzerFunctionSix : ArtificialRegressionDataDescriptor {
+  public class KeijzerFunctionFive : 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 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) = (30 * x * z) / ((x - 10)  * y^2)" + Environment.NewLine
+        + "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
@@ -39,5 +39,5 @@
     }
     protected override string TargetVariable { get { return "F"; } }
-    protected override string[] InputVariables { get { return new string[] { "X", "Y", "Z", "F" }; } }
+    protected override string[] VariableNames { 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; } }
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionFour.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionFour.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionFour.cs	(revision 9363)
@@ -25,12 +25,12 @@
 
 namespace HeuristicLab.Problems.Instances.DataAnalysis {
-  public class KeijzerFunctionFive : ArtificialRegressionDataDescriptor {
+  public class KeijzerFunctionFour : 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 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) = x ^ 3  * exp(-x) * cos(x) * sin(x) * (sin(x) ^ 2 * cos(x) - 1)" + Environment.NewLine
+        + "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
@@ -40,5 +40,5 @@
     }
     protected override string TargetVariable { get { return "F"; } }
-    protected override string[] InputVariables { get { return new string[] { "X", "F" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X", "F" }; } }
     protected override string[] AllowedInputVariables { get { return new string[] { "X" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionFourteen.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionFourteen.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionFourteen.cs	(revision 9363)
@@ -25,31 +25,35 @@
 
 namespace HeuristicLab.Problems.Instances.DataAnalysis {
-  public class KeijzerFunctionFifteen : ArtificialRegressionDataDescriptor {
+  public class KeijzerFunctionFourteen : 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 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) = 8 / (2 + x^2 + y^2)" + 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) "
-        + ", but 5000 cases are created";
+        + "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[] VariableNames { 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 int TestPartitionStart { get { return 20; } }
+    protected override int TestPartitionEnd { get { return 20 + (601 * 601); } }
 
     protected override List<List<double>> GenerateValues() {
       List<List<double>> data = new List<List<double>>();
+      List<double> oneVariableTestData = ValueGenerator.GenerateSteps(-3, 3, 0.01).ToList();
+      List<List<double>> testData = new List<List<double>>() { oneVariableTestData, oneVariableTestData };
+
+      var combinations = ValueGenerator.GenerateAllCombinationsOfValuesInLists(testData).ToList();
+
       for (int i = 0; i < AllowedInputVariables.Count(); i++) {
-        data.Add(ValueGenerator.GenerateUniformDistributedValues(5000, -3, 3).ToList());
+        data.Add(ValueGenerator.GenerateUniformDistributedValues(20, -3, 3).ToList());
+        data[i].AddRange(combinations[i]);
       }
 
@@ -59,5 +63,5 @@
         x = data[0][i];
         y = data[1][i];
-        results.Add(8 / (2 + Math.Pow(x, 2) + Math.Pow(y, 2)));
+        results.Add(8.0 / (2.0 + x * x + y * y));
       }
       data.Add(results);
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionNine.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionNine.cs	(revision 9363)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionNine.cs	(revision 9363)
@@ -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 KeijzerFunctionNine : ArtificialRegressionDataDescriptor {
+
+    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) = 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
+        + "Function Set: x + y, x * y, 1/x, -x, sqrt(x)";
+      }
+    }
+    protected override string TargetVariable { get { return "F"; } }
+    protected override string[] VariableNames { 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 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(0, 100, 1).ToList());
+      data[0].AddRange(ValueGenerator.GenerateSteps(0, 100, 0.1));
+
+      double x;
+      List<double> results = new List<double>();
+      for (int i = 0; i < data[0].Count; i++) {
+        x = data[0][i];
+        results.Add(Math.Log(x + Math.Sqrt(x * x + 1)));
+      }
+      data.Add(results);
+
+      return data;
+    }
+  }
+}
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionOne.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionOne.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionOne.cs	(revision 9363)
@@ -25,7 +25,7 @@
 
 namespace HeuristicLab.Problems.Instances.DataAnalysis {
-  public class KeijzerFunctionFour : ArtificialRegressionDataDescriptor {
+  public class KeijzerFunctionOne : 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 1 f(x) = 0.3 * x *sin(2 * PI * x); Interval [-1, 1]"; } }
     public override string Description {
       get {
@@ -39,5 +39,5 @@
     }
     protected override string TargetVariable { get { return "F"; } }
-    protected override string[] InputVariables { get { return new string[] { "X", "F" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X", "F" }; } }
     protected override string[] AllowedInputVariables { get { return new string[] { "X" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionSeven.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionSeven.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionSeven.cs	(revision 9363)
@@ -25,20 +25,20 @@
 
 namespace HeuristicLab.Problems.Instances.DataAnalysis {
-  public class KeijzerFunctionEight : ArtificialRegressionDataDescriptor {
+  public class KeijzerFunctionSeven : ArtificialRegressionDataDescriptor {
 
-    public override string Name { get { return "Keijzer 8 f(x) = log(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) = log(x)" + Environment.NewLine
-          + "range(train): x = [0:1:100]" + Environment.NewLine
-          + "range(test): x = [0:0.1:100]" + 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!";
+          + "Note: The problem starts with 1 to avoid log(0)!";
       }
     }
     protected override string TargetVariable { get { return "F"; } }
-    protected override string[] InputVariables { get { return new string[] { "X", "F" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X", "F" }; } }
     protected override string[] AllowedInputVariables { get { return new string[] { "X" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionSix.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionSix.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionSix.cs	(revision 9363)
@@ -25,12 +25,12 @@
 
 namespace HeuristicLab.Problems.Instances.DataAnalysis {
-  public class KeijzerFunctionSeven : ArtificialRegressionDataDescriptor {
+  public class KeijzerFunctionSix : 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 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 * y) / ((x - 10)  * y^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
@@ -39,5 +39,5 @@
     }
     protected override string TargetVariable { get { return "F"; } }
-    protected override string[] InputVariables { get { return new string[] { "X", "F" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X", "F" }; } }
     protected override string[] AllowedInputVariables { get { return new string[] { "X" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionTen.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionTen.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionTen.cs	(revision 9363)
@@ -25,7 +25,7 @@
 
 namespace HeuristicLab.Problems.Instances.DataAnalysis {
-  public class KeijzerFunctionEleven : ArtificialRegressionDataDescriptor {
+  public class KeijzerFunctionTen : ArtificialRegressionDataDescriptor {
 
-    public override string Name { get { return "Keijzer 11 f(x, y) = x ^ y"; } }
+    public override string Name { get { return "Keijzer 10 f(x, y) = x ^ y"; } }
     public override string Description {
       get {
@@ -39,10 +39,10 @@
     }
     protected override string TargetVariable { get { return "F"; } }
-    protected override string[] InputVariables { get { return new string[] { "X", "Y", "F" }; } }
+    protected override string[] VariableNames { 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 10301; } }
+    protected override int TestPartitionEnd { get { return 100 + (101 * 101); } }
 
     protected override List<List<double>> GenerateValues() {
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionThirteen.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionThirteen.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionThirteen.cs	(revision 9363)
@@ -25,7 +25,7 @@
 
 namespace HeuristicLab.Problems.Instances.DataAnalysis {
-  public class KeijzerFunctionFourteen : ArtificialRegressionDataDescriptor {
+  public class KeijzerFunctionThirteen : ArtificialRegressionDataDescriptor {
 
-    public override string Name { get { return "Keijzer 14 f(x, y) = 6 * sin(x) * cos(y)"; } }
+    public override string Name { get { return "Keijzer 13 f(x, y) = 6 * sin(x) * cos(y)"; } }
     public override string Description {
       get {
@@ -35,21 +35,25 @@
         + "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) "
-        + ", but 5000 cases are created";
+        + "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[] VariableNames { 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 int TestPartitionStart { get { return 20; } }
+    protected override int TestPartitionEnd { get { return 20 + (601 * 601); } }
 
     protected override List<List<double>> GenerateValues() {
       List<List<double>> data = new List<List<double>>();
+      List<double> oneVariableTestData = ValueGenerator.GenerateSteps(-3, 3, 0.01).ToList();
+      List<List<double>> testData = new List<List<double>>() { oneVariableTestData, oneVariableTestData };
+
+      var combinations = ValueGenerator.GenerateAllCombinationsOfValuesInLists(testData).ToList();
+
       for (int i = 0; i < AllowedInputVariables.Count(); i++) {
-        data.Add(ValueGenerator.GenerateUniformDistributedValues(5000, -3, 3).ToList());
+        data.Add(ValueGenerator.GenerateUniformDistributedValues(20, -3, 3).ToList());
+        data[i].AddRange(combinations[i]);
       }
 
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionThree.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionThree.cs	(revision 9363)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionThree.cs	(revision 9363)
@@ -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); Interval [-3, 3]"; } }
+    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[] VariableNames { 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/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionTwelve.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionTwelve.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionTwelve.cs	(revision 9363)
@@ -25,31 +25,35 @@
 
 namespace HeuristicLab.Problems.Instances.DataAnalysis {
-  public class KeijzerFunctionThirteen : ArtificialRegressionDataDescriptor {
+  public class KeijzerFunctionTwelve : 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 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) = x^4 - x^3 + y^2 / 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) "
-        + ", but 5000 cases are created";
+               + "Authors: Maarten Keijzer" + 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)";
       }
     }
     protected override string TargetVariable { get { return "F"; } }
-    protected override string[] InputVariables { get { return new string[] { "X", "Y", "F" }; } }
+    protected override string[] VariableNames { 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 int TestPartitionStart { get { return 20; } }
+    protected override int TestPartitionEnd { get { return 20 + (601 * 601); } }
 
     protected override List<List<double>> GenerateValues() {
       List<List<double>> data = new List<List<double>>();
+      List<double> oneVariableTestData = ValueGenerator.GenerateSteps(-3, 3, 0.01).ToList();
+      List<List<double>> testData = new List<List<double>>() { oneVariableTestData, oneVariableTestData };
+
+      var combinations = ValueGenerator.GenerateAllCombinationsOfValuesInLists(testData).ToList();
+
       for (int i = 0; i < AllowedInputVariables.Count(); i++) {
-        data.Add(ValueGenerator.GenerateUniformDistributedValues(5000, -3, 3).ToList());
+        data.Add(ValueGenerator.GenerateUniformDistributedValues(20, -3, 3).ToList());
+        data[i].AddRange(combinations[i]);
       }
 
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionTwo.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionTwo.cs	(revision 9363)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionTwo.cs	(revision 9363)
@@ -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); Interval [-2, 2]"; } }
+    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[] VariableNames { 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/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerInstanceProvider.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerInstanceProvider.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerInstanceProvider.cs	(revision 9363)
@@ -40,4 +40,7 @@
     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/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionEight.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionEight.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionEight.cs	(revision 9363)
@@ -44,5 +44,5 @@
     }
     protected override string TargetVariable { get { return "Y"; } }
-    protected override string[] InputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4", "Y" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X0", "X1", "X2", "X3", "X4", "Y" }; } }
     protected override string[] AllowedInputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
@@ -53,7 +53,9 @@
     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, -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());
+      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/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionEleven.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionEleven.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionEleven.cs	(revision 9363)
@@ -27,5 +27,5 @@
   public class KornsFunctionEleven : ArtificialRegressionDataDescriptor {
 
-    public override string Name { get { return "Korns 11 y = 6.87 + (11 * cos(7.23 * X0 * X0 * X0))"; } }
+    public override string Name { get { return "Korns 11 y = 6.87 + (11 * cos(7.23 * X0³))"; } }
     public override string Description {
       get {
@@ -43,10 +43,10 @@
     }
     protected override string TargetVariable { get { return "Y"; } }
-    protected override string[] InputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4", "Y" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X0", "X1", "X2", "X3", "X4", "Y" }; } }
     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/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionFive.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionFive.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionFive.cs	(revision 9363)
@@ -44,5 +44,5 @@
     }
     protected override string TargetVariable { get { return "Y"; } }
-    protected override string[] InputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4", "Y" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X0", "X1", "X2", "X3", "X4", "Y" }; } }
     protected override string[] AllowedInputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
@@ -53,7 +53,9 @@
     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, -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, -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/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionFiveteen.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionFiveteen.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionFiveteen.cs	(revision 9363)
@@ -40,9 +40,9 @@
         + "For each test a training matrix is filled with random numbers between -50 and +50. The test case "
         + "target expressions are limited to one basis function whose maximum depth is three grammar nodes.\"" + Environment.NewLine + Environment.NewLine
-        + "Note: Because of the logarithm only non-negatic values are created for the input variables!";
+        + "Note: Because of the logarithm and the exponential function as denominator only non-negatic values are created for their input variables!";
       }
     }
     protected override string TargetVariable { get { return "Y"; } }
-    protected override string[] InputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4", "Y" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X0", "X1", "X2", "X3", "X4", "Y" }; } }
     protected override string[] AllowedInputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
@@ -53,7 +53,9 @@
     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/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionFour.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionFour.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionFour.cs	(revision 9363)
@@ -43,5 +43,5 @@
     }
     protected override string TargetVariable { get { return "Y"; } }
-    protected override string[] InputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4", "Y" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X0", "X1", "X2", "X3", "X4", "Y" }; } }
     protected override string[] AllowedInputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionFourteen.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionFourteen.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionFourteen.cs	(revision 9363)
@@ -43,5 +43,5 @@
     }
     protected override string TargetVariable { get { return "Y"; } }
-    protected override string[] InputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4", "Y" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X0", "X1", "X2", "X3", "X4", "Y" }; } }
     protected override string[] AllowedInputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionNine.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionNine.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionNine.cs	(revision 9363)
@@ -40,9 +40,10 @@
         + "For each test a training matrix is filled with random numbers between -50 and +50. The test case "
         + "target expressions are limited to one basis function whose maximum depth is three grammar nodes.\"" + Environment.NewLine + Environment.NewLine
-        + "Note: Because of the square root and the logarithm only non-negatic values are created for the input variables!";
+        + "Note: Because of the square root and the logarithm only non-negatic values are created for their input variables!" + Environment.NewLine
+        + "Because of the exponential function only only non-positive values are created for its input variable!";
       }
     }
     protected override string TargetVariable { get { return "Y"; } }
-    protected override string[] InputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4", "Y" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X0", "X1", "X2", "X3", "X4", "Y" }; } }
     protected override string[] AllowedInputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
@@ -53,7 +54,9 @@
     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, -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)
+      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/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionOne.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionOne.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionOne.cs	(revision 9363)
@@ -44,5 +44,5 @@
     }
     protected override string TargetVariable { get { return "Y"; } }
-    protected override string[] InputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4", "Y" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X0", "X1", "X2", "X3", "X4", "Y" }; } }
     protected override string[] AllowedInputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionSeven.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionSeven.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionSeven.cs	(revision 9363)
@@ -39,9 +39,10 @@
         + "We test each of the test cases on matrices of 10000 rows by 1 to 5 columns with no noise. "
         + "For each test a training matrix is filled with random numbers between -50 and +50. The test case "
-        + "target expressions are limited to one basis function whose maximum depth is three grammar nodes.\"";
+        + "target expressions are limited to one basis function whose maximum depth is three grammar nodes.\"" + Environment.NewLine
+        + "Note: Because of the exponential function only non-negatic values are created for its input variable!";
       }
     }
     protected override string TargetVariable { get { return "Y"; } }
-    protected override string[] InputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4", "Y" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X0", "X1", "X2", "X3", "X4", "Y" }; } }
     protected override string[] AllowedInputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
@@ -52,7 +53,9 @@
     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, -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, -50, 50).ToList());
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(TestPartitionEnd, -50, 50).ToList());
 
       double x0;
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionSix.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionSix.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionSix.cs	(revision 9363)
@@ -44,5 +44,5 @@
     }
     protected override string TargetVariable { get { return "Y"; } }
-    protected override string[] InputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4", "Y" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X0", "X1", "X2", "X3", "X4", "Y" }; } }
     protected override string[] AllowedInputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
@@ -53,7 +53,9 @@
     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, -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());
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(TestPartitionEnd, -50, 50).ToList());
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(TestPartitionEnd, -50, 50).ToList()); 
 
       double x0;
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionTen.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionTen.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionTen.cs	(revision 9363)
@@ -43,5 +43,5 @@
     }
     protected override string TargetVariable { get { return "Y"; } }
-    protected override string[] InputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4", "Y" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X0", "X1", "X2", "X3", "X4", "Y" }; } }
     protected override string[] AllowedInputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionThirteen.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionThirteen.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionThirteen.cs	(revision 9363)
@@ -43,5 +43,5 @@
     }
     protected override string TargetVariable { get { return "Y"; } }
-    protected override string[] InputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4", "Y" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X0", "X1", "X2", "X3", "X4", "Y" }; } }
     protected override string[] AllowedInputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionThree.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionThree.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionThree.cs	(revision 9363)
@@ -43,5 +43,5 @@
     }
     protected override string TargetVariable { get { return "Y"; } }
-    protected override string[] InputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4", "Y" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X0", "X1", "X2", "X3", "X4", "Y" }; } }
     protected override string[] AllowedInputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionTwelve.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionTwelve.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionTwelve.cs	(revision 9363)
@@ -43,5 +43,5 @@
     }
     protected override string TargetVariable { get { return "Y"; } }
-    protected override string[] InputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4", "Y" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X0", "X1", "X2", "X3", "X4", "Y" }; } }
     protected override string[] AllowedInputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionTwo.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionTwo.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Korns/KornsFunctionTwo.cs	(revision 9363)
@@ -43,5 +43,5 @@
     }
     protected override string TargetVariable { get { return "Y"; } }
-    protected override string[] InputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4", "Y" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X0", "X1", "X2", "X3", "X4", "Y" }; } }
     protected override string[] AllowedInputVariables { get { return new string[] { "X0", "X1", "X2", "X3", "X4" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionEight.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionEight.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionEight.cs	(revision 9363)
@@ -39,14 +39,14 @@
     }
     protected override string TargetVariable { get { return "Y"; } }
-    protected override string[] InputVariables { get { return new string[] { "X", "Y" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X", "Y" }; } }
     protected override string[] AllowedInputVariables { get { return new string[] { "X" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
     protected override int TrainingPartitionEnd { get { return 20; } }
-    protected override int TestPartitionStart { get { return 250; } }
-    protected override int TestPartitionEnd { get { return 350; } }
+    protected override int TestPartitionStart { get { return 20; } }
+    protected override int TestPartitionEnd { get { return 520; } }
 
     protected override List<List<double>> GenerateValues() {
       List<List<double>> data = new List<List<double>>();
-      data.Add(ValueGenerator.GenerateUniformDistributedValues(500, 0, 4).ToList());
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(520, 0, 4).ToList());
 
       double x;
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionEleven.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionEleven.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionEleven.cs	(revision 9363)
@@ -39,10 +39,10 @@
     }
     protected override string TargetVariable { get { return "Z"; } }
-    protected override string[] InputVariables { get { return new string[] { "X", "Y", "Z" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X", "Y", "Z" }; } }
     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 500; } }
-    protected override int TestPartitionEnd { get { return 1000; } }
+    protected override int TestPartitionStart { get { return 20; } }
+    protected override int TestPartitionEnd { get { return 1020; } }
 
     protected override List<List<double>> GenerateValues() {
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionFive.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionFive.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionFive.cs	(revision 9363)
@@ -39,14 +39,14 @@
     }
     protected override string TargetVariable { get { return "Y"; } }
-    protected override string[] InputVariables { get { return new string[] { "X", "Y" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X", "Y" }; } }
     protected override string[] AllowedInputVariables { get { return new string[] { "X" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
     protected override int TrainingPartitionEnd { get { return 20; } }
-    protected override int TestPartitionStart { get { return 250; } }
-    protected override int TestPartitionEnd { get { return 350; } }
+    protected override int TestPartitionStart { get { return 20; } }
+    protected override int TestPartitionEnd { get { return 520; } }
 
     protected override List<List<double>> GenerateValues() {
       List<List<double>> data = new List<List<double>>();
-      data.Add(ValueGenerator.GenerateUniformDistributedValues(500, -1, 1).ToList());
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(520, -1, 1).ToList());
 
       double x;
@@ -54,5 +54,5 @@
       for (int i = 0; i < data[0].Count; i++) {
         x = data[0][i];
-        results.Add(Math.Sin(Math.Pow(x, 2)) * Math.Cos(x) - 1);
+        results.Add(Math.Sin(x * x) * Math.Cos(x) - 1);
       }
       data.Add(results);
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionFour.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionFour.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionFour.cs	(revision 9363)
@@ -39,14 +39,14 @@
     }
     protected override string TargetVariable { get { return "Y"; } }
-    protected override string[] InputVariables { get { return new string[] { "X", "Y" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X", "Y" }; } }
     protected override string[] AllowedInputVariables { get { return new string[] { "X" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
     protected override int TrainingPartitionEnd { get { return 20; } }
-    protected override int TestPartitionStart { get { return 250; } }
-    protected override int TestPartitionEnd { get { return 350; } }
+    protected override int TestPartitionStart { get { return 20; } }
+    protected override int TestPartitionEnd { get { return 520; } }
 
     protected override List<List<double>> GenerateValues() {
       List<List<double>> data = new List<List<double>>();
-      data.Add(ValueGenerator.GenerateUniformDistributedValues(500, -1, 1).ToList());
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(520, -1, 1).ToList());
 
       double x;
@@ -54,5 +54,5 @@
       for (int i = 0; i < data[0].Count; i++) {
         x = data[0][i];
-        results.Add(Math.Pow(x, 6) + Math.Pow(x, 5) + Math.Pow(x, 4) + Math.Pow(x, 3) + Math.Pow(x, 2) + x);
+        results.Add(Math.Pow(x, 6) + Math.Pow(x, 5) + Math.Pow(x, 4) + Math.Pow(x, 3) + x * x + x);
       }
       data.Add(results);
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionNine.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionNine.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionNine.cs	(revision 9363)
@@ -39,10 +39,10 @@
     }
     protected override string TargetVariable { get { return "Z"; } }
-    protected override string[] InputVariables { get { return new string[] { "X", "Y", "Z" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X", "Y", "Z" }; } }
     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 500; } }
-    protected override int TestPartitionEnd { get { return 1000; } }
+    protected override int TestPartitionStart { get { return 20; } }
+    protected override int TestPartitionEnd { get { return 1020; } }
 
     protected override List<List<double>> GenerateValues() {
@@ -56,5 +56,5 @@
         x = data[0][i];
         y = data[1][i];
-        results.Add(Math.Sin(x) + Math.Sin(Math.Pow(y, 2)));
+        results.Add(Math.Sin(x) + Math.Sin(y * y));
       }
       data.Add(results);
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionOne.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionOne.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionOne.cs	(revision 9363)
@@ -39,14 +39,14 @@
     }
     protected override string TargetVariable { get { return "Y"; } }
-    protected override string[] InputVariables { get { return new string[] { "X", "Y" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X", "Y" }; } }
     protected override string[] AllowedInputVariables { get { return new string[] { "X" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
     protected override int TrainingPartitionEnd { get { return 20; } }
-    protected override int TestPartitionStart { get { return 250; } }
-    protected override int TestPartitionEnd { get { return 350; } }
+    protected override int TestPartitionStart { get { return 20; } }
+    protected override int TestPartitionEnd { get { return 520; } }
 
     protected override List<List<double>> GenerateValues() {
       List<List<double>> data = new List<List<double>>();
-      data.Add(ValueGenerator.GenerateUniformDistributedValues(500, -1, 1).ToList());
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(520, -1, 1).ToList());
 
       double x;
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionSeven.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionSeven.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionSeven.cs	(revision 9363)
@@ -39,14 +39,14 @@
     }
     protected override string TargetVariable { get { return "Y"; } }
-    protected override string[] InputVariables { get { return new string[] { "X", "Y" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X", "Y" }; } }
     protected override string[] AllowedInputVariables { get { return new string[] { "X" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
     protected override int TrainingPartitionEnd { get { return 20; } }
-    protected override int TestPartitionStart { get { return 250; } }
-    protected override int TestPartitionEnd { get { return 350; } }
+    protected override int TestPartitionStart { get { return 20; } }
+    protected override int TestPartitionEnd { get { return 520; } }
 
     protected override List<List<double>> GenerateValues() {
       List<List<double>> data = new List<List<double>>();
-      data.Add(ValueGenerator.GenerateUniformDistributedValues(500, 0, 2).ToList());
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(520, 0, 2).ToList());
 
       double x;
@@ -54,5 +54,5 @@
       for (int i = 0; i < data[0].Count; i++) {
         x = data[0][i];
-        results.Add(Math.Log(x + 1) + Math.Log(Math.Pow(x, 2) + 1));
+        results.Add(Math.Log(x + 1) + Math.Log(x * x + 1));
       }
       data.Add(results);
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionSix.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionSix.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionSix.cs	(revision 9363)
@@ -39,14 +39,14 @@
     }
     protected override string TargetVariable { get { return "Y"; } }
-    protected override string[] InputVariables { get { return new string[] { "X", "Y" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X", "Y" }; } }
     protected override string[] AllowedInputVariables { get { return new string[] { "X" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
     protected override int TrainingPartitionEnd { get { return 20; } }
-    protected override int TestPartitionStart { get { return 250; } }
-    protected override int TestPartitionEnd { get { return 350; } }
+    protected override int TestPartitionStart { get { return 20; } }
+    protected override int TestPartitionEnd { get { return 520; } }
 
     protected override List<List<double>> GenerateValues() {
       List<List<double>> data = new List<List<double>>();
-      data.Add(ValueGenerator.GenerateUniformDistributedValues(500, -1, 1).ToList());
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(520, -1, 1).ToList());
 
       double x;
@@ -54,5 +54,5 @@
       for (int i = 0; i < data[0].Count; i++) {
         x = data[0][i];
-        results.Add(Math.Sin(x) + Math.Sin(x + Math.Pow(x, 2)));
+        results.Add(Math.Sin(x) + Math.Sin(x + x*x));
       }
       data.Add(results);
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionTen.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionTen.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionTen.cs	(revision 9363)
@@ -39,15 +39,15 @@
     }
     protected override string TargetVariable { get { return "Z"; } }
-    protected override string[] InputVariables { get { return new string[] { "X", "Y", "Z" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X", "Y", "Z" }; } }
     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 500; } }
-    protected override int TestPartitionEnd { get { return 1000; } }
+    protected override int TestPartitionStart { get { return 20; } }
+    protected override int TestPartitionEnd { get { return 1020; } }
 
     protected override List<List<double>> GenerateValues() {
       List<List<double>> data = new List<List<double>>();
-      data.Add(ValueGenerator.GenerateUniformDistributedValues(1000, 0, 1).ToList());
-      data.Add(ValueGenerator.GenerateUniformDistributedValues(1000, 0, 1).ToList());
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(1020, 0, 1).ToList());
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(1020, 0, 1).ToList());
 
       double x, y;
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionThree.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionThree.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionThree.cs	(revision 9363)
@@ -39,14 +39,14 @@
     }
     protected override string TargetVariable { get { return "Y"; } }
-    protected override string[] InputVariables { get { return new string[] { "X", "Y" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X", "Y" }; } }
     protected override string[] AllowedInputVariables { get { return new string[] { "X" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
     protected override int TrainingPartitionEnd { get { return 20; } }
-    protected override int TestPartitionStart { get { return 250; } }
-    protected override int TestPartitionEnd { get { return 350; } }
+    protected override int TestPartitionStart { get { return 20; } }
+    protected override int TestPartitionEnd { get { return 520; } }
 
     protected override List<List<double>> GenerateValues() {
       List<List<double>> data = new List<List<double>>();
-      data.Add(ValueGenerator.GenerateUniformDistributedValues(500, -1, 1).ToList());
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(520, -1, 1).ToList());
 
       double x;
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionTwelve.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionTwelve.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionTwelve.cs	(revision 9363)
@@ -39,15 +39,15 @@
     }
     protected override string TargetVariable { get { return "Z"; } }
-    protected override string[] InputVariables { get { return new string[] { "X", "Y", "Z" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X", "Y", "Z" }; } }
     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 500; } }
-    protected override int TestPartitionEnd { get { return 1000; } }
+    protected override int TestPartitionStart { get { return 20; } }
+    protected override int TestPartitionEnd { get { return 1020; } }
 
     protected override List<List<double>> GenerateValues() {
       List<List<double>> data = new List<List<double>>();
-      data.Add(ValueGenerator.GenerateUniformDistributedValues(1000, 0, 1).ToList());
-      data.Add(ValueGenerator.GenerateUniformDistributedValues(1000, 0, 1).ToList());
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(1020, 0, 1).ToList());
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(1020, 0, 1).ToList());
 
       double x, y;
@@ -56,5 +56,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(Math.Pow(x, 4) - Math.Pow(x, 3) + y * y / 2 - y);
       }
       data.Add(results);
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionTwo.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionTwo.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Nguyen/NguyenFunctionTwo.cs	(revision 9363)
@@ -39,14 +39,14 @@
     }
     protected override string TargetVariable { get { return "Y"; } }
-    protected override string[] InputVariables { get { return new string[] { "X", "Y" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X", "Y" }; } }
     protected override string[] AllowedInputVariables { get { return new string[] { "X" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
     protected override int TrainingPartitionEnd { get { return 20; } }
-    protected override int TestPartitionStart { get { return 250; } }
-    protected override int TestPartitionEnd { get { return 350; } }
+    protected override int TestPartitionStart { get { return 20; } }
+    protected override int TestPartitionEnd { get { return 520; } }
 
     protected override List<List<double>> GenerateValues() {
       List<List<double>> data = new List<List<double>>();
-      data.Add(ValueGenerator.GenerateUniformDistributedValues(500, -1, 1).ToList());
+      data.Add(ValueGenerator.GenerateUniformDistributedValues(520, -1, 1).ToList());
 
       double x;
@@ -54,5 +54,5 @@
       for (int i = 0; i < data[0].Count; i++) {
         x = data[0][i];
-        results.Add(Math.Pow(x, 4) + Math.Pow(x, 3) + Math.Pow(x, 2) + x);
+        results.Add(Math.Pow(x, 4) + Math.Pow(x, 3) + x*x + x);
       }
       data.Add(results);
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/RealWorld/ChemicalOne.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/RealWorld/ChemicalOne.cs	(revision 9363)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/RealWorld/ChemicalOne.cs	(revision 9363)
@@ -0,0 +1,38 @@
+﻿#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
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class ChemicalOne : ResourceRegressionDataDescriptor {
+    public override string Name { get { return "Chemical-I"; } }
+    public override string Description { get { return ""; } }
+    protected override string TargetVariable { get { return "y"; } }
+    protected override string[] VariableNames {
+      get { return new string[] { "x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9", "x10", "x11", "x12", "x13", "x14", "x15", "x16", "x17", "x18", "x19", "x20", "x21", "x22", "x23", "x24", "x25", "x26", "x27", "x28", "x29", "x30", "x31", "x32", "x33", "x34", "x35", "x36", "x37", "x38", "x39", "x40", "x41", "x42", "x43", "x44", "x45", "x46", "x47", "x48", "x49", "x50", "x51", "x52", "x53", "x54", "x55", "x56", "x57", "y" }; }
+    }
+    protected override string[] AllowedInputVariables {
+      get { return new string[] { "x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9", "x10", "x11", "x12", "x13", "x14", "x15", "x16", "x17", "x18", "x19", "x20", "x21", "x22", "x23", "x24", "x25", "x26", "x27", "x28", "x29", "x30", "x31", "x32", "x33", "x34", "x35", "x36", "x37", "x38", "x39", "x40", "x41", "x42", "x43", "x44", "x45", "x46", "x47", "x48", "x49", "x50", "x51", "x52", "x53", "x54", "x55", "x56", "x57" }; }
+    }
+    protected override int TrainingPartitionStart { get { return 0; } }
+    protected override int TrainingPartitionEnd { get { return 711; } }
+    protected override int TestPartitionStart { get { return 711; } }
+    protected override int TestPartitionEnd { get { return 1066; } }
+  }
+}
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/RealWorld/Housing.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/RealWorld/Housing.cs	(revision 9363)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/RealWorld/Housing.cs	(revision 9363)
@@ -0,0 +1,38 @@
+﻿#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
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class Housing : ResourceRegressionDataDescriptor {
+    public override string Name { get { return "Housing"; } }
+    public override string Description { get { return ""; } }
+    protected override string TargetVariable { get { return "MEDV"; } }
+    protected override string[] VariableNames {
+      get { return new string[] { "CRIM", "ZN", "INDUS", "CHAS", "NOX", "RM", "AGE", "DIS", "RAD", "TAX", "PTRATIO", "B", "LSTAT", "MEDV" }; }
+    }
+    protected override string[] AllowedInputVariables {
+      get { return new string[] { "CRIM", "ZN", "INDUS", "CHAS", "NOX", "RM", "AGE", "DIS", "RAD", "TAX", "PTRATIO", "B", "LSTAT" }; }
+    }
+    protected override int TrainingPartitionStart { get { return 0; } }
+    protected override int TrainingPartitionEnd { get { return 337; } }
+    protected override int TestPartitionStart { get { return 337; } }
+    protected override int TestPartitionEnd { get { return 506; } }
+  }
+}
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/RealWorld/RealWorldRegressionInstanceProvider.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/RealWorld/RealWorldRegressionInstanceProvider.cs	(revision 9363)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/RealWorld/RealWorldRegressionInstanceProvider.cs	(revision 9363)
@@ -0,0 +1,73 @@
+﻿#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.Linq;
+using ICSharpCode.SharpZipLib.Zip;
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class RegressionRealWorldInstanceProvider : ResourceRegressionInstanceProvider {
+    public override string Name {
+      get { return "Real World Benchmark Problems"; }
+    }
+    public override string Description {
+      get {
+        return "";
+      }
+    }
+    public override Uri WebLink {
+      get { return null; }
+    }
+    public override string ReferencePublication {
+      get { return ""; }
+    }
+
+    protected override string FileName { get { return "RegressionRealWorld"; } }
+
+    public override IEnumerable<IDataDescriptor> GetDataDescriptors() {
+      List<ResourceRegressionDataDescriptor> descriptorList = new List<ResourceRegressionDataDescriptor>();
+      descriptorList.Add(new ChemicalOne());
+      descriptorList.Add(new Housing());
+      descriptorList.Add(new Tower());
+      var solutionsArchiveName = GetResourceName(FileName + @"\.zip");
+      if (!String.IsNullOrEmpty(solutionsArchiveName)) {
+        using (var solutionsZipFile = new ZipInputStream(GetType().Assembly.GetManifestResourceStream(solutionsArchiveName))) {
+          IList<string> entries = new List<string>();
+          ZipEntry curEntry;
+          while ((curEntry = solutionsZipFile.GetNextEntry()) != null) {
+            entries.Add(curEntry.Name);
+          }
+          foreach (var entry in entries.OrderBy(x => x)) {
+            string prettyName = Path.GetFileNameWithoutExtension(entry);
+            ResourceRegressionDataDescriptor desc = descriptorList.Where(x => x.Name.Equals(prettyName)).FirstOrDefault();
+            if (desc != null) {
+              desc.ResourceName = entry;
+              yield return desc;
+            } else
+              throw new ArgumentNullException("No Descriptor could be found for this entry.");
+          }
+        }
+      }
+    }
+  }
+}
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/RealWorld/RegressionRealWorldInstanceProvider.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/RealWorld/RegressionRealWorldInstanceProvider.cs	(revision 8228)
+++ 	(revision )
@@ -1,43 +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;
-
-namespace HeuristicLab.Problems.Instances.DataAnalysis {
-  public class RegressionRealWorldInstanceProvider : ResourceRegressionInstanceProvider {
-    public override string Name {
-      get { return "Real World Benchmark Problems"; }
-    }
-    public override string Description {
-      get {
-        return "";
-      }
-    }
-    public override Uri WebLink {
-      get { return null; }
-    }
-    public override string ReferencePublication {
-      get { return ""; }
-    }
-
-    protected override string FileName { get { return "RegressionRealWorld"; } }
-  }
-}
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/RealWorld/Tower.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/RealWorld/Tower.cs	(revision 9363)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/RealWorld/Tower.cs	(revision 9363)
@@ -0,0 +1,46 @@
+﻿#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;
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class Tower : ResourceRegressionDataDescriptor {
+    public override string Name { get { return "Tower"; } }
+    public override string Description {
+      get {
+        return "Publication: Order of Nonlinearity as a Complexity Measure for Models " +
+               "Generated by Symbolic Regression via Pareto Genetic Programming" + Environment.NewLine +
+               "Link: http://liinwww.ira.uka.de/cgi-bin/bibshow?e=Bj0hfofujd/qsphsbnnjoh/fyqboefe}24329837&r=bibtex&mode=intra";
+      }
+    }
+    protected override string TargetVariable { get { return "towerResponse"; } }
+    protected override string[] VariableNames {
+      get { return new string[] { "x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9", "x10", "x11", "x12", "x13", "x14", "x15", "x16", "x17", "x18", "x19", "x20", "x21", "x22", "x23", "x24", "x25", "towerResponse" }; }
+    }
+    protected override string[] AllowedInputVariables {
+      get { return new string[] { "x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9", "x10", "x11", "x12", "x13", "x14", "x15", "x16", "x17", "x18", "x19", "x20", "x21", "x22", "x23", "x24", "x25" }; }
+    }
+    protected override int TrainingPartitionStart { get { return 0; } }
+    protected override int TrainingPartitionEnd { get { return 3136; } }
+    protected override int TestPartitionStart { get { return 3136; } }
+    protected override int TestPartitionEnd { get { return 4999; } }
+  }
+}
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/RegressionDataDescriptor.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/RegressionDataDescriptor.cs	(revision 9363)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/RegressionDataDescriptor.cs	(revision 9363)
@@ -0,0 +1,49 @@
+﻿#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 RegressionDataDescriptor : IDataDescriptor {
+    public abstract string Name { get; }
+    public abstract string Description { get; }
+
+    protected abstract string TargetVariable { get; }
+    protected abstract string[] VariableNames { get; }
+    protected abstract string[] AllowedInputVariables { get; }
+    protected abstract int TrainingPartitionStart { get; }
+    protected abstract int TrainingPartitionEnd { get; }
+    protected abstract int TestPartitionStart { get; }
+    protected abstract int TestPartitionEnd { get; }
+
+    public IRegressionProblemData GenerateRegressionData(Dataset dataset) {
+      RegressionProblemData regData = new RegressionProblemData(dataset, AllowedInputVariables, TargetVariable);
+      regData.Name = this.Name;
+      regData.Description = this.Description;
+      regData.TrainingPartition.Start = this.TrainingPartitionStart;
+      regData.TrainingPartition.End = this.TrainingPartitionEnd;
+      regData.TestPartition.Start = this.TestPartitionStart;
+      regData.TestPartition.End = this.TestPartitionEnd;
+      return regData;
+    }
+
+  }
+}
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/RegressionImportType.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/RegressionImportType.cs	(revision 9363)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/RegressionImportType.cs	(revision 9363)
@@ -0,0 +1,26 @@
+﻿#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;
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class RegressionImportType : DataAnalysisImportType {
+    public string TargetVariable { get; set; }
+  }
+}
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/RegressionInstanceProvider.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/RegressionInstanceProvider.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/RegressionInstanceProvider.cs	(revision 9363)
@@ -23,5 +23,5 @@
 
 namespace HeuristicLab.Problems.Instances.DataAnalysis {
-  public abstract class RegressionInstanceProvider : ProblemInstanceProvider<IRegressionProblemData> {
+  public abstract class RegressionInstanceProvider : DataAnalysisInstanceProvider<IRegressionProblemData, RegressionImportType> {
   }
 }
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/ResourceRegressionDataDescriptor.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/ResourceRegressionDataDescriptor.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/ResourceRegressionDataDescriptor.cs	(revision 9363)
@@ -20,15 +20,13 @@
 #endregion
 
+using System.Collections.Generic;
+using System.Linq;
 
 namespace HeuristicLab.Problems.Instances.DataAnalysis {
-  internal class ResourceRegressionDataDescriptor : IDataDescriptor {
-    public string Name { get; internal set; }
-    public string Description { get; internal set; }
+  public abstract class ResourceRegressionDataDescriptor : RegressionDataDescriptor {
+    internal string ResourceName { get; set; }
 
-    internal string ResourceName { get; set; }
-    internal ResourceRegressionDataDescriptor(string name, string description, string resourceName) {
-      Name = name;
-      Description = description;
-      ResourceName = resourceName;
+    public bool CheckVariableNames(IEnumerable<string> VariableNames) {
+      return this.VariableNames.All(x => VariableNames.Contains(x));
     }
   }
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/ResourceRegressionInstanceProvider.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/ResourceRegressionInstanceProvider.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/ResourceRegressionInstanceProvider.cs	(revision 9363)
@@ -21,5 +21,4 @@
 
 using System;
-using System.Collections.Generic;
 using System.Globalization;
 using System.IO;
@@ -34,20 +33,4 @@
 
     protected abstract string FileName { get; }
-
-    public override IEnumerable<IDataDescriptor> GetDataDescriptors() {
-      var solutionsArchiveName = GetResourceName(FileName + @"\.zip");
-      if (!String.IsNullOrEmpty(solutionsArchiveName)) {
-        using (var solutionsZipFile = new ZipInputStream(GetType().Assembly.GetManifestResourceStream(solutionsArchiveName))) {
-          IList<string> entries = new List<string>();
-          ZipEntry curEntry;
-          while ((curEntry = solutionsZipFile.GetNextEntry()) != null) {
-            entries.Add(curEntry.Name);
-          }
-          foreach (var entry in entries.OrderBy(x => x)) {
-            yield return new ResourceRegressionDataDescriptor(Path.GetFileNameWithoutExtension(entry), Description, entry);
-          }
-        }
-      }
-    }
 
     public override IRegressionProblemData LoadData(IDataDescriptor id) {
@@ -70,18 +53,9 @@
 
         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));
+        if (!descriptor.CheckVariableNames(csvFileParser.VariableNames)) {
+          throw new ArgumentException("Parsed file contains variables which are not in the descriptor.");
+        }
 
-        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;
-
-        regData.Name = descriptor.Name;
-        regData.Description = descriptor.Description;
-        return regData;
+        return descriptor.GenerateRegressionData(dataset);
       }
     }
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/ValueGenerator.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/ValueGenerator.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/ValueGenerator.cs	(revision 9363)
@@ -23,4 +23,5 @@
 using System.Collections.Generic;
 using System.Linq;
+using HeuristicLab.Common;
 using HeuristicLab.Random;
 
@@ -40,5 +41,6 @@
       if (stepWidth <= 0) throw new ArgumentException("stepwith must be larger than zero.", "stepWidth");
       double x = start;
-      while (x <= end) {
+      // x<=end could skip the last value because of numerical problems
+      while (x < end || x.IsAlmost(end)) {
         yield return x;
         x += stepWidth;
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Various/BreimanOne.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Various/BreimanOne.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Various/BreimanOne.cs	(revision 9363)
@@ -36,5 +36,5 @@
     }
     protected override string TargetVariable { get { return "Y"; } }
-    protected override string[] InputVariables { get { return new string[] { "X1", "X2", "X3", "X4", "X5", "X6", "X7", "X8", "X9", "X10", "Y" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X1", "X2", "X3", "X4", "X5", "X6", "X7", "X8", "X9", "X10", "Y" }; } }
     protected override string[] AllowedInputVariables { get { return new string[] { "X1", "X2", "X3", "X4", "X5", "X6", "X7", "X8", "X9", "X10" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Various/FriedmanOne.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Various/FriedmanOne.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Various/FriedmanOne.cs	(revision 9363)
@@ -36,5 +36,5 @@
     }
     protected override string TargetVariable { get { return "Y"; } }
-    protected override string[] InputVariables { get { return new string[] { "X1", "X2", "X3", "X4", "X5", "X6", "X7", "X8", "X9", "X10", "Y" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X1", "X2", "X3", "X4", "X5", "X6", "X7", "X8", "X9", "X10", "Y" }; } }
     protected override string[] AllowedInputVariables { get { return new string[] { "X1", "X2", "X3", "X4", "X5", "X6", "X7", "X8", "X9", "X10" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Various/FriedmanTwo.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Various/FriedmanTwo.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Various/FriedmanTwo.cs	(revision 9363)
@@ -36,6 +36,6 @@
     }
     protected override string TargetVariable { get { return "Y"; } }
-    protected override string[] InputVariables { get { return new string[] { "X1", "X2", "X3", "X4", "X5", "Y" }; } }
-    protected override string[] AllowedInputVariables { get { return new string[] { "X1", "X2", "X3", "X4", "X5" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X1", "X2", "X3", "X4", "X5", "X6", "X7", "X8", "X9", "X10", "Y" }; } }
+    protected override string[] AllowedInputVariables { get { return new string[] { "X1", "X2", "X3", "X4", "X5", "X6", "X7", "X8", "X9", "X10" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
     protected override int TrainingPartitionEnd { get { return 5000; } }
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Various/PolyTen.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Various/PolyTen.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Various/PolyTen.cs	(revision 9363)
@@ -39,5 +39,5 @@
     }
     protected override string TargetVariable { get { return "Y"; } }
-    protected override string[] InputVariables { get { return new string[] { "X1", "X2", "X3", "X4", "X5", "X6", "X7", "X8", "X9", "X10", "Y" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X1", "X2", "X3", "X4", "X5", "X6", "X7", "X8", "X9", "X10", "Y" }; } }
     protected override string[] AllowedInputVariables { get { return new string[] { "X1", "X2", "X3", "X4", "X5", "X6", "X7", "X8", "X9", "X10" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Various/SpatialCoevolution.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Various/SpatialCoevolution.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Various/SpatialCoevolution.cs	(revision 9363)
@@ -43,5 +43,5 @@
     }
     protected override string TargetVariable { get { return "F"; } }
-    protected override string[] InputVariables { get { return new string[] { "X", "Y", "F" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X", "Y", "F" }; } }
     protected override string[] AllowedInputVariables { get { return new string[] { "X", "Y" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/KotanchekFunction.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/KotanchekFunction.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/KotanchekFunction.cs	(revision 9363)
@@ -27,22 +27,22 @@
   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";
+        + "Test Data: 45*45 points (X1, X2) = (-0.2:0.1:4.2)" + Environment.NewLine
+        + "Function Set: +, -, *, /, square, e^x, e^-x, x^eps, x + eps, x * eps";
       }
     }
     protected override string TargetVariable { get { return "Y"; } }
-    protected override string[] InputVariables { get { return new string[] { "X1", "X2", "Y" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X1", "X2", "Y" }; } }
     protected override string[] AllowedInputVariables { get { return new string[] { "X1", "X2" }; } }
     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 100 + (45 * 45); } }
 
     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/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/RationalPolynomialThreeDimensional.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/RationalPolynomialThreeDimensional.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/RationalPolynomialThreeDimensional.cs	(revision 9363)
@@ -27,35 +27,35 @@
   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";
+        + "Test Data: (14*12*14) points X1, X3 = (-0.05:0.15:2.05), X2 = (0.95:0.1:2.05)" + Environment.NewLine
+        + "Function Set: +, -, *, /, square, x^eps, x + eps, x * eps";
       }
     }
     protected override string TargetVariable { get { return "Y"; } }
-    protected override string[] InputVariables { get { return new string[] { "X1", "X2", "X3", "Y" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X1", "X2", "X3", "Y" }; } }
     protected override string[] AllowedInputVariables { get { return new string[] { "X1", "X2", "X3" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
     protected override int TrainingPartitionEnd { get { return 300; } }
-    protected override int TestPartitionStart { get { return 1000; } }
-    protected override int TestPartitionEnd { get { return 3700; } }
+    protected override int TestPartitionStart { get { return 300; } }
+    protected override int TestPartitionEnd { get { return 300 + (15*12*15); } }
 
     protected override List<List<double>> GenerateValues() {
       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 = 300;
+      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>>() { 
-        ValueGenerator.GenerateSteps(-0.05, 2.1, 0.15).ToList(), 
+        ValueGenerator.GenerateSteps(-0.05, 2.05, 0.15).ToList(), 
         ValueGenerator.GenerateSteps( 0.95, 2.05, 0.1).ToList(),
-        ValueGenerator.GenerateSteps(-0.05, 2.1, 0.15).ToList()
+        ValueGenerator.GenerateSteps(-0.05, 2.05, 0.15).ToList()
       };
 
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/RationalPolynomialTwoDimensional.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/RationalPolynomialTwoDimensional.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/RationalPolynomialTwoDimensional.cs	(revision 9363)
@@ -27,22 +27,22 @@
   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";
+        + "Test Data: 34*34 points X1, X2 = (-0.25:0.2:6.35)" + Environment.NewLine
+        + "Function Set: +, -, *, /, square, x^eps, x + eps, x * eps";
       }
     }
     protected override string TargetVariable { get { return "Y"; } }
-    protected override string[] InputVariables { get { return new string[] { "X1", "X2", "Y" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X1", "X2", "Y" }; } }
     protected override string[] AllowedInputVariables { get { return new string[] { "X1", "X2" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
     protected override int TrainingPartitionEnd { get { return 50; } }
-    protected override int TestPartitionStart { get { return 1000; } }
-    protected override int TestPartitionEnd { get { return 2157; } }
+    protected override int TestPartitionStart { get { return 50; } }
+    protected override int TestPartitionEnd { get { return 50 + (34 * 34); } }
 
     protected override List<List<double>> GenerateValues() {
@@ -50,9 +50,10 @@
 
       List<double> oneVariableTestData = ValueGenerator.GenerateSteps(-0.25, 6.35, 0.2).ToList();
+
       List<List<double>> testData = new List<List<double>>() { oneVariableTestData, oneVariableTestData };
+      var combinations = ValueGenerator.GenerateAllCombinationsOfValuesInLists(testData).ToList<IEnumerable<double>>();
 
-      var combinations = ValueGenerator.GenerateAllCombinationsOfValuesInLists(testData).ToList<IEnumerable<double>>();
       for (int i = 0; i < AllowedInputVariables.Count(); i++) {
-        data.Add(ValueGenerator.GenerateUniformDistributedValues(1000, 0.05, 6.05).ToList());
+        data.Add(ValueGenerator.GenerateUniformDistributedValues(50, 0.05, 6.05).ToList());
         data[i].AddRange(combinations[i]);
       }
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/RippleFunction.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/RippleFunction.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/RippleFunction.cs	(revision 9363)
@@ -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,23 +35,23 @@
         + "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";
       }
     }
     protected override string TargetVariable { get { return "Y"; } }
-    protected override string[] InputVariables { get { return new string[] { "X1", "X2", "Y" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X1", "X2", "Y" }; } }
     protected override string[] AllowedInputVariables { get { return new string[] { "X1", "X2" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
     protected override int TrainingPartitionEnd { get { return 300; } }
     protected override int TestPartitionStart { get { return 300; } }
-    protected override int TestPartitionEnd { get { return 1300; } }
+    protected override int TestPartitionEnd { get { return 300 + 1000; } }
 
     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(TrainingPartitionEnd, 0.05, 6.05).ToList());
+        data.Add(ValueGenerator.GenerateUniformDistributedValues(300, 0.05, 6.05).ToList());
       }
 
       for (int i = 0; i < AllowedInputVariables.Count(); i++) {
-        data[i].AddRange(ValueGenerator.GenerateUniformDistributedValues(TrainingPartitionEnd, -0.25, 6.35));
+        data[i].AddRange(ValueGenerator.GenerateUniformDistributedValues(1000, -0.25, 6.35));
       }
 
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/SalutowiczFunctionOneDimensional.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/SalutowiczFunctionOneDimensional.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/SalutowiczFunctionOneDimensional.cs	(revision 9363)
@@ -27,17 +27,17 @@
   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";
       }
     }
     protected override string TargetVariable { get { return "Y"; } }
-    protected override string[] InputVariables { get { return new string[] { "X", "Y" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X", "Y" }; } }
     protected override string[] AllowedInputVariables { get { return new string[] { "X" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/SalutowiczFunctionTwoDimensional.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/SalutowiczFunctionTwoDimensional.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/SalutowiczFunctionTwoDimensional.cs	(revision 9363)
@@ -27,23 +27,22 @@
   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
-        + "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.";
+        + "Function: F3(X1, X2) = exp(-X1) * X1³ * cos(X1) * sin(X1) * (cos(X1)sin(X1)² - 1)(X2 - 5)" + Environment.NewLine
+        + "Training Data: 600 points X1 = (0.05:0.1:10), X2 = (0.05:2:10.05)" + Environment.NewLine
+        + "Test Data: 221 * 23 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";
       }
     }
     protected override string TargetVariable { get { return "Y"; } }
-    protected override string[] InputVariables { get { return new string[] { "X1", "X2", "Y" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X1", "X2", "Y" }; } }
     protected override string[] AllowedInputVariables { get { return new string[] { "X1", "X2" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
-    protected override int TrainingPartitionEnd { get { return 601; } }
-    protected override int TestPartitionStart { get { return 601; } }
-    protected override int TestPartitionEnd { get { return 3155; } }
+    protected override int TrainingPartitionEnd { get { return 600; } }
+    protected override int TestPartitionStart { get { return 600; } }
+    protected override int TestPartitionEnd { get { return 600 + (221 * 23); } }
 
     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/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/SineCosineFunction.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/SineCosineFunction.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/SineCosineFunction.cs	(revision 9363)
@@ -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 {
@@ -34,15 +34,15 @@
         + "Function: F6(X1, X2) = 6 * sin(X1) * cos(X2)" + Environment.NewLine
         + "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";
+        + "Test Data: 306*306 points X1, X2 = (-0.05:0.02:6.05)" + Environment.NewLine
+        + "Function Set: +, -, *, /, square, e^x, e^-x, x^eps, x + eps, x * eps";
       }
     }
     protected override string TargetVariable { get { return "Y"; } }
-    protected override string[] InputVariables { get { return new string[] { "X1", "X2", "Y" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X1", "X2", "Y" }; } }
     protected override string[] AllowedInputVariables { get { return new string[] { "X1", "X2" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
     protected override int TrainingPartitionEnd { get { return 30; } }
-    protected override int TestPartitionStart { get { return 500; } }
-    protected override int TestPartitionEnd { get { return 1461; } }
+    protected override int TestPartitionStart { get { return 30; } }
+    protected override int TestPartitionEnd { get { return 30 + (306 * 306); } }
 
     protected override List<List<double>> GenerateValues() {
@@ -53,5 +53,5 @@
 
       for (int i = 0; i < AllowedInputVariables.Count(); i++) {
-        data.Add(ValueGenerator.GenerateUniformDistributedValues(500, 0.1, 5.9).ToList());
+        data.Add(ValueGenerator.GenerateUniformDistributedValues(30, 0.1, 5.9).ToList());
         data[i].AddRange(combinations[i]);
       }
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/UnwrappedBallFunctionFiveDimensional.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/UnwrappedBallFunctionFiveDimensional.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/UnwrappedBallFunctionFiveDimensional.cs	(revision 9363)
@@ -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,9 +35,9 @@
         + "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";
       }
     }
     protected override string TargetVariable { get { return "Y"; } }
-    protected override string[] InputVariables { get { return new string[] { "X1", "X2", "X3", "X4", "X5", "Y" }; } }
+    protected override string[] VariableNames { get { return new string[] { "X1", "X2", "X3", "X4", "X5", "Y" }; } }
     protected override string[] AllowedInputVariables { get { return new string[] { "X1", "X2", "X3", "X4", "X5" }; } }
     protected override int TrainingPartitionStart { get { return 0; } }
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/VladislavlevaInstanceProvider.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/VladislavlevaInstanceProvider.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/VladislavlevaInstanceProvider.cs	(revision 9363)
@@ -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/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/TableFileParser.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/TableFileParser.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/TableFileParser.cs	(revision 9363)
@@ -32,5 +32,5 @@
 namespace HeuristicLab.Problems.Instances.DataAnalysis {
   public class TableFileParser {
-    private const int BUFFER_SIZE = 1024;
+    private const int BUFFER_SIZE = 65536;
     private static readonly char[] POSSIBLE_SEPARATORS = new char[] { ',', ';', '\t' };
     private Tokenizer tokenizer;
@@ -83,6 +83,6 @@
       DateTimeFormatInfo dateTimeFormatInfo;
       char separator;
-      DetermineFileFormat(new FileStream(fileName, FileMode.Open), out numberFormat, out dateTimeFormatInfo, out separator);
-      Parse(new FileStream(fileName, FileMode.Open), numberFormat, dateTimeFormatInfo, separator);
+      DetermineFileFormat(new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite), out numberFormat, out dateTimeFormatInfo, out separator);
+      Parse(new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite), numberFormat, dateTimeFormatInfo, separator);
     }
 
@@ -95,5 +95,5 @@
     /// <param name="separator">defines the separator</param>
     public void Parse(string fileName, NumberFormatInfo numberFormat, DateTimeFormatInfo dateTimeFormatInfo, char separator) {
-      Parse(new FileStream(fileName, FileMode.Open), numberFormat, dateTimeFormatInfo, separator);
+      Parse(new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite), numberFormat, dateTimeFormatInfo, separator);
     }
 
@@ -163,5 +163,5 @@
 
     public static void DetermineFileFormat(string path, out NumberFormatInfo numberFormat, out DateTimeFormatInfo dateTimeFormatInfo, out char separator) {
-      DetermineFileFormat(new FileStream(path, FileMode.Open), out numberFormat, out dateTimeFormatInfo, out separator);
+      DetermineFileFormat(new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite), out numberFormat, out dateTimeFormatInfo, out separator);
     }
 
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/TimeSeries/CSV/TimeSeriesPrognosisCSVInstanceProvider.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/TimeSeries/CSV/TimeSeriesPrognosisCSVInstanceProvider.cs	(revision 9363)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/TimeSeries/CSV/TimeSeriesPrognosisCSVInstanceProvider.cs	(revision 9363)
@@ -0,0 +1,114 @@
+﻿#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;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Problems.DataAnalysis;
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class TimeSeriesPrognosisCSVInstanceProvider : TimeSeriesPrognosisInstanceProvider {
+    public override string Name {
+      get { return "CSV Problem Provider"; }
+    }
+    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 ITimeSeriesPrognosisProblemData LoadData(IDataDescriptor descriptor) {
+      throw new NotImplementedException();
+    }
+
+    public override bool CanImportData { get { return true; } }
+
+    public override ITimeSeriesPrognosisProblemData ImportData(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 = dataset.DoubleVariables.Where(x => !x.Equals(targetVar));
+
+      ITimeSeriesPrognosisProblemData timeSeriesPrognosisData = new TimeSeriesPrognosisProblemData(dataset, allowedInputVars, targetVar);
+
+      int trainingPartEnd = csvFileParser.Rows * 2 / 3;
+      timeSeriesPrognosisData.TrainingPartition.Start = 0;
+      timeSeriesPrognosisData.TrainingPartition.End = trainingPartEnd;
+      timeSeriesPrognosisData.TestPartition.Start = trainingPartEnd;
+      timeSeriesPrognosisData.TestPartition.End = csvFileParser.Rows;
+
+      int pos = path.LastIndexOf('\\');
+      if (pos < 0)
+        timeSeriesPrognosisData.Name = path;
+      else {
+        pos++;
+        timeSeriesPrognosisData.Name = path.Substring(pos, path.Length - pos);
+      }
+      return timeSeriesPrognosisData;
+    }
+
+    protected override ITimeSeriesPrognosisProblemData ImportData(string path, TimeSeriesPrognosisImportType type, TableFileParser csvFileParser) {
+      Dataset dataset = new Dataset(csvFileParser.VariableNames, csvFileParser.Values);
+
+      // turn of input variables that are constant in the training partition
+      var allowedInputVars = new List<string>();
+      int trainingPartEnd = (csvFileParser.Rows * type.TrainingPercentage) / 100;
+      trainingPartEnd = trainingPartEnd > 0 ? trainingPartEnd : 1;
+      var trainingIndizes = Enumerable.Range(0, trainingPartEnd);
+      if (trainingIndizes.Count() >= 2) {
+        foreach (var variableName in dataset.DoubleVariables) {
+          if (dataset.GetDoubleValues(variableName, trainingIndizes).Range() > 0 &&
+            variableName != type.TargetVariable)
+            allowedInputVars.Add(variableName);
+        }
+      } else {
+        allowedInputVars.AddRange(dataset.DoubleVariables.Where(x => !x.Equals(type.TargetVariable)));
+      }
+
+      TimeSeriesPrognosisProblemData timeSeriesPrognosisData = new TimeSeriesPrognosisProblemData(dataset, allowedInputVars, type.TargetVariable);
+
+      timeSeriesPrognosisData.TrainingPartition.Start = 0;
+      timeSeriesPrognosisData.TrainingPartition.End = trainingPartEnd;
+      timeSeriesPrognosisData.TestPartition.Start = trainingPartEnd;
+      timeSeriesPrognosisData.TestPartition.End = csvFileParser.Rows;
+
+      timeSeriesPrognosisData.Name = Path.GetFileName(path);
+
+      return timeSeriesPrognosisData;
+    }
+  }
+}
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/TimeSeries/TimeSeriesPrognosisImportType.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/TimeSeries/TimeSeriesPrognosisImportType.cs	(revision 9363)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/TimeSeries/TimeSeriesPrognosisImportType.cs	(revision 9363)
@@ -0,0 +1,26 @@
+﻿#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;
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class TimeSeriesPrognosisImportType : DataAnalysisImportType {
+    public string TargetVariable { get; set; }
+  }
+}
Index: branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/TimeSeries/TimeSeriesPrognosisInstanceProvider.cs
===================================================================
--- branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/TimeSeries/TimeSeriesPrognosisInstanceProvider.cs	(revision 9363)
+++ branches/OaaS/HeuristicLab.Problems.Instances.DataAnalysis/3.3/TimeSeries/TimeSeriesPrognosisInstanceProvider.cs	(revision 9363)
@@ -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 TimeSeriesPrognosisInstanceProvider : DataAnalysisInstanceProvider<ITimeSeriesPrognosisProblemData, TimeSeriesPrognosisImportType> {
+  }
+}
