Index: /branches/2989_MovingPeaksBenchmark/HeuristicLab.Problems.MovingPeaksBenchmark/3.3/HeuristicLab.Problems.MovingPeaksBenchmark-3.3.csproj
===================================================================
--- /branches/2989_MovingPeaksBenchmark/HeuristicLab.Problems.MovingPeaksBenchmark/3.3/HeuristicLab.Problems.MovingPeaksBenchmark-3.3.csproj	(revision 16606)
+++ /branches/2989_MovingPeaksBenchmark/HeuristicLab.Problems.MovingPeaksBenchmark/3.3/HeuristicLab.Problems.MovingPeaksBenchmark-3.3.csproj	(revision 16607)
@@ -52,4 +52,5 @@
     <Compile Include="Plugin.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="MovingPeaksBenchmarkProblemEvaluator.cs" />
   </ItemGroup>
   <ItemGroup>
Index: /branches/2989_MovingPeaksBenchmark/HeuristicLab.Problems.MovingPeaksBenchmark/3.3/Interfaces/IMovingPeaksBenchmarkProblemEvaluator.cs
===================================================================
--- /branches/2989_MovingPeaksBenchmark/HeuristicLab.Problems.MovingPeaksBenchmark/3.3/Interfaces/IMovingPeaksBenchmarkProblemEvaluator.cs	(revision 16606)
+++ /branches/2989_MovingPeaksBenchmark/HeuristicLab.Problems.MovingPeaksBenchmark/3.3/Interfaces/IMovingPeaksBenchmarkProblemEvaluator.cs	(revision 16607)
@@ -30,16 +30,8 @@
   /// </summary>
   public interface IMovingPeaksBenchmarkProblemEvaluator : ISingleObjectiveEvaluator {
-    bool Maximization { get; }
-    DoubleMatrix Bounds { get; }
-    double BestKnownQuality { get; }
-    int MinimumProblemSize { get; }
-    int MaximumProblemSize { get; }
-    string FunctionName { get; }
-
+    ILookupParameter<DoubleMatrix> PeakLocationsParameter { get; }
+    ILookupParameter<DoubleArray> PeakWidthsParameter { get; }
+    ILookupParameter<DoubleArray> PeakHeightsParameter { get; }
     ILookupParameter<RealVector> PointParameter { get; }
-
-    double Evaluate2D(double x, double y);
-    double Evaluate(RealVector point);
-    RealVector GetBestKnownSolution(int dimension);
   }
 }
Index: /branches/2989_MovingPeaksBenchmark/HeuristicLab.Problems.MovingPeaksBenchmark/3.3/MovingPeaksBenchmarkProblem.cs
===================================================================
--- /branches/2989_MovingPeaksBenchmark/HeuristicLab.Problems.MovingPeaksBenchmark/3.3/MovingPeaksBenchmarkProblem.cs	(revision 16606)
+++ /branches/2989_MovingPeaksBenchmark/HeuristicLab.Problems.MovingPeaksBenchmark/3.3/MovingPeaksBenchmarkProblem.cs	(revision 16607)
@@ -42,10 +42,10 @@
     public string Filename { get; set; }
 
-    [Storable]
-    private StdDevStrategyVectorCreator strategyVectorCreator;
-    [Storable]
-    private StdDevStrategyVectorCrossover strategyVectorCrossover;
-    [Storable]
-    private StdDevStrategyVectorManipulator strategyVectorManipulator;
+    //[Storable]
+    //private StdDevStrategyVectorCreator strategyVectorCreator;
+    //[Storable]
+    //private StdDevStrategyVectorCrossover strategyVectorCrossover;
+    //[Storable]
+    //private StdDevStrategyVectorManipulator strategyVectorManipulator;
 
     #region Parameter Properties
