Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/GriewankEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/GriewankEvaluator.cs	(revision 3315)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/GriewankEvaluator.cs	(revision 3318)
@@ -36,5 +36,5 @@
   public class GriewankEvaluator : SingleObjectiveTestFunctionProblemEvaluator {
     /// <summary>
-    /// Returns false as the Griewangk function is a minimization problem.
+    /// Returns false as the Griewank function is a minimization problem.
     /// </summary>
     public override bool Maximization {
@@ -75,5 +75,5 @@
     /// </summary>
     /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
-    /// <returns>The result value of the Griewangk function at the given point.</returns>
+    /// <returns>The result value of the Griewank function at the given point.</returns>
     public static double Apply(RealVector point) {
       double result = 0;
@@ -97,5 +97,5 @@
     /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
     /// <param name="sqrts">The precomputed array of square roots.</param>
-    /// <returns>The result value of the Griewangk function at the given point.</returns>
+    /// <returns>The result value of the Griewank function at the given point.</returns>
     private static double Apply(RealVector point, double[] sqrts) {
       double result = 0;
@@ -119,5 +119,5 @@
     /// <remarks>Calls <see cref="Apply"/>.</remarks>
     /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
-    /// <returns>The result value of the Griewangk function at the given point.</returns>
+    /// <returns>The result value of the Griewank function at the given point.</returns>
     protected override double EvaluateFunction(RealVector point) {
       if (point.Length > 100)
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/MatyasEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/MatyasEvaluator.cs	(revision 3315)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/MatyasEvaluator.cs	(revision 3318)
@@ -34,5 +34,5 @@
   public class MatyasEvaluator : SingleObjectiveTestFunctionProblemEvaluator {
     /// <summary>
-    /// Returns false as the Beale function is a minimization problem.
+    /// Returns false as the Matyas function is a minimization problem.
     /// </summary>
     public override bool Maximization {
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/RosenbrockEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/RosenbrockEvaluator.cs	(revision 3315)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/RosenbrockEvaluator.cs	(revision 3318)
@@ -32,7 +32,7 @@
   /// </summary>
   [Item("RosenbrockEvaluator", @"The Rosenbrock function features a flat valley in which the global optimum is located.
-For 2 and 3 dimensions the optimum of this function is 0 at (1,1,...,1), for 4 to 30 dimensions there is an additional local minimum.
+For 2 and 3 dimensions the single minimum of this function is 0 at (1,1,...,1), for 4 to 30 dimensions there is an additional local minimum close to (-1,1,...,1).
 It is unknown how many local minima there are for dimensions greater than 30.
-It is implemented as generalized Rosenbrock function as for example given in Shang, Y.-W. and Qiu, Y.-H. 2006. A Note on the Extended Rosenbrock Function. Evolutionary Computation 14, pp. 119-126, MIT Press.")]
+It is implemented as generalized Rosenbrock function for which the 2 dimensional function is a special case, as for example given in Shang, Y.-W. and Qiu, Y.-H. 2006. A Note on the Extended Rosenbrock Function. Evolutionary Computation 14, pp. 119-126, MIT Press.")]
   [StorableClass]
   public class RosenbrockEvaluator : SingleObjectiveTestFunctionProblemEvaluator {
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SchwefelEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SchwefelEvaluator.cs	(revision 3315)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SchwefelEvaluator.cs	(revision 3318)
@@ -34,5 +34,5 @@
   public class SchwefelEvaluator : SingleObjectiveTestFunctionProblemEvaluator {
     /// <summary>
-    /// Returns false as the Rosenbrock function is a minimization problem.
+    /// Returns false as the Schwefel (sine root) function is a minimization problem.
     /// </summary>
     public override bool Maximization {
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SumSquaresEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SumSquaresEvaluator.cs	(revision 3315)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SumSquaresEvaluator.cs	(revision 3318)
@@ -28,13 +28,11 @@
 namespace HeuristicLab.Problems.TestFunctions {
   /// <summary>
-  /// Sum Squares Function<br/>
-  /// Domain:  [-10.0 , 10.0]^n<br/>
-  /// Optimum: 0.0 at (0.0, 0.0, ..., 0.0)
+  /// The Sum Squares function is defined as sum(i * x_i * x_i) for i = 1..n
   /// </summary>
-  [Item("SumSquaresEvaluator", "Evaluates the sum squares function on a given point. The optimum of this function is 0 at the origin.")]
+  [Item("SumSquaresEvaluator", "Evaluates the sum squares function on a given point. The optimum of this function is 0 at the origin. The Sum Squares function is defined as sum(i * x_i * x_i) for i = 1..n.")]
   [StorableClass]
   public class SumSquaresEvaluator : SingleObjectiveTestFunctionProblemEvaluator {
     /// <summary>
-    /// Returns false as the Rosenbrock function is a minimization problem.
+    /// Returns false as the Sum Squares function is a minimization problem.
     /// </summary>
     public override bool Maximization {
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/ZakharovEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/ZakharovEvaluator.cs	(revision 3315)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/ZakharovEvaluator.cs	(revision 3318)
@@ -28,13 +28,11 @@
 namespace HeuristicLab.Problems.TestFunctions {
   /// <summary>
-  /// Zakharov Function<br/>
-  /// Domain:  [-5.0 , 10.0]^n<br/>
-  /// Optimum: 0.0 at (0.0, 0.0, ..., 0.0)
+  /// The Zakharov function is implemented as described in Hedar, A. & Fukushima, M. 2004. Heuristic pattern search and its hybridization with simulated annealing for nonlinear global optimization. Optimization Methods and Software 19, pp. 291-308, Taylor & Francis.
   /// </summary>
-  [Item("ZakharovEvaluator", "Evaluates the Zakharov function on a given point. The optimum of this function is 0 at the origin.")]
+  [Item("ZakharovEvaluator", "Evaluates the Zakharov function on a given point. The optimum of this function is 0 at the origin. It is implemented as described in Hedar, A. & Fukushima, M. 2004. Heuristic pattern search and its hybridization with simulated annealing for nonlinear global optimization. Optimization Methods and Software 19, pp. 291-308, Taylor & Francis.")]
   [StorableClass]
   public class ZakharovEvaluator : SingleObjectiveTestFunctionProblemEvaluator {
     /// <summary>
-    /// Returns false as the Ackley function is a minimization problem.
+    /// Returns false as the Zakharov function is a minimization problem.
     /// </summary>
     public override bool Maximization {
@@ -77,8 +75,8 @@
 
       for (int i = 0; i < length; i++) {
-        s1 = s1 + point[i] * point[i];
-        s2 = s2 + 0.5 * i * point[i];
+        s1 += point[i] * point[i];
+        s2 += 0.5 * i * point[i];
       }
-      return s1 + s2 * s2 + s2 * s2 * s2 * s2;
+      return s1 + (s2 * s2) + (s2 * s2 * s2 * s2);
     }
 
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Interfaces/IRastriginMoveEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Interfaces/IRastriginMoveEvaluator.cs	(revision 3318)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Interfaces/IRastriginMoveEvaluator.cs	(revision 3318)
@@ -0,0 +1,29 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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 HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Problems.TestFunctions {
+  public interface IRastriginMoveEvaluator : ISingleObjectiveTestFunctionAdditiveMoveEvaluator {
+    public DoubleValue A { get; set; }
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Interfaces/ISphereMoveEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Interfaces/ISphereMoveEvaluator.cs	(revision 3318)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Interfaces/ISphereMoveEvaluator.cs	(revision 3318)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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 HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Problems.TestFunctions {
+  public interface ISphereMoveEvaluator : ISingleObjectiveTestFunctionAdditiveMoveEvaluator {
+    public DoubleValue C { get; set; }
+    public DoubleValue Alpha { get; set; }
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/RastriginAdditiveMoveEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/RastriginAdditiveMoveEvaluator.cs	(revision 3315)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/RastriginAdditiveMoveEvaluator.cs	(revision 3318)
@@ -21,17 +21,33 @@
 
 using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.RealVectorEncoding;
+using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Encodings.RealVectorEncoding;
 
 namespace HeuristicLab.Problems.TestFunctions {
   [Item("RastriginAdditiveMoveEvaluator", "Class for evaluating an additive move on the Rastrigin function.")]
   [StorableClass]
-  public class RastriginAdditiveMoveEvaluator : AdditiveMoveEvaluator {
+  public class RastriginAdditiveMoveEvaluator : AdditiveMoveEvaluator, IRastriginMoveEvaluator {
     public override System.Type EvaluatorType {
       get { return typeof(RastriginEvaluator); }
     }
+    /// <summary>
+    /// The parameter A is a parameter of the objective function y = Sum((x_i)^2 + A * (1 - Cos(2pi*x_i))). Default is A = 10.
+    /// </summary>
+    public ValueParameter<DoubleValue> AParameter {
+      get { return (ValueParameter<DoubleValue>)Parameters["A"]; }
+    }
+    /// <summary>
+    /// The parameter A is a parameter of the objective function y = Sum((x_i)^2 + A * (1 - Cos(2pi*x_i))). Default is A = 10.
+    /// </summary>
+    public DoubleValue A {
+      get { return AParameter.Value; }
+      set { if (value != null) AParameter.Value = value; }
+    }
+
     protected override double Evaluate(double quality, RealVector point, AdditiveMove move) {
       RealVectorAdditiveMoveWrapper wrapper = new RealVectorAdditiveMoveWrapper(move, point);
-      return RastriginEvaluator.Apply(wrapper, 10); // FIXME: the parameters have to be wired
+      return RastriginEvaluator.Apply(wrapper, A.Value);
     }
   }
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/SphereAdditiveMoveEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/SphereAdditiveMoveEvaluator.cs	(revision 3315)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/SphereAdditiveMoveEvaluator.cs	(revision 3318)
@@ -21,11 +21,40 @@
 
 using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.RealVectorEncoding;
+using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Encodings.RealVectorEncoding;
 
 namespace HeuristicLab.Problems.TestFunctions {
   [Item("SphereAdditiveMoveEvaluator", "Class for evaluating an additive move on the Sphere function.")]
   [StorableClass]
-  public class SphereAdditiveMoveEvaluator : AdditiveMoveEvaluator {
+  public class SphereAdditiveMoveEvaluator : AdditiveMoveEvaluator, ISphereMoveEvaluator {
+    /// <summary>
+    /// The parameter C modifies the steepness of the objective function y = C * ||X||^Alpha. Default is C = 1.
+    /// </summary>
+    public ValueParameter<DoubleValue> CParameter {
+      get { return (ValueParameter<DoubleValue>)Parameters["C"]; }
+    }
+    /// <summary>
+    /// The parameter Alpha modifies the steepness of the objective function y = C * ||X||^Alpha. Default is Alpha = 2.
+    /// </summary>
+    public ValueParameter<DoubleValue> AlphaParameter {
+      get { return (ValueParameter<DoubleValue>)Parameters["Alpha"]; }
+    }
+    /// <summary>
+    /// The parameter C modifies the steepness of the objective function y = C * ||X||^Alpha. Default is C = 1.
+    /// </summary>
+    public DoubleValue C {
+      get { return CParameter.Value; }
+      set { if (value != null) CParameter.Value = value; }
+    }
+    /// <summary>
+    /// The parameter Alpha modifies the steepness of the objective function y = C * ||X||^Alpha. Default is Alpha = 2.
+    /// </summary>
+    public DoubleValue Alpha {
+      get { return AlphaParameter.Value; }
+      set { if (value != null) AlphaParameter.Value = value; }
+    }
+
     public override System.Type EvaluatorType {
       get { return typeof(SphereEvaluator); }
@@ -33,5 +62,5 @@
     protected override double Evaluate(double quality, RealVector point, AdditiveMove move) {
       RealVectorAdditiveMoveWrapper wrapper = new RealVectorAdditiveMoveWrapper(move, point);
-      return SphereEvaluator.Apply(wrapper, 1, 2); // FIXME: the parameters have to be wired.
+      return SphereEvaluator.Apply(wrapper, C.Value, Alpha.Value);
     }
   }
Index: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/SingleObjectiveTestFunctionProblem.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/SingleObjectiveTestFunctionProblem.cs	(revision 3315)
+++ trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/SingleObjectiveTestFunctionProblem.cs	(revision 3318)
@@ -233,4 +233,21 @@
       }
     }
+    private void SphereEvaluator_Parameter_ValueChanged(object sender, EventArgs e) {
+      SphereEvaluator eval = (Evaluator as SphereEvaluator);
+      if (eval != null) {
+        foreach (ISphereMoveEvaluator op in Operators.OfType<ISphereMoveEvaluator>()) {
+          op.C = eval.C;
+          op.Alpha = eval.Alpha;
+        }
+      }
+    }
+    private void RastriginEvaluator_Parameter_ValueChanged(object sender, EventArgs e) {
+      RastriginEvaluator eval = (Evaluator as RastriginEvaluator);
+      if (eval != null) {
+        foreach (IRastriginMoveEvaluator op in Operators.OfType<IRastriginMoveEvaluator>()) {
+          op.A = eval.A;
+        }
+      }
+    }
     #endregion
 
@@ -270,4 +287,19 @@
         if (op.EvaluatorType == Evaluator.GetType()) {
           operators.Add(op);
+          #region Synchronize evaluator specific parameters with the parameters of the corresponding move evaluators
+          if (op is ISphereMoveEvaluator) {
+            SphereEvaluator e = (Evaluator as SphereEvaluator);
+            e.AlphaParameter.ValueChanged += new EventHandler(SphereEvaluator_Parameter_ValueChanged);
+            e.CParameter.ValueChanged += new EventHandler(SphereEvaluator_Parameter_ValueChanged);
+            ISphereMoveEvaluator em = (op as ISphereMoveEvaluator);
+            em.C = e.C;
+            em.Alpha = e.Alpha;
+          } else if (op is IRastriginMoveEvaluator) {
+            RastriginEvaluator e = (Evaluator as RastriginEvaluator);
+            e.AParameter.ValueChanged += new EventHandler(RastriginEvaluator_Parameter_ValueChanged);
+            IRastriginMoveEvaluator em = (op as IRastriginMoveEvaluator);
+            em.A = e.A;
+          }
+          #endregion
         }
       ParameterizeOperators();
