Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.MetaOptimization.Test/HeuristicLab.MetaOptimization.Test.csproj
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.MetaOptimization.Test/HeuristicLab.MetaOptimization.Test.csproj	(revision 5926)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.MetaOptimization.Test/HeuristicLab.MetaOptimization.Test.csproj	(revision 5927)
@@ -53,9 +53,9 @@
       <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.ALGLIB-3.1.0.dll</HintPath>
     </Reference>
-    <Reference Include="HeuristicLab.Algorithms.DataAnalysis-3.3">
-      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Algorithms.DataAnalysis-3.3.dll</HintPath>
-    </Reference>
-    <Reference Include="HeuristicLab.Algorithms.DataAnalysis.Views-3.3">
-      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Algorithms.DataAnalysis.Views-3.3.dll</HintPath>
+    <Reference Include="HeuristicLab.Algorithms.DataAnalysis-3.4">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Algorithms.DataAnalysis-3.4.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Algorithms.DataAnalysis.Views-3.4">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Algorithms.DataAnalysis.Views-3.4.dll</HintPath>
     </Reference>
     <Reference Include="HeuristicLab.Algorithms.EvolutionStrategy-3.3">
@@ -68,7 +68,13 @@
       <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Algorithms.LocalSearch-3.3.dll</HintPath>
     </Reference>
+    <Reference Include="HeuristicLab.Algorithms.NSGA2-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Algorithms.NSGA2-3.3.dll</HintPath>
+    </Reference>
     <Reference Include="HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm-3.3">
       <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm-3.3.dll</HintPath>
     </Reference>
+    <Reference Include="HeuristicLab.Algorithms.ParticleSwarmOptimization-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Algorithms.ParticleSwarmOptimization-3.3.dll</HintPath>
+    </Reference>
     <Reference Include="HeuristicLab.Algorithms.SimulatedAnnealing-3.3">
       <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Algorithms.SimulatedAnnealing-3.3.dll</HintPath>
@@ -77,4 +83,7 @@
       <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Algorithms.TabuSearch-3.3.dll</HintPath>
     </Reference>
+    <Reference Include="HeuristicLab.Algorithms.VariableNeighborhoodSearch-3.3">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Algorithms.VariableNeighborhoodSearch-3.3.dll</HintPath>
+    </Reference>
     <Reference Include="HeuristicLab.Analysis-3.3">
       <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Analysis-3.3.dll</HintPath>
@@ -113,4 +122,7 @@
       <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.DataAccess-3.3.dll</HintPath>
     </Reference>
+    <Reference Include="HeuristicLab.DebugEngine-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.DebugEngine-3.3.dll</HintPath>
+    </Reference>
     <Reference Include="HeuristicLab.Encodings.BinaryVectorEncoding-3.3">
       <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Encodings.BinaryVectorEncoding-3.3.dll</HintPath>
@@ -128,9 +140,9 @@
       <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Encodings.RealVectorEncoding-3.3.dll</HintPath>
     </Reference>
-    <Reference Include="HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.3">
-      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.3.dll</HintPath>
-    </Reference>
-    <Reference Include="HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views-3.3">
-      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views-3.3.dll</HintPath>
+    <Reference Include="HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views-3.4">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views-3.4.dll</HintPath>
     </Reference>
     <Reference Include="HeuristicLab.Hive.Contracts-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
@@ -236,30 +248,39 @@
       <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
     </Reference>
-    <Reference Include="HeuristicLab.Problems.ArtificialAnt-3.3">
-      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Problems.ArtificialAnt-3.3.dll</HintPath>
-    </Reference>
-    <Reference Include="HeuristicLab.Problems.ArtificialAnt.Views-3.3">
-      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Problems.ArtificialAnt.Views-3.3.dll</HintPath>
-    </Reference>
-    <Reference Include="HeuristicLab.Problems.DataAnalysis-3.3">
-      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Problems.DataAnalysis-3.3.dll</HintPath>
-    </Reference>
-    <Reference Include="HeuristicLab.Problems.DataAnalysis.Classification-3.3">
-      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Problems.DataAnalysis.Classification-3.3.dll</HintPath>
-    </Reference>
-    <Reference Include="HeuristicLab.Problems.DataAnalysis.Classification.Views-3.3">
-      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Problems.DataAnalysis.Classification.Views-3.3.dll</HintPath>
-    </Reference>
-    <Reference Include="HeuristicLab.Problems.DataAnalysis.Regression-3.3">
-      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Problems.DataAnalysis.Regression-3.3.dll</HintPath>
-    </Reference>
-    <Reference Include="HeuristicLab.Problems.DataAnalysis.Views-3.3">
-      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Problems.DataAnalysis.Views-3.3.dll</HintPath>
+    <Reference Include="HeuristicLab.Problems.ArtificialAnt-3.4">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Problems.ArtificialAnt-3.4.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Problems.ArtificialAnt.Views-3.4">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Problems.ArtificialAnt.Views-3.4.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Problems.DataAnalysis-3.4">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Problems.DataAnalysis-3.4.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Problems.DataAnalysis.Symbolic-3.4">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Problems.DataAnalysis.Symbolic.Classification-3.4">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Problems.DataAnalysis.Symbolic.Classification-3.4.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views-3.4">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views-3.4.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views-3.4">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views-3.4.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Problems.DataAnalysis.Views-3.4">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Problems.DataAnalysis.Views-3.4.dll</HintPath>
     </Reference>
     <Reference Include="HeuristicLab.Problems.ExternalEvaluation-3.3">
       <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Problems.ExternalEvaluation-3.3.dll</HintPath>
     </Reference>
-    <Reference Include="HeuristicLab.Problems.ExternalEvaluation.GP-3.3">
-      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Problems.ExternalEvaluation.GP-3.3.dll</HintPath>
+    <Reference Include="HeuristicLab.Problems.ExternalEvaluation.GP-3.4">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Problems.ExternalEvaluation.GP-3.4.dll</HintPath>
     </Reference>
     <Reference Include="HeuristicLab.Problems.ExternalEvaluation.GP.Views-3.3">
@@ -274,10 +295,4 @@
     <Reference Include="HeuristicLab.Problems.Knapsack.Views-3.3">
       <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Problems.Knapsack.Views-3.3.dll</HintPath>
-    </Reference>
-    <Reference Include="HeuristicLab.Problems.MetaOptimization-3.3">
-      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Problems.MetaOptimization-3.3.dll</HintPath>
-    </Reference>
-    <Reference Include="HeuristicLab.Problems.MetaOptimization.Views-3.3">
-      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Problems.MetaOptimization.Views-3.3.dll</HintPath>
     </Reference>
     <Reference Include="HeuristicLab.Problems.OneMax-3.3">
