Index: /trunk/sources/HeuristicLab.Problems.TravelingSalesman/3.3/Evaluators/TSPUpperEuclideanPathEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.TravelingSalesman/3.3/Evaluators/TSPUpperEuclideanPathEvaluator.cs	(revision 9848)
+++ /trunk/sources/HeuristicLab.Problems.TravelingSalesman/3.3/Evaluators/TSPUpperEuclideanPathEvaluator.cs	(revision 9848)
@@ -0,0 +1,55 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 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 HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.TravelingSalesman {
+  /// <summary>
+  /// An operator which evaluates TSP solutions given in path representation using the rounded up Euclidean distance metric.
+  /// </summary>
+  [Item("TSPUpperEuclideanPathEvaluator", "An operator which evaluates TSP solutions given in path representation using the rounded up Euclidean distance metric.")]
+  [StorableClass]
+  public sealed class TSPUpperEuclideanPathEvaluator : TSPCoordinatesPathEvaluator {
+    [StorableConstructor]
+    private TSPUpperEuclideanPathEvaluator(bool deserializing) : base(deserializing) { }
+    private TSPUpperEuclideanPathEvaluator(TSPUpperEuclideanPathEvaluator original, Cloner cloner) : base(original, cloner) { }
+    public TSPUpperEuclideanPathEvaluator() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new TSPUpperEuclideanPathEvaluator(this, cloner);
+    }
+
+    /// <summary>
+    /// Calculates the distance between two points using the rounded up Euclidean distance metric.
+    /// </summary>
+    /// <param name="x1">The x-coordinate of point 1.</param>
+    /// <param name="y1">The y-coordinate of point 1.</param>
+    /// <param name="x2">The x-coordinate of point 2.</param>
+    /// <param name="y2">The y-coordinate of point 2.</param>
+    /// <returns>The calculated distance.</returns>
+    protected override double CalculateDistance(double x1, double y1, double x2, double y2) {
+      return Math.Ceiling(Math.Sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)));
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.TravelingSalesman/3.3/HeuristicLab.Problems.TravelingSalesman-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Problems.TravelingSalesman/3.3/HeuristicLab.Problems.TravelingSalesman-3.3.csproj	(revision 9847)
+++ /trunk/sources/HeuristicLab.Problems.TravelingSalesman/3.3/HeuristicLab.Problems.TravelingSalesman-3.3.csproj	(revision 9848)
@@ -119,4 +119,5 @@
     <Compile Include="Evaluators\TSPEuclideanPathEvaluator.cs" />
     <Compile Include="Evaluators\TSPGeoPathEvaluator.cs" />
+    <Compile Include="Evaluators\TSPUpperEuclideanPathEvaluator.cs" />
     <Compile Include="Improvers\TSPImprovementOperator.cs" />
     <Compile Include="Interfaces\ITSPDistanceMatrixEvaluator.cs" />
Index: /trunk/sources/HeuristicLab.Problems.TravelingSalesman/3.3/TravelingSalesmanProblem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.TravelingSalesman/3.3/TravelingSalesmanProblem.cs	(revision 9847)
+++ /trunk/sources/HeuristicLab.Problems.TravelingSalesman/3.3/TravelingSalesmanProblem.cs	(revision 9848)
@@ -382,6 +382,5 @@
       if (data.Dimension > DistanceMatrixSizeLimit && (data.DistanceMeasure == DistanceMeasure.Att
         || data.DistanceMeasure == DistanceMeasure.Manhattan
-        || data.DistanceMeasure == DistanceMeasure.Maximum
-        || data.DistanceMeasure == DistanceMeasure.UpperEuclidean))
+        || data.DistanceMeasure == DistanceMeasure.Maximum))
         throw new System.IO.InvalidDataException("The given instance uses an unsupported distance measure and is too large for using a distance matrix.");
       if (data.Coordinates != null && data.Coordinates.GetLength(1) != 2)
@@ -399,6 +398,5 @@
       if (data.DistanceMeasure == DistanceMeasure.Att
         || data.DistanceMeasure == DistanceMeasure.Manhattan
-        || data.DistanceMeasure == DistanceMeasure.Maximum
-        || data.DistanceMeasure == DistanceMeasure.UpperEuclidean) {
+        || data.DistanceMeasure == DistanceMeasure.Maximum) {
         evaluator = new TSPDistanceMatrixEvaluator();
         UseDistanceMatrix = new BoolValue(true);
@@ -418,4 +416,7 @@
             evaluator = new TSPRoundedEuclideanPathEvaluator();
             break;
+          case DistanceMeasure.UpperEuclidean:
+            evaluator = new TSPUpperEuclideanPathEvaluator();
+            break;
           case DistanceMeasure.Geo:
             evaluator = new TSPGeoPathEvaluator();
