Index: /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.DataAnalysis/DatasetShuffler.cs
===================================================================
--- /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.DataAnalysis/DatasetShuffler.cs	(revision 1245)
+++ /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.DataAnalysis/DatasetShuffler.cs	(revision 1245)
@@ -0,0 +1,58 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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 System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Random;
+
+namespace HeuristicLab.DataAnalysis {
+  public class DatasetShuffler : OperatorBase {
+    public DatasetShuffler()
+      : base() {
+      AddVariableInfo(new VariableInfo("Dataset", "Dataset which should be shuffled (random row order)", typeof(Dataset), VariableKind.In | VariableKind.Out));
+      AddVariableInfo(new VariableInfo("Random", "Randomizer", typeof(MersenneTwister), VariableKind.In));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      Dataset dataset = GetVariableValue<Dataset>("Dataset", scope, true);
+      MersenneTwister tw = GetVariableValue<MersenneTwister>("Random", scope, true);
+
+      for(int i = 0; i < dataset.Rows - 1; i++) {
+        int j = tw.Next(i, dataset.Rows);
+        ExchangeRows(dataset, i, j);
+      }
+
+      return null;
+    }
+
+    private void ExchangeRows(Dataset dataset, int i, int j) {
+      for(int k = 0; k < dataset.Columns; k++) {
+        double temp = dataset.GetValue(i, k);
+        dataset.SetValue(i, k, dataset.GetValue(j, k));
+        dataset.SetValue(j, k, temp);
+      }
+    }
+  }
+}
Index: /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.DataAnalysis/HeuristicLab.DataAnalysis.csproj
===================================================================
--- /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.DataAnalysis/HeuristicLab.DataAnalysis.csproj	(revision 1244)
+++ /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.DataAnalysis/HeuristicLab.DataAnalysis.csproj	(revision 1245)
@@ -71,4 +71,5 @@
     <Compile Include="Dataset.cs" />
     <Compile Include="DatasetParser.cs" />
+    <Compile Include="DatasetShuffler.cs" />
     <Compile Include="DatasetView.cs">
       <SubType>UserControl</SubType>
@@ -97,7 +98,15 @@
       <Name>HeuristicLab.Data</Name>
     </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Operators\HeuristicLab.Operators.csproj">
+      <Project>{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}</Project>
+      <Name>HeuristicLab.Operators</Name>
+    </ProjectReference>
     <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
       <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
       <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Random\HeuristicLab.Random.csproj">
+      <Project>{47019A74-F7F7-482E-83AA-D3F4F777E879}</Project>
+      <Name>HeuristicLab.Random</Name>
     </ProjectReference>
   </ItemGroup>
Index: anches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.Classification/DatasetShuffler.cs
===================================================================
--- /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.Classification/DatasetShuffler.cs	(revision 1244)
+++ 	(revision )
@@ -1,60 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 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 System.Text;
-using HeuristicLab.Core;
-using HeuristicLab.Data;
-using HeuristicLab.GP.StructureIdentification;
-using HeuristicLab.DataAnalysis;
-using HeuristicLab.Random;
-
-namespace HeuristicLab.GP.StructureIdentification.Classification {
-  public class DatasetShuffler : OperatorBase {
-    public DatasetShuffler()
-      : base() {
-      AddVariableInfo(new VariableInfo("Dataset", "Dataset which should be shuffled (random row order)", typeof(Dataset), VariableKind.In | VariableKind.Out));
-      AddVariableInfo(new VariableInfo("Random", "Randomizer", typeof(MersenneTwister), VariableKind.In));
-    }
-
-    public override IOperation Apply(IScope scope) {
-      Dataset dataset = GetVariableValue<Dataset>("Dataset", scope, true);
-      MersenneTwister tw = GetVariableValue<MersenneTwister>("Random", scope, true);
-
-      for(int i = 0; i < dataset.Rows - 1; i++) {
-        int j = tw.Next(i, dataset.Rows);
-        ExchangeRows(dataset, i, j);
-      }
-
-      return null;
-    }
-
-    private void ExchangeRows(Dataset dataset, int i, int j) {
-      for(int k = 0; k < dataset.Columns; k++) {
-        double temp = dataset.GetValue(i, k);
-        dataset.SetValue(i, k, dataset.GetValue(j, k));
-        dataset.SetValue(j, k, temp);
-      }
-    }
-  }
-}
Index: /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.Classification/HeuristicLab.GP.StructureIdentification.Classification.csproj
===================================================================
--- /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.Classification/HeuristicLab.GP.StructureIdentification.Classification.csproj	(revision 1244)
+++ /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.Classification/HeuristicLab.GP.StructureIdentification.Classification.csproj	(revision 1245)
@@ -67,5 +67,4 @@
     <Compile Include="ClassificationMeanSquaredErrorEvaluator.cs" />
     <Compile Include="ConfusionMatrixEvaluator.cs" />