@@ -372,4 +387,14 @@
     <None Include="app.config" />
   </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Problems.MetaOptimization.Views\3.3\HeuristicLab.Problems.MetaOptimization.Views-3.3.csproj">
+      <Project>{59567338-A551-4386-8405-A8C0DF3E376D}</Project>
+      <Name>HeuristicLab.Problems.MetaOptimization.Views-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Problems.MetaOptimization\3.3\HeuristicLab.Problems.MetaOptimization-3.3.csproj">
+      <Project>{ABBC1DF6-FCC6-4F86-AB75-B6B3A72E7D17}</Project>
+      <Name>HeuristicLab.Problems.MetaOptimization-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.MetaOptimization.Test/Program.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.MetaOptimization.Test/Program.cs	(revision 5926)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.MetaOptimization.Test/Program.cs	(revision 5927)
@@ -14,4 +14,5 @@
 using HeuristicLab.Core;
 using HeuristicLab.Data;
+using HeuristicLab.Encodings.RealVectorEncoding;
 using HeuristicLab.Hive.ExperimentManager;
 using HeuristicLab.Optimization;
@@ -19,4 +20,6 @@
 using HeuristicLab.PluginInfrastructure;
 using HeuristicLab.PluginInfrastructure.Manager;
+using HeuristicLab.Problems.DataAnalysis.Symbolic;
+using HeuristicLab.Problems.DataAnalysis.Symbolic.Regression;
 using HeuristicLab.Problems.MetaOptimization;
 using HeuristicLab.Problems.TestFunctions;
@@ -46,8 +49,8 @@
     //private static int baseAlgorithmMaxGenerations = 1000;
 
-    private static int metaAlgorithmPopulationSize = 5;
+    private static int metaAlgorithmPopulationSize = 10;
     private static int metaAlgorithmMaxGenerations = 15;
-    private static int metaProblemRepetitions = 2;
-    private static int baseAlgorithmMaxGenerations = 5;
+    private static int metaProblemRepetitions = 3;
+    private static int baseAlgorithmMaxGenerations = 10;
     private static double mutationProbability = 0.10;
 
@@ -74,5 +77,7 @@
       //TestNormalCrossover();
       //TestItemDictionary();
-      
+
+      //TestSymbolicDataAnalysisGrammar(); return;
+
       MetaOptimizationProblem metaOptimizationProblem = new MetaOptimizationProblem();
       metaOptimizationProblem.Repetitions = new IntValue(metaProblemRepetitions);
@@ -90,5 +95,5 @@
       //Console.WriteLine("Press enter to start");
       //Console.ReadLine();
-      TestConfiguration(algorithmVc, new GeneticAlgorithm() { Problem = new SingleObjectiveTestFunctionProblem() });
+      TestConfiguration(algorithmVc, typeof(GeneticAlgorithm), metaOptimizationProblem.Problems.First());
 
       Console.WriteLine("Press enter to start");
@@ -99,4 +104,53 @@
 
       Console.ReadLine();
+    }
+
+    private void TestSymbolicDataAnalysisGrammar() {
+      var random = new MersenneTwister();
+
+      var grammar1 = new TypeCoherentExpressionGrammar();
+      var grammar2 = new TypeCoherentExpressionGrammar();
+
+      grammar2.Symbols.Single(x => x.Name == "Addition").InitialFrequency = 0.5;
+
+      Console.WriteLine("========== Grammar1: ==========");
+      PrintGrammar(grammar1);
+      Console.WriteLine("========== Grammar2: ==========");
+      PrintGrammar(grammar2);
+
+
+      RealVector v1 = GetInitialFrequenciesAsRealVector(grammar1);
+      RealVector v2 = GetInitialFrequenciesAsRealVector(grammar2);
+
+      for (int i = 0; i < 10; i++) {
+        RealVector v3 = DiscreteCrossover.Apply(random, new ItemArray<RealVector>(new List<RealVector> { v1, v2 }));
+
+        var grammar3 = new TypeCoherentExpressionGrammar();
+        SetInitialFrequenciesFromRealVector(grammar3, v3);
+
+        Console.WriteLine("\n========== Crossed: ==========");
+        PrintGrammar(grammar3);
+      }
+
+    }
+
+    private static void PrintGrammar(TypeCoherentExpressionGrammar grammar) {
+      foreach (var symbol in grammar.Symbols) {
+        Console.WriteLine("{0} ({1})", symbol.ToString(), symbol.InitialFrequency);
+      }
+    }
+
+    private static RealVector GetInitialFrequenciesAsRealVector(TypeCoherentExpressionGrammar grammar) {
+      var vector = new RealVector(grammar.Symbols.Count());
+      for (int i = 0; i < grammar.Symbols.Count(); i++) {
+        vector[i] = grammar.Symbols.ElementAt(i).InitialFrequency;
+      }
+      return vector;
+    }
+
+    private static void SetInitialFrequenciesFromRealVector(TypeCoherentExpressionGrammar grammar, RealVector vector) {
+      for (int i = 0; i < grammar.Symbols.Count(); i++) {
+        grammar.Symbols.ElementAt(i).InitialFrequency = vector[i];
+      }
     }
 
@@ -384,5 +438,5 @@
       // because creating ThreadLocal<T> takes all the runtime.
       // when the algs are not stored in a list however this effect does not occur.
