Index: /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestSolution/Capacitated/BestCapacitatedVRPSolutionAnalyzer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestSolution/Capacitated/BestCapacitatedVRPSolutionAnalyzer.cs	(revision 8496)
+++ /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestSolution/Capacitated/BestCapacitatedVRPSolutionAnalyzer.cs	(revision 8497)
@@ -30,4 +30,5 @@
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
 using HeuristicLab.Problems.VehicleRouting.Variants;
+using HeuristicLab.Problems.VehicleRouting.ProblemInstances;
 
 namespace HeuristicLab.Problems.VehicleRouting {
@@ -87,4 +88,5 @@
 
     public override IOperation Apply() {
+      IVRPProblemInstance problemInstance = ProblemInstanceParameter.ActualValue;
       ItemArray<IVRPEncoding> solutions = VRPToursParameter.ActualValue;
       ResultCollection results = ResultsParameter.ActualValue;
@@ -100,5 +102,6 @@
           results.Add(new Result("Best VRP Solution Overload", new DoubleValue(overloads[i].Value)));
         } else {
-          if (qualities[i].Value <= solution.Quality.Value) {
+          VRPEvaluation eval = problemInstance.Evaluate(solution.Solution);
+          if (qualities[i].Value <= eval.Quality) {
             (results["Best VRP Solution Overload"].Value as DoubleValue).Value = overloads[i].Value;
           }
Index: /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestSolution/PickupAndDelivery/BestPickupAndDeliveryVRPSolutionAnalyzer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestSolution/PickupAndDelivery/BestPickupAndDeliveryVRPSolutionAnalyzer.cs	(revision 8496)
+++ /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestSolution/PickupAndDelivery/BestPickupAndDeliveryVRPSolutionAnalyzer.cs	(revision 8497)
@@ -30,4 +30,5 @@
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
 using HeuristicLab.Problems.VehicleRouting.Variants;
+using HeuristicLab.Problems.VehicleRouting.ProblemInstances;
 
 namespace HeuristicLab.Problems.VehicleRouting {
@@ -87,4 +88,5 @@
 
     public override IOperation Apply() {
+      IVRPProblemInstance problemInstance = ProblemInstanceParameter.ActualValue;
       ItemArray<IVRPEncoding> solutions = VRPToursParameter.ActualValue;
       ResultCollection results = ResultsParameter.ActualValue;
@@ -101,5 +103,6 @@
           results.Add(new Result("Best VRP Solution PickupViolations", new DoubleValue(pickupViolations[i].Value)));
         } else {
-          if (qualities[i].Value <= solution.Quality.Value) {
+          VRPEvaluation eval = problemInstance.Evaluate(solution.Solution);
+          if (qualities[i].Value <= eval.Quality) {
             (results["Best VRP Solution PickupViolations"].Value as DoubleValue).Value = pickupViolations[i].Value;
           }
Index: /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestSolution/TimeWindowed/BestTimeWindowedVRPSolutionAnalyzer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestSolution/TimeWindowed/BestTimeWindowedVRPSolutionAnalyzer.cs	(revision 8496)
+++ /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/BestSolution/TimeWindowed/BestTimeWindowedVRPSolutionAnalyzer.cs	(revision 8497)
@@ -30,4 +30,5 @@
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
 using HeuristicLab.Problems.VehicleRouting.Variants;
+using HeuristicLab.Problems.VehicleRouting.ProblemInstances;
 
 namespace HeuristicLab.Problems.VehicleRouting {
@@ -91,4 +92,5 @@
 
     public override IOperation Apply() {
+      IVRPProblemInstance problemInstance = ProblemInstanceParameter.ActualValue;
       ItemArray<IVRPEncoding> solutions = VRPToursParameter.ActualValue;
       ResultCollection results = ResultsParameter.ActualValue;
@@ -106,5 +108,6 @@
           results.Add(new Result("Best VRP Solution TravelTime", new DoubleValue(travelTimes[i].Value)));
         } else {
-          if (qualities[i].Value <= solution.Quality.Value) {
+          VRPEvaluation eval = problemInstance.Evaluate(solution.Solution);
+          if (qualities[i].Value <= eval.Quality) {
             (results["Best VRP Solution Tardiness"].Value as DoubleValue).Value = tardinesses[i].Value;
             (results["Best VRP Solution TravelTime"].Value as DoubleValue).Value = travelTimes[i].Value;
Index: /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/ConstraintRelaxation/Capacitated/CapacityRelaxationVRPAnalyzer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/ConstraintRelaxation/Capacitated/CapacityRelaxationVRPAnalyzer.cs	(revision 8496)
+++ /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/ConstraintRelaxation/Capacitated/CapacityRelaxationVRPAnalyzer.cs	(revision 8497)
@@ -60,4 +60,7 @@
       get { return (IValueParameter<DoubleValue>)Parameters["MinPenaltyFactor"]; }
     }
+    public IValueParameter<DoubleValue> MaxPenaltyFactorParameter {
+      get { return (IValueParameter<DoubleValue>)Parameters["MaxPenaltyFactor"]; }
+    }
 
     public ValueLookupParameter<ResultCollection> ResultsParameter {
@@ -80,7 +83,8 @@
       Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Overload", "The overloads of the VRP solutions which should be analyzed."));
 
-      Parameters.Add(new ValueParameter<DoubleValue>("Sigma", "The sigma applied to the penalty factor.", new DoubleValue(0.04)));
-      Parameters.Add(new ValueParameter<DoubleValue>("Phi", "The phi applied to the penalty factor.", new DoubleValue(0.01)));
+      Parameters.Add(new ValueParameter<DoubleValue>("Sigma", "The sigma applied to the penalty factor.", new DoubleValue(0.5)));
+      Parameters.Add(new ValueParameter<DoubleValue>("Phi", "The phi applied to the penalty factor.", new DoubleValue(0.5)));
       Parameters.Add(new ValueParameter<DoubleValue>("MinPenaltyFactor", "The minimum penalty factor.", new DoubleValue(0.01)));
+      Parameters.Add(new ValueParameter<DoubleValue>("MaxPenaltyFactor", "The maximum penalty factor.", new DoubleValue(100000)));
 
       Parameters.Add(new ValueLookupParameter<ResultCollection>("Results", "The result collection where the best VRP solution should be stored."));
@@ -95,4 +99,14 @@
     }
 
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      // BackwardsCompatibility3.3
+      #region Backwards compatible code, remove with 3.4
+      if (!Parameters.ContainsKey("MaxPenaltyFactor")) {
+        Parameters.Add(new ValueParameter<DoubleValue>("MaxPenaltyFactor", "The maximum penalty factor.", new DoubleValue(100000)));
+      }
+      #endregion
+    }
+
     public override IOperation Apply() {
       ICapacitatedProblemInstance cvrp = ProblemInstanceParameter.ActualValue as ICapacitatedProblemInstance;
@@ -105,4 +119,5 @@
       double phi = PhiParameter.Value.Value;
       double minPenalty = MinPenaltyFactorParameter.Value.Value;
+      double maxPenalty = MaxPenaltyFactorParameter.Value.Value;
 
       for (int j = 0; j < qualities.Length; j++) {
@@ -124,4 +139,6 @@
       if (cvrp.OverloadPenalty.Value < minPenalty)
         cvrp.OverloadPenalty.Value = minPenalty;
+      if (cvrp.OverloadPenalty.Value > maxPenalty)
+        cvrp.OverloadPenalty.Value = maxPenalty;
 
       for (int j = 0; j < qualities.Length; j++) {
Index: /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/ConstraintRelaxation/PickupAndDelivery/PickupViolationsRelaxationVRPAnalyzer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/ConstraintRelaxation/PickupAndDelivery/PickupViolationsRelaxationVRPAnalyzer.cs	(revision 8496)
+++ /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/ConstraintRelaxation/PickupAndDelivery/PickupViolationsRelaxationVRPAnalyzer.cs	(revision 8497)
@@ -60,4 +60,7 @@
       get { return (IValueParameter<DoubleValue>)Parameters["MinPenaltyFactor"]; }
     }
+    public IValueParameter<DoubleValue> MaxPenaltyFactorParameter {
+      get { return (IValueParameter<DoubleValue>)Parameters["MaxPenaltyFactor"]; }
+    }
 
     public ValueLookupParameter<ResultCollection> ResultsParameter {
@@ -80,7 +83,8 @@
       Parameters.Add(new ScopeTreeLookupParameter<IntValue>("PickupViolations", "The pickup violation of the VRP solutions which should be analyzed."));
 
-      Parameters.Add(new ValueParameter<DoubleValue>("Sigma", "The sigma applied to the penalty factor.", new DoubleValue(0.04)));
-      Parameters.Add(new ValueParameter<DoubleValue>("Phi", "The phi applied to the penalty factor.", new DoubleValue(0.01)));
+      Parameters.Add(new ValueParameter<DoubleValue>("Sigma", "The sigma applied to the penalty factor.", new DoubleValue(0.5)));
+      Parameters.Add(new ValueParameter<DoubleValue>("Phi", "The phi applied to the penalty factor.", new DoubleValue(0.5)));
       Parameters.Add(new ValueParameter<DoubleValue>("MinPenaltyFactor", "The minimum penalty factor.", new DoubleValue(0.01)));
+      Parameters.Add(new ValueParameter<DoubleValue>("MaxPenaltyFactor", "The maximum penalty factor.", new DoubleValue(100000)));
 
       Parameters.Add(new ValueLookupParameter<ResultCollection>("Results", "The result collection where the best VRP solution should be stored."));
@@ -95,4 +99,14 @@
     }
 
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      // BackwardsCompatibility3.3
+      #region Backwards compatible code, remove with 3.4
+      if (!Parameters.ContainsKey("MaxPenaltyFactor")) {
+        Parameters.Add(new ValueParameter<DoubleValue>("MaxPenaltyFactor", "The maximum penalty factor.", new DoubleValue(100000)));
+      }
+      #endregion
+    }
+
     public override IOperation Apply() {
       IPickupAndDeliveryProblemInstance pdp = ProblemInstanceParameter.ActualValue as IPickupAndDeliveryProblemInstance;
@@ -105,4 +119,5 @@
       double phi = PhiParameter.Value.Value;
       double minPenalty = MinPenaltyFactorParameter.Value.Value;
+      double maxPenalty = MaxPenaltyFactorParameter.Value.Value;
 
       for (int j = 0; j < qualities.Length; j++) {
@@ -124,4 +139,6 @@
       if (pdp.PickupViolationPenalty.Value < minPenalty)
         pdp.PickupViolationPenalty.Value = minPenalty;
+      if (pdp.PickupViolationPenalty.Value > maxPenalty)
+        pdp.PickupViolationPenalty.Value = maxPenalty;
 
       for (int j = 0; j < qualities.Length; j++) {
Index: /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/ConstraintRelaxation/TimeWindowed/TimeWindowRelaxationVRPAnalyzer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/ConstraintRelaxation/TimeWindowed/TimeWindowRelaxationVRPAnalyzer.cs	(revision 8496)
+++ /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.4/Analyzer/ConstraintRelaxation/TimeWindowed/TimeWindowRelaxationVRPAnalyzer.cs	(revision 8497)
@@ -60,4 +60,7 @@
       get { return (IValueParameter<DoubleValue>)Parameters["MinPenaltyFactor"]; }
     }
+    public IValueParameter<DoubleValue> MaxPenaltyFactorParameter {
+      get { return (IValueParameter<DoubleValue>)Parameters["MaxPenaltyFactor"]; }
+    }
 
     public ValueLookupParameter<ResultCollection> ResultsParameter {
@@ -80,7 +83,8 @@
       Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Tardiness", "The tardiness of the VRP solutions which should be analyzed."));
 
-      Parameters.Add(new ValueParameter<DoubleValue>("Sigma", "The sigma applied to the penalty factor.", new DoubleValue(0.04)));
-      Parameters.Add(new ValueParameter<DoubleValue>("Phi", "The phi applied to the penalty factor.", new DoubleValue(0.01)));
+      Parameters.Add(new ValueParameter<DoubleValue>("Sigma", "The sigma applied to the penalty factor.", new DoubleValue(0.5)));
+      Parameters.Add(new ValueParameter<DoubleValue>("Phi", "The phi applied to the penalty factor.", new DoubleValue(0.5)));
       Parameters.Add(new ValueParameter<DoubleValue>("MinPenaltyFactor", "The minimum penalty factor.", new DoubleValue(0.01)));
+      Parameters.Add(new ValueParameter<DoubleValue>("MaxPenaltyFactor", "The maximum penalty factor.", new DoubleValue(100000)));
 
       Parameters.Add(new ValueLookupParameter<ResultCollection>("Results", "The result collection where the best VRP solution should be stored."));
@@ -95,4 +99,14 @@
     }
 
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      // BackwardsCompatibility3.3
+      #region Backwards compatible code, remove with 3.4
+      if (!Parameters.ContainsKey("MaxPenaltyFactor")) {
+        Parameters.Add(new ValueParameter<DoubleValue>("MaxPenaltyFactor", "The maximum penalty factor.", new DoubleValue(100000)));
+      }
+      #endregion
+    }
+
     public override IOperation Apply() {
       ITimeWindowedProblemInstance vrptw = ProblemInstanceParameter.ActualValue as ITimeWindowedProblemInstance;
@@ -105,4 +119,5 @@
       double phi = PhiParameter.Value.Value;
       double minPenalty = MinPenaltyFactorParameter.Value.Value;
+      double maxPenalty = MaxPenaltyFactorParameter.Value.Value;
 
       for (int j = 0; j < qualities.Length; j++) {
@@ -124,4 +139,6 @@
       if (vrptw.TardinessPenalty.Value < minPenalty)
         vrptw.TardinessPenalty.Value = minPenalty;
+      if (vrptw.TardinessPenalty.Value > maxPenalty)
+        vrptw.TardinessPenalty.Value = maxPenalty;
 
       for (int j = 0; j < qualities.Length; j++) {
