Index: trunk/sources/HeuristicLab.LinearRegression/3.2/HeuristicLab.LinearRegression-3.2.csproj
===================================================================
--- trunk/sources/HeuristicLab.LinearRegression/3.2/HeuristicLab.LinearRegression-3.2.csproj	(revision 2344)
+++ trunk/sources/HeuristicLab.LinearRegression/3.2/HeuristicLab.LinearRegression-3.2.csproj	(revision 2353)
@@ -91,4 +91,5 @@
     <Compile Include="alglib\spline3.cs" />
     <Compile Include="alglib\svd.cs" />
+    <Compile Include="LinearClassification.cs" />
     <Compile Include="HeuristicLabLinearRegressionPlugin.cs" />
     <Compile Include="LinearRegression.cs" />
@@ -120,4 +121,12 @@
       <Project>{924B6BEA-9A99-40FE-9334-5C01E8D540EC}</Project>
       <Name>HeuristicLab.GP.Interfaces-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.GP.StructureIdentification.Classification\3.3\HeuristicLab.GP.StructureIdentification.Classification-3.3.csproj">
+      <Project>{7C20D100-8BEB-433A-9499-F075E2CB9297}</Project>
+      <Name>HeuristicLab.GP.StructureIdentification.Classification-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.GP.StructureIdentification.TimeSeries\3.3\HeuristicLab.GP.StructureIdentification.TimeSeries-3.3.csproj">
+      <Project>{6084CFB5-733F-449D-9F92-2E40D13F0514}</Project>
+      <Name>HeuristicLab.GP.StructureIdentification.TimeSeries-3.3</Name>
     </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.GP.StructureIdentification\3.3\HeuristicLab.GP.StructureIdentification-3.3.csproj">
Index: trunk/sources/HeuristicLab.LinearRegression/3.2/HeuristicLabLinearRegressionPlugin.cs
===================================================================
--- trunk/sources/HeuristicLab.LinearRegression/3.2/HeuristicLabLinearRegressionPlugin.cs	(revision 2344)
+++ trunk/sources/HeuristicLab.LinearRegression/3.2/HeuristicLabLinearRegressionPlugin.cs	(revision 2353)
@@ -24,5 +24,5 @@
 using HeuristicLab.PluginInfrastructure;
 
