Index: branches/3107_LearningALPS/HeuristicLab.Algorithms.ALPS/3.3/AlpsGeneticAlgorithm.cs
===================================================================
--- branches/3107_LearningALPS/HeuristicLab.Algorithms.ALPS/3.3/AlpsGeneticAlgorithm.cs	(revision 17852)
+++ branches/3107_LearningALPS/HeuristicLab.Algorithms.ALPS/3.3/AlpsGeneticAlgorithm.cs	(revision 17854)
@@ -121,4 +121,8 @@
       get { return (IValueParameter<MultiTerminator>)Parameters["Terminator"]; }
     }
+
+    private IConstrainedValueParameter<IReinitializationStrategyController> ReinitializationStrategyParameter {
+      get { return (IConstrainedValueParameter<IReinitializationStrategyController>)Parameters["ReinitializationStrategy"]; }
+    }
     #endregion
 
@@ -207,4 +211,9 @@
       get { return generationsTerminator.Threshold.Value; }
       set { generationsTerminator.Threshold.Value = value; }
+    }
+
+    public IReinitializationStrategyController ReinitializationStrategy {
+      get { return ReinitializationStrategyParameter.Value; }
+      set { ReinitializationStrategyParameter.Value = value; }
     }
     #endregion
@@ -312,4 +321,6 @@
 
       Parameters.Add(new ValueParameter<MultiTerminator>("Terminator", "The termination criteria that defines if the algorithm should continue or stop.", new MultiTerminator()));
+
+      Parameters.Add(new OptionalConstrainedValueParameter<IReinitializationStrategyController>("ReinitializationStrategy", "An optional strategy adaption when reseeding the lowest layer."));
       #endregion
 
@@ -406,4 +417,9 @@
       #endregion
 
+      #region Set strategy adaption
+      foreach (var adaptor in ApplicationManager.Manager.GetInstances<IReinitializationStrategyController>().OrderBy(o => o.Name))
+        ReinitializationStrategyParameter.ValidValues.Add(adaptor);
+      #endregion
+
       #region Create analyzers
       qualityAnalyzer = new BestAverageWorstQualityAnalyzer();
Index: branches/3107_LearningALPS/HeuristicLab.Algorithms.ALPS/3.3/ReseedingController.cs
===================================================================
--- branches/3107_LearningALPS/HeuristicLab.Algorithms.ALPS/3.3/ReseedingController.cs	(revision 17852)
+++ branches/3107_LearningALPS/HeuristicLab.Algorithms.ALPS/3.3/ReseedingController.cs	(revision 17854)
@@ -20,4 +20,6 @@
 #endregion
 
+using System;
+using System.Linq;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -34,9 +36,15 @@
       get { return (ILookupParameter<IntValue>)Parameters["Generations"]; }
     }
+
     public ILookupParameter<IntValue> AgeGapParameter {
       get { return (ILookupParameter<IntValue>)Parameters["AgeGap"]; }
     }
+
     public OperatorParameter FirstLayerOperatorParameter {
       get { return (OperatorParameter)Parameters["FirstLayerOperator"]; }
+    }
+
+    public OperatorParameter StrategyAdaptionOperatorParameter {
+      get { return (OperatorParameter)Parameters["ReinitializationStrategyOperator"]; }
     }
 
@@ -46,10 +54,22 @@
     }
 
+    public IOperator ReinitializationStrategyOperator {
+      get { return StrategyAdaptionOperatorParameter.Value; }
+      set { StrategyAdaptionOperatorParameter.Value = value; }
+    }
+
     [StorableConstructor]
     private ReseedingController(StorableConstructorFlag _) : base(_) { }
 
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      if (!Parameters.ContainsKey("ReinitializationStrategyOperator")) {
+        Parameters.Add(new OperatorParameter("ReinitializationStrategyOperator", "The optional operator to control the strategy parameter."));
+      }
+    }
+
     private ReseedingController(ReseedingController original, Cloner cloner)
-      : base(original, cloner) {
-    }
+      : base(original, cloner) { }
+
     public override IDeepCloneable Clone(Cloner cloner) {
       return new ReseedingController(this, cloner);
@@ -61,4 +81,5 @@
       Parameters.Add(new ValueLookupParameter<IntValue>("AgeGap", "The frequency of reseeding the lowest layer and scaling factor for the age-limits for the layers."));
       Parameters.Add(new OperatorParameter("FirstLayerOperator", "The operator that is performed on the first layer if reseeding is required."));
+      Parameters.Add(new OperatorParameter("ReinitializationStrategyOperator", "The optional operator to control the strategy parameter."));
     }
 
@@ -69,7 +90,14 @@
       var next = new OperationCollection(base.Apply());
       if (generations % ageGap == 0) {
-        var layerZeroScope = ExecutionContext.Scope.SubScopes[0];
-        if (FirstLayerOperator != null)
+        if (FirstLayerOperator != null) {
+          var layerZeroScope = ExecutionContext.Scope.SubScopes.First();
           next.Insert(0, ExecutionContext.CreateChildOperation(FirstLayerOperator, layerZeroScope));
+        }
+
+        // insert at index 0 => strategy adaption is scheduled before reinitialization
+        if (ReinitializationStrategyOperator != null) {
+          var lastLayerScope = ExecutionContext.Scope.SubScopes.Last();
+          next.Insert(0, ExecutionContext.CreateChildOperation(ReinitializationStrategyOperator, lastLayerScope));
+        }
       }
       return next;