@@ -55,4 +55,16 @@
     public ValueParameter<IntValue> ProblemSizeParameter {
       get { return (ValueParameter<IntValue>)Parameters["ProblemSize"]; }
+    }
+    public ValueParameter<IntValue> PeaksParameter {
+      get { return (ValueParameter<IntValue>)Parameters["Peaks"]; }
+    }
+    public ValueParameter<DoubleMatrix> PeakLocationsParameter {
+      get { return (ValueParameter<DoubleMatrix>)Parameters["PeakLocations"]; }
+    }
+    public ValueParameter<DoubleArray> PeakWidthsParameter {
+      get { return (ValueParameter<DoubleArray>)Parameters["PeakWidths"]; }
+    }
+    public ValueParameter<DoubleArray> PeakHeightsParameter {
+      get { return (ValueParameter<DoubleArray>)Parameters["PeakHeights"]; }
     }
     public OptionalValueParameter<RealVector> BestKnownSolutionParameter {
@@ -70,7 +82,23 @@
       set { ProblemSizeParameter.Value = value; }
     }
-//    private BestSingleObjectiveTestFunctionSolutionAnalyzer BestSingleObjectiveTestFunctionSolutionAnalyzer {
-//      get { return Operators.OfType<BestSingleObjectiveTestFunctionSolutionAnalyzer>().FirstOrDefault(); }
-//    }
+    public IntValue Peaks {
+      get { return PeaksParameter.Value; }
+      set { PeaksParameter.Value = value; }
+    }
+    public DoubleMatrix PeakLocations {
+      get { return PeakLocationsParameter.Value; }
+      set { PeakLocationsParameter.Value = value; }
+    }
+    public DoubleArray PeakWidths {
+      get { return PeakWidthsParameter.Value; }
+      set { PeakWidthsParameter.Value = value; }
+    }
+    public DoubleArray PeakHeights {
+      get { return PeakHeightsParameter.Value; }
+      set { PeakHeightsParameter.Value = value; }
+    }
+    //    private BestSingleObjectiveTestFunctionSolutionAnalyzer BestSingleObjectiveTestFunctionSolutionAnalyzer {
+    //      get { return Operators.OfType<BestSingleObjectiveTestFunctionSolutionAnalyzer>().FirstOrDefault(); }
+    //    }
     #endregion
 
@@ -79,25 +107,29 @@
     private MovingPeaksBenchmarkProblem(MovingPeaksBenchmarkProblem original, Cloner cloner)
       : base(original, cloner) {
-      strategyVectorCreator = cloner.Clone(original.strategyVectorCreator);
-      strategyVectorCrossover = cloner.Clone(original.strategyVectorCrossover);
-      strategyVectorManipulator = cloner.Clone(original.strategyVectorManipulator);
+      //strategyVectorCreator = cloner.Clone(original.strategyVectorCreator);
+      //strategyVectorCrossover = cloner.Clone(original.strategyVectorCrossover);
+      //strategyVectorManipulator = cloner.Clone(original.strategyVectorManipulator);
       RegisterEventHandlers();
     }
     public MovingPeaksBenchmarkProblem()