-      
+
 
       for (int i = 0; i < 1000; i++) {
@@ -557,5 +611,5 @@
     private static void TestTypeDiscovery() {
       PluginLoader.pluginAssemblies.Any();
-      
+
       var items = ApplicationManager.Manager.GetInstances(typeof(DoubleArray)).ToArray();
 
@@ -638,13 +692,11 @@
     private static ParameterConfigurationTree SetupGAAlgorithm(Type baseLevelAlgorithmType, MetaOptimizationProblem metaOptimizationProblem) {
       metaOptimizationProblem.AlgorithmType.Value = baseLevelAlgorithmType;
-      metaOptimizationProblem.ProblemType.Value = typeof(SingleObjectiveTestFunctionProblem);
-      ParameterConfigurationTree algorithmVc = metaOptimizationProblem.ParameterConfigurationTree;
-      ((IntValue)algorithmVc.AlgorithmConfiguration.ParameterConfigurations.Single(x => x.Name == "MaximumGenerations").ActualValue.Value).Value = baseAlgorithmMaxGenerations;
-
-      metaOptimizationProblem.Problems.Clear();
-      metaOptimizationProblem.Problems.Add(new HeuristicLab.Problems.TestFunctions.SingleObjectiveTestFunctionProblem() {
-        Evaluator = new GriewankEvaluator(),
-        ProblemSize = new IntValue(2)
-      });
+      //metaOptimizationProblem.Problems.Clear();
+
+      //metaOptimizationProblem.ProblemType.Value = typeof(SingleObjectiveTestFunctionProblem);
+      //metaOptimizationProblem.Problems.Add(new HeuristicLab.Problems.TestFunctions.SingleObjectiveTestFunctionProblem() {
+      //  Evaluator = new GriewankEvaluator(),
+      //  ProblemSize = new IntValue(2)
+      //});
       //metaOptimizationProblem.Problems.Add(new HeuristicLab.Problems.TestFunctions.SingleObjectiveTestFunctionProblem() {
       //  Evaluator = new GriewankEvaluator(),
@@ -656,14 +708,44 @@
       //});
 
-      ConfigurePopulationSize(algorithmVc, 15, 20, 1);
+      metaOptimizationProblem.ProblemType.Value = typeof(SymbolicRegressionSingleObjectiveProblem);
+      
+      ParameterConfigurationTree algorithmVc = metaOptimizationProblem.ParameterConfigurationTree;
+      ((IntValue)algorithmVc.AlgorithmConfiguration.ParameterConfigurations.Single(x => x.Name == "MaximumGenerations").ActualValue.Value).Value = baseAlgorithmMaxGenerations;
+
+      //ConfigurePopulationSize(algorithmVc, 15, 20, 1);
       ConfigureMutationRate(algorithmVc, 0.0, 1.0, 0.01);
-      //ConfigureMutationOperator(algorithmVc);
+      ConfigureMutationOperator(algorithmVc);
       //ConfigureElites(algorithmVc, 0, 8, 1);
       //ConfigureSelectionOperator(algorithmVc, true);
+
+      ConfigureSymbolicExpressionGrammar(algorithmVc);
+
       return algorithmVc;
     }
 
-    private static void TestConfiguration(ParameterConfigurationTree algorithmVc, GeneticAlgorithm baseLevelAlgorithm) {
+    private static void ConfigureSymbolicExpressionGrammar(ParameterConfigurationTree vc) {
+      var pc = vc.ProblemConfiguration.ParameterConfigurations.Single(x => x.Name == "SymbolicExpressionTreeGrammar");
+      pc.Optimize = true;
+
+      SymbolicExpressionGrammarValueConfiguration symbolicExpressionGrammarVc = null;
+      foreach (var valconf in pc.ValueConfigurations) {
+        if (valconf.ActualValue.Value.ItemName != "TypeCoherentExpressionGrammar") {
+          pc.ValueConfigurations.SetItemCheckedState(valconf, false);
+        } else {
+          symbolicExpressionGrammarVc = valconf as SymbolicExpressionGrammarValueConfiguration;
+        }
+      }
+      symbolicExpressionGrammarVc.Optimize = true;
+
+      var additionPc = symbolicExpressionGrammarVc.ParameterConfigurations.Single(x => x.Name == "Addition");
+      additionPc.Optimize = true;
+      var initialFrequencyVc = ((ParameterizedValueConfiguration)additionPc.ValueConfigurations.First()).ParameterConfigurations.Single(x => x.Name == "InitialFrequency");
+      initialFrequencyVc.Optimize = true;
+    }
+
+    private static void TestConfiguration(ParameterConfigurationTree algorithmVc, Type baseLevelAlgorithmType, IProblem problem) {
       IRandom rand = new FastRandom(0);
+      var baseLevelAlgorithm = (GeneticAlgorithm)MetaOptimizationUtil.CreateParameterizedAlgorithmInstance(algorithmVc, baseLevelAlgorithmType, problem);
+
       // set random values
       for (int i = 0; i < 10; i++) {
@@ -739,8 +821,8 @@
 
       // uncheck multiMutator to avoid Michalewicz issue
-      var multiMutator = mutationOperator.ValueConfigurations.Where(x => x.ActualValue.Value != null && x.ActualValue.Value.ItemName.StartsWith("Multi")).SingleOrDefault();
-      if (multiMutator != null) {
-        mutationOperator.ValueConfigurations.SetItemCheckedState(multiMutator, false);
-      }
+      //var multiMutator = mutationOperator.ValueConfigurations.Where(x => x.ActualValue.Value != null && x.ActualValue.Value.ItemName.StartsWith("Multi")).SingleOrDefault();
+      //if (multiMutator != null) {
+      //  mutationOperator.ValueConfigurations.SetItemCheckedState(multiMutator, false);
+      //}
 
       // add another normal - don't do this with 'new', because ActualNames will not be set correctly. It should be copied from an existing one
@@ -864,5 +946,5 @@
                 var orderedRuns = rc.OrderBy(x => x.Results["AverageQualityNormalized"]);
 
-                TableBuilder tb = new TableBuilder("QNorm", "Qualities"/*, "PoSi"/* "MutRa", "Eli", "SelOp", "MutOp", "NrSelSubScopes"*/);
+                TableBuilder tb = new TableBuilder("QNorm", "Qualities"/*, "PoSi"*/ ,"MutRa" /*,"Eli", "SelOp"*/, "MutOp"/*, "NrSelSubScopes"*/);
                 foreach (IRun run in orderedRuns) {
                   //string selector;
@@ -874,12 +956,12 @@
 
                   tb.AppendRow(
-                    ((DoubleValue)run.Results["AverageQualityNormalized"]).Value.ToString("#0.0000"),
-                    ((DoubleArray)run.Results["RunsAverageQualities"]).ToString()
-                    //((IntValue)run.Parameters["PopulationSize"]).Value.ToString(),
-                    //((DoubleValue)run.Parameters["MutationProbability"]).Value.ToString("0.0000"),
-                    //((IntValue)run.Parameters["Elites"]).Value.ToString(),
-                    //Shorten(selector, 20),
-                    //Shorten(run.Parameters.ContainsKey("Mutator") ? run.Parameters["Mutator"].ToString() : "null", 40),
-                    //((ISelector)run.Parameters["Selector"]).NumberOfSelectedSubScopesParameter.Value.ToString()
+                    ((DoubleValue)run.Results["AverageQualityNormalized"]).Value.ToString("#0.0000")
+                    ,((DoubleArray)run.Results["RunsAverageQualities"]).ToString()
+                    //,((IntValue)run.Parameters["PopulationSize"]).Value.ToString()
+                    ,((DoubleValue)run.Parameters["MutationProbability"]).Value.ToString("0.0000")
+                    //,((IntValue)run.Parameters["Elites"]).Value.ToString()
+                    //,Shorten(selector, 20)
+                    ,Shorten(run.Parameters.ContainsKey("Mutator") ? run.Parameters["Mutator"].ToString() : "null", 40)
+                    //,((ISelector)run.Parameters["Selector"]).NumberOfSelectedSubScopesParameter.Value.ToString()
                     );
                 }
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/MetaOptimizationProblemView.Designer.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/MetaOptimizationProblemView.Designer.cs	(revision 5926)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/MetaOptimizationProblemView.Designer.cs	(revision 5927)
@@ -31,5 +31,5 @@
       // 
       this.parameterCollectionView.AllowDrop = true;
-      this.parameterCollectionView.Size = new System.Drawing.Size(604, 353);
+      this.parameterCollectionView.Size = new System.Drawing.Size(604, 373);
       this.parameterCollectionView.DragDrop += new System.Windows.Forms.DragEventHandler(this.parameterCollectionView_DragDrop);
       this.parameterCollectionView.DragEnter += new System.Windows.Forms.DragEventHandler(this.parameterCollectionView_DragEnterOver);
@@ -40,9 +40,5 @@
       this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
       this.errorProvider.SetIconPadding(this.nameTextBox, 2);
-      this.nameTextBox.Size = new System.Drawing.Size(532, 20);
-      // 
-      // descriptionTextBox
-      // 
-      this.descriptionTextBox.Size = new System.Drawing.Size(532, 20);
+      this.nameTextBox.Size = new System.Drawing.Size(542, 20);
       // 
       // createExperimentButton
@@ -50,5 +46,5 @@
       this.createExperimentButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
                   | System.Windows.Forms.AnchorStyles.Right)));
-      this.createExperimentButton.Location = new System.Drawing.Point(0, 411);
+      this.createExperimentButton.Location = new System.Drawing.Point(0, 405);
       this.createExperimentButton.Name = "createExperimentButton";
       this.createExperimentButton.Size = new System.Drawing.Size(604, 24);
@@ -64,10 +60,9 @@
       this.Controls.Add(this.createExperimentButton);
       this.Name = "MetaOptimizationProblemView";
-      this.Size = new System.Drawing.Size(604, 437);
+      this.Size = new System.Drawing.Size(604, 431);
       this.Controls.SetChildIndex(this.createExperimentButton, 0);
+      this.Controls.SetChildIndex(this.infoLabel, 0);
       this.Controls.SetChildIndex(this.nameTextBox, 0);
       this.Controls.SetChildIndex(this.nameLabel, 0);
-      this.Controls.SetChildIndex(this.descriptionLabel, 0);
-      this.Controls.SetChildIndex(this.descriptionTextBox, 0);
       this.Controls.SetChildIndex(this.parameterCollectionView, 0);
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/MetaOptimizationProblemView.resx
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/MetaOptimizationProblemView.resx	(revision 5926)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/MetaOptimizationProblemView.resx	(revision 5927)
@@ -121,7 +121,4 @@
     <value>107, 17</value>
   </metadata>
-  <metadata name="errorProvider.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>107, 17</value>
-  </metadata>
   <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>17, 17</value>
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/OptimizableView.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/OptimizableView.cs	(revision 5926)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/OptimizableView.cs	(revision 5927)
@@ -68,4 +68,10 @@
               this.viewHost.Content = pvc.ParameterConfigurations;
             }
+
+            //var symbolicVc = Content as SymbolicExpressionGrammarValueConfiguration;
+            //if (symbolicVc != null) {
+            //  this.viewHost.ViewsLabelVisible = false;
+            //  this.viewHost.Content = symbolicVc.ParameterConfigurations;
+            //}
           } else {
             throw new NotSupportedException("Only IParameterConfiguration and IValueConfiguration types are allowed.");
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ParameterConfigurationTree.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ParameterConfigurationTree.cs	(revision 5926)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ParameterConfigurationTree.cs	(revision 5927)
@@ -208,7 +208,16 @@
       ProblemConfiguration.Parameterize(problem);
 
-      //((IAlgorithm)AlgorithmConfiguration.ActualValue.Value).CollectParameterValues(this.Parameters);
+      algorithm.CollectParameterValues(this.Parameters);
       //((IProblem)ProblemConfiguration.ActualValue.Value).CollectParameterValues(this.Parameters);
-    }
+      //CollectAlgorithmParameterValues((IAlgorithm)AlgorithmConfiguration.ActualValue.Value, parameters);
+    }
+
+    //protected virtual void CollectAlgorithmParameterValues(IAlgorithm algorithm, IDictionary<string, IItem> values) {
+    //  var algorithmValues = new Dictionary<string, IItem>();
+    //  algorithm.CollectParameterValues(algorithmValues);
+    //  foreach (var value in algorithmValues) {
+    //    values.Add("Algorithm." + value.Key, value.Value);
+    //  }
+    //}
 
     public Experiment GenerateExperiment(IAlgorithm algorithm, bool createBatchRuns, int repetitions) {
@@ -297,4 +306,11 @@
       }
     }
