Index: /branches/3138_Shape_Constraints_Transformations/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/Evaluators/NMSESingleObjectiveConstraintsEvaluator.cs
===================================================================
--- /branches/3138_Shape_Constraints_Transformations/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/Evaluators/NMSESingleObjectiveConstraintsEvaluator.cs	(revision 18218)
+++ /branches/3138_Shape_Constraints_Transformations/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/Evaluators/NMSESingleObjectiveConstraintsEvaluator.cs	(revision 18219)
@@ -210,4 +210,11 @@
 
     public static IEnumerable<Tuple<ShapeConstraint, double>> CalculateShapeConstraintsViolations(
+      IShapeConstrainedRegressionProblemData problemData, ISymbolicExpressionTree tree) =>
+      CalculateShapeConstraintsViolations(problemData, tree,
+        new SymbolicDataAnalysisExpressionTreeLinearInterpreter(),
+        new IntervalArithBoundsEstimator(),
+        new MersenneTwister());
+
+    public static IEnumerable<Tuple<ShapeConstraint, double>> CalculateShapeConstraintsViolations(
       IShapeConstrainedRegressionProblemData problemData, ISymbolicExpressionTree tree, 
       ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, IBoundsEstimator estimator,
@@ -234,5 +241,9 @@
         var enabledConstraints = extendedConstraint.ShapeConstraints.EnabledConstraints;
         if (enabledConstraints.Any()) {
-          var extendedConstraintExprValues = interpreter.GetSymbolicExpressionTreeValues(extendedConstraint.Tree, tmpDataset, problemData.AllIndices);
+          var extendedConstraintExprValues = interpreter.GetSymbolicExpressionTreeValues(extendedConstraint.Tree, tmpDataset, problemData.AllIndices)
+                                                        .Where(x => !double.IsNaN(x));
+          extendedConstraintExprValues = !extendedConstraintExprValues.Any() ? 
+            new double[] {double.NegativeInfinity, double.PositiveInfinity} : 
+            extendedConstraintExprValues;
           var extendedConstraintExprInterval = new Interval(extendedConstraintExprValues.Min(), extendedConstraintExprValues.Max());
 
@@ -258,5 +269,9 @@
               dict[problemData.TargetVariable] = allEstimatedValues.ToList();
               tmpDataset = new Dataset(dict.Keys, dict.Values);
-              extendedConstraintExprValues = interpreter.GetSymbolicExpressionTreeValues(extendedConstraint.Tree, tmpDataset, problemData.AllIndices);
+              extendedConstraintExprValues = interpreter.GetSymbolicExpressionTreeValues(extendedConstraint.Tree, tmpDataset, problemData.AllIndices)
+                                                        .Where(x => !double.IsNaN(x));
+              extendedConstraintExprValues = !extendedConstraintExprValues.Any() ?
+                new double[] { double.NegativeInfinity, double.PositiveInfinity } :
+                extendedConstraintExprValues;
               extendedConstraintExprInterval = new Interval(extendedConstraintExprValues.Min(), extendedConstraintExprValues.Max());
             }
Index: /branches/3138_Shape_Constraints_Transformations/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SymbolicRegressionSolution.cs
===================================================================
--- /branches/3138_Shape_Constraints_Transformations/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SymbolicRegressionSolution.cs	(revision 18218)
+++ /branches/3138_Shape_Constraints_Transformations/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SymbolicRegressionSolution.cs	(revision 18219)
@@ -47,4 +47,6 @@
     private const string TestNaNEvaluationsResultName = "Test NaN Evaluations";
 
+    private const string ConstraintViolationsResultsResultName = "Constraint Violations";
+
     private const string ModelBoundsResultName = "Model Bounds";
 
@@ -64,4 +66,8 @@
       get { return ((IntValue)this[ModelDepthResultName].Value).Value; }
       private set { ((IntValue)this[ModelDepthResultName].Value).Value = value; }
+    }
+
+    private ResultCollection ConstraintViolationsResultCollection {
+      get => (ResultCollection)this[ConstraintViolationsResultsResultName].Value;
     }
 
@@ -136,4 +142,6 @@
       estimationLimitResults.Add(new Result(TestNaNEvaluationsResultName, "", new IntValue()));
       Add(new Result(EstimationLimitsResultsResultName, "Results concerning the estimation limits of symbolic regression solution", estimationLimitResults));
+
+      Add(new Result(ConstraintViolationsResultsResultName, "Constraint Violations", new ResultCollection()));
 
       if (IntervalInterpreter.IsCompatible(Model.SymbolicExpressionTree))
@@ -168,4 +176,9 @@
         }
       }
+
+      if(!ContainsKey(ConstraintViolationsResultsResultName)) {
+        Add(new Result(ConstraintViolationsResultsResultName, "Constraint Violations", new ResultCollection()));
+        CalculateResults();
+      }
     }
 
@@ -192,4 +205,11 @@
       if (IntervalInterpreter.IsCompatible(Model.SymbolicExpressionTree))
         ModelBoundsCollection = CalculateModelIntervals(this);
+
+      if(ProblemData is IShapeConstrainedRegressionProblemData scpd) {
+        var violations = NMSESingleObjectiveConstraintsEvaluator.CalculateShapeConstraintsViolations(scpd, Model.SymbolicExpressionTree);
+        foreach (var violation in violations) {
+          ConstraintViolationsResultCollection.Add(new Result(violation.Item1.ToString(), new DoubleValue(violation.Item2)));
+        }
+      }
     }
 