Index: branches/3107_LearningALPS/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj
===================================================================
--- branches/3107_LearningALPS/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj	(revision 17852)
+++ branches/3107_LearningALPS/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj	(revision 17854)
@@ -156,4 +156,5 @@
     <Compile Include="Interfaces\ILocalImprovementAlgorithmOperator.cs" />
     <Compile Include="Interfaces\IMultiObjectiveOperator.cs" />
+    <Compile Include="Interfaces\IReinitializationStrategyController.cs" />
     <Compile Include="MultiObjective\DominationCalculator.cs" />
     <Compile Include="Results\IResultParameter.cs" />
Index: branches/3107_LearningALPS/HeuristicLab.Optimization/3.3/Interfaces/IReinitializationStrategyController.cs
===================================================================
--- branches/3107_LearningALPS/HeuristicLab.Optimization/3.3/Interfaces/IReinitializationStrategyController.cs	(revision 17854)
+++ branches/3107_LearningALPS/HeuristicLab.Optimization/3.3/Interfaces/IReinitializationStrategyController.cs	(revision 17854)
@@ -0,0 +1,10 @@
+﻿using HEAL.Attic;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Optimization {
+  /// <summary>
+  /// An operator that adapts the strategy for reinitialization.
+  /// </summary>
+  [StorableType("2FF35338-3886-474B-8481-E37A8F5FE559")]
+  public interface IReinitializationStrategyController : IOperator { }
+}
Index: branches/3107_LearningALPS/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Creators/SymbolFrequencyReinitializationStrategyController.cs
===================================================================
--- branches/3107_LearningALPS/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Creators/SymbolFrequencyReinitializationStrategyController.cs	(revision 17854)
+++ branches/3107_LearningALPS/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Creators/SymbolFrequencyReinitializationStrategyController.cs	(revision 17854)
@@ -0,0 +1,56 @@
+﻿using HEAL.Attic;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
+using HeuristicLab.Operators;
+using HeuristicLab.Parameters;
+
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic {
+  [Item("SymbolFrequencyReinitializationStrategyController", "")]
+  [StorableType("8F0B7020-A02F-491D-881A-5CE550426E5B")]
+  public class SymbolFrequencyReinitializationStrategyController : InstrumentedOperator {
+
+    private const string SymbolicExpressionTreeParameterName = "SymbolicExpressionTree";
+    private const string SymbolicExpressionTreeGrammarParameterName = "SymbolicExpressionTreeGrammar";
+
+    #region Parameter Properties
+    public IScopeTreeLookupParameter<ISymbolicExpressionTree> SymbolicExpressionTreeParameter {
+      get { return (IScopeTreeLookupParameter<ISymbolicExpressionTree>)Parameters[SymbolicExpressionTreeParameterName]; }
+    }
+
+    public IValueLookupParameter<ISymbolicExpressionGrammar> SymbolicExpressionTreeGrammarParameter {
+      get { return (IValueLookupParameter<ISymbolicExpressionGrammar>)Parameters[SymbolicExpressionTreeGrammarParameterName]; }
+    }
+    #endregion
+
+    #region Constructos
+    public SymbolFrequencyReinitializationStrategyController() {
+      Parameters.Add(new ScopeTreeLookupParameter<ISymbolicExpressionTree>(SymbolicExpressionTreeParameterName, "The symbolic expression tree whose length should be calculated."));
+      Parameters.Add(new ValueLookupParameter<ISymbolicExpressionGrammar>(SymbolicExpressionTreeGrammarParameterName, "The tree grammar that defines the correct syntax of symbolic expression trees that should be created."));
+    }
+
+    private SymbolFrequencyReinitializationStrategyController(SymbolFrequencyReinitializationStrategyController original, Cloner cloner)
+      : base(original, cloner) { }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SymbolFrequencyReinitializationStrategyController(this, cloner);
+    }
+
+    [StorableConstructor]
+    private SymbolFrequencyReinitializationStrategyController(StorableConstructorFlag _) : base(_) { }
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+    }
+    #endregion
+
+
+    public override IOperation InstrumentedApply() {
+      var trees = SymbolicExpressionTreeParameter.ActualValue;
+      var grammar = SymbolicExpressionTreeGrammarParameter.ActualValue;
+
+      var symbolFrequencies = SymbolicExpressionSymbolFrequencyAnalyzer.CalculateSymbolFrequencies(trees);
+      // TODO: adapt grammar
+
+      return base.InstrumentedApply();
+    }
+  }
+}
Index: branches/3107_LearningALPS/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj
===================================================================
--- branches/3107_LearningALPS/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj	(revision 17852)
+++ branches/3107_LearningALPS/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj	(revision 17854)
@@ -150,4 +150,5 @@
     <Compile Include="Converters\DerivativeCalculator.cs" />
     <Compile Include="Converters\TreeToAutoDiffTermConverter.cs" />
+    <Compile Include="Creators\SymbolFrequencyReinitializationStrategyController.cs" />
     <Compile Include="Creators\SymbolicDataAnalysisExpressionBalancedTreeCreator.cs" />
     <Compile Include="Crossovers\SymbolicDataAnalysisExpressionDiversityPreservingCrossover.cs" />