+
+    public override void CollectOptimizedParameterNames(List<string> parameterNames, string prefix) {
+      AlgorithmConfiguration.CollectOptimizedParameterNames(parameterNames, string.Empty);
+      ProblemConfiguration.CollectOptimizedParameterNames(parameterNames, string.Empty);
+    }
+
+   
   }
 }
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ParameterConfigurations/ParameterConfiguration.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ParameterConfigurations/ParameterConfiguration.cs	(revision 5926)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ParameterConfigurations/ParameterConfiguration.cs	(revision 5927)
@@ -9,4 +9,5 @@
 using HeuristicLab.Core;
 using HeuristicLab.Data;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
@@ -25,5 +26,5 @@
     [Storable]
     protected bool optimize;
-    public bool Optimize {
+    public virtual bool Optimize {
       get { return optimize; }
       set {
@@ -33,5 +34,5 @@
             PopulateValueConfigurations();
           } else {
-            this.ValueConfigurations.Clear();
+            ClearValueConfigurations();
           }
           OnOptimizeChanged();
@@ -42,6 +43,6 @@
 
     [Storable]
-    private Image itemImage;
-    public virtual Image ItemImage {
+    protected Image itemImage;
+    public override Image ItemImage {
       get { return itemImage ?? base.ItemImage; }
     }
@@ -160,5 +161,31 @@
       }
     }
-
+    public ParameterConfiguration(string parameterName, Type type, IItem actualValue, IEnumerable<IValueConfiguration> valueConfigurations) {
+      this.ParameterName = parameterName;
+      this.parameterDataType = type;
+      this.valueDataType = type;
+      this.discoverValidValues = false;
+      this.validValues = null; // maybe use values from valueConfigurations
+      this.validTypes = new Type[] { type };
+      this.IsNullable = false;
+      this.itemImage = valueConfigurations.Count() > 0 ? valueConfigurations.FirstOrDefault().ItemImage : null;
+      this.ValueConfigurations = new CheckedValueConfigurationList(valueConfigurations);
+      this.ActualValue = new ConstrainedValue(actualValue, type, CreateValidValues(), this.IsNullable);
+    }
+    public ParameterConfiguration(string parameterName, Type type, IItem actualValue) {
+      this.ParameterName = parameterName;
+      this.parameterDataType = type;
+      this.valueDataType = type;
+      this.discoverValidValues = false;
+      this.validValues = null;
+      this.validTypes = new Type[] { type };
+      this.IsNullable = false;
+      this.itemImage = actualValue.ItemImage;
+      this.ValueConfigurations = new CheckedValueConfigurationList();
+      this.ActualValue = new ConstrainedValue(actualValue, type, CreateValidValues(), this.IsNullable);
+      if (Optimize) {
+        PopulateValueConfigurations();
+      }
+    }
     public ParameterConfiguration() { }
     [StorableConstructor]
@@ -180,4 +207,6 @@
       if (this.valueConfigurations != null) RegisterValueConfigurationEvents();
     }
