Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/AckleyEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/AckleyEvaluator.cs	(revision 3757)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/AckleyEvaluator.cs	(revision 3781)
@@ -66,4 +66,8 @@
     }
 
+    public override RealVector GetBestKnownSolution(int dimension) {
+      return new RealVector(dimension);
+    }
+
     /// <summary>
     /// Evaluates the Ackley function for a specific <paramref name="point"/>.
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/BealeEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/BealeEvaluator.cs	(revision 3757)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/BealeEvaluator.cs	(revision 3781)
@@ -66,4 +66,8 @@
     }
 
+    public override RealVector GetBestKnownSolution(int dimension) {
+      if (dimension != 2) throw new ArgumentException(Name + ": This function is only defined for 2 dimensions.", "dimension");
+      return new RealVector(new double[] { 3, 0.5 });
+    }
     /// <summary>
     /// Evaluates the test function for a specific <paramref name="point"/>.
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/BoothEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/BoothEvaluator.cs	(revision 3757)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/BoothEvaluator.cs	(revision 3781)
@@ -65,4 +65,8 @@
     }
 
+    public override RealVector GetBestKnownSolution(int dimension) {
+      if (dimension != 2) throw new ArgumentException(Name + ": This function is only defined for 2 dimensions.", "dimension");
+      return new RealVector(new double[] { 1, 3 });
+    }
     /// <summary>
     /// Evaluates the test function for a specific <paramref name="point"/>.
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/GriewankEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/GriewankEvaluator.cs	(revision 3757)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/GriewankEvaluator.cs	(revision 3781)
@@ -67,4 +67,7 @@
     }
 
+    public override RealVector GetBestKnownSolution(int dimension) {
+      return new RealVector(dimension);
+    }
     /// <summary>
     /// If dimension of the problem is less or equal than 100 the values of Math.Sqrt(i + 1) are precomputed.
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/LevyEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/LevyEvaluator.cs	(revision 3757)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/LevyEvaluator.cs	(revision 3781)
@@ -65,4 +65,10 @@
     }
 
+    public override RealVector GetBestKnownSolution(int dimension) {
+      if (dimension < 2) throw new ArgumentException(Name + ": This function is not defined for 1 dimension.");
+      RealVector result = new RealVector(dimension);
+      for (int i = 0; i < dimension; i++) result[i] = 1;
+      return result;
+    }
     /// <summary>
     /// Evaluates the test function for a specific <paramref name="point"/>.
@@ -80,4 +86,5 @@
 
       s = Math.Sin(Math.PI * z[0]);
+      if (Math.Abs(s) < 1e-15) s = 0; // Math.Sin(Math.PI) == 0.00000000000000012246063538223773
       s *= s;
 
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/MatyasEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/MatyasEvaluator.cs	(revision 3757)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/MatyasEvaluator.cs	(revision 3781)
@@ -65,4 +65,8 @@
     }
 
+    public override RealVector GetBestKnownSolution(int dimension) {
+      if (dimension != 2) throw new ArgumentException(Name + ": This function is only defined for 2 dimensions.", "dimension");
+      return new RealVector(dimension);
+    }
     /// <summary>
     /// Evaluates the test function for a specific <paramref name="point"/>.
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/RastriginEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/RastriginEvaluator.cs	(revision 3757)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/RastriginEvaluator.cs	(revision 3781)
@@ -80,4 +80,8 @@
     }
 
+    public override RealVector GetBestKnownSolution(int dimension) {
+      return new RealVector(dimension);
+    }
+
     /// <summary>
     /// Initializes a new instance of the RastriginEvaluator with one parameter (<c>A</c>).
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/RosenbrockEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/RosenbrockEvaluator.cs	(revision 3757)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/RosenbrockEvaluator.cs	(revision 3781)
@@ -69,4 +69,11 @@
     }
 
