Index: branches/3076_IA_evaluators_analyzers/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.csproj
===================================================================
--- branches/3076_IA_evaluators_analyzers/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.csproj	(revision 17626)
+++ branches/3076_IA_evaluators_analyzers/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.csproj	(revision 17627)
@@ -172,4 +172,5 @@
     <Compile Include="MultiObjective\SymbolicRegressionMultiObjectiveMultiHardConstraintEvaluator.cs" />
     <Compile Include="MultiObjective\SymbolicRegressionMultiObjectiveMultiSoftConstraintEvaluator.cs" />
+    <Compile Include="MultiObjective\SymbolicRegressionMultiObjectiveSplittingEvaluator.cs" />
     <Compile Include="MultiObjective\SymbolicRegressionMultiObjectiveValidationBestSolutionAnalyzer.cs" />
     <Compile Include="Plugin.cs" />
Index: branches/3076_IA_evaluators_analyzers/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/MultiObjective/SymbolicRegressionMultiObjectiveMultiSoftConstraintEvaluator.cs
===================================================================
--- branches/3076_IA_evaluators_analyzers/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/MultiObjective/SymbolicRegressionMultiObjectiveMultiSoftConstraintEvaluator.cs	(revision 17626)
+++ branches/3076_IA_evaluators_analyzers/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/MultiObjective/SymbolicRegressionMultiObjectiveMultiSoftConstraintEvaluator.cs	(revision 17627)
@@ -30,5 +30,4 @@
 using HeuristicLab.Data;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