+
+
     public override IDeepCloneable Clone(Cloner cloner) {
       return new ParameterConfiguration(this, cloner);
@@ -208,5 +237,5 @@
     }
 
-    private void PopulateValueConfigurations() {
+    protected virtual void PopulateValueConfigurations() {
       foreach (Type t in this.validTypes) {
         if (t == typeof(NullValue)) {
@@ -220,12 +249,22 @@
           }
           if (val != null) { // val can be null when ValidValues does not contain the type (this can happen when discoverValidValues=false)
+            IValueConfiguration valueConfiguration;
             if (val is IParameterizedItem) {
-              this.ValueConfigurations.Add(new ParameterizedValueConfiguration(val, val.GetType(), true), true);
+              valueConfiguration = new ParameterizedValueConfiguration(val, val.GetType(), true);
             } else {
-              this.ValueConfigurations.Add(new RangeValueConfiguration(val, val.GetType()), true);
+              if (val is ISymbolicExpressionGrammar) {
+                valueConfiguration = new SymbolicExpressionGrammarValueConfiguration((ISymbolicExpressionGrammar)val);
+              } else {
+                valueConfiguration = new RangeValueConfiguration(val, val.GetType());
+              }
             }
-          }
-        }
-      }
+            this.ValueConfigurations.Add(valueConfiguration, true);
+          }
+        }
+      }
+    }
+
+    protected virtual void ClearValueConfigurations() {
+      this.ValueConfigurations.Clear();
     }
 