-    <Compile Include="DatasetShuffler.cs" />
     <Compile Include="GPClassificationEvaluatorBase.cs" />
     <Compile Include="CrossValidation.cs" />
@@ -73,6 +72,8 @@
     <Compile Include="MulticlassModeller.cs" />
     <Compile Include="MulticlassOneVsOneAnalyzer.cs" />
+    <Compile Include="OffspringSelectionGP.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="ROCAnalyzer.cs" />
+    <Compile Include="StandardGP.cs" />
   </ItemGroup>
   <ItemGroup>
Index: /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.Classification/OffspringSelectionGP.cs
===================================================================
--- /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.Classification/OffspringSelectionGP.cs	(revision 1245)
+++ /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.Classification/OffspringSelectionGP.cs	(revision 1245)
@@ -0,0 +1,73 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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 System.Text;
+using HeuristicLab.Core;
+using System.Xml;
+using System.Diagnostics;
+using HeuristicLab.DataAnalysis;
+using HeuristicLab.Random;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.GP.StructureIdentification.Classification {
+  public class OffspringSelectionGP : HeuristicLab.GP.StructureIdentification.OffspringSelectionGP {
+    protected override IOperator CreateBestSolutionProcessor() {
+      IOperator seq = base.CreateBestSolutionProcessor();
+      AccuracyEvaluator trainingAccuracy = new AccuracyEvaluator();
+      trainingAccuracy.GetVariableInfo("Accuracy").ActualName = "TrainingAccuracy";
+      trainingAccuracy.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart";
+      trainingAccuracy.GetVariableInfo("SamplesEnd").ActualName = "TrainingSamplesEnd";
+
+      AccuracyEvaluator validationAccuracy = new AccuracyEvaluator();
+      validationAccuracy.GetVariableInfo("Accuracy").ActualName = "ValidationAccuracy";
+      validationAccuracy.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
+      validationAccuracy.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
+
+      AccuracyEvaluator testAccuracy = new AccuracyEvaluator();
+      testAccuracy.GetVariableInfo("Accuracy").ActualName = "TestAccuracy";
+      testAccuracy.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
+      testAccuracy.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
+
+      ConfusionMatrixEvaluator trainingConfusionMatrix = new ConfusionMatrixEvaluator();
+      trainingConfusionMatrix.GetVariableInfo("ConfusionMatrix").ActualName = "TrainingConfusionMatrix";
+      trainingConfusionMatrix.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart";
+      trainingConfusionMatrix.GetVariableInfo("SamplesEnd").ActualName = "TrainingSamplesEnd";
+
+      ConfusionMatrixEvaluator validationConfusionMatrix = new ConfusionMatrixEvaluator();
+      validationConfusionMatrix.GetVariableInfo("ConfusionMatrix").ActualName = "ValidationConfusionMatrix";
+      validationConfusionMatrix.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
+      validationConfusionMatrix.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
+
+      ConfusionMatrixEvaluator testConfusionMatrix = new ConfusionMatrixEvaluator();
+      testConfusionMatrix.GetVariableInfo("ConfusionMatrix").ActualName = "TestConfusionMatrix";
+      testConfusionMatrix.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
+      testConfusionMatrix.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
+
+      seq.AddSubOperator(trainingAccuracy);
+      seq.AddSubOperator(validationAccuracy);
+      seq.AddSubOperator(testAccuracy);
+      return seq;
+    }
+  }
+}
Index: /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.Classification/StandardGP.cs
===================================================================
--- /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.Classification/StandardGP.cs	(revision 1245)
+++ /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.Classification/StandardGP.cs	(revision 1245)
@@ -0,0 +1,73 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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 System.Text;
+using HeuristicLab.Core;
+using System.Xml;
+using System.Diagnostics;
+using HeuristicLab.DataAnalysis;
+using HeuristicLab.Random;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.GP.StructureIdentification.Classification {
+  public class StandardGP :  HeuristicLab.GP.StructureIdentification.StandardGP {
+    protected override IOperator CreateBestSolutionProcessor() {
+      IOperator seq = base.CreateBestSolutionProcessor();
+      AccuracyEvaluator trainingAccuracy = new AccuracyEvaluator();
+      trainingAccuracy.GetVariableInfo("Accuracy").ActualName = "TrainingAccuracy";
+      trainingAccuracy.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart";
+      trainingAccuracy.GetVariableInfo("SamplesEnd").ActualName = "TrainingSamplesEnd";
+
+      AccuracyEvaluator validationAccuracy = new AccuracyEvaluator();
+      validationAccuracy.GetVariableInfo("Accuracy").ActualName = "ValidationAccuracy";
+      validationAccuracy.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
+      validationAccuracy.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
+
+      AccuracyEvaluator testAccuracy = new AccuracyEvaluator();
+      testAccuracy.GetVariableInfo("Accuracy").ActualName = "TestAccuracy";
+      testAccuracy.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
+      testAccuracy.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
+
+      ConfusionMatrixEvaluator trainingConfusionMatrix = new ConfusionMatrixEvaluator();
+      trainingConfusionMatrix.GetVariableInfo("ConfusionMatrix").ActualName = "TrainingConfusionMatrix";
+      trainingConfusionMatrix.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart";
+      trainingConfusionMatrix.GetVariableInfo("SamplesEnd").ActualName = "TrainingSamplesEnd";
+
+      ConfusionMatrixEvaluator validationConfusionMatrix = new ConfusionMatrixEvaluator();
+      validationConfusionMatrix.GetVariableInfo("ConfusionMatrix").ActualName = "ValidationConfusionMatrix";
+      validationConfusionMatrix.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
+      validationConfusionMatrix.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
+
+      ConfusionMatrixEvaluator testConfusionMatrix = new ConfusionMatrixEvaluator();
+      testConfusionMatrix.GetVariableInfo("ConfusionMatrix").ActualName = "TestConfusionMatrix";
+      testConfusionMatrix.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
+      testConfusionMatrix.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
+
+      seq.AddSubOperator(trainingAccuracy);
+      seq.AddSubOperator(validationAccuracy);
+      seq.AddSubOperator(testAccuracy);
+      return seq;
+    }
+  }
+}
Index: /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.TimeSeries/HeuristicLab.GP.StructureIdentification.TimeSeries.csproj
===================================================================
--- /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.TimeSeries/HeuristicLab.GP.StructureIdentification.TimeSeries.csproj	(revision 1244)
+++ /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.TimeSeries/HeuristicLab.GP.StructureIdentification.TimeSeries.csproj	(revision 1245)
@@ -69,6 +69,8 @@
     </Compile>
     <Compile Include="HeuristicLabGPTimeSeriesPlugin.cs" />