-//      : base(new AckleyEvaluator(), new UniformRandomRealVectorCreator()) {
-      : base(null, new UniformRandomRealVectorCreator()) {
-      Parameters.Add(new ValueParameter<DoubleMatrix>("Bounds", "The lower and upper bounds in each dimension.", Evaluator.Bounds));
-      Parameters.Add(new ValueParameter<IntValue>("ProblemSize", "The dimension of the problem.", new IntValue(2)));
+      : base(new MovingPeaksBenchmarkProblemEvaluator(), new UniformRandomRealVectorCreator()) {
+      Parameters.Add(new ValueParameter<DoubleMatrix>("Bounds", "The lower and upper bounds in each dimension.", null));
+      Parameters.Add(new ValueParameter<IntValue>("ProblemSize", "The dimension of the problem.", new IntValue(5)));
+      Parameters.Add(new ValueParameter<IntValue>("Peaks", "The number of peaks.", new IntValue(5)));
+      Parameters.Add(new ValueParameter<DoubleMatrix>("PeakLocations", "", null ));
+      Parameters.Add(new ValueParameter<DoubleArray>("PeakWidths", "", new DoubleArray(new double[] { 0, 0, 0, 0, 0 })));
+      Parameters.Add(new ValueParameter<DoubleArray>("PeakHeights", "", new DoubleArray(new double[] { 0, 0, 0, 0, 0 })));
+
       Parameters.Add(new OptionalValueParameter<RealVector>("BestKnownSolution", "The best known solution for this test function instance."));
 
-      Maximization.Value = Evaluator.Maximization;
-      BestKnownQuality = new DoubleValue(Evaluator.BestKnownQuality);
-
-      strategyVectorCreator = new StdDevStrategyVectorCreator();
-      strategyVectorCreator.LengthParameter.ActualName = ProblemSizeParameter.Name;
-      strategyVectorCrossover = new StdDevStrategyVectorCrossover();
-      strategyVectorManipulator = new StdDevStrategyVectorManipulator();
-      strategyVectorManipulator.LearningRateParameter.Value = new DoubleValue(0.5);
-      strategyVectorManipulator.GeneralLearningRateParameter.Value = new DoubleValue(0.5);
+      Maximization.Value = true;
+      //BestKnownQuality = new DoubleValue(Evaluator.BestKnownQuality);
+
+      //strategyVectorCreator = new StdDevStrategyVectorCreator();
+      //strategyVectorCreator.LengthParameter.ActualName = ProblemSizeParameter.Name;
+      //strategyVectorCrossover = new StdDevStrategyVectorCrossover();
+      //strategyVectorManipulator = new StdDevStrategyVectorManipulator();
+      //strategyVectorManipulator.LearningRateParameter.Value = new DoubleValue(0.5);
+      //strategyVectorManipulator.GeneralLearningRateParameter.Value = new DoubleValue(0.5);
 
       SolutionCreator.RealVectorParameter.ActualName = "Point";
Index: /branches/2989_MovingPeaksBenchmark/HeuristicLab.Problems.MovingPeaksBenchmark/3.3/MovingPeaksBenchmarkProblemEvaluator.cs
===================================================================
--- /branches/2989_MovingPeaksBenchmark/HeuristicLab.Problems.MovingPeaksBenchmark/3.3/MovingPeaksBenchmarkProblemEvaluator.cs	(revision 16607)
+++ /branches/2989_MovingPeaksBenchmark/HeuristicLab.Problems.MovingPeaksBenchmark/3.3/MovingPeaksBenchmarkProblemEvaluator.cs	(revision 16607)
@@ -0,0 +1,79 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2019 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.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.RealVectorEncoding;
+using HeuristicLab.Operators;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.MovingPeaksBenchmark {
+  [Item("MovingPeaksBenchmarkProblemEvaluator", "Evaluation operator for the Moving Peaks Benchmark.")]
+  [StorableClass]
+  public class MovingPeaksBenchmarkProblemEvaluator : InstrumentedOperator, IMovingPeaksBenchmarkProblemEvaluator {
+    public ILookupParameter<DoubleMatrix> PeakLocationsParameter {
+      get { return (ILookupParameter<DoubleMatrix>)Parameters["PeakLocations"]; }
+    }
+    public ILookupParameter<DoubleArray> PeakWidthsParameter {
+      get { return (ILookupParameter<DoubleArray>)Parameters["PeakWidths"]; }
+    }
+    public ILookupParameter<DoubleArray> PeakHeightsParameter {
+      get { return (ILookupParameter<DoubleArray>)Parameters["PeakHeights"]; }
+    }
+    public ILookupParameter<RealVector> PointParameter {
+      get { return (ILookupParameter<RealVector>)Parameters["Point"]; }
+    }
+    public ILookupParameter<DoubleValue> QualityParameter {
+      get { return (ILookupParameter<DoubleValue>)Parameters["Quality"]; }
+    }
+
+    [StorableConstructor]
+    protected MovingPeaksBenchmarkProblemEvaluator(bool deserializing) : base(deserializing) { }
+    protected MovingPeaksBenchmarkProblemEvaluator(MovingPeaksBenchmarkProblemEvaluator original, Cloner cloner) : base(original, cloner) { }
+    public MovingPeaksBenchmarkProblemEvaluator() : base() {
+      Parameters.Add(new LookupParameter<DoubleMatrix>("PeakLocations", "Current position of the peaks."));
+      Parameters.Add(new LookupParameter<DoubleArray>("PeakWidths", "Current width of the peaks."));
+      Parameters.Add(new LookupParameter<DoubleArray>("PeakHeights", "Current height of the peaks."));
+      Parameters.Add(new LookupParameter<RealVector>("Point", "The point which should be evaluated."));
+      Parameters.Add(new LookupParameter<DoubleValue>("Quality", "Quality value of the evaluated point."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new MovingPeaksBenchmarkProblemEvaluator(this, cloner);
+    }
+
+    public override IOperation InstrumentedApply() {
+      DoubleMatrix peaks = PeakLocationsParameter.ActualValue;
+      DoubleArray widths = PeakWidthsParameter.ActualValue;
+      DoubleArray heights = PeakHeightsParameter.ActualValue;
+      RealVector point = PointParameter.ActualValue;
+      double quality = Apply(peaks, widths, heights, point);
+      QualityParameter.ActualValue = new DoubleValue(quality);
+      return base.InstrumentedApply();
+    }
+
+    public double Apply(DoubleMatrix peaks, DoubleArray widths, DoubleArray heights, RealVector point) {
+      return 0;
+    }
+  }
+}
Index: /branches/2989_MovingPeaksBenchmark/HeuristicLab.Problems.MovingPeaksBenchmark/3.3/Plugin.cs.frame
===================================================================
--- /branches/2989_MovingPeaksBenchmark/HeuristicLab.Problems.MovingPeaksBenchmark/3.3/Plugin.cs.frame	(revision 16606)
+++ /branches/2989_MovingPeaksBenchmark/HeuristicLab.Problems.MovingPeaksBenchmark/3.3/Plugin.cs.frame	(revision 16607)
@@ -29,15 +29,15 @@
   [Plugin("HeuristicLab.Problems.MovingPeaksBenchmark", "3.3.15.$WCREV$")]
 //  [PluginDependency("HeuristicLab.Analysis", "3.3")]
-//  [PluginDependency("HeuristicLab.Collections", "3.3")]
-//  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Collections", "3.3")]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
 //  [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
   [PluginDependency("HeuristicLab.Core", "3.3")]
-//  [PluginDependency("HeuristicLab.Data", "3.3")]
-//  [PluginDependency("HeuristicLab.Encodings.RealVectorEncoding", "3.3")]
-//  [PluginDependency("HeuristicLab.Operators", "3.3")]
-//  [PluginDependency("HeuristicLab.Optimization", "3.3")]
+  [PluginDependency("HeuristicLab.Data", "3.3")]
+  [PluginDependency("HeuristicLab.Encodings.RealVectorEncoding", "3.3")]
+  [PluginDependency("HeuristicLab.Operators", "3.3")]
+  [PluginDependency("HeuristicLab.Optimization", "3.3")]
 //  [PluginDependency("HeuristicLab.Optimization.Operators", "3.3")]
 //  [PluginDependency("HeuristicLab.Problems.Instances", "3.3")]
-//  [PluginDependency("HeuristicLab.Parameters", "3.3")]
+  [PluginDependency("HeuristicLab.Parameters", "3.3")]
   [PluginDependency("HeuristicLab.Persistence", "3.3")]
   public class HeuristicLabProblemsMovingPeaksBenchmarkPlugin : PluginBase {