@@ -260,6 +299,11 @@
     public IItem CreateItem(Type type) {
       // no valid values; just instantiate
-      if (validValues == null)
-        return (IItem)Activator.CreateInstance(type);
+      try {
+        if (validValues == null)
+          return (IItem)Activator.CreateInstance(type);
+      }
+      catch (MissingMemberException) {
+        return null; // can happen, when ApplicationManager.Manager.GetTypes(type, OnlyInstantiable=true) returns objects which have no default constructor
+      }
 
       if (type == typeof(NullValue))
@@ -279,5 +323,5 @@
         try {
           var val = CreateItem(t);
-          validValues.Add(val);
+          if (val != null) validValues.Add(val);
         }
         catch (MissingMethodException) { /* Constructor is missing, don't use those types */ }
@@ -415,7 +459,13 @@
 
     public void Parameterize(IValueParameter parameter) {
+      if (parameter is IFixedValueParameter)
+        return;
+
       if (Optimize) {
         if (this.ActualValue.Value is IParameterizedItem) {
           ((ParameterizedValueConfiguration)this.ValueConfigurations[actualValueConfigurationIndex]).Parameterize((IParameterizedItem)this.ActualValue.Value);
+        }
+        if (this.ActualValue.Value is ISymbolicExpressionGrammar) {
+          ((SymbolicExpressionGrammarValueConfiguration)this.ValueConfigurations[actualValueConfigurationIndex]).Parameterize((ISymbolicExpressionGrammar)this.ActualValue.Value);
         }
       }
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ParameterConfigurations/SingleValuedParameterConfiguration.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ParameterConfigurations/SingleValuedParameterConfiguration.cs	(revision 5926)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ParameterConfigurations/SingleValuedParameterConfiguration.cs	(revision 5927)
@@ -1,3 +1,4 @@
-﻿using System.Linq;
+﻿using System;
+using System.Linq;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -14,5 +15,24 @@
       : base(parameterName, valueParameter, false) {
       this.Optimize = true;
+      base.PopulateValueConfigurations();
       this.ValueConfigurations.Single().Optimize = true;
+    }
+    public SingleValuedParameterConfiguration(string parameterName, IValueConfiguration valueConfiguration) {
+      this.ParameterName = parameterName;
+      this.parameterDataType = valueConfiguration.ActualValue.ValueDataType;
+      this.valueDataType = valueConfiguration.ActualValue.ValueDataType;
+      this.discoverValidValues = false;
+      this.validValues = new ItemSet<IItem> { valueConfiguration.ActualValue.Value };
+      this.validTypes = new Type[] {valueConfiguration.ActualValue.ValueDataType};
+      this.IsNullable = false;
+      this.itemImage = valueConfiguration.ItemImage;
+      this.ValueConfigurations = new CheckedValueConfigurationList { valueConfiguration };
+      this.ValueConfigurations.Single().Optimize = true;
+      valueConfiguration.ToStringChanged += new EventHandler(valueConfiguration_ToStringChanged);
+      this.ActualValue = new ConstrainedValue(
+        valueConfiguration.ActualValue.Value,
+        valueConfiguration.ActualValue.ValueDataType,
+        this.validValues,
+        this.IsNullable);
     }
     public SingleValuedParameterConfiguration() { }
@@ -24,4 +44,29 @@
     }
     #endregion
+
+    protected override void PopulateValueConfigurations() {
+      // don't change valueconfigurations, since it only contains the one element specified in constructor
+    }
+
+    protected override void ClearValueConfigurations() {
+      // do nothing
+    }
+
+    public override string ToString() {
+      if (this.valueConfigurations.First() is SymbolValueConfiguration) {
+        var syVc = (SymbolValueConfiguration)this.valueConfigurations.First();
+        if (this.Optimize) {
+          return syVc.ToString() + " (Optimize)";
+        } else {
+          return syVc.ToString();
+        }
+      } else {
+        return base.ToString();
+      }
+    }
+
+    private void valueConfiguration_ToStringChanged(object sender, EventArgs e) {
+      OnToStringChanged();
+    }
   }
 }
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/SymbolicRegression/SymbolValueConfiguration.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/SymbolicRegression/SymbolValueConfiguration.cs	(revision 5927)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/SymbolicRegression/SymbolValueConfiguration.cs	(revision 5927)
@@ -0,0 +1,105 @@
+﻿using System.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Problems.DataAnalysis.Symbolic;
+
+namespace HeuristicLab.Problems.MetaOptimization {
+  [StorableClass]
+  public class SymbolValueConfiguration : ParameterizedValueConfiguration {
+
+    #region Constructors and Cloning
+    [StorableConstructor]
+    protected SymbolValueConfiguration(bool deserializing) : base(deserializing) { }
+    public SymbolValueConfiguration() : base() { }
+    public SymbolValueConfiguration(Symbol symbol)
+      : base() {
+      this.IsOptimizable = true;
+      this.Optimize = false;
+      this.Name = symbol.Name;
+      this.actualValue = new ConstrainedValue(symbol, symbol.GetType(), new ItemSet<IItem> { symbol }, false);
+    }
+    protected SymbolValueConfiguration(SymbolValueConfiguration original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SymbolValueConfiguration(this, cloner);
+    }
+    #endregion
+
+    protected override void PopulateParameterConfigurations(IItem item, bool discoverValidValues) {
+      this.ClearParameterConfigurations();
+
+      var symbol = (Symbol)item;
+
+      var initialFrequencyValueConfigurations = new List<IValueConfiguration>();
+      initialFrequencyValueConfigurations.Add(new RangeValueConfiguration(new DoubleValue(0), typeof(DoubleValue)));
+      initialFrequencyValueConfigurations.Add(new RangeValueConfiguration(new DoubleValue(1), typeof(DoubleValue)));
+      var initialFrequencyParameterConfiguration = new ParameterConfiguration("InitialFrequency", typeof(Symbol), new DoubleValue(symbol.InitialFrequency), initialFrequencyValueConfigurations);
+      this.parameterConfigurations.Add(initialFrequencyParameterConfiguration);
+
+      var constant = symbol as Constant;
+      if (constant != null) {
+        var minValueParameterConfiguration = new ParameterConfiguration("MinValue", typeof(DoubleValue), new DoubleValue(constant.MinValue));
+        var maxValueParameterConfiguration = new ParameterConfiguration("MaxValue", typeof(DoubleValue), new DoubleValue(constant.MaxValue));
+        var manipulatorMuParameterConfiguration = new ParameterConfiguration("ManipulatorMu", typeof(DoubleValue), new DoubleValue(constant.ManipulatorMu));
+        var manipulatorSigmaParameterConfiguration = new ParameterConfiguration("ManipulatorSigma", typeof(DoubleValue), new DoubleValue(constant.ManipulatorSigma));
+        var multiplicativeManipulatorSigmaParameterConfiguration = new ParameterConfiguration("MultiplicativeManipulatorSigma", typeof(DoubleValue), new DoubleValue(constant.MultiplicativeManipulatorSigma));
+
+        this.parameterConfigurations.Add(minValueParameterConfiguration);
+        this.parameterConfigurations.Add(maxValueParameterConfiguration);
+        this.parameterConfigurations.Add(manipulatorMuParameterConfiguration);
+        this.parameterConfigurations.Add(manipulatorSigmaParameterConfiguration);
+        this.parameterConfigurations.Add(multiplicativeManipulatorSigmaParameterConfiguration);
+      }
+
+      var variable = symbol as HeuristicLab.Problems.DataAnalysis.Symbolic.Variable;
+      if (variable != null) {
+        var weightMuParameterConfiguration = new ParameterConfiguration("WeightMu", typeof(DoubleValue), new DoubleValue(variable.WeightMu));
+        var weightSigmaParameterConfiguration = new ParameterConfiguration("WeightSigma", typeof(DoubleValue), new DoubleValue(variable.WeightSigma));
+        var weightManipulatorMuParameterConfiguration = new ParameterConfiguration("WeightManipulatorMu", typeof(DoubleValue), new DoubleValue(variable.WeightManipulatorMu));
+        var weightManipulatorSigmaParameterConfiguration = new ParameterConfiguration("WeightManipulatorSigma", typeof(DoubleValue), new DoubleValue(variable.WeightManipulatorSigma));
+        var multiplicativeWeightManipulatorSigmaParameterConfiguration = new ParameterConfiguration("MultiplicativeWeightManipulatorSigma", typeof(DoubleValue), new DoubleValue(variable.MultiplicativeWeightManipulatorSigma));
+
+        this.parameterConfigurations.Add(weightMuParameterConfiguration);
+        this.parameterConfigurations.Add(weightSigmaParameterConfiguration);
+        this.parameterConfigurations.Add(weightManipulatorMuParameterConfiguration);
+        this.parameterConfigurations.Add(weightManipulatorSigmaParameterConfiguration);
+        this.parameterConfigurations.Add(multiplicativeWeightManipulatorSigmaParameterConfiguration);
+      }
+    }
+
+    public virtual void Parameterize(Symbol symbol) {
+      symbol.InitialFrequency = GetDoubleValue("InitialFrequency");
+      
+      var constant = symbol as Constant;
+      if (constant != null) {
+        constant.MinValue = GetDoubleValue("MinValue");
+        constant.MaxValue = GetDoubleValue("MaxValue");
+        constant.ManipulatorMu = GetDoubleValue("ManipulatorMu");
+        constant.ManipulatorSigma = GetDoubleValue("ManipulatorSigma");
+        constant.MultiplicativeManipulatorSigma = GetDoubleValue("MultiplicativeManipulatorSigma");
+      }
+      
+      var variable = symbol as HeuristicLab.Problems.DataAnalysis.Symbolic.Variable;
+      if (variable != null) {
+        variable.WeightMu = GetDoubleValue("WeightMu");
+        variable.WeightSigma = GetDoubleValue("WeightSigma");
+        variable.WeightManipulatorMu = GetDoubleValue("WeightManipulatorMu");
+        variable.WeightManipulatorSigma = GetDoubleValue("WeightManipulatorSigma");
+        variable.MultiplicativeWeightManipulatorSigma = GetDoubleValue("MultiplicativeWeightManipulatorSigma");
+      }
+    }
+
+    private double GetDoubleValue(string name) {
+      return ((DoubleValue)ParameterConfigurations.Single(x => x.Name == name).ActualValue.Value).Value;
+    }
+
+    public override string ToString() {
+      return string.Format("{0}: {1}", this.Name, parameterConfigurations.Single(pc => pc.Name == "InitialFrequency").ActualValue.Value);
+    }
+  }
+}
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/SymbolicRegression/SymbolicExpressionGrammarValueConfiguration.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/SymbolicRegression/SymbolicExpressionGrammarValueConfiguration.cs	(revision 5927)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/SymbolicRegression/SymbolicExpressionGrammarValueConfiguration.cs	(revision 5927)
@@ -0,0 +1,40 @@
+﻿using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.MetaOptimization {
+  [StorableClass]
+  public class SymbolicExpressionGrammarValueConfiguration : ParameterizedValueConfiguration {
+
+    #region Constructors and Cloning
+    [StorableConstructor]
+    protected SymbolicExpressionGrammarValueConfiguration(bool deserializing) : base(deserializing) { }
+    public SymbolicExpressionGrammarValueConfiguration() : base() { }
+    public SymbolicExpressionGrammarValueConfiguration(ISymbolicExpressionGrammar grammar) {
+      this.IsOptimizable = true;
+      this.ActualValue = new ConstrainedValue(grammar, grammar.GetType(), new ItemSet<IItem> { grammar }, false);
+    }
+    protected SymbolicExpressionGrammarValueConfiguration(SymbolicExpressionGrammarValueConfiguration original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SymbolicExpressionGrammarValueConfiguration(this, cloner);
+    }
+    #endregion
+
+    protected override void PopulateParameterConfigurations(IItem item, bool discoverValidValues) {
+      var grammar = (ISymbolicExpressionGrammar)item;
+      foreach (Symbol symbol in grammar.Symbols) {
+        this.parameterConfigurations.Add(new SingleValuedParameterConfiguration(symbol.Name, new SymbolValueConfiguration(symbol)));
+      }
+    }
+
+    public virtual void Parameterize(ISymbolicExpressionGrammar grammar) {
+      foreach (Symbol symbol in grammar.Symbols) {
+        ((SymbolValueConfiguration)this.parameterConfigurations.Single(pc => pc.Name == symbol.Name).ValueConfigurations.First()).Parameterize(symbol);
+      }
+    }
+  }
+}
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ValueConfigurations/CheckedValueConfigurationCollection.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ValueConfigurations/CheckedValueConfigurationCollection.cs	(revision 5926)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ValueConfigurations/CheckedValueConfigurationCollection.cs	(revision 5927)
@@ -1,10 +1,8 @@
-﻿using System;
-using System.Collections.Generic;
+﻿using System.Collections.Generic;
 using System.Linq;