+    <Compile Include="OffspringSelectionGP.cs" />
     <Compile Include="ProfitEvaluator.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="StandardGP.cs" />
     <Compile Include="TheilInequalityCoefficientEvaluator.cs" />
   </ItemGroup>
@@ -98,4 +100,8 @@
       <Name>HeuristicLab.GP</Name>
     </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Operators\HeuristicLab.Operators.csproj">
+      <Project>{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}</Project>
+      <Name>HeuristicLab.Operators</Name>
+    </ProjectReference>
     <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
       <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
Index: /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.TimeSeries/OffspringSelectionGP.cs
===================================================================
--- /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.TimeSeries/OffspringSelectionGP.cs	(revision 1245)
+++ /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.TimeSeries/OffspringSelectionGP.cs	(revision 1245)
@@ -0,0 +1,72 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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 System.Text;
+using HeuristicLab.Core;
+using System.Xml;
+using System.Diagnostics;
+using HeuristicLab.DataAnalysis;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.GP.StructureIdentification.TimeSeries {
+  public class OffspringSelectionGP : HeuristicLab.GP.StructureIdentification.OffspringSelectionGP {
+    protected override IOperator CreateFunctionLibraryInjector() {
+      return new FunctionLibraryInjector();
+    }
+
+    protected override IOperator CreateBestSolutionProcessor() {
+      IOperator seq = base.CreateBestSolutionProcessor();
+      TheilInequalityCoefficientEvaluator trainingTheil = new TheilInequalityCoefficientEvaluator();
+      trainingTheil.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart";
+      trainingTheil.GetVariableInfo("SamplesEnd").ActualName = "TrainingSamplesEnd";
+      trainingTheil.GetVariableInfo("TheilInequalityCoefficient").ActualName = "TrainingTheilInequalityCoefficient";
+      trainingTheil.GetVariableInfo("TheilInequalityCoefficientBias").ActualName = "TrainingTheilInequalityCoefficientBias";
+      trainingTheil.GetVariableInfo("TheilInequalityCoefficientVariance").ActualName = "TrainingTheilInequalityCoefficientVariance";
+      trainingTheil.GetVariableInfo("TheilInequalityCoefficientCovariance").ActualName = "TrainingTheilInequalityCoefficientCovariance";
+
+      TheilInequalityCoefficientEvaluator validationTheil = new TheilInequalityCoefficientEvaluator();
+      validationTheil.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
+      validationTheil.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
+      validationTheil.GetVariableInfo("TheilInequalityCoefficient").ActualName = "ValidationTheilInequalityCoefficient";
+      validationTheil.GetVariableInfo("TheilInequalityCoefficientBias").ActualName = "ValidationTheilInequalityCoefficientBias";
+      validationTheil.GetVariableInfo("TheilInequalityCoefficientVariance").ActualName = "ValidationTheilInequalityCoefficientVariance";
+      validationTheil.GetVariableInfo("TheilInequalityCoefficientCovariance").ActualName = "ValidationTheilInequalityCoefficientCovariance";
+
+      TheilInequalityCoefficientEvaluator testTheil = new TheilInequalityCoefficientEvaluator();
+      testTheil.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
+      testTheil.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
+      testTheil.GetVariableInfo("TheilInequalityCoefficient").ActualName = "TestTheilInequalityCoefficient";
+      testTheil.GetVariableInfo("TheilInequalityCoefficientBias").ActualName = "TestTheilInequalityCoefficientBias";
+      testTheil.GetVariableInfo("TheilInequalityCoefficientVariance").ActualName = "TestTheilInequalityCoefficientVariance";
+      testTheil.GetVariableInfo("TheilInequalityCoefficientCovariance").ActualName = "TestTheilInequalityCoefficientCovariance";
+
+      seq.AddSubOperator(trainingTheil);
+      seq.AddSubOperator(validationTheil);
+      seq.AddSubOperator(testTheil);
+
+      return seq;
+    }
+  }
+}
Index: /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.TimeSeries/StandardGP.cs
===================================================================
--- /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.TimeSeries/StandardGP.cs	(revision 1245)
+++ /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.TimeSeries/StandardGP.cs	(revision 1245)
@@ -0,0 +1,71 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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 System.Text;
+using HeuristicLab.Core;
+using System.Xml;
+using System.Diagnostics;
+using HeuristicLab.DataAnalysis;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.GP.StructureIdentification.TimeSeries {
+  public class StandardGP : HeuristicLab.GP.StructureIdentification.StandardGP {
+    protected override IOperator CreateFunctionLibraryInjector() {
+      return new FunctionLibraryInjector();
+    }
+
+    protected override IOperator CreateBestSolutionProcessor() {
+      IOperator seq = base.CreateBestSolutionProcessor();
+      TheilInequalityCoefficientEvaluator trainingTheil = new TheilInequalityCoefficientEvaluator();
+      trainingTheil.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart";
+      trainingTheil.GetVariableInfo("SamplesEnd").ActualName = "TrainingSamplesEnd";
+      trainingTheil.GetVariableInfo("TheilInequalityCoefficient").ActualName = "TrainingTheilInequalityCoefficient";
+      trainingTheil.GetVariableInfo("TheilInequalityCoefficientBias").ActualName = "TrainingTheilInequalityCoefficientBias";
+      trainingTheil.GetVariableInfo("TheilInequalityCoefficientVariance").ActualName = "TrainingTheilInequalityCoefficientVariance";
+      trainingTheil.GetVariableInfo("TheilInequalityCoefficientCovariance").ActualName = "TrainingTheilInequalityCoefficientCovariance";
+
+      TheilInequalityCoefficientEvaluator validationTheil = new TheilInequalityCoefficientEvaluator();
+      validationTheil.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
+      validationTheil.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
+      validationTheil.GetVariableInfo("TheilInequalityCoefficient").ActualName = "ValidationTheilInequalityCoefficient";
+      validationTheil.GetVariableInfo("TheilInequalityCoefficientBias").ActualName = "ValidationTheilInequalityCoefficientBias";
+      validationTheil.GetVariableInfo("TheilInequalityCoefficientVariance").ActualName = "ValidationTheilInequalityCoefficientVariance";
+      validationTheil.GetVariableInfo("TheilInequalityCoefficientCovariance").ActualName = "ValidationTheilInequalityCoefficientCovariance";
+
+      TheilInequalityCoefficientEvaluator testTheil = new TheilInequalityCoefficientEvaluator();
+      testTheil.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
+      testTheil.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
+      testTheil.GetVariableInfo("TheilInequalityCoefficient").ActualName = "TestTheilInequalityCoefficient";
+      testTheil.GetVariableInfo("TheilInequalityCoefficientBias").ActualName = "TestTheilInequalityCoefficientBias";
+      testTheil.GetVariableInfo("TheilInequalityCoefficientVariance").ActualName = "TestTheilInequalityCoefficientVariance";
+      testTheil.GetVariableInfo("TheilInequalityCoefficientCovariance").ActualName = "TestTheilInequalityCoefficientCovariance";
+
+      seq.AddSubOperator(trainingTheil);
+      seq.AddSubOperator(validationTheil);
+      seq.AddSubOperator(testTheil);
+
+      return seq;
+    }
+  }
+}
Index: /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification/AlgorithmBase.cs
===================================================================
--- /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification/AlgorithmBase.cs	(revision 1244)
+++ /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification/AlgorithmBase.cs	(revision 1245)
@@ -112,5 +112,5 @@
     }
 
