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 17721)
+++ /branches/3076_IA_evaluators_analyzers/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/MultiObjective/SymbolicRegressionMultiObjectiveMultiSoftConstraintEvaluator.cs	(revision 17722)
@@ -30,4 +30,5 @@
 using HeuristicLab.Data;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
+using HeuristicLab.Parameters;
 
 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.MultiObjective {
@@ -37,7 +38,12 @@
   public class
     SymbolicRegressionMultiObjectiveMultiSoftConstraintEvaluator : SymbolicRegressionMultiObjectiveSplittingEvaluator {
+    public const string DimensionsParameterName = "Dimensions";
+
+    public IFixedValueParameter<IntValue> DimensionsParameter => (IFixedValueParameter<IntValue>)Parameters[DimensionsParameterName];
+
     #region Constructors
-
-    public SymbolicRegressionMultiObjectiveMultiSoftConstraintEvaluator() { }
+    public SymbolicRegressionMultiObjectiveMultiSoftConstraintEvaluator() {
+      Parameters.Add(new FixedValueParameter<IntValue>(DimensionsParameterName, new IntValue(2)));
+    }
 
     [StorableConstructor]
@@ -48,4 +54,10 @@
 
     #endregion
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      if(!Parameters.ContainsKey(DimensionsParameterName))
+        Parameters.Add(new FixedValueParameter<IntValue>(DimensionsParameterName, new IntValue(2)));
+    }
 
     public override IDeepCloneable Clone(Cloner cloner) {
@@ -193,5 +205,5 @@
           intervalInterpreter.GetSymbolicExpressionTreeInterval(tree, variableRanges /*, splitting: splitting*/);
       }
-
+      
       //Calculate soft-constraints for intervals
       if (constraint.Interval.Contains(resultInterval)) return 0;
@@ -219,5 +231,5 @@
       get {
         var objectives = new List<bool> {false};          //First NMSE ==> min
-        objectives.AddRange(Enumerable.Repeat(false, 2)); //Constraints ==> min
+        objectives.AddRange(Enumerable.Repeat(false, DimensionsParameter.Value.Value)); //Constraints ==> min
         
         return objectives;
Index: /branches/3076_IA_evaluators_analyzers/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SymbolicRegressionConstraintAnalyzer.cs
===================================================================
--- /branches/3076_IA_evaluators_analyzers/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SymbolicRegressionConstraintAnalyzer.cs	(revision 17721)
+++ /branches/3076_IA_evaluators_analyzers/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SymbolicRegressionConstraintAnalyzer.cs	(revision 17722)
@@ -1,4 +1,5 @@
 ﻿using System;
 using System.Collections.Generic;
+using System.Collections.ObjectModel;
 using System.Linq;
 using HEAL.Attic;
@@ -91,6 +92,21 @@
       Interval resultInterval;
 
+      // create new variable ranges for defined regions
+      IDictionary<string, Interval> regionRanges = new Dictionary<string, Interval>();
+      foreach (var kvp in variableRanges)
+      {
+        if (kvp.Key != constraint.Target && constraint.Regions.TryGetValue(kvp.Key, out Interval val))
+        {
+          regionRanges.Add(kvp.Key, val);
+        }
+        else
+        {
+          regionRanges.Add(kvp);
+        }
+      }
+
+      // calculate result interval
       if (!constraint.IsDerivative) {
-        resultInterval = intervalInterpreter.GetSymbolicExpressionTreeInterval(solution, variableRanges);
+        resultInterval = intervalInterpreter.GetSymbolicExpressionTreeInterval(solution, new ReadOnlyDictionary<string, Interval>(regionRanges));
       }
       else {
@@ -102,5 +118,5 @@
         }
 
-        resultInterval = intervalInterpreter.GetSymbolicExpressionTreeInterval(tree, variableRanges);
+        resultInterval = intervalInterpreter.GetSymbolicExpressionTreeInterval(tree, new ReadOnlyDictionary<string, Interval>(regionRanges));
       }
 