-using System.Text;
+using HeuristicLab.Collections;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HeuristicLab.Common;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Collections;
 
 namespace HeuristicLab.Problems.MetaOptimization {
@@ -29,4 +27,9 @@
       RegisterEvents();
     }
+    public CheckedValueConfigurationList(IEnumerable<IValueConfiguration> collection)
+      : base(collection) {
+      validValues = null;
+      // event wiring not needed
+    }
     public CheckedValueConfigurationList() {
       RegisterEvents();
@@ -43,4 +46,5 @@
       RegisterEvents();
     }
+
     public override IDeepCloneable Clone(Cloner cloner) {
       return new CheckedValueConfigurationList(this, cloner);
@@ -61,5 +65,5 @@
     }
 
-    void CheckedValueConfigurationList_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<IValueConfiguration>> e) {
+    private void CheckedValueConfigurationList_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<IValueConfiguration>> e) {
       foreach (var item in e.Items) {
         var matchingItems = this.Where(x => x != item.Value && x.ActualValue.ValueDataType == item.Value.ActualValue.ValueDataType);
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ValueConfigurations/ParameterizedValueConfiguration.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ValueConfigurations/ParameterizedValueConfiguration.cs	(revision 5926)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ValueConfigurations/ParameterizedValueConfiguration.cs	(revision 5927)
@@ -20,10 +20,12 @@
       get { return base.Optimize; }
       set {
-        base.Optimize = value;
-        if (optimize) {
-          ClearParameterConfigurations();
-          if (this.actualValue.Value is IParameterizedNamedItem) PopulateParameterConfigurations(this.actualValue.Value as IParameterizedNamedItem, this.discoverValidValues);
-        } else {
-          ClearParameterConfigurations();
+        if (this.optimize != value) {
+          base.Optimize = value;
+          if (optimize) {
+            ClearParameterConfigurations();
+            PopulateParameterConfigurations(this.actualValue.Value, this.discoverValidValues);
+          } else {
+            ClearParameterConfigurations();
+          }
         }
       }
@@ -35,5 +37,5 @@
         ClearParameterConfigurations();
         base.ActualValue = value;
-        if(this.actualValue.Value != null) PopulateParameterConfigurations(this.actualValue.Value as IParameterizedNamedItem, this.discoverValidValues);
+        if (this.Optimize && this.actualValue.Value != null) PopulateParameterConfigurations(this.actualValue.Value, this.discoverValidValues);
       }
     }
@@ -66,10 +68,13 @@
     #endregion
 
-    protected virtual void PopulateParameterConfigurations(IParameterizedNamedItem parameterizedItem, bool discoverValidValues) {
-      foreach (var childParameter in parameterizedItem.Parameters) {
-        IValueParameter valueParameter = childParameter as IValueParameter;
-        if (valueParameter != null) {
-          var pc = new ParameterConfiguration(valueParameter.Name, valueParameter, discoverValidValues);
-          this.parameterConfigurations.Add(pc);
+    protected virtual void PopulateParameterConfigurations(IItem item, bool discoverValidValues) {
+      var parameterizedItem = item as IParameterizedItem;
+      if (parameterizedItem != null) {
+        foreach (var childParameter in parameterizedItem.Parameters) {
+          IValueParameter valueParameter = childParameter as IValueParameter;
+          if (valueParameter != null) {
+            var pc = new ParameterConfiguration(valueParameter.Name, valueParameter, discoverValidValues);
+            this.parameterConfigurations.Add(pc);
+          }
         }
       }
@@ -126,7 +131,7 @@
     }
 
-    public IEnumerable<string> GetOptimizedParameterNames() {
+    public virtual IEnumerable<string> GetOptimizedParameterNames() {
       var list = new List<string>();
-      this.CollectOptimizedParameterNames(list, "");
+      this.CollectOptimizedParameterNames(list, string.Empty);
       return list;
     }
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ValueConfigurations/ValueConfiguration.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ValueConfigurations/ValueConfiguration.cs	(revision 5926)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ValueConfigurations/ValueConfiguration.cs	(revision 5927)
@@ -20,5 +20,5 @@
     [Storable]
     protected bool isOptimizable;
-    public bool IsOptimizable {
+    public virtual bool IsOptimizable {
       get { return isOptimizable; }
       set {
@@ -36,4 +36,7 @@
       set {
         if (optimize != value) {
+          if (value == true && !this.IsOptimizable)
+            throw new NotSupportedException("This value is not optimizable.");
+
           optimize = value;
           OnOptimizeChanged();
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Evaluators/AlgorithmSubScopesCreator.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Evaluators/AlgorithmSubScopesCreator.cs	(revision 5926)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Evaluators/AlgorithmSubScopesCreator.cs	(revision 5927)
@@ -59,12 +59,5 @@
         for (int j = 0; j < problems.Count; j++) {
           IScope child = new Scope(string.Format("Problem {0}, Repetition {1}", j, i));
-          var algorithm = (IAlgorithm)Activator.CreateInstance(algorithmType);
-          algorithm.Problem = (IProblem)problems[j].Clone();
-          ((EngineAlgorithm)algorithm).Engine = new SequentialEngine.SequentialEngine();
-
-          //((GeneticAlgorithm)algorithm).PopulationSize.Value = 10;
-          //((GeneticAlgorithm)algorithm).MaximumGenerations.Value = 10;
-
-          parameterConfiguration.Parameterize(algorithm);
+          var algorithm = MetaOptimizationUtil.CreateParameterizedAlgorithmInstance(parameterConfiguration, algorithmType, (IProblem)problems[j].Clone());
           child.Variables.Add(new Variable("Algorithm", algorithm));
           child.Variables.Add(new Variable("ProblemIndex", new IntValue(j)));
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/HeuristicLab.Problems.MetaOptimization-3.3.csproj
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/HeuristicLab.Problems.MetaOptimization-3.3.csproj	(revision 5926)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/HeuristicLab.Problems.MetaOptimization-3.3.csproj	(revision 5927)
@@ -102,4 +102,7 @@
       <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Encodings.RealVectorEncoding-3.3.dll</HintPath>
     </Reference>
+    <Reference Include="HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4">
+      <HintPath>..\..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.dll</HintPath>
+    </Reference>
     <Reference Include="HeuristicLab.Operators-3.3">
       <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Operators-3.3.dll</HintPath>
@@ -117,6 +120,9 @@
       <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
     </Reference>
-    <Reference Include="HeuristicLab.Problems.DataAnalysis-3.3">
-      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Problems.DataAnalysis-3.3.dll</HintPath>
+    <Reference Include="HeuristicLab.Problems.DataAnalysis-3.4">
+      <HintPath>..\..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Problems.DataAnalysis-3.4.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Problems.DataAnalysis.Symbolic-3.4">
+      <HintPath>..\..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.dll</HintPath>
     </Reference>
     <Reference Include="HeuristicLab.Problems.TestFunctions-3.3">
@@ -148,4 +154,6 @@
     <Compile Include="Encoding\AlgorithmProblemItem.cs" />
     <Compile Include="Encoding\ParameterConfigurations\SingleValuedParameterConfiguration.cs" />
+    <Compile Include="Encoding\SymbolicRegression\SymbolValueConfiguration.cs" />
+    <Compile Include="Encoding\SymbolicRegression\SymbolicExpressionGrammarValueConfiguration.cs" />
     <Compile Include="Encoding\ValueConfigurations\RangeValueConfiguration.cs" />
     <Compile Include="Encoding\ValueConfigurations\ParameterizedValueConfiguration.cs" />
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/MetaOptimizationProblem.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/MetaOptimizationProblem.cs	(revision 5926)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/MetaOptimizationProblem.cs	(revision 5927)
@@ -38,7 +38,7 @@
   [Creatable("Problems")]
   [StorableClass]
-  public sealed class MetaOptimizationProblem : SingleObjectiveProblem<IParameterConfigurationEvaluator, IParameterConfigurationCreator>, IStorableContent {
+  public sealed class MetaOptimizationProblem : SingleObjectiveHeuristicOptimizationProblem<IParameterConfigurationEvaluator, IParameterConfigurationCreator>, IStorableContent {
     public string Filename { get; set; }
-
+    
     public const string AlgorithmTypeParameterName = "AlgorithmType";
     public const string ProblemTypeParameterName = "ProblemType";
@@ -272,5 +272,5 @@
 
         // special for DataAnalysisProblem: Because of wiring between algorithm and problem, ParameterConfigurationTree needs to be recreated on Reset event
-        var dap = e.Items.Single().Value as DataAnalysisProblem;
+        var dap = e.Items.Single().Value as IDataAnalysisProblem;
         if (dap != null) {
           dap.Reset += new EventHandler(DataAnalysisProblem_Reset);
@@ -283,5 +283,5 @@
         ParameterConfigurationTreeParameter.ActualValue = null;
 
-        var dap = e.Items.Single().Value as DataAnalysisProblem;
+        var dap = e.Items.Single().Value as IDataAnalysisProblem;
         if (dap != null) {
           dap.Reset -= new EventHandler(DataAnalysisProblem_Reset);
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/MetaOptimizationUtil.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/MetaOptimizationUtil.cs	(revision 5926)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/MetaOptimizationUtil.cs	(revision 5927)
@@ -1,17 +1,8 @@
 ﻿using System;
+using System.Collections.Generic;
 using System.Linq;
-using System.Threading;
-using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
-using HeuristicLab.Operators;
 using HeuristicLab.Optimization;
-using HeuristicLab.Parameters;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using System.Collections.Generic;
-using HeuristicLab.Algorithms.GeneticAlgorithm;
-using System.Threading.Tasks;
-using System.Diagnostics;
-using System.Reflection;
 
 namespace HeuristicLab.Problems.MetaOptimization {
@@ -52,4 +43,16 @@
       return parameterConfigurationTree.AverageQualityNormalized.Value;
     }
+
+    /// <summary>
+    /// Creates a new instance of algorithmType, sets the given problem and parameterizes it with the given configuration
+    /// </summary>
+    public static IAlgorithm CreateParameterizedAlgorithmInstance(ParameterConfigurationTree parameterConfigurationTree, Type algorithmType, IProblem problem, bool randomize = false, IRandom random = null) {
+      var algorithm = (IAlgorithm)Activator.CreateInstance(algorithmType);
+      algorithm.Problem = problem;
+      ((EngineAlgorithm)algorithm).Engine = new SequentialEngine.SequentialEngine();
+      if(randomize) parameterConfigurationTree.Randomize(random);
+      parameterConfigurationTree.Parameterize(algorithm);
+      return algorithm;
+    }
   }
 }
