Index: trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/DefaultStructureIdentificationOperators.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/DefaultStructureIdentificationOperators.cs	(revision 2351)
+++ trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/DefaultStructureIdentificationOperators.cs	(revision 2356)
@@ -30,5 +30,5 @@
 
 namespace HeuristicLab.GP.StructureIdentification {
-  public static class DefaultStructureIdentificationAlgorithmOperators {
+  public static class DefaultStructureIdentificationOperators {
     public static IOperator CreateFunctionLibraryInjector() {
       CombinedOperator op = new CombinedOperator();
@@ -37,19 +37,4 @@
       seq.AddSubOperator(new FunctionLibraryInjector());
       seq.AddSubOperator(new HL3TreeEvaluatorInjector());
-      op.OperatorGraph.AddOperator(seq);
-      op.OperatorGraph.InitialOperator = seq;
-      return op;
-    }
-
-    public static IOperator CreateProblemInjector() {
-      CombinedOperator op = new CombinedOperator();
-      op.Name = "ProblemInjector";
-      SequentialProcessor seq = new SequentialProcessor();
-
-      seq.AddSubOperator(new ProblemInjector());
-      DatasetShuffler shuffler = new DatasetShuffler();
-      shuffler.GetVariableInfo("ShuffleStart").ActualName = "TrainingSamplesStart";
-      shuffler.GetVariableInfo("ShuffleEnd").ActualName = "TrainingSamplesEnd";
-      seq.AddSubOperator(shuffler);
       op.OperatorGraph.AddOperator(seq);
       op.OperatorGraph.InitialOperator = seq;
@@ -105,7 +90,6 @@
     }
 
-    public static IOperator CreatePostProcessingOperator() {
-      CombinedOperator op = new CombinedOperator();
-      op.Name = "ModelAnalyser";
+
+    public static IOperator CreatePreparationForPostProcessingOperator() {
       SequentialProcessor seq = new SequentialProcessor();
       LeftReducer cleanUp = new LeftReducer();
@@ -145,95 +129,9 @@
       testEvaluator.GetVariableInfo("Values").ActualName = "TestValues";
       testEvaluator.GetVariableInfo("TreeEvaluator").ActualName = "ModelAnalysisTreeEvaluator";
-      #endregion
-      #region MSE
-      SimpleMSEEvaluator trainingMseEvaluator = new SimpleMSEEvaluator();
-      trainingMseEvaluator.Name = "TrainingMseEvaluator";
-      trainingMseEvaluator.GetVariableInfo("MSE").ActualName = "TrainingMSE";
-      trainingMseEvaluator.GetVariableInfo("Values").ActualName = "TrainingValues";
-      SimpleMSEEvaluator validationMseEvaluator = new SimpleMSEEvaluator();
-      validationMseEvaluator.Name = "ValidationMseEvaluator";
-      validationMseEvaluator.GetVariableInfo("MSE").ActualName = "ValidationMSE";
-      validationMseEvaluator.GetVariableInfo("Values").ActualName = "ValidationValues";
-      SimpleMSEEvaluator testMseEvaluator = new SimpleMSEEvaluator();
-      testMseEvaluator.Name = "TestMseEvaluator";
-      testMseEvaluator.GetVariableInfo("MSE").ActualName = "TestMSE";
-      testMseEvaluator.GetVariableInfo("Values").ActualName = "TestValues";
-      #endregion
-      #region MAPE
-      SimpleMeanAbsolutePercentageErrorEvaluator trainingMapeEvaluator = new SimpleMeanAbsolutePercentageErrorEvaluator();
-      trainingMapeEvaluator.Name = "TrainingMapeEvaluator";
-      trainingMapeEvaluator.GetVariableInfo("MAPE").ActualName = "TrainingMAPE";
-      trainingMapeEvaluator.GetVariableInfo("Values").ActualName = "TrainingValues";
-      SimpleMeanAbsolutePercentageErrorEvaluator validationMapeEvaluator = new SimpleMeanAbsolutePercentageErrorEvaluator();
-      validationMapeEvaluator.Name = "ValidationMapeEvaluator";
-      validationMapeEvaluator.GetVariableInfo("MAPE").ActualName = "ValidationMAPE";
-      validationMapeEvaluator.GetVariableInfo("Values").ActualName = "ValidationValues";
-      SimpleMeanAbsolutePercentageErrorEvaluator testMapeEvaluator = new SimpleMeanAbsolutePercentageErrorEvaluator();
-      testMapeEvaluator.Name = "TestMapeEvaluator";
-      testMapeEvaluator.GetVariableInfo("MAPE").ActualName = "TestMAPE";
-      testMapeEvaluator.GetVariableInfo("Values").ActualName = "TestValues";
-      #endregion
-      #region MAPRE
-      SimpleMeanAbsolutePercentageOfRangeErrorEvaluator trainingMapreEvaluator = new SimpleMeanAbsolutePercentageOfRangeErrorEvaluator();
-      trainingMapreEvaluator.Name = "TrainingMapreEvaluator";
-      trainingMapreEvaluator.GetVariableInfo("MAPRE").ActualName = "TrainingMAPRE";
-      trainingMapreEvaluator.GetVariableInfo("Values").ActualName = "TrainingValues";
-      SimpleMeanAbsolutePercentageOfRangeErrorEvaluator validationMapreEvaluator = new SimpleMeanAbsolutePercentageOfRangeErrorEvaluator();
-      validationMapreEvaluator.Name = "ValidationMapreEvaluator";
-      validationMapreEvaluator.GetVariableInfo("MAPRE").ActualName = "ValidationMAPRE";
-      validationMapreEvaluator.GetVariableInfo("Values").ActualName = "ValidationValues";
-      SimpleMeanAbsolutePercentageOfRangeErrorEvaluator testMapreEvaluator = new SimpleMeanAbsolutePercentageOfRangeErrorEvaluator();
-      testMapreEvaluator.Name = "TestMapreEvaluator";
-      testMapreEvaluator.GetVariableInfo("MAPRE").ActualName = "TestMAPRE";
-      testMapreEvaluator.GetVariableInfo("Values").ActualName = "TestValues";
-      #endregion MAPRE
-      #region R2
-      SimpleR2Evaluator trainingR2Evaluator = new SimpleR2Evaluator();
-      trainingR2Evaluator.Name = "TrainingR2Evaluator";
-      trainingR2Evaluator.GetVariableInfo("R2").ActualName = "TrainingR2";
-      trainingR2Evaluator.GetVariableInfo("Values").ActualName = "TrainingValues";
-      SimpleR2Evaluator validationR2Evaluator = new SimpleR2Evaluator();
-      validationR2Evaluator.Name = "ValidationR2Evaluator";
-      validationR2Evaluator.GetVariableInfo("R2").ActualName = "ValidationR2";
-      validationR2Evaluator.GetVariableInfo("Values").ActualName = "ValidationValues";
-      SimpleR2Evaluator testR2Evaluator = new SimpleR2Evaluator();
-      testR2Evaluator.Name = "TestR2Evaluator";
-      testR2Evaluator.GetVariableInfo("R2").ActualName = "TestR2";
-      testR2Evaluator.GetVariableInfo("Values").ActualName = "TestValues";
-      #endregion
-      #region VAF
-      SimpleVarianceAccountedForEvaluator trainingVAFEvaluator = new SimpleVarianceAccountedForEvaluator();
-      trainingVAFEvaluator.Name = "TrainingVAFEvaluator";
-      trainingVAFEvaluator.GetVariableInfo("VAF").ActualName = "TrainingVAF";
-      trainingVAFEvaluator.GetVariableInfo("Values").ActualName = "TrainingValues";
-      SimpleVarianceAccountedForEvaluator validationVAFEvaluator = new SimpleVarianceAccountedForEvaluator();
-      validationVAFEvaluator.Name = "ValidationVAFEvaluator";
-      validationVAFEvaluator.GetVariableInfo("VAF").ActualName = "ValidationVAF";
-      validationVAFEvaluator.GetVariableInfo("Values").ActualName = "ValidationValues";
-      SimpleVarianceAccountedForEvaluator testVAFEvaluator = new SimpleVarianceAccountedForEvaluator();
-      testVAFEvaluator.Name = "TestVAFEvaluator";
-      testVAFEvaluator.GetVariableInfo("VAF").ActualName = "TestVAF";
-      testVAFEvaluator.GetVariableInfo("Values").ActualName = "TestValues";
-      #endregion
-
       solutionProc.AddSubOperator(evaluatorInjector);
       solutionProc.AddSubOperator(trainingEvaluator);
       solutionProc.AddSubOperator(validationEvaluator);
       solutionProc.AddSubOperator(testEvaluator);
-      solutionProc.AddSubOperator(trainingMseEvaluator);
-      solutionProc.AddSubOperator(validationMseEvaluator);
-      solutionProc.AddSubOperator(testMseEvaluator);
-      solutionProc.AddSubOperator(trainingMapeEvaluator);
-      solutionProc.AddSubOperator(validationMapeEvaluator);
-      solutionProc.AddSubOperator(testMapeEvaluator);
-      solutionProc.AddSubOperator(trainingMapreEvaluator);
-      solutionProc.AddSubOperator(validationMapreEvaluator);
-      solutionProc.AddSubOperator(testMapreEvaluator);
-      solutionProc.AddSubOperator(trainingR2Evaluator);
-      solutionProc.AddSubOperator(validationR2Evaluator);
-      solutionProc.AddSubOperator(testR2Evaluator);
-      solutionProc.AddSubOperator(trainingVAFEvaluator);
-      solutionProc.AddSubOperator(validationVAFEvaluator);
-      solutionProc.AddSubOperator(testVAFEvaluator);
+      #endregion
 
       #region variable impacts
@@ -244,72 +142,16 @@
       predictorBuilder.GetVariableInfo("TreeEvaluator").ActualName = "ModelAnalysisTreeEvaluator";
 
-      VariableEvaluationImpactCalculator evaluationImpactCalculator = new VariableEvaluationImpactCalculator();
-      evaluationImpactCalculator.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart";
-      evaluationImpactCalculator.GetVariableInfo("SamplesEnd").ActualName = "TrainingSamplesEnd";
-      VariableQualityImpactCalculator qualityImpactCalculator = new VariableQualityImpactCalculator();
-      qualityImpactCalculator.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart";
-      qualityImpactCalculator.GetVariableInfo("SamplesEnd").ActualName = "TrainingSamplesEnd";
-
       solutionProc.AddSubOperator(namesExtractor);
       solutionProc.AddSubOperator(predictorBuilder);
-      solutionProc.AddSubOperator(evaluationImpactCalculator);
-      solutionProc.AddSubOperator(qualityImpactCalculator);
       #endregion
 
-      op.OperatorGraph.AddOperator(seq);
-      op.OperatorGraph.InitialOperator = seq;
-      return op;
+      return seq;
     }
 
-    public static IAnalyzerModel CreateGPModel(IScope bestModelScope) {
-      IAnalyzerModel model = new AnalyzerModel();
-      model.Predictor = bestModelScope.GetVariableValue<IPredictor>("Predictor", true);
-      Dataset ds = bestModelScope.GetVariableValue<Dataset>("Dataset", true);
-      model.Dataset = ds;
-      model.TargetVariable = ds.GetVariableName(bestModelScope.GetVariableValue<IntData>("TargetVariable", true).Data);
-      model.TrainingSamplesStart = bestModelScope.GetVariableValue<IntData>("TrainingSamplesStart", true).Data;
-      model.TrainingSamplesEnd = bestModelScope.GetVariableValue<IntData>("TrainingSamplesEnd", true).Data;
-      model.ValidationSamplesStart = bestModelScope.GetVariableValue<IntData>("ValidationSamplesStart", true).Data;
-      model.ValidationSamplesEnd = bestModelScope.GetVariableValue<IntData>("ValidationSamplesEnd", true).Data;
-      model.TestSamplesStart = bestModelScope.GetVariableValue<IntData>("TestSamplesStart", true).Data;
-      model.TestSamplesEnd = bestModelScope.GetVariableValue<IntData>("TestSamplesEnd", true).Data;
-
-      model.SetResult("TrainingMeanSquaredError", bestModelScope.GetVariableValue<DoubleData>("TrainingMSE", false).Data);
-      model.SetResult("ValidationMeanSquaredError", bestModelScope.GetVariableValue<DoubleData>("ValidationMSE", false).Data);
-      model.SetResult("TestMeanSquaredError", bestModelScope.GetVariableValue<DoubleData>("TestMSE", false).Data);
-      model.SetResult("TrainingCoefficientOfDetermination", bestModelScope.GetVariableValue<DoubleData>("TrainingR2", false).Data);
-      model.SetResult("ValidationCoefficientOfDetermination", bestModelScope.GetVariableValue<DoubleData>("ValidationR2", false).Data);
-      model.SetResult("TestCoefficientOfDetermination", bestModelScope.GetVariableValue<DoubleData>("TestR2", false).Data);
-      model.SetResult("TrainingMeanAbsolutePercentageError", bestModelScope.GetVariableValue<DoubleData>("TrainingMAPE", false).Data);
-      model.SetResult("ValidationMeanAbsolutePercentageError", bestModelScope.GetVariableValue<DoubleData>("ValidationMAPE", false).Data);
-      model.SetResult("TestMeanAbsolutePercentageError", bestModelScope.GetVariableValue<DoubleData>("TestMAPE", false).Data);
-      model.SetResult("TrainingMeanAbsolutePercentageOfRangeError", bestModelScope.GetVariableValue<DoubleData>("TrainingMAPRE", false).Data);
-      model.SetResult("ValidationMeanAbsolutePercentageOfRangeError", bestModelScope.GetVariableValue<DoubleData>("ValidationMAPRE", false).Data);
-      model.SetResult("TestMeanAbsolutePercentageOfRangeError", bestModelScope.GetVariableValue<DoubleData>("TestMAPRE", false).Data);
-      model.SetResult("TrainingVarianceAccountedFor", bestModelScope.GetVariableValue<DoubleData>("TrainingVAF", false).Data);
-      model.SetResult("ValidationVarianceAccountedFor", bestModelScope.GetVariableValue<DoubleData>("ValidationVAF", false).Data);
-      model.SetResult("TestVarianceAccountedFor", bestModelScope.GetVariableValue<DoubleData>("TestVAF", false).Data);
-
-      model.SetMetaData("EvaluatedSolutions", bestModelScope.GetVariableValue<DoubleData>("EvaluatedSolutions", true).Data);
-      IGeneticProgrammingModel gpModel = bestModelScope.GetVariableValue<IGeneticProgrammingModel>("FunctionTree", true);
+    public static void PopulateAnalyzerModel(IScope bestModelScope, IAnalyzerModel model) {
+      model.SetMetaData("EvaluatedSolutions", bestModelScope.GetVariableValue<DoubleData>("EvaluatedSolutions", false).Data);
+      IGeneticProgrammingModel gpModel = bestModelScope.GetVariableValue<IGeneticProgrammingModel>("FunctionTree", false);
       model.SetMetaData("TreeSize", gpModel.Size);
       model.SetMetaData("TreeHeight", gpModel.Height);
-
-      ItemList evaluationImpacts = bestModelScope.GetVariableValue<ItemList>("VariableEvaluationImpacts", false);
-      ItemList qualityImpacts = bestModelScope.GetVariableValue<ItemList>("VariableQualityImpacts", false);
-      foreach (ItemList row in evaluationImpacts) {
-        string variableName = ((StringData)row[0]).Data;
-        double impact = ((DoubleData)row[1]).Data;
-        model.SetVariableEvaluationImpact(variableName, impact);
-        model.AddInputVariable(variableName);
-      }
-      foreach (ItemList row in qualityImpacts) {
-        string variableName = ((StringData)row[0]).Data;
-        double impact = ((DoubleData)row[1]).Data;
-        model.SetVariableQualityImpact(variableName, impact);
-        model.AddInputVariable(variableName);
-      }
-
-      return model;
     }
   }
Index: trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/OffspringSelectionGP.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/OffspringSelectionGP.cs	(revision 2351)
+++ trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/OffspringSelectionGP.cs	(revision 2356)
@@ -77,22 +77,22 @@
 
     protected override IOperator CreateFunctionLibraryInjector() {
-      return DefaultStructureIdentificationAlgorithmOperators.CreateFunctionLibraryInjector();
+      return DefaultStructureIdentificationOperators.CreateFunctionLibraryInjector();
     }
 
     protected override IOperator CreateProblemInjector() {
-      return DefaultStructureIdentificationAlgorithmOperators.CreateProblemInjector();
+      return DefaultRegressionOperators.CreateProblemInjector();
     }
 
     protected override IOperator CreateInitialPopulationEvaluator() {
-      return DefaultStructureIdentificationAlgorithmOperators.CreateInitialPopulationEvaluator();
+      return DefaultStructureIdentificationOperators.CreateInitialPopulationEvaluator();
     }
 
     protected override IOperator CreateEvaluationOperator() {
-      return DefaultStructureIdentificationAlgorithmOperators.CreateEvaluator();
+      return DefaultStructureIdentificationOperators.CreateEvaluator();
     }
 
 
     protected override IOperator CreateGenerationStepHook() {
-      return DefaultStructureIdentificationAlgorithmOperators.CreateGenerationStepHook();
+      return DefaultStructureIdentificationOperators.CreateGenerationStepHook();
     }
 
@@ -133,5 +133,23 @@
 
     protected override IOperator CreatePostProcessingOperator() {
-      return DefaultStructureIdentificationAlgorithmOperators.CreatePostProcessingOperator();
+      CombinedOperator op = new CombinedOperator();
+      op.Name = "ModelAnalyser";
+      SequentialProcessor seq = new SequentialProcessor();
+      seq.AddSubOperator(DefaultStructureIdentificationOperators.CreatePreparationForPostProcessingOperator());
+
+      UniformSequentialSubScopesProcessor subScopesProc = new UniformSequentialSubScopesProcessor();
+      SequentialProcessor solutionProc = new SequentialProcessor();
+      solutionProc.AddSubOperator(CreateModelAnalyzerOperator());
+
+      subScopesProc.AddSubOperator(solutionProc);
+      seq.AddSubOperator(subScopesProc);
+
+      op.OperatorGraph.AddOperator(seq);
+      op.OperatorGraph.InitialOperator = seq;
+      return op;
+    }
+
+    protected virtual IOperator CreateModelAnalyzerOperator() {
+      return DefaultRegressionOperators.CreatePostProcessingOperator();
     }
 
@@ -148,6 +166,10 @@
     protected virtual IAnalyzerModel CreateGPModel() {
       IScope bestModelScope = Engine.GlobalScope.SubScopes[0];
-      IAnalyzerModel model = DefaultStructureIdentificationAlgorithmOperators.CreateGPModel(bestModelScope);
-      model.SetMetaData("SelectionPressure", bestModelScope.GetVariableValue<DoubleData>("SelectionPressure", true).Data);
+      var model = new AnalyzerModel();
+
+      model.SetMetaData("SelectionPressure", bestModelScope.GetVariableValue<DoubleData>("SelectionPressure", false).Data);
+      DefaultStructureIdentificationOperators.PopulateAnalyzerModel(bestModelScope, model);
+      DefaultRegressionOperators.PopulateAnalyzerModel(bestModelScope, model);
+
       return model;
     }
Index: trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/StandardGP.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/StandardGP.cs	(revision 2351)
+++ trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/StandardGP.cs	(revision 2356)
@@ -78,22 +78,22 @@
 
     protected override IOperator CreateFunctionLibraryInjector() {
-      return DefaultStructureIdentificationAlgorithmOperators.CreateFunctionLibraryInjector();
+      return DefaultStructureIdentificationOperators.CreateFunctionLibraryInjector();
     }
 
     protected override IOperator CreateProblemInjector() {
-      return DefaultStructureIdentificationAlgorithmOperators.CreateProblemInjector();
+      return DefaultRegressionOperators.CreateProblemInjector();
     }
 
     protected override IOperator CreateInitialPopulationEvaluator() {
-      return DefaultStructureIdentificationAlgorithmOperators.CreateInitialPopulationEvaluator();
+      return DefaultStructureIdentificationOperators.CreateInitialPopulationEvaluator();
     }
 
     protected override IOperator CreateEvaluationOperator() {
-      return DefaultStructureIdentificationAlgorithmOperators.CreateEvaluator();
+      return DefaultStructureIdentificationOperators.CreateEvaluator();
     }
 
 
     protected override IOperator CreateGenerationStepHook() {
-      return DefaultStructureIdentificationAlgorithmOperators.CreateGenerationStepHook();
+      return DefaultStructureIdentificationOperators.CreateGenerationStepHook();
     }
 
@@ -132,5 +132,23 @@
 
     protected override IOperator CreatePostProcessingOperator() {
-      return DefaultStructureIdentificationAlgorithmOperators.CreatePostProcessingOperator();
+      CombinedOperator op = new CombinedOperator();
+      op.Name = "ModelAnalyser";
+      SequentialProcessor seq = new SequentialProcessor();
+      seq.AddSubOperator(DefaultStructureIdentificationOperators.CreatePreparationForPostProcessingOperator());
+
+      UniformSequentialSubScopesProcessor subScopesProc = new UniformSequentialSubScopesProcessor();
+      SequentialProcessor solutionProc = new SequentialProcessor();
+      solutionProc.AddSubOperator(CreateModelAnalyzerOperator());
+
+      subScopesProc.AddSubOperator(solutionProc);
+      seq.AddSubOperator(subScopesProc);
+
+      op.OperatorGraph.AddOperator(seq);
+      op.OperatorGraph.InitialOperator = seq;
+      return op;
+    }
+
+    protected virtual IOperator CreateModelAnalyzerOperator() {
+      return DefaultRegressionOperators.CreatePostProcessingOperator();
     }
 
@@ -147,5 +165,7 @@
     protected virtual IAnalyzerModel CreateGPModel() {
       IScope bestModelScope = Engine.GlobalScope.SubScopes[0];
-      IAnalyzerModel model = DefaultStructureIdentificationAlgorithmOperators.CreateGPModel(bestModelScope);
+      IAnalyzerModel model = new AnalyzerModel();
+      DefaultStructureIdentificationOperators.PopulateAnalyzerModel(bestModelScope, model);
+      DefaultRegressionOperators.PopulateAnalyzerModel(bestModelScope, model);
       return model;
     }
