Index: /branches/CMAES/HeuristicLab.Encodings.RealVectorEncoding/3.3/CMAESOperators/CMAAnalyzer.cs
===================================================================
--- /branches/CMAES/HeuristicLab.Encodings.RealVectorEncoding/3.3/CMAESOperators/CMAAnalyzer.cs	(revision 9122)
+++ /branches/CMAES/HeuristicLab.Encodings.RealVectorEncoding/3.3/CMAESOperators/CMAAnalyzer.cs	(revision 9122)
@@ -0,0 +1,119 @@
+﻿#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 HeuristicLab.Analysis;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Operators;
+using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Encodings.RealVectorEncoding {
+  [Item("CMAAnalyzer", "Analyzes the development of strategy parameters and visualizes the performance of CMA-ES.")]
+  [StorableClass]
+  public sealed class CMAAnalyzer : SingleSuccessorOperator, IRealVectorOperator, IAnalyzer {
+
+    public bool EnabledByDefault {
+      get { return false; }
+    }
+
+    #region Parameter Properties
+    public ILookupParameter<CMAParameters> StrategyParametersParameter {
+      get { return (ILookupParameter<CMAParameters>)Parameters["StrategyParameters"]; }
+    }
+
+    public IScopeTreeLookupParameter<RealVector> RealVectorParameter {
+      get { return (IScopeTreeLookupParameter<RealVector>)Parameters["RealVector"]; }
+    }
+
+    public ILookupParameter<ResultCollection> ResultsParameter {
+      get { return (ILookupParameter<ResultCollection>)Parameters["Results"]; }
+    }
+    #endregion
+
+    [StorableConstructor]
+    private CMAAnalyzer(bool deserializing) : base(deserializing) { }
+    private CMAAnalyzer(CMAAnalyzer original, Cloner cloner) : base(original, cloner) { }
+    public CMAAnalyzer()
+      : base() {
+      Parameters.Add(new LookupParameter<CMAParameters>("StrategyParameters", "The CMA strategy parameters to be analyzed."));
+      Parameters.Add(new ScopeTreeLookupParameter<RealVector>("RealVector", "The real vector that is being optimized."));
+      Parameters.Add(new LookupParameter<ResultCollection>("Results", "The collection to store the results in."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new CMAAnalyzer(this, cloner);
+    }
+
+    public override IOperation Apply() {
+      var sp = StrategyParametersParameter.ActualValue;
+      var vector = RealVectorParameter.ActualValue[0];
+      var results = ResultsParameter.ActualValue;
+
+      DataTable axisRatio;
+      if (results.ContainsKey("AxisRatio")) {
+        axisRatio = (DataTable)results["AxisRatio"].Value;
+      } else {
+        axisRatio = new DataTable("AxisRatio");
+        axisRatio.Rows.Add(new DataRow("AxisRatio"));
+        results.Add(new Result("AxisRatio", axisRatio));
+      }
+      axisRatio.Rows["AxisRatio"].Values.Add(sp.AxisRatio.Value);
+
+      DataTable sigma;
+      if (results.ContainsKey("Sigma")) {
+        sigma = (DataTable)results["Sigma"].Value;
+      } else {
+        sigma = new DataTable("Sigma");
+        sigma.Rows.Add(new DataRow("Sigma"));
+        results.Add(new Result("Sigma", sigma));
+      }
+      sigma.Rows["Sigma"].Values.Add(sp.Sigma.Value);
+
+      DataTable scaling;
+      if (results.ContainsKey("Scaling")) {
+        scaling = (DataTable)results["Scaling"].Value;
+      } else {
+        scaling = new DataTable("Scaling");
+        for (int i = 0; i < sp.C.Rows; i++)
+          scaling.Rows.Add(new DataRow("Axis" + i.ToString()));
+        results.Add(new Result("Scaling", scaling));
+      }
+      for (int i = 0; i < sp.C.Rows; i++)
+        scaling.Rows["Axis" + i.ToString()].Values.Add(sp.D[i]);
+
+      DataTable realVector;
+      if (results.ContainsKey("RealVector")) {
+        realVector = (DataTable)results["RealVector"].Value;
+      } else {
+        realVector = new DataTable("RealVector");
+        for (int i = 0; i < vector.Length; i++)
+          realVector.Rows.Add(new DataRow("Axis" + i.ToString()));
+        results.Add(new Result("RealVector", realVector));
+      }
+      for (int i = 0; i < vector.Length; i++)
+        realVector.Rows["Axis" + i.ToString()].Values.Add(vector[i]);
+
+      return base.Apply();
+    }
+  }
+}
Index: /branches/CMAES/HeuristicLab.Encodings.RealVectorEncoding/3.3/CMAESOperators/CMAMutator.cs
===================================================================
--- /branches/CMAES/HeuristicLab.Encodings.RealVectorEncoding/3.3/CMAESOperators/CMAMutator.cs	(revision 9121)
+++ /branches/CMAES/HeuristicLab.Encodings.RealVectorEncoding/3.3/CMAESOperators/CMAMutator.cs	(revision 9122)
@@ -31,5 +31,5 @@
 
 namespace HeuristicLab.Encodings.RealVectorEncoding {
-  [Item("CovarianceMatrixMutator", "Mutates the solution vector according to the CMA-ES scheme.")]
+  [Item("CMAMutator", "Mutates the solution vector according to the CMA-ES scheme.")]
   [StorableClass]
   public sealed class CMAMutator : SingleSuccessorOperator, IStochasticOperator, IRealVectorOperator, ICMAESManipulator, IIterationBasedOperator {
Index: /branches/CMAES/HeuristicLab.Encodings.RealVectorEncoding/3.3/CMAESOperators/CMAParameters.cs
===================================================================
--- /branches/CMAES/HeuristicLab.Encodings.RealVectorEncoding/3.3/CMAESOperators/CMAParameters.cs	(revision 9121)
+++ /branches/CMAES/HeuristicLab.Encodings.RealVectorEncoding/3.3/CMAESOperators/CMAParameters.cs	(revision 9122)
@@ -29,5 +29,5 @@
 
 namespace HeuristicLab.Encodings.RealVectorEncoding {
-  [Item("CMAES Strategy Parameters", "CMA-ES controls many strategy parameters that guide the search and which are combined in this class.")]
+  [Item("CMAParameters", "CMA-ES controls many strategy parameters that guide the search and which are combined in this class.")]
   [StorableClass]
   public sealed class CMAParameters : Item, INotifyPropertyChanged {
Index: /branches/CMAES/HeuristicLab.Encodings.RealVectorEncoding/3.3/HeuristicLab.Encodings.RealVectorEncoding-3.3.csproj
===================================================================
--- /branches/CMAES/HeuristicLab.Encodings.RealVectorEncoding/3.3/HeuristicLab.Encodings.RealVectorEncoding-3.3.csproj	(revision 9121)
+++ /branches/CMAES/HeuristicLab.Encodings.RealVectorEncoding/3.3/HeuristicLab.Encodings.RealVectorEncoding-3.3.csproj	(revision 9122)
@@ -104,4 +104,9 @@
       <Private>False</Private>
     </Reference>
+    <Reference Include="HeuristicLab.Analysis-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Analysis-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
     <Reference Include="HeuristicLab.Collections-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
       <SpecificVersion>False</SpecificVersion>
@@ -112,4 +117,9 @@
       <SpecificVersion>False</SpecificVersion>
       <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Common-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Common.Resources-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Common.Resources-3.3.dll</HintPath>
       <Private>False</Private>
     </Reference>
@@ -163,4 +173,5 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="CMAESOperators\CMAAnalyzer.cs" />
     <Compile Include="CMAESOperators\CMARecombinator.cs" />
     <Compile Include="CMAESOperators\CMAParameters.cs" />
Index: /branches/CMAES/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/RandomEvaluator.cs
===================================================================
--- /branches/CMAES/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/RandomEvaluator.cs	(revision 9122)
+++ /branches/CMAES/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/RandomEvaluator.cs	(revision 9122)
@@ -0,0 +1,92 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.Optimization;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.TestFunctions {
+  /// <summary>
+  /// A function that returns a random variable in [0;1) independent of the inputs.
+  /// </summary
+  [Item("RandomEvaluator", "Returns a random value in [0;1) that is independent of the inputs.")]
+  [StorableClass]
+  public class RandomEvaluator : SingleObjectiveTestFunctionProblemEvaluator, IStochasticOperator {
+    /// <summary>
+    /// It does not really matter.
+    /// </summary>
+    public override bool Maximization {
+      get { return false; }
+    }
+    /// <summary>
+    /// The minimum value that can be "found" is 0.
+    /// </summary>
+    public override double BestKnownQuality {
+      get { return 0; }
+    }
+    /// <summary>
+    /// Gets the lower and upper bound of the function.
+    /// </summary>
+    public override DoubleMatrix Bounds {
+      get { return new DoubleMatrix(new double[,] { { -100, 100 } }); }
+    }
+    /// <summary>
+    /// Gets the minimum problem size (1).
+    /// </summary>
+    public override int MinimumProblemSize {
+      get { return 1; }
+    }
+    /// <summary>
+    /// Gets the (theoretical) maximum problem size (2^31 - 1).
+    /// </summary>
+    public override int MaximumProblemSize {
+      get { return int.MaxValue; }
+    }
+
+    public ILookupParameter<IRandom> RandomParameter {
+      get { return (ILookupParameter<IRandom>)Parameters["Random"]; }
+    }
+
+    [StorableConstructor]
+    protected RandomEvaluator(bool deserializing) : base(deserializing) { }
+    protected RandomEvaluator(RandomEvaluator original, Cloner cloner) : base(original, cloner) { }
+    public RandomEvaluator()
+      : base() {
+      Parameters.Add(new LookupParameter<IRandom>("Random", "The random number generator to use."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new RandomEvaluator(this, cloner);
+    }
+
+    public override RealVector GetBestKnownSolution(int dimension) {
+      return new RealVector(dimension);
+    }
+
+    protected override double EvaluateFunction(RealVector point) {
+      return RandomParameter.ActualValue.NextDouble();
+    }
+  }
+}
Index: /branches/CMAES/HeuristicLab.Problems.TestFunctions/3.3/HeuristicLab.Problems.TestFunctions-3.3.csproj
===================================================================
--- /branches/CMAES/HeuristicLab.Problems.TestFunctions/3.3/HeuristicLab.Problems.TestFunctions-3.3.csproj	(revision 9121)
+++ /branches/CMAES/HeuristicLab.Problems.TestFunctions/3.3/HeuristicLab.Problems.TestFunctions-3.3.csproj	(revision 9122)
@@ -152,5 +152,7 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="Evaluators\RandomEvaluator.cs" />
     <Compile Include="Improvers\SingleObjectiveTestFunctionImprovementOperator.cs" />
+    <Compile Include="MoveEvaluators\RandomAdditiveMoveEvaluator.cs" />
     <Compile Include="PathRelinkers\SingleObjectiveTestFunctionPathRelinker.cs" />
     <Compile Include="Plugin.cs" />
Index: /branches/CMAES/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/RandomAdditiveMoveEvaluator.cs
===================================================================
--- /branches/CMAES/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/RandomAdditiveMoveEvaluator.cs	(revision 9122)
+++ /branches/CMAES/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/RandomAdditiveMoveEvaluator.cs	(revision 9122)
@@ -0,0 +1,56 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.Encodings.RealVectorEncoding;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.TestFunctions {
+  [Item("RandomAdditiveMoveEvaluator", "Class for evaluating an additive move on the Random function.")]
+  [StorableClass]
+  public class RandomAdditiveMoveEvaluator : AdditiveMoveEvaluator {
+    public override System.Type EvaluatorType {
+      get { return typeof(RandomEvaluator); }
+    }
+
+    public ILookupParameter<IRandom> RandomParameter {
+      get { return (ILookupParameter<IRandom>)Parameters["Random"]; }
+    }
+
+    [StorableConstructor]
+    protected RandomAdditiveMoveEvaluator(bool deserializing) : base(deserializing) { }
+    protected RandomAdditiveMoveEvaluator(RandomAdditiveMoveEvaluator original, Cloner cloner) : base(original, cloner) { }
+    public RandomAdditiveMoveEvaluator()
+      : base() {
+      Parameters.Add(new LookupParameter<IRandom>("Random", "The random number generator to use."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new RandomAdditiveMoveEvaluator(this, cloner);
+    }
+
+    protected override double Evaluate(double quality, RealVector point, AdditiveMove move) {
+      return RandomParameter.ActualValue.NextDouble();
+    }
+  }
+}
Index: /branches/CMAES/HeuristicLab.Problems.TestFunctions/3.3/SingleObjectiveTestFunctionProblem.cs
===================================================================
--- /branches/CMAES/HeuristicLab.Problems.TestFunctions/3.3/SingleObjectiveTestFunctionProblem.cs	(revision 9121)
+++ /branches/CMAES/HeuristicLab.Problems.TestFunctions/3.3/SingleObjectiveTestFunctionProblem.cs	(revision 9122)
@@ -416,4 +416,7 @@
         op.OffspringParameter.ActualName = SolutionCreator.RealVectorParameter.ActualName;
       }
+      foreach (var op in Operators.OfType<CMAAnalyzer>()) {
+        op.RealVectorParameter.ActualName = SolutionCreator.RealVectorParameter.ActualName;
+      }
     }
     private void UpdateStrategyVectorBounds() {