+    public override RealVector GetBestKnownSolution(int dimension) {
+      if (dimension < 2) throw new ArgumentException(Name + ": This function is not defined for 1 dimension.");
+      RealVector result = new RealVector(dimension);
+      for (int i = 0; i < dimension; i++) result[i] = 1;
+      return result;
+    }
+
     /// <summary>
     /// Evaluates the test function for a specific <paramref name="point"/>.
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SchwefelEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SchwefelEvaluator.cs	(revision 3757)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SchwefelEvaluator.cs	(revision 3781)
@@ -31,5 +31,5 @@
   /// The Schwefel function (sine root) is implemented as described in Affenzeller, M. and Wagner, S. 2005. Offspring Selection: A New Self-Adaptive Selection Scheme for Genetic Algorithms.  Ribeiro, B., Albrecht, R. F., Dobnikar, A., Pearson, D. W., and Steele, N. C. (eds.). Adaptive and Natural Computing Algorithms, pp. 218-221, Springer.
   /// </summary>
-  [Item("SchwefelEvaluator", "Evaluates the Schwefel function (sine root) on a given point. The optimum of this function is 0 at (420.968746453712,420.968746453712,...,420.968746453712). It is implemented as described in Affenzeller, M. and Wagner, S. 2005. Offspring Selection: A New Self-Adaptive Selection Scheme for Genetic Algorithms.  Ribeiro, B., Albrecht, R. F., Dobnikar, A., Pearson, D. W., and Steele, N. C. (eds.). Adaptive and Natural Computing Algorithms, pp. 218-221, Springer.")]
+  [Item("SchwefelEvaluator", "Evaluates the Schwefel function (sine root) on a given point. In the given bounds [-500;500] the optimum of this function is close to 0 at (420.968746453712,420.968746453712,...,420.968746453712). It is implemented as described in Affenzeller, M. and Wagner, S. 2005. Offspring Selection: A New Self-Adaptive Selection Scheme for Genetic Algorithms.  Ribeiro, B., Albrecht, R. F., Dobnikar, A., Pearson, D. W., and Steele, N. C. (eds.). Adaptive and Natural Computing Algorithms, pp. 218-221, Springer.")]
   [StorableClass]
   public class SchwefelEvaluator : SingleObjectiveTestFunctionProblemEvaluator {
@@ -65,4 +65,8 @@
     }
 
+    public override RealVector GetBestKnownSolution(int dimension) {
+      return null;
+    }
+
     /// <summary>
     /// Evaluates the test function for a specific <paramref name="point"/>.
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SingleObjectiveTestFunctionProblemEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SingleObjectiveTestFunctionProblemEvaluator.cs	(revision 3757)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SingleObjectiveTestFunctionProblemEvaluator.cs	(revision 3781)
@@ -87,4 +87,8 @@
       return EvaluateFunction(new RealVector(new double[] { x, y }));
     }
+    /// <summary>
+    /// Gets the best known solution for this function.
+    /// </summary>
+    public abstract RealVector GetBestKnownSolution(int dimension);
 
     /// <summary>
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SphereEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SphereEvaluator.cs	(revision 3757)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SphereEvaluator.cs	(revision 3781)
@@ -66,4 +66,9 @@
       get { return int.MaxValue; }
     }
+
+    public override RealVector GetBestKnownSolution(int dimension) {
+      return new RealVector(dimension);
+    }
+
     /// <summary>
     /// The parameter C modifies the steepness of the objective function y = C * ||X||^Alpha. Default is C = 1.
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SumSquaresEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SumSquaresEvaluator.cs	(revision 3757)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SumSquaresEvaluator.cs	(revision 3781)
@@ -65,4 +65,8 @@
     }
 
+    public override RealVector GetBestKnownSolution(int dimension) {
+      return new RealVector(dimension);
+    }
+
     /// <summary>
     /// Evaluates the test function for a specific <paramref name="point"/>.
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/ZakharovEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/ZakharovEvaluator.cs	(revision 3757)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/ZakharovEvaluator.cs	(revision 3781)
@@ -65,4 +65,8 @@
     }
 
+    public override RealVector GetBestKnownSolution(int dimension) {
+      return new RealVector(dimension);
+    }
+
     /// <summary>
     /// Evaluates the test function for a specific <paramref name="point"/>.