-using HeuristicLab.Parameters;
 
 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.MultiObjective {
@@ -37,24 +36,8 @@
   [StorableType("8E9D76B7-ED9C-43E7-9898-01FBD3633880")]
   public class
-    SymbolicRegressionMultiObjectiveMultiSoftConstraintEvaluator : SymbolicRegressionMultiObjectiveEvaluator {
-    private const string MinIntervalWidthParameterName      = "MinIntervalWidth";
-    private const string MaxIntervalSplitDepthParameterName = "MaxIntervalSplitDepth";
-
-    public IFixedValueParameter<DoubleValue> MinIntervalWidthParameter =>
-      (IFixedValueParameter<DoubleValue>) Parameters[MinIntervalWidthParameterName];
-
-    public IFixedValueParameter<IntValue> MaxIntervalSplitDepthParameter =>
-      (IFixedValueParameter<IntValue>) Parameters[MaxIntervalSplitDepthParameterName];
-
-    public double MinIntervalWidth => MinIntervalWidthParameter.Value.Value;
-
-    public int MaxIntervalSplitDepth => MaxIntervalSplitDepthParameter.Value.Value;
-
+    SymbolicRegressionMultiObjectiveMultiSoftConstraintEvaluator : SymbolicRegressionMultiObjectiveSplittingEvaluator {
     #region Constructors
 
-    public SymbolicRegressionMultiObjectiveMultiSoftConstraintEvaluator() {
-      Parameters.Add(new FixedValueParameter<DoubleValue>(MinIntervalWidthParameterName, new DoubleValue(1.0)));
-      Parameters.Add(new FixedValueParameter<IntValue>(MaxIntervalSplitDepthParameterName, new IntValue(5)));
-    }
+    public SymbolicRegressionMultiObjectiveMultiSoftConstraintEvaluator() { }
 
     [StorableConstructor]
@@ -72,22 +55,24 @@
 
     public override IOperation InstrumentedApply() {
-      var rows             = GenerateRowsToEvaluate();
-      var solution         = SymbolicExpressionTreeParameter.ActualValue;
-      var problemData      = ProblemDataParameter.ActualValue;
-      var interpreter      = SymbolicDataAnalysisTreeInterpreterParameter.ActualValue;
-      var estimationLimits = EstimationLimitsParameter.ActualValue;
-      //var applyLinearScaling = ApplyLinearScalingParameter.ActualValue.Value;
+      var rows                  = GenerateRowsToEvaluate();
+      var solution              = SymbolicExpressionTreeParameter.ActualValue;
+      var problemData           = ProblemDataParameter.ActualValue;
+      var interpreter           = SymbolicDataAnalysisTreeInterpreterParameter.ActualValue;
+      var estimationLimits      = EstimationLimitsParameter.ActualValue;
+      var minIntervalWidth      = MinSplittingWidth;
+      var maxIntervalSplitDepth = MaxSplittingDepth;
+      //var applyLinearScaling  = ApplyLinearScalingParameter.ActualValue.Value;
       var applyLinearScaling = false;
 
       if (UseConstantOptimization)
         SymbolicRegressionConstantOptimizationEvaluator.OptimizeConstants(interpreter, solution, problemData, rows,
-                                                                          applyLinearScaling,
-                                                                          ConstantOptimizationIterations,
-                                                                          ConstantOptimizationUpdateVariableWeights,
-                                                                          estimationLimits.Lower,
-                                                                          estimationLimits.Upper);
+          applyLinearScaling,
+          ConstantOptimizationIterations,
+          ConstantOptimizationUpdateVariableWeights,
+          estimationLimits.Lower,
+          estimationLimits.Upper);
 
       var qualities = Calculate(interpreter, solution, estimationLimits.Lower, estimationLimits.Upper, problemData,
-                                rows, applyLinearScaling, DecimalPlaces, MinIntervalWidth, MaxIntervalSplitDepth);
+        rows, applyLinearScaling, DecimalPlaces, minIntervalWidth, maxIntervalSplitDepth);
       QualitiesParameter.ActualValue = new DoubleArray(qualities);
       return base.InstrumentedApply();
@@ -102,8 +87,8 @@
 
       var quality = Calculate(SymbolicDataAnalysisTreeInterpreterParameter.ActualValue, tree,
-                              EstimationLimitsParameter.ActualValue.Lower, EstimationLimitsParameter.ActualValue.Upper,
-                              problemData, rows,
-                              ApplyLinearScalingParameter.ActualValue.Value, DecimalPlaces, MinIntervalWidth,
-                              MaxIntervalSplitDepth);
+        EstimationLimitsParameter.ActualValue.Lower, EstimationLimitsParameter.ActualValue.Upper,
+        problemData, rows,
+        ApplyLinearScalingParameter.ActualValue.Value, DecimalPlaces, MinSplittingWidth,
+        MaxSplittingDepth);
 
       SymbolicDataAnalysisTreeInterpreterParameter.ExecutionContext = null;
@@ -119,5 +104,5 @@
                                      double upperEstimationLimit,
                                      IRegressionProblemData problemData, IEnumerable<int> rows, bool applyLinearScaling,
-                                     int decimalPlaces, double minIntervalSplitWidth, int maxIntervalSplitDetph) {
+                                     int decimalPlaces, double minIntervalSplitWidth, int maxIntervalSplitDepth) {
       OnlineCalculatorError errorState;
       var estimatedValues =
@@ -144,5 +129,5 @@
       foreach (var c in constraints) {
         var penalty = ConstraintExceeded(c, intervalInterpreter, variableRanges,
-                                         solution /*, problemData.IntervalSplitting*/);
+          solution /*, problemData.IntervalSplitting*/);
         var maxP = 0.1;
 
@@ -163,6 +148,6 @@
       if (constraint.Variable != null && !variableRanges.ContainsKey(constraint.Variable))
         throw new ArgumentException(
-                                    $"The given variable {constraint.Variable} in the constraint does not exists in the model.",
-                                    nameof(IntervalConstraintsParser));
+          $"The given variable {constraint.Variable} in the constraint does not exists in the model.",
+          nameof(IntervalConstraintsParser));
       Interval resultInterval;
       if (!constraint.IsDerivative) {
@@ -207,5 +192,5 @@
     public override IEnumerable<bool> Maximization {
       get {
-        var objectives = new List<bool> {false}; //First NMSE ==> min
+        var objectives = new List<bool> {false};          //First NMSE ==> min
         objectives.AddRange(Enumerable.Repeat(false, 3)); //Constraints ==> min
 
Index: branches/3076_IA_evaluators_analyzers/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/MultiObjective/SymbolicRegressionMultiObjectiveSplittingEvaluator.cs
===================================================================
--- branches/3076_IA_evaluators_analyzers/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/MultiObjective/SymbolicRegressionMultiObjectiveSplittingEvaluator.cs	(revision 17627)
+++ branches/3076_IA_evaluators_analyzers/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/MultiObjective/SymbolicRegressionMultiObjectiveSplittingEvaluator.cs	(revision 17627)
@@ -0,0 +1,70 @@
+﻿using HEAL.Attic;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Parameters;
+
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Regression {
+  [StorableType("4CFC2616-9B32-40EE-BAE7-25E8BFBAF5BC")]
+  public abstract class
+    SymbolicRegressionMultiObjectiveSplittingEvaluator : SymbolicRegressionMultiObjectiveEvaluator {
+    private const string MinSplittingWidthParameterName    = "Minimum splitting width";
+    private const string MaxSplittingDepthParameterName    = "Maximum splitting depth";
+    private const string UseIntervalSplittingParameterName = "Use interval splitting";
+
+    public IFixedValueParameter<IntValue> MinSplittingWidthParameter =>
+      (IFixedValueParameter<IntValue>) Parameters[MinSplittingWidthParameterName];
+
+    public IFixedValueParameter<IntValue> MaxSplittingDepthParameter =>
+      (IFixedValueParameter<IntValue>) Parameters[MaxSplittingDepthParameterName];
+
+    public IFixedValueParameter<BoolValue> UseIntervalSplittingParameter =>
+      (IFixedValueParameter<BoolValue>) Parameters[UseIntervalSplittingParameterName];
+
+    public int MinSplittingWidth {
+      get => MinSplittingWidthParameter.Value.Value;
+      set => MinSplittingWidthParameter.Value.Value = value;
+    }
+
+    public int MaxSplittingDepth {
+      get => MaxSplittingDepthParameter.Value.Value;
+      set => MaxSplittingDepthParameter.Value.Value = value;
+    }
+
+    public bool UseIntervalSplitting {
+      get => UseIntervalSplittingParameter.Value.Value;
+      set => UseIntervalSplittingParameter.Value.Value = value;
+    }
+
+    [StorableConstructor]
+    protected SymbolicRegressionMultiObjectiveSplittingEvaluator(StorableConstructorFlag _) : base(_) { }
+
+    protected SymbolicRegressionMultiObjectiveSplittingEvaluator(
+      SymbolicRegressionMultiObjectiveSplittingEvaluator original, Cloner cloner) : base(original, cloner) { }
+
+    protected SymbolicRegressionMultiObjectiveSplittingEvaluator() {
+      Parameters.Add(new FixedValueParameter<IntValue>(MinSplittingWidthParameterName,
+        "The minimum interval width before the splitting ends.", new IntValue(0)));
+      Parameters.Add(new FixedValueParameter<IntValue>(MaxSplittingDepthParameterName,
+        "The maximum recursion depth before the splitting ends.", new IntValue(5)));
+      Parameters.Add(new FixedValueParameter<BoolValue>(UseIntervalSplittingParameterName, "", new BoolValue(false)));
+    }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      if (!Parameters.ContainsKey(MinSplittingWidthParameterName)) {
+        Parameters.Add(new FixedValueParameter<IntValue>(MinSplittingWidthParameterName,
+          "The minimum interval width before the splitting ends.", new IntValue(0)));
+      }
+
+      if (!Parameters.ContainsKey(MaxSplittingDepthParameterName)) {
+        Parameters.Add(new FixedValueParameter<IntValue>(MaxSplittingDepthParameterName,
+          "The maximum recursion depth before the splitting ends.", new IntValue(5)));
+      }
+
+      if (!Parameters.ContainsKey(UseIntervalSplittingParameterName)) {
+        Parameters.Add(new FixedValueParameter<BoolValue>(UseIntervalSplittingParameterName, "", new BoolValue(false)));
+      }
+    }
+  }
+}
