Index: /branches/HeuristicLab.Problems.GaussianProcessTuning/HeuristicLab.Problems.Instances.DataAnalysis.GaussianProcessRegression/GaussianProcess2dPeriodic.cs
===================================================================
--- /branches/HeuristicLab.Problems.GaussianProcessTuning/HeuristicLab.Problems.Instances.DataAnalysis.GaussianProcessRegression/GaussianProcess2dPeriodic.cs	(revision 9214)
+++ /branches/HeuristicLab.Problems.GaussianProcessTuning/HeuristicLab.Problems.Instances.DataAnalysis.GaussianProcessRegression/GaussianProcess2dPeriodic.cs	(revision 9214)
@@ -0,0 +1,94 @@
+﻿#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.Algorithms.DataAnalysis;
+using HeuristicLab.Data;
+using HeuristicLab.Random;
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class GaussianProcess2dPeriodic : ArtificialRegressionDataDescriptor {
+
+    public override string Name {
+      get {
+        return "Gaussian Process 2d periodic";
+      }
+    }
+    public override string Description {
+      get { return ""; }
+    }
+    protected override string TargetVariable { get { return "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 20 * 20; } }
+    protected override int TestPartitionStart { get { return 20 * 20; } }
+    protected override int TestPartitionEnd { get { return 2 * (20 * 20); } }
+
+    protected override List<List<double>> GenerateValues() {
+      List<List<double>> independentTrainingData = new List<List<double>>();
+      List<List<double>> independentTestData = new List<List<double>>();
+      for (int i = 0; i < AllowedInputVariables.Count(); i++) {
+        independentTrainingData.Add(ValueGenerator.GenerateSteps(0, 0.99, 1.0 / 20).ToList());
+        independentTestData.Add(ValueGenerator.GenerateSteps(0.005, 1, 1.0 / 20).ToList());
+      }
+
+
+      var trainingData = ValueGenerator.GenerateAllCombinationsOfValuesInLists(independentTrainingData);
+      var testData = ValueGenerator.GenerateAllCombinationsOfValuesInLists(independentTestData);
+      List<List<double>> data = new List<List<double>>();
+      foreach (var e in trainingData) {
+        data.Add(e.ToList());
+      }
+      int j = 0;
+      foreach (var e in testData) {
+        data[j].AddRange(e);
+        j++;
+      }
+
+      var covarianceFunction = new CovarianceSum();
+      var m1 = new CovarianceMask();
+      m1.SelectedDimensionsParameter.Value = new IntArray(new int[] { 0 });
+      m1.CovarianceFunctionParameter.Value = new CovariancePeriodic();
+      var m2 = new CovarianceMask();
+      m2.SelectedDimensionsParameter.Value = new IntArray(new int[] { 1 });
+      m2.CovarianceFunctionParameter.Value = new CovariancePeriodic();
+
+      covarianceFunction.Terms.Add(m1);
+      covarianceFunction.Terms.Add(m2);
+      covarianceFunction.Terms.Add(new CovarianceNoise());
+      var cov =
+        covarianceFunction.GetParameterizedCovarianceFunction(
+          Enumerable.Repeat(0.0, covarianceFunction.GetNumberOfParameters(2) - 1)
+          .Concat(new double[] { Math.Log(Math.Sqrt(0.01)) })
+          .ToArray(),
+          null);
+
+      var mt = new MersenneTwister(31415);
+      var target = Util.SampleGaussianProcess(mt, cov, data);
+      data.Add(target);
+
+      return data;
+    }
+  }
+}
Index: /branches/HeuristicLab.Problems.GaussianProcessTuning/HeuristicLab.Problems.Instances.DataAnalysis.GaussianProcessRegression/Instances.DataAnalysis.GaussianProcessRegression-3.3.csproj
===================================================================
--- /branches/HeuristicLab.Problems.GaussianProcessTuning/HeuristicLab.Problems.Instances.DataAnalysis.GaussianProcessRegression/Instances.DataAnalysis.GaussianProcessRegression-3.3.csproj	(revision 9213)
+++ /branches/HeuristicLab.Problems.GaussianProcessTuning/HeuristicLab.Problems.Instances.DataAnalysis.GaussianProcessRegression/Instances.DataAnalysis.GaussianProcessRegression-3.3.csproj	(revision 9214)
@@ -178,4 +178,5 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="GaussianProcess2dPeriodic.cs" />
     <Compile Include="GaussianProcessRegressionInstance1D.cs" />
     <Compile Include="GaussianProcessRegressionInstance2D.cs" />
Index: /branches/HeuristicLab.Problems.GaussianProcessTuning/HeuristicLab.Problems.Instances.DataAnalysis.GaussianProcessRegression/VariousInstanceProvider.cs
===================================================================
--- /branches/HeuristicLab.Problems.GaussianProcessTuning/HeuristicLab.Problems.Instances.DataAnalysis.GaussianProcessRegression/VariousInstanceProvider.cs	(revision 9213)
+++ /branches/HeuristicLab.Problems.GaussianProcessTuning/HeuristicLab.Problems.Instances.DataAnalysis.GaussianProcessRegression/VariousInstanceProvider.cs	(revision 9214)
@@ -52,4 +52,5 @@
       descriptorList.Add(new GaussianProcessPolyTen());
       descriptorList.Add(new GaussianProcessSEIsoDependentNoise());
+      descriptorList.Add(new GaussianProcess2dPeriodic());
 
       {