-namespace HeuristicLab.LinearRegression{
+namespace HeuristicLab.LinearRegression {
   [ClassInfo(Name = "HeuristicLab.LinearRegression-3.2")]
   [PluginFile(Filename = "HeuristicLab.LinearRegression-3.2.dll", Filetype = PluginFileType.Assembly)]
@@ -35,4 +35,6 @@
   [Dependency(Dependency = "HeuristicLab.GP.Interfaces-3.3")]
   [Dependency(Dependency = "HeuristicLab.GP.StructureIdentification-3.3")]
+  [Dependency(Dependency = "HeuristicLab.GP.StructureIdentification.Classification-3.3")]
+  [Dependency(Dependency = "HeuristicLab.GP.StructureIdentification.TimeSeries-3.3")]
   [Dependency(Dependency = "HeuristicLab.Modeling-3.2")]
   [Dependency(Dependency = "HeuristicLab.Random-3.2")]
Index: trunk/sources/HeuristicLab.LinearRegression/3.2/LinearClassification.cs
===================================================================
--- trunk/sources/HeuristicLab.LinearRegression/3.2/LinearClassification.cs	(revision 2353)
+++ trunk/sources/HeuristicLab.LinearRegression/3.2/LinearClassification.cs	(revision 2353)
@@ -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 System.Xml;
+using System.Diagnostics;
+using HeuristicLab.DataAnalysis;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.GP.StructureIdentification;
+using HeuristicLab.Modeling;
+using HeuristicLab.GP;
+using HeuristicLab.Random;
+using HeuristicLab.GP.Interfaces;
+using HeuristicLab.GP.StructureIdentification.Classification;
+
+namespace HeuristicLab.LinearRegression {
+  public class LinearClassification : LinearRegression {
+
+    public override string Name { get { return "LinearClassification"; } }
+
+    public LinearClassification()
+      : base() {
+    }
+
+    protected override IOperator CreateModelAnalyser() {
+      return DefaultClassificationAlgorithmOperators.CreatePostProcessingOperator();
+    }
+
+    protected internal virtual IAnalyzerModel CreateLRModel(IScope bestModelScope) {
+      IAnalyzerModel model = base.CreateLRModel(bestModelScope);
+      DefaultClassificationAlgorithmOperators.SetModelData(model, bestModelScope);
+      return model;
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.LinearRegression/3.2/LinearRegression.cs
===================================================================
--- trunk/sources/HeuristicLab.LinearRegression/3.2/LinearRegression.cs	(revision 2344)
+++ trunk/sources/HeuristicLab.LinearRegression/3.2/LinearRegression.cs	(revision 2353)
@@ -39,23 +39,23 @@
   public class LinearRegression : ItemBase, IEditable, IAlgorithm {
 
-    public string Name { get { return "LinearRegression"; } }
-    public string Description { get { return "TODO"; } }
+    public virtual string Name { get { return "LinearRegression"; } }
+    public virtual string Description { get { return "TODO"; } }
 
     private SequentialEngine.SequentialEngine engine;
-    public IEngine Engine {
+    public virtual IEngine Engine {
       get { return engine; }
     }
 
-    public Dataset Dataset {
+    public virtual Dataset Dataset {
       get { return ProblemInjector.GetVariableValue<Dataset>("Dataset", null, false); }
       set { ProblemInjector.GetVariable("Dataset").Value = value; }
     }
 
-    public int TargetVariable {
+    public virtual int TargetVariable {
       get { return ProblemInjector.GetVariableValue<IntData>("TargetVariable", null, false).Data; }
       set { ProblemInjector.GetVariableValue<IntData>("TargetVariable", null, false).Data = value; }
     }
 
-    public IOperator ProblemInjector {
+    public virtual IOperator ProblemInjector {
       get {
         IOperator main = GetMainOperator();
@@ -69,5 +69,5 @@
     }
 
-    public IAnalyzerModel Model {
+    public virtual IAnalyzerModel Model {
       get {
         if (!engine.Terminated) throw new InvalidOperationException("The algorithm is still running. Wait until the algorithm is terminated to retrieve the result.");
@@ -84,5 +84,5 @@
     }
 
-    private CombinedOperator CreateAlgorithm() {
+    protected virtual CombinedOperator CreateAlgorithm() {
       CombinedOperator algo = new CombinedOperator();
       SequentialProcessor seq = new SequentialProcessor();
@@ -121,5 +121,5 @@
     }
 
-    private IOperator CreateGlobalInjector() {
+    protected virtual VariableInjector CreateGlobalInjector() {
       VariableInjector injector = new VariableInjector();
       injector.AddVariable(new HeuristicLab.Core.Variable("PunishmentFactor", new DoubleData(1000)));
@@ -129,200 +129,21 @@
     }
 
-    private IOperator CreateModelAnalyser() {
-      CombinedOperator modelAnalyser = new CombinedOperator();
-      modelAnalyser.Name = "Model Analyzer";
-      SequentialProcessor seqProc = new SequentialProcessor();
-      #region MSE
-      MeanSquaredErrorEvaluator trainingMSE = new MeanSquaredErrorEvaluator();
-      trainingMSE.Name = "TrainingMseEvaluator";
-      trainingMSE.GetVariableInfo("FunctionTree").ActualName = "LinearRegressionModel";
-      trainingMSE.GetVariableInfo("MSE").ActualName = "TrainingQuality";
-      trainingMSE.GetVariableInfo("SamplesStart").ActualName = "ActualTrainingSamplesStart";
-      trainingMSE.GetVariableInfo("SamplesEnd").ActualName = "ActualTrainingSamplesEnd";
-      MeanSquaredErrorEvaluator validationMSE = new MeanSquaredErrorEvaluator();
-      validationMSE.Name = "ValidationMseEvaluator";
-      validationMSE.GetVariableInfo("FunctionTree").ActualName = "LinearRegressionModel";
-      validationMSE.GetVariableInfo("MSE").ActualName = "ValidationQuality";
-      validationMSE.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
-      validationMSE.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
-      MeanSquaredErrorEvaluator testMSE = new MeanSquaredErrorEvaluator();
-      testMSE.Name = "TestMseEvaluator";
-      testMSE.GetVariableInfo("FunctionTree").ActualName = "LinearRegressionModel";
-      testMSE.GetVariableInfo("MSE").ActualName = "TestQuality";
-      testMSE.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
-      testMSE.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
-      #endregion
+    protected virtual IOperator CreateModelAnalyser() {
+      CombinedOperator op = new CombinedOperator();
+      op.AddVariableInfo(new VariableInfo("FunctionTree", "The model to analyze", typeof(IGeneticProgrammingModel), VariableKind.In));
+      op.Name = "Model Analyzer";
+      op.GetVariableInfo("FunctionTree").ActualName = "LinearRegressionModel";
 
-      #region R2
-      CoefficientOfDeterminationEvaluator trainingR2 = new CoefficientOfDeterminationEvaluator();
-      trainingR2.Name = "TrainingR2Evaluator";
-      trainingR2.GetVariableInfo("FunctionTree").ActualName = "LinearRegressionModel";
-      trainingR2.GetVariableInfo("R2").ActualName = "TrainingR2";
-      trainingR2.GetVariableInfo("SamplesStart").ActualName = "ActualTrainingSamplesStart";
-      trainingR2.GetVariableInfo("SamplesEnd").ActualName = "ActualTrainingSamplesEnd";
-      CoefficientOfDeterminationEvaluator validationR2 = new CoefficientOfDeterminationEvaluator();
-      validationR2.Name = "ValidationR2Evaluator";
-      validationR2.GetVariableInfo("FunctionTree").ActualName = "LinearRegressionModel";
-      validationR2.GetVariableInfo("R2").ActualName = "ValidationR2";
-      validationR2.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
-      validationR2.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
-      CoefficientOfDeterminationEvaluator testR2 = new CoefficientOfDeterminationEvaluator();
-      testR2.Name = "TestR2Evaluator";
-      testR2.GetVariableInfo("FunctionTree").ActualName = "LinearRegressionModel";
-      testR2.GetVariableInfo("R2").ActualName = "TestR2";
-      testR2.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
-      testR2.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
-      #endregion
-
-      #region MAPE
-      MeanAbsolutePercentageErrorEvaluator trainingMAPE = new MeanAbsolutePercentageErrorEvaluator();
-      trainingMAPE.Name = "TrainingMapeEvaluator";
-      trainingMAPE.GetVariableInfo("FunctionTree").ActualName = "LinearRegressionModel";
-      trainingMAPE.GetVariableInfo("MAPE").ActualName = "TrainingMAPE";
-      trainingMAPE.GetVariableInfo("SamplesStart").ActualName = "ActualTrainingSamplesStart";
-      trainingMAPE.GetVariableInfo("SamplesEnd").ActualName = "ActualTrainingSamplesEnd";
-      MeanAbsolutePercentageErrorEvaluator validationMAPE = new MeanAbsolutePercentageErrorEvaluator();
-      validationMAPE.Name = "ValidationMapeEvaluator";
-      validationMAPE.GetVariableInfo("FunctionTree").ActualName = "LinearRegressionModel";
-      validationMAPE.GetVariableInfo("MAPE").ActualName = "ValidationMAPE";
-      validationMAPE.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
-      validationMAPE.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
-      MeanAbsolutePercentageErrorEvaluator testMAPE = new MeanAbsolutePercentageErrorEvaluator();
-      testMAPE.Name = "TestMapeEvaluator";
-      testMAPE.GetVariableInfo("FunctionTree").ActualName = "LinearRegressionModel";
-      testMAPE.GetVariableInfo("MAPE").ActualName = "TestMAPE";
-      testMAPE.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
-      testMAPE.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
-      #endregion
-
-      #region MAPRE
-      MeanAbsolutePercentageOfRangeErrorEvaluator trainingMAPRE = new MeanAbsolutePercentageOfRangeErrorEvaluator();
-      trainingMAPRE.Name = "TrainingMapreEvaluator";
-      trainingMAPRE.GetVariableInfo("FunctionTree").ActualName = "LinearRegressionModel";
-      trainingMAPRE.GetVariableInfo("MAPRE").ActualName = "TrainingMAPRE";
-      trainingMAPRE.GetVariableInfo("SamplesStart").ActualName = "ActualTrainingSamplesStart";
-      trainingMAPRE.GetVariableInfo("SamplesEnd").ActualName = "ActualTrainingSamplesEnd";
-      MeanAbsolutePercentageOfRangeErrorEvaluator validationMAPRE = new MeanAbsolutePercentageOfRangeErrorEvaluator();
-      validationMAPRE.Name = "ValidationMapreEvaluator";
-      validationMAPRE.GetVariableInfo("FunctionTree").ActualName = "LinearRegressionModel";
-      validationMAPRE.GetVariableInfo("MAPRE").ActualName = "ValidationMAPRE";
-      validationMAPRE.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
-      validationMAPRE.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
-      MeanAbsolutePercentageOfRangeErrorEvaluator testMAPRE = new MeanAbsolutePercentageOfRangeErrorEvaluator();
-      testMAPRE.Name = "TestMapreEvaluator";
-      testMAPRE.GetVariableInfo("FunctionTree").ActualName = "LinearRegressionModel";
-      testMAPRE.GetVariableInfo("MAPRE").ActualName = "TestMAPRE";
-      testMAPRE.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
-      testMAPRE.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
-      #endregion
-
-      #region VAF
-      VarianceAccountedForEvaluator trainingVAF = new VarianceAccountedForEvaluator();
-      trainingVAF.Name = "TrainingVafEvaluator";
-      trainingVAF.GetVariableInfo("FunctionTree").ActualName = "LinearRegressionModel";
-      trainingVAF.GetVariableInfo("VAF").ActualName = "TrainingVAF";
-      trainingVAF.GetVariableInfo("SamplesStart").ActualName = "ActualTrainingSamplesStart";
-      trainingVAF.GetVariableInfo("SamplesEnd").ActualName = "ActualTrainingSamplesEnd";
-      VarianceAccountedForEvaluator validationVAF = new VarianceAccountedForEvaluator();
-      validationVAF.Name = "ValidationVafEvaluator";
-      validationVAF.GetVariableInfo("FunctionTree").ActualName = "LinearRegressionModel";
-      validationVAF.GetVariableInfo("VAF").ActualName = "ValidationVAF";
-      validationVAF.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
-      validationVAF.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
-      VarianceAccountedForEvaluator testVAF = new VarianceAccountedForEvaluator();
-      testVAF.Name = "TestVafEvaluator";
-      testVAF.GetVariableInfo("FunctionTree").ActualName = "LinearRegressionModel";
-      testVAF.GetVariableInfo("VAF").ActualName = "TestVAF";
-      testVAF.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
-      testVAF.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
-      #endregion
-
-      VariableNamesExtractor namesExtractor = new VariableNamesExtractor();
-      namesExtractor.GetVariableInfo("FunctionTree").ActualName = "LinearRegressionModel";
-      namesExtractor.GetVariableInfo("VariableNames").ActualName = "InputVariableNames";
-      PredictorBuilder predictorBuilder = new PredictorBuilder();
-      predictorBuilder.GetVariableInfo("FunctionTree").ActualName = "LinearRegressionModel";
-      VariableEvaluationImpactCalculator evalImpactCalc = new VariableEvaluationImpactCalculator();
-      evalImpactCalc.GetVariableInfo("SamplesStart").ActualName = "ActualTrainingSamplesStart";
-      evalImpactCalc.GetVariableInfo("SamplesEnd").ActualName = "ActualTrainingSamplesEnd";
-      VariableQualityImpactCalculator qualImpactCalc = new VariableQualityImpactCalculator();
-      qualImpactCalc.GetVariableInfo("SamplesStart").ActualName = "ActualTrainingSamplesStart";
-      qualImpactCalc.GetVariableInfo("SamplesEnd").ActualName = "ActualTrainingSamplesEnd";
-      seqProc.AddSubOperator(trainingMSE);
-      seqProc.AddSubOperator(validationMSE);
-      seqProc.AddSubOperator(testMSE);
-      seqProc.AddSubOperator(trainingR2);
-      seqProc.AddSubOperator(validationR2);
-      seqProc.AddSubOperator(testR2);
-      seqProc.AddSubOperator(trainingMAPE);
-      seqProc.AddSubOperator(validationMAPE);
-      seqProc.AddSubOperator(testMAPE);
-      seqProc.AddSubOperator(trainingMAPRE);
-      seqProc.AddSubOperator(validationMAPRE);
-      seqProc.AddSubOperator(testMAPRE);
-      seqProc.AddSubOperator(trainingVAF);
-      seqProc.AddSubOperator(validationVAF);
-      seqProc.AddSubOperator(testVAF);
-      seqProc.AddSubOperator(namesExtractor);
-      seqProc.AddSubOperator(predictorBuilder);
-      seqProc.AddSubOperator(qualImpactCalc);
-      seqProc.AddSubOperator(evalImpactCalc);
-      modelAnalyser.OperatorGraph.InitialOperator = seqProc;
-      modelAnalyser.OperatorGraph.AddOperator(seqProc);
-      return modelAnalyser;
+      IOperator maOp = DefaultStructureIdentificationAlgorithmOperators.CreatePostProcessingOperator();
+      op.OperatorGraph.AddOperator(maOp);
+      op.OperatorGraph.InitialOperator = maOp;
+      return op;
     }
 
-    protected internal virtual IAnalyzerModel CreateLRModel(IScope bestModelScope) {
-      IAnalyzerModel model = new AnalyzerModel();
-      model.Predictor = bestModelScope.GetVariableValue<IPredictor>("Predictor", true);
-      model.SetResult("TrainingMeanSquaredError", bestModelScope.GetVariableValue<DoubleData>("TrainingQuality", false).Data);
-      model.SetResult("ValidationMeanSquaredError", bestModelScope.GetVariableValue<DoubleData>("ValidationQuality", false).Data);
-      model.SetResult("TestMeanSquaredError", bestModelScope.GetVariableValue<DoubleData>("TestQuality", 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);
-
-      IGeneticProgrammingModel gpModel = bestModelScope.GetVariableValue<IGeneticProgrammingModel>("LinearRegressionModel", false);
-      model.SetMetaData("TreeSize", gpModel.Size);
-      model.SetMetaData("TreeHeight", gpModel.Height);
-
-      HeuristicLab.DataAnalysis.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;
-
-      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;
+    protected virtual IAnalyzerModel CreateLRModel(IScope bestModelScope) {
+      return DefaultStructureIdentificationAlgorithmOperators.CreateGPModel(bestModelScope);
     }
 
-    private IOperator GetMainOperator() {
+    protected virtual IOperator GetMainOperator() {
       CombinedOperator lr = (CombinedOperator)Engine.OperatorGraph.InitialOperator;
       return lr.OperatorGraph.InitialOperator;
@@ -335,5 +156,5 @@
     #region IEditable Members
 
-    public IEditor CreateEditor() {
+    public virtual IEditor CreateEditor() {
       return engine.CreateEditor();
     }