-    internal virtual CombinedOperator CreateAlgorithm() {
+    protected internal virtual CombinedOperator CreateAlgorithm() {
       CombinedOperator algo = new CombinedOperator();
       algo.Name = "GP";
@@ -164,13 +164,13 @@
     }
 
-    internal abstract IOperator CreateSelector();
-
-    internal abstract IOperator CreateCrossover();
-
-    internal abstract IOperator CreateTreeCreator();
-
-    internal abstract IOperator CreateFunctionLibraryInjector();
-
-    internal virtual IOperator CreateGlobalInjector() {
+    protected internal abstract IOperator CreateSelector();
+
+    protected internal abstract IOperator CreateCrossover();
+
+    protected internal abstract IOperator CreateTreeCreator();
+
+    protected internal abstract IOperator CreateFunctionLibraryInjector();
+
+    protected internal virtual IOperator CreateGlobalInjector() {
       VariableInjector injector = new VariableInjector();
       injector.Name = "Global Injector";
@@ -190,7 +190,7 @@
     }
 
-    internal abstract IOperator CreateManipulator();
-
-    internal virtual IOperator CreateInitialization() {
+    protected internal abstract IOperator CreateManipulator();
+
+    protected internal virtual IOperator CreateInitialization() {
       CombinedOperator init = new CombinedOperator();
       init.Name = "Initialization";
@@ -231,5 +231,5 @@
     }
 
-    internal virtual IOperator CreateMainLoop() {
+    protected internal virtual IOperator CreateMainLoop() {
       CombinedOperator main = new CombinedOperator();
       SequentialProcessor seq = new SequentialProcessor();
@@ -268,9 +268,9 @@
     }
 
-    internal virtual IOperator CreateLoggingOperator() {
+    protected internal virtual IOperator CreateLoggingOperator() {
       return new EmptyOperator();
     }
 
-    internal virtual IOperator CreateLoopCondition(IOperator loop) {
+    protected internal virtual IOperator CreateLoopCondition(IOperator loop) {
       SequentialProcessor seq = new SequentialProcessor();
       seq.Name = "Loop Condition";
@@ -289,9 +289,9 @@
     }
 
-    internal virtual IOperator CreateBestSolutionProcessor() {
+    protected internal virtual IOperator CreateBestSolutionProcessor() {
       return new EmptyOperator();
     }
 
-    internal virtual IOperator CreateReplacement() {
+    protected internal virtual IOperator CreateReplacement() {
       CombinedOperator replacement = new CombinedOperator();
       replacement.Name = "Replacement";
@@ -327,5 +327,5 @@
     }
 
-    internal virtual IOperator CreateChildCreater() {
+    protected internal virtual IOperator CreateChildCreater() {
       CombinedOperator childCreater = new CombinedOperator();
       childCreater.Name = "Create children";
Index: /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification/OffspringSelectionGP.cs
===================================================================
--- /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification/OffspringSelectionGP.cs	(revision 1244)
+++ /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification/OffspringSelectionGP.cs	(revision 1245)
@@ -72,5 +72,5 @@
     }
 
-    internal override IOperator CreateGlobalInjector() {
+    protected internal override IOperator CreateGlobalInjector() {
       VariableInjector injector = (VariableInjector)base.CreateGlobalInjector();
       injector.RemoveVariable("TournamentSize");
@@ -83,5 +83,5 @@
     }
 
-    internal override IOperator CreateSelector() {
+    protected internal override IOperator CreateSelector() {
       CombinedOperator selector = new CombinedOperator();
       selector.Name = "Selector";
@@ -113,5 +113,5 @@
     }
 
-    internal override IOperator CreateChildCreater() {
+    protected internal override IOperator CreateChildCreater() {
       CombinedOperator childCreater = new CombinedOperator();
       childCreater.Name = "Create children";
@@ -187,5 +187,5 @@
     }
 
-    internal override IOperator CreateLoopCondition(IOperator loop) {
+    protected internal override IOperator CreateLoopCondition(IOperator loop) {
       SequentialProcessor seq = new SequentialProcessor();
       seq.Name = "Loop Condition";
@@ -215,5 +215,5 @@
     }
 
-    internal override IOperator CreateLoggingOperator() {
+    protected internal override IOperator CreateLoggingOperator() {
       CombinedOperator loggingOperator = new CombinedOperator();
       loggingOperator.Name = "Logging";
Index: /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification/StandardGP.cs
===================================================================
--- /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification/StandardGP.cs	(revision 1244)
+++ /branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification/StandardGP.cs	(revision 1245)
@@ -83,5 +83,4 @@
       FullTreeShakingFactor = 0.1;
       OnePointShakingFactor = 1.0;
-
       Engine = new SequentialEngine.SequentialEngine();
       IOperator algo = CreateAlgorithm();
@@ -90,5 +89,5 @@
     }
 
-    internal override IOperator CreateSelector() {
+    protected internal override IOperator CreateSelector() {
       TournamentSelector selector = new TournamentSelector();
       selector.Name = "Selector";
@@ -100,5 +99,5 @@
     }
 
-    internal override IOperator CreateGlobalInjector() {
+    protected internal override IOperator CreateGlobalInjector() {
       VariableInjector globalInjector = (VariableInjector)base.CreateGlobalInjector();
       globalInjector.AddVariable(new HeuristicLab.Core.Variable("TournamentSize", tournamentSize));
@@ -107,5 +106,5 @@
     }
 
-    internal override IOperator CreateCrossover() {
+    protected internal override IOperator CreateCrossover() {
       StandardCrossOver crossover = new StandardCrossOver();
       crossover.Name = "Crossover";
@@ -114,5 +113,5 @@
     }
 
-    internal override IOperator CreateTreeCreator() {
+    protected internal override IOperator CreateTreeCreator() {
       ProbabilisticTreeCreator treeCreator = new ProbabilisticTreeCreator();
       treeCreator.Name = "Tree generator";
@@ -123,9 +122,9 @@
     }
 
-    internal override IOperator CreateFunctionLibraryInjector() {
+    protected internal override IOperator CreateFunctionLibraryInjector() {
       return new FunctionLibraryInjector();
     }
 
-    internal override IOperator CreateManipulator() {
+    protected internal override IOperator CreateManipulator() {
       CombinedOperator manipulator = new CombinedOperator();
       manipulator.Name = "Manipulator";
@@ -169,5 +168,5 @@
     }
 
-    internal override IOperator CreateBestSolutionProcessor() {
+    protected internal override IOperator CreateBestSolutionProcessor() {
       SequentialProcessor bestSolutionProcessor = new SequentialProcessor();
       MeanAbsolutePercentageErrorEvaluator trainingMapeEvaluator = new MeanAbsolutePercentageErrorEvaluator();
@@ -181,4 +180,14 @@
       validationMapeEvaluator.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
       validationMapeEvaluator.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
+      MeanAbsolutePercentageOfRangeErrorEvaluator trainingMapreEvaluator = new MeanAbsolutePercentageOfRangeErrorEvaluator();
+      trainingMapreEvaluator.Name = "TrainingMapreEvaluator";
+      trainingMapreEvaluator.GetVariableInfo("MAPRE").ActualName = "TrainingMAPRE";
+      trainingMapreEvaluator.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart";
+      trainingMapreEvaluator.GetVariableInfo("SamplesEnd").ActualName = "TrainingSamplesEnd";
+      MeanAbsolutePercentageOfRangeErrorEvaluator validationMapreEvaluator = new MeanAbsolutePercentageOfRangeErrorEvaluator();
+      validationMapreEvaluator.Name = "ValidationMapreEvaluator";
+      validationMapreEvaluator.GetVariableInfo("MAPRE").ActualName = "ValidationMAPRE";
+      validationMapreEvaluator.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
+      validationMapreEvaluator.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
       ProgrammableOperator progOperator = new ProgrammableOperator();
       progOperator.RemoveVariableInfo("Result");
@@ -190,9 +199,11 @@
       bestSolutionProcessor.AddSubOperator(trainingMapeEvaluator);
       bestSolutionProcessor.AddSubOperator(validationMapeEvaluator);
+      bestSolutionProcessor.AddSubOperator(trainingMapreEvaluator);
+      bestSolutionProcessor.AddSubOperator(validationMapreEvaluator);
       bestSolutionProcessor.AddSubOperator(progOperator);
       return bestSolutionProcessor;
     }
 
-    internal override IOperator CreateLoggingOperator() {
+    protected internal override IOperator CreateLoggingOperator() {
       CombinedOperator loggingOperator = new CombinedOperator();
       loggingOperator.Name = "Logging";
