Index: branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/AlpsSsGeneticAlgorithm.cs
===================================================================
--- branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/AlpsSsGeneticAlgorithm.cs	(revision 12119)
+++ branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/AlpsSsGeneticAlgorithm.cs	(revision 12119)
@@ -0,0 +1,74 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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 System;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Algorithms.ALPS.SteadyState {
+  [Item("ALPS Steady-State Genetic Algorithm", "A genetic algorithmn with a steady-state age-layered population structure")]
+  [Creatable("Algorithms")]
+  [StorableClass]
+  public class AlpsSsGeneticAlgorithm : Alps {
+    #region Parameter Properties
+    // TODO
+    #endregion
+
+    #region Properties
+    // TODO
+    #endregion
+
+    [StorableConstructor]
+    private AlpsSsGeneticAlgorithm(bool deserializing)
+      : base(deserializing) { }
+    private AlpsSsGeneticAlgorithm(AlpsSsGeneticAlgorithm original, Cloner cloner)
+      : base(original, cloner) {
+      Initialize();
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AlpsSsGeneticAlgorithm(this, cloner);
+    }
+
+    public AlpsSsGeneticAlgorithm()
+      : base() {
+
+      // TODO
+
+      Initialize();
+    }
+
+    #region Events
+    #endregion
+
+    #region Parameterization
+    private void Initialize() {
+      // TODO
+    }
+    #endregion
+
+    #region Updates
+    #endregion
+  }
+}
Index: branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/HeuristicLab.Algorithms.ALPS.SteadyState-3.3.csproj
===================================================================
--- branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/HeuristicLab.Algorithms.ALPS.SteadyState-3.3.csproj	(revision 12115)
+++ branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/HeuristicLab.Algorithms.ALPS.SteadyState-3.3.csproj	(revision 12119)
@@ -76,4 +76,32 @@
   </PropertyGroup>
   <ItemGroup>
+    <Reference Include="HeuristicLab.Collections-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Collections-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Common-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Common-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Core-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Data-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Data-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Optimization-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Optimization-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Parameters-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Parameters-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Persistence-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Persistence-3.3.dll</HintPath>
+    </Reference>
     <Reference Include="HeuristicLab.PluginInfrastructure-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
       <SpecificVersion>False</SpecificVersion>
@@ -94,6 +122,13 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="AlpsSsGeneticAlgorithm.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="Plugin.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Algorithms.ALPS\3.3\HeuristicLab.Algorithms.ALPS-3.3.csproj">
+      <Project>{59F354CB-FE13-4253-AED2-AD86372BEC27}</Project>
+      <Name>HeuristicLab.Algorithms.ALPS-3.3</Name>
+    </ProjectReference>
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
Index: branches/ALPS/HeuristicLab.Algorithms.ALPS/3.3/AgingSchemeCalculator.cs
===================================================================
--- branches/ALPS/HeuristicLab.Algorithms.ALPS/3.3/AgingSchemeCalculator.cs	(revision 12119)
+++ branches/ALPS/HeuristicLab.Algorithms.ALPS/3.3/AgingSchemeCalculator.cs	(revision 12119)
@@ -0,0 +1,66 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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 System;
+using System.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Algorithms.ALPS {
+  public static class AgingSchemeCalculator {
+    public static IntArray CalculateAgeLimits(AgingSchemes scheme, int ageGap, int numberOfLayers) {
+      IEnumerable<int> schemeGenerator;
+      switch (scheme) {
+        case AgingSchemes.Linear: schemeGenerator = LinearAgingScheme(); break;
+        case AgingSchemes.Fibonacci: schemeGenerator = FibonacciAgingScheme(); break;
+        case AgingSchemes.Polynomial: schemeGenerator = PolynomialAgingScheme(2); break;
+        case AgingSchemes.Exponential: schemeGenerator = ExponentialAgingScheme(2); break;
+        default: throw new NotSupportedException("Aging Scheme " + scheme + " is not supported.");
+      }
+
+      return new IntArray(schemeGenerator.Select(a => a * ageGap).Take(numberOfLayers).ToArray());
+    }
+
+    // 1 2 3 4 5 6 7 ...
+    private static IEnumerable<int> LinearAgingScheme() {
+      for (int i = 0; ; i++)
+        yield return i + 1;
+    }
+    // 1 2 3 5 8 13 21 ...
+    private static IEnumerable<int> FibonacciAgingScheme() {
+      for (int i = 1, next = 2, temp; ; temp = next, next = i + next, i = temp)
+        yield return i;
+    }
+    // (n^2): 1 2 4 9 16 25 36 ...
+    private static IEnumerable<int> PolynomialAgingScheme(double exp) {
+      yield return 1;
+      yield return 2;
+      for (int i = 2; ; i++)
+        yield return (int)Math.Pow(i, exp);
+
+    }
+    // 1 2 4 8 16 32 64 ...
+    private static IEnumerable<int> ExponentialAgingScheme(double @base) {
+      for (int i = 0; ; i++)
+        yield return (int)Math.Pow(@base, i);
+    }
+  }
+}
Index: branches/ALPS/HeuristicLab.Algorithms.ALPS/3.3/Alps.cs
===================================================================
--- branches/ALPS/HeuristicLab.Algorithms.ALPS/3.3/Alps.cs	(revision 12119)
+++ branches/ALPS/HeuristicLab.Algorithms.ALPS/3.3/Alps.cs	(revision 12119)
@@ -0,0 +1,363 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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 System;
+using System.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Analysis;
+using HeuristicLab.Collections;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.Optimization;
+using HeuristicLab.Optimization.Operators;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Random;
+
+namespace HeuristicLab.Algorithms.ALPS {
+  [Item("ALPS", "A base class for all ALPS-based algorithms.")]
+  public abstract class Alps : HeuristicOptimizationEngineAlgorithm, IStorableContent {
+    public string Filename { get; set; }
+
+    #region Problem Properties
+    public override Type ProblemType {
+      get { return typeof(ISingleObjectiveHeuristicOptimizationProblem); }
+    }
+    public new ISingleObjectiveHeuristicOptimizationProblem Problem {
+      get { return (ISingleObjectiveHeuristicOptimizationProblem)base.Problem; }
+      set { base.Problem = value; }
+    }
+    #endregion
+
+    #region Parameter Properties
+    private IValueParameter<IntValue> SeedParameter {
+      get { return (IValueParameter<IntValue>)Parameters["Seed"]; }
+    }
+    private IValueParameter<BoolValue> SetSeedRandomlyParameter {
+      get { return (IValueParameter<BoolValue>)Parameters["SetSeedRandomly"]; }
+    }
+    private IFixedValueParameter<MultiAnalyzer> AnalyzerParameter {
+      get { return (IFixedValueParameter<MultiAnalyzer>)Parameters["Analyzer"]; }
+    }
+    private IFixedValueParameter<MultiAnalyzer> LayerAnalyzerParameter {
+      get { return (IFixedValueParameter<MultiAnalyzer>)Parameters["LayerAnalyzer"]; }
+    }
+    private IValueParameter<IntValue> NumberOfLayersParameter {
+      get { return (IValueParameter<IntValue>)Parameters["NumberOfLayers"]; }
+    }
+
+    private IValueParameter<AgingScheme> AgingSchemeParameter {
+      get { return (IValueParameter<AgingScheme>)Parameters["AgingScheme"]; }
+    }
+    private IValueParameter<IntValue> AgeGapParameter {
+      get { return (IValueParameter<IntValue>)Parameters["AgeGap"]; }
+    }
+    private IValueParameter<IntArray> AgeLimitsParameter {
+      get { return (IValueParameter<IntArray>)Parameters["AgeLimits"]; }
+    }
+    private IValueParameter<ReductionOperation> AgeInheritanceParameter {
+      get { return (IValueParameter<ReductionOperation>)Parameters["AgeInheritance"]; }
+    }
+    private IValueParameter<IntValue> MatingPoolRangeParameter {
+      get { return (IValueParameter<IntValue>)Parameters["MatingPoolRange"]; }
+    }
+    private IValueParameter<PercentValue> MatingPoolSelectionPercentageParameter {
+      get { return (IValueLookupParameter<PercentValue>)Parameters["MatingPoolSelectionPercentage"]; }
+    }
+    #endregion
+
+    #region Properties
+    public IntValue Seed {
+      get { return SeedParameter.Value; }
+      set { SeedParameter.Value = value; }
+    }
+    public BoolValue SetSeedRandomly {
+      get { return SetSeedRandomlyParameter.Value; }
+      set { SetSeedRandomlyParameter.Value = value; }
+    }
+    public MultiAnalyzer Analyzer {
+      get { return AnalyzerParameter.Value; }
+    }
+    public MultiAnalyzer LayerAnalyzer {
+      get { return LayerAnalyzerParameter.Value; }
+    }
+    public IntValue NumberOfLayers {
+      get { return NumberOfLayersParameter.Value; }
+      set { NumberOfLayersParameter.Value = value; }
+    }
+
+    public AgingScheme AgingScheme {
+      get { return AgingSchemeParameter.Value; }
+      set { AgingSchemeParameter.Value = value; }
+    }
+    public IntValue AgeGap {
+      get { return AgeGapParameter.Value; }
+      set { AgeGapParameter.Value = value; }
+    }
+    public IntArray AgeLimits {
+      get { return AgeLimitsParameter.Value; }
+      set { AgeLimitsParameter.Value = value; }
+    }
+    public ReductionOperation AgeInheritance {
+      get { return AgeInheritanceParameter.Value; }
+      set { AgeInheritanceParameter.Value = value; }
+    }
+    public IntValue MatingPoolRange {
+      get { return MatingPoolRangeParameter.Value; }
+      set { MatingPoolRangeParameter.Value = value; }
+    }
+    public PercentValue MatingPoolSelectionPercentage {
+      get { return MatingPoolSelectionPercentageParameter.Value; }
+      set { MatingPoolSelectionPercentageParameter.Value = value; }
+    }
+    #endregion
+
+    #region Helper Properties
+    protected RandomCreator GlobalRandomCreator {
+      get { return (RandomCreator)OperatorGraph.InitialOperator; }
+    }
+    protected SolutionsCreator SolutionsCreator {
+      get { return OperatorGraph.Iterate().OfType<SolutionsCreator>().First(); }
+    }
+    #endregion
+
+    #region Preconfigured Analyzers
+    [Storable]
+    private BestAverageWorstQualityAnalyzer qualityAnalyzer;
+    [Storable]
+    private BestAverageWorstQualityAnalyzer layerQualityAnalyzer;
+    #endregion
+
+    [StorableConstructor]
+    protected Alps(bool deserializing)
+      : base(deserializing) { }
+    protected Alps(Alps original, Cloner cloner)
+      : base(original, cloner) {
+      qualityAnalyzer = cloner.Clone(original.qualityAnalyzer);
+      layerQualityAnalyzer = cloner.Clone(original.layerQualityAnalyzer);
+      Initialize();
+    }
+
+    protected Alps()
+      : base() {
+      Parameters.Add(new ValueParameter<IntValue>("Seed", "The random seed used to initialize the new pseudo random number generator.", new IntValue(0)));
+      Parameters.Add(new ValueParameter<BoolValue>("SetSeedRandomly", "True if the random seed should be set to a random value, otherwise false.", new BoolValue(true)));
+      Parameters.Add(new FixedValueParameter<MultiAnalyzer>("Analyzer", "The operator used to analyze the islands.", new MultiAnalyzer()));
+      Parameters.Add(new FixedValueParameter<MultiAnalyzer>("LayerAnalyzer", "The operator used to analyze each layer.", new MultiAnalyzer()));
+      Parameters.Add(new ValueParameter<IntValue>("NumberOfLayers", "The number of layers.", new IntValue(10)));
+
+      Parameters.Add(new ValueParameter<AgingScheme>("AgingScheme", "The aging scheme for setting the age-limits for the layers.", new AgingScheme(AgingSchemes.Polynomial)));
+      Parameters.Add(new ValueParameter<IntValue>("AgeGap", "The frequency of reseeding the lowest layer and scaling factor for the age-limits for the layers", new IntValue(20)));
+      Parameters.Add(new ValueParameter<IntArray>("AgeLimits", new IntArray(new int[0])) { Hidden = true });
+      Parameters.Add(new ValueParameter<ReductionOperation>("AgeInheritance", "The operator for determining the age of an offspring based the parents' age.", new ReductionOperation(ReductionOperations.Max)) { Hidden = true });
+      Parameters.Add(new ValueParameter<IntValue>("MatingPoolRange", "The range of layers used for creating a mating pool. (1 = current + previous layer)", new IntValue(1)) { Hidden = true });
+      Parameters.Add(new ValueParameter<PercentValue>("MatingPoolSelectionPercentage", "Percentage of the previous layers used for creating a mating pool.", new PercentValue(1.0, restrictToUnitInterval: true)) { Hidden = true });
+
+      qualityAnalyzer = new BestAverageWorstQualityAnalyzer();
+      layerQualityAnalyzer = new BestAverageWorstQualityAnalyzer();
+
+      // Create Operator Graph
+
+      RecalculateAgeLimits();
+
+      ParameterizeAnalyzers();
+      UpdateAnalyzers();
+
+      Initialize();
+    }
+
+    public override void Prepare() {
+      if (Problem != null)
+        base.Prepare();
+    }
+
+    #region Events
+
+    protected override void OnProblemChanged() {
+      base.OnProblemChanged();
+      ParameterizeStochasticOperator(Problem.SolutionCreator);
+      ParameterizeStochasticOperatorForLayer(Problem.Evaluator);
+      foreach (var @operator in Problem.Operators.OfType<IOperator>())
+        ParameterizeStochasticOperator(@operator);
+      ParameterizeSolutionsCreator();
+      ParameterizeAnalyzers();
+      ParameterizeIterationBasedOperators();
+      UpdateAnalyzers();
+      Problem.Evaluator.QualityParameter.ActualNameChanged += Evaluator_QualityParameter_ActualNameChanged;
+    }
+    protected override void Problem_SolutionCreatorChanged(object sender, EventArgs e) {
+      base.Problem_SolutionCreatorChanged(sender, e);
+      ParameterizeStochasticOperator(Problem.SolutionCreator);
+      ParameterizeSolutionsCreator();
+    }
+    protected override void Problem_EvaluatorChanged(object sender, EventArgs e) {
+      base.Problem_EvaluatorChanged(sender, e);
+      ParameterizeStochasticOperatorForLayer(Problem.Evaluator);
+      ParameterizeSolutionsCreator();
+      ParameterizeAnalyzers();
+      Problem.Evaluator.QualityParameter.ActualNameChanged += Evaluator_QualityParameter_ActualNameChanged;
+    }
+
+    protected override void Problem_OperatorsChanged(object sender, EventArgs e) {
+      foreach (var @operator in Problem.Operators.OfType<IOperator>())
+        ParameterizeStochasticOperator(@operator);
+      ParameterizeIterationBasedOperators();
+      UpdateAnalyzers();
+      base.Problem_OperatorsChanged(sender, e);
+    }
+    protected virtual void Evaluator_QualityParameter_ActualNameChanged(object sender, EventArgs e) {
+      ParameterizeAnalyzers();
+    }
+
+    private void AgeGapParameter_ValueChanged(object sender, EventArgs e) {
+      AgeGap.ValueChanged += AgeGap_ValueChanged;
+      RecalculateAgeLimits();
+    }
+    private void AgeGap_ValueChanged(object sender, EventArgs e) {
+      RecalculateAgeLimits();
+    }
+    private void AgingSchemeParameter_ValueChanged(object sender, EventArgs e) {
+      AgingScheme.ValueChanged += AgingScheme_ValueChanged;
+      RecalculateAgeLimits();
+    }
+    private void AgingScheme_ValueChanged(object sender, EventArgs e) {
+      RecalculateAgeLimits();
+    }
+    private void NumberOfLayersParameter_ValueChanged(object sender, EventArgs e) {
+      NumberOfLayers.ValueChanged += NumberOfLayers_ValueChanged;
+      RecalculateAgeLimits();
+    }
+    private void NumberOfLayers_ValueChanged(object sender, EventArgs e) {
+      RecalculateAgeLimits();
+    }
+    private void AnalyzerOperators_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<IAnalyzer>> e) {
+      foreach (var analyzer in e.Items) {
+        foreach (var parameter in analyzer.Value.Parameters.OfType<IScopeTreeLookupParameter>()) {
+          parameter.Depth = 2;
+        }
+      }
+    }
+    private void LayerAnalyzerOperators_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<IAnalyzer>> e) {
+      foreach (var analyzer in e.Items) {
+        IParameter resultParameter;
+        if (analyzer.Value.Parameters.TryGetValue("Results", out resultParameter)) {
+          var lookupParameter = resultParameter as ILookupParameter<ResultCollection>;
+          if (lookupParameter != null)
+            lookupParameter.ActualName = "LayerResults";
+        }
+        foreach (var parameter in analyzer.Value.Parameters.OfType<IScopeTreeLookupParameter>()) {
+          parameter.Depth = 1;
+        }
+      }
+    }
+    #endregion
+
+    #region Parameterization
+    private void Initialize() {
+      if (Problem != null)
+        Problem.Evaluator.QualityParameter.ActualNameChanged += Evaluator_QualityParameter_ActualNameChanged;
+      AgeGapParameter.ValueChanged += AgeGapParameter_ValueChanged;
+      AgeGap.ValueChanged += AgeGap_ValueChanged;
+      AgingSchemeParameter.ValueChanged += AgingSchemeParameter_ValueChanged;
+      AgingScheme.ValueChanged += AgingScheme_ValueChanged;
+      NumberOfLayersParameter.ValueChanged += NumberOfLayersParameter_ValueChanged;
+      NumberOfLayers.ValueChanged += NumberOfLayers_ValueChanged;
+      Analyzer.Operators.ItemsAdded += AnalyzerOperators_ItemsAdded;
+      LayerAnalyzer.Operators.ItemsAdded += LayerAnalyzerOperators_ItemsAdded;
+    }
+    private void ParameterizeSolutionsCreator() {
+      SolutionsCreator.EvaluatorParameter.ActualName = Problem.EvaluatorParameter.Name;
+      SolutionsCreator.SolutionCreatorParameter.ActualName = Problem.SolutionCreatorParameter.Name;
+    }
+    private void ParameterizeAnalyzers() {
+      qualityAnalyzer.ResultsParameter.ActualName = "Results";
+      qualityAnalyzer.ResultsParameter.Hidden = true;
+      qualityAnalyzer.QualityParameter.Depth = 2;
+      layerQualityAnalyzer.ResultsParameter.ActualName = "Results";
+      layerQualityAnalyzer.ResultsParameter.Hidden = true;
+      layerQualityAnalyzer.QualityParameter.Depth = 1;
+      if (Problem != null) {
+        qualityAnalyzer.MaximizationParameter.ActualName = Problem.MaximizationParameter.Name;
+        qualityAnalyzer.MaximizationParameter.Hidden = true;
+        qualityAnalyzer.QualityParameter.ActualName = Problem.Evaluator.QualityParameter.ActualName;
+        qualityAnalyzer.QualityParameter.Hidden = true;
+        qualityAnalyzer.BestKnownQualityParameter.ActualName = Problem.BestKnownQualityParameter.Name;
+        qualityAnalyzer.BestKnownQualityParameter.Hidden = true;
+        layerQualityAnalyzer.MaximizationParameter.ActualName = Problem.MaximizationParameter.Name;
+        layerQualityAnalyzer.MaximizationParameter.Hidden = true;
+        layerQualityAnalyzer.QualityParameter.ActualName = Problem.Evaluator.QualityParameter.ActualName;
+        layerQualityAnalyzer.QualityParameter.Hidden = true;
+        layerQualityAnalyzer.BestKnownQualityParameter.ActualName = Problem.BestKnownQualityParameter.Name;
+        layerQualityAnalyzer.BestKnownQualityParameter.Hidden = true;
+      }
+    }
+    private void ParameterizeIterationBasedOperators() {
+      if (Problem != null) {
+        foreach (var @operator in Problem.Operators.OfType<IIterationBasedOperator>()) {
+          @operator.IterationsParameter.ActualName = "Generations";
+          @operator.IterationsParameter.Hidden = true;
+          @operator.MaximumIterationsParameter.ActualName = "MaximumGenerations";
+          @operator.MaximumIterationsParameter.Hidden = true;
+        }
+      }
+    }
+    protected void ParameterizeStochasticOperator(IOperator @operator) {
+      var stochasticOperator = @operator as IStochasticOperator;
+      if (stochasticOperator != null) {
+        stochasticOperator.RandomParameter.ActualName = GlobalRandomCreator.RandomParameter.ActualName;
+        stochasticOperator.RandomParameter.Hidden = true;
+      }
+    }
+    protected void ParameterizeStochasticOperatorForLayer(IOperator @operator) {
+      var stochasticOperator = @operator as IStochasticOperator;
+      if (stochasticOperator != null) {
+        stochasticOperator.RandomParameter.ActualName = "LocalRandom";
+        stochasticOperator.RandomParameter.Hidden = true;
+      }
+    }
+    #endregion
+
+    #region Updates
+    private void UpdateAnalyzers() {
+      Analyzer.Operators.Clear();
+      LayerAnalyzer.Operators.Clear();
+
+      Analyzer.Operators.Add(qualityAnalyzer, qualityAnalyzer.EnabledByDefault);
+      LayerAnalyzer.Operators.Add(layerQualityAnalyzer, layerQualityAnalyzer.EnabledByDefault);
+
+      if (Problem != null) {
+        foreach (var analyzer in Problem.Operators.OfType<IAnalyzer>()) {
+          Analyzer.Operators.Add(analyzer, analyzer.EnabledByDefault);
+        }
+      }
+    }
+    #endregion
+
+    private void RecalculateAgeLimits() {
+      var scheme = AgingScheme.Value;
+      int ageGap = AgeGap.Value;
+      int numberOfLayers = NumberOfLayers.Value;
+      AgeLimits = AgingSchemeCalculator.CalculateAgeLimits(scheme, ageGap, numberOfLayers);
+    }
+  }
+}
Index: branches/ALPS/HeuristicLab.Algorithms.ALPS/3.3/AlpsGeneticAlgorithm.cs
===================================================================
--- branches/ALPS/HeuristicLab.Algorithms.ALPS/3.3/AlpsGeneticAlgorithm.cs	(revision 12115)
+++ branches/ALPS/HeuristicLab.Algorithms.ALPS/3.3/AlpsGeneticAlgorithm.cs	(revision 12119)
@@ -21,8 +21,5 @@
 
 using System;
-using System.Collections.Generic;
 using System.Linq;
-using HeuristicLab.Analysis;
-using HeuristicLab.Collections;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -41,33 +38,6 @@
   [Creatable("Algorithms")]
   [StorableClass]
-  public sealed class AlpsGeneticAlgorithm : HeuristicOptimizationEngineAlgorithm, IStorableContent {
-    public string Filename { get; set; }
-
-    #region Problem Properties
-    public override Type ProblemType {
-      get { return typeof(ISingleObjectiveHeuristicOptimizationProblem); }
-    }
-    public new ISingleObjectiveHeuristicOptimizationProblem Problem {
-      get { return (ISingleObjectiveHeuristicOptimizationProblem)base.Problem; }
-      set { base.Problem = value; }
-    }
-    #endregion
-
+  public sealed class AlpsGeneticAlgorithm : Alps {
     #region Parameter Properties
-    private IValueParameter<IntValue> SeedParameter {
-      get { return (IValueParameter<IntValue>)Parameters["Seed"]; }
-    }
-    private IValueParameter<BoolValue> SetSeedRandomlyParameter {
-      get { return (IValueParameter<BoolValue>)Parameters["SetSeedRandomly"]; }
-    }
-    private IFixedValueParameter<MultiAnalyzer> AnalyzerParameter {
-      get { return (IFixedValueParameter<MultiAnalyzer>)Parameters["Analyzer"]; }
-    }
-    private IFixedValueParameter<MultiAnalyzer> LayerAnalyzerParameter {
-      get { return (IFixedValueParameter<MultiAnalyzer>)Parameters["LayerAnalyzer"]; }
-    }
-    private IValueParameter<IntValue> NumberOfLayersParameter {
-      get { return (IValueParameter<IntValue>)Parameters["NumberOfLayers"]; }
-    }
     private IValueParameter<IntArray> PopulationSizeParameter {
       get { return (IValueParameter<IntArray>)Parameters["PopulationSize"]; }
@@ -76,22 +46,5 @@
       get { return (IValueParameter<IntValue>)Parameters["MaximumGenerations"]; }
     }
-    private IValueParameter<AgingScheme> AgingSchemeParameter {
-      get { return (IValueParameter<AgingScheme>)Parameters["AgingScheme"]; }
-    }
-    private IValueParameter<IntValue> AgeGapParameter {
-      get { return (IValueParameter<IntValue>)Parameters["AgeGap"]; }
-    }
-    private IValueParameter<IntArray> AgeLimitsParameter {
-      get { return (IValueParameter<IntArray>)Parameters["AgeLimits"]; }
-    }
-    private IValueParameter<ReductionOperation> AgeInheritanceParameter {
-      get { return (IValueParameter<ReductionOperation>)Parameters["AgeInheritance"]; }
-    }
-    private IValueParameter<IntValue> MatingPoolRangeParameter {
-      get { return (IValueParameter<IntValue>)Parameters["MatingPoolRange"]; }
-    }
-    private IValueParameter<PercentValue> MatingPoolSelectionPercentageParameter {
-      get { return (IValueLookupParameter<PercentValue>)Parameters["MatingPoolSelectionPercentage"]; }
-    }
+
     public IConstrainedValueParameter<ISelector> SelectorParameter {
       get { return (IConstrainedValueParameter<ISelector>)Parameters["Selector"]; }
@@ -115,23 +68,4 @@
 
     #region Properties
-    public IntValue Seed {
-      get { return SeedParameter.Value; }
-      set { SeedParameter.Value = value; }
-    }
-    public BoolValue SetSeedRandomly {
-      get { return SetSeedRandomlyParameter.Value; }
-      set { SetSeedRandomlyParameter.Value = value; }
-    }
-    public MultiAnalyzer Analyzer {
-      get { return AnalyzerParameter.Value; }
-    }
-    public MultiAnalyzer LayerAnalyzer {
-      get { return LayerAnalyzerParameter.Value; }
-    }
-    public IntValue NumberOfLayers {
-      get { return NumberOfLayersParameter.Value; }
-      set { NumberOfLayersParameter.Value = value; }
-    }
-
     public IntArray PopulationSize {
       get { return PopulationSizeParameter.Value; }
@@ -142,28 +76,5 @@
       set { MaximumGenerationsParameter.Value = value; }
     }
-    public AgingScheme AgingScheme {
-      get { return AgingSchemeParameter.Value; }
-      set { AgingSchemeParameter.Value = value; }
-    }
-    public IntValue AgeGap {
-      get { return AgeGapParameter.Value; }
-      set { AgeGapParameter.Value = value; }
-    }
-    public IntArray AgeLimits {
-      get { return AgeLimitsParameter.Value; }
-      set { AgeLimitsParameter.Value = value; }
-    }
-    public ReductionOperation AgeInheritance {
-      get { return AgeInheritanceParameter.Value; }
-      set { AgeInheritanceParameter.Value = value; }
-    }
-    public IntValue MatingPoolRange {
-      get { return MatingPoolRangeParameter.Value; }
-      set { MatingPoolRangeParameter.Value = value; }
-    }
-    public PercentValue MatingPoolSelectionPercentage {
-      get { return MatingPoolSelectionPercentageParameter.Value; }
-      set { MatingPoolSelectionPercentageParameter.Value = value; }
-    }
+
     public ISelector Selector {
       get { return SelectorParameter.Value; }
@@ -191,21 +102,8 @@
     }
 
-    private RandomCreator GlobalRandomCreator {
-      get { return (RandomCreator)OperatorGraph.InitialOperator; }
-    }
-    private SolutionsCreator SolutionsCreator {
-      get { return OperatorGraph.Iterate().OfType<SolutionsCreator>().First(); }
-    }
+
     private AlpsGeneticAlgorithmMainLoop MainLoop {
       get { return OperatorGraph.Iterate().OfType<AlpsGeneticAlgorithmMainLoop>().First(); }
     }
-
-    #endregion
-
-    #region Preconfigured Analyzers
-    [Storable]
-    private BestAverageWorstQualityAnalyzer qualityAnalyzer;
-    [Storable]
-    private BestAverageWorstQualityAnalyzer layerQualityAnalyzer;
     #endregion
 
@@ -215,6 +113,4 @@
     private AlpsGeneticAlgorithm(AlpsGeneticAlgorithm original, Cloner cloner)
       : base(original, cloner) {
-      qualityAnalyzer = cloner.Clone(original.qualityAnalyzer);
-      layerQualityAnalyzer = cloner.Clone(original.layerQualityAnalyzer);
       Initialize();
     }
@@ -224,17 +120,6 @@
     public AlpsGeneticAlgorithm()
       : base() {
-      Parameters.Add(new ValueParameter<IntValue>("Seed", "The random seed used to initialize the new pseudo random number generator.", new IntValue(0)));
-      Parameters.Add(new ValueParameter<BoolValue>("SetSeedRandomly", "True if the random seed should be set to a random value, otherwise false.", new BoolValue(true)));
-      Parameters.Add(new FixedValueParameter<MultiAnalyzer>("Analyzer", "The operator used to analyze the islands.", new MultiAnalyzer()));
-      Parameters.Add(new FixedValueParameter<MultiAnalyzer>("LayerAnalyzer", "The operator used to analyze each layer.", new MultiAnalyzer()));
-      Parameters.Add(new ValueParameter<IntValue>("NumberOfLayers", "The number of layers.", new IntValue(10)));
       Parameters.Add(new ValueParameter<IntArray>("PopulationSize", "The size of the population of solutions each layer.", new IntArray(new[] { 100 })));
       Parameters.Add(new ValueParameter<IntValue>("MaximumGenerations", "The maximum number of generations that should be processed.", new IntValue(1000)));
-      Parameters.Add(new ValueParameter<AgingScheme>("AgingScheme", "The aging scheme for setting the age-limits for the layers.", new AgingScheme(AgingSchemes.Polynomial)));
-      Parameters.Add(new ValueParameter<IntValue>("AgeGap", "The frequency of reseeding the lowest layer and scaling factor for the age-limits for the layers", new IntValue(20)));
-      Parameters.Add(new ValueParameter<IntArray>("AgeLimits", new IntArray(new int[0])) { Hidden = true });
-      Parameters.Add(new ValueParameter<ReductionOperation>("AgeInheritance", "The operator for determining the age of an offspring based the parents' age.", new ReductionOperation(ReductionOperations.Max)) { Hidden = true });
-      Parameters.Add(new ValueParameter<IntValue>("MatingPoolRange", "The range of layers used for creating a mating pool. (1 = current + previous layer)", new IntValue(1)) { Hidden = true });
-      Parameters.Add(new ValueParameter<PercentValue>("MatingPoolSelectionPercentage", "Percentage of the previous layers used for creating a mating pool.", new PercentValue(1.0, restrictToUnitInterval: true)) { Hidden = true });
       Parameters.Add(new ConstrainedValueParameter<ISelector>("Selector", "The operator used to select solutions for reproduction."));
       Parameters.Add(new ConstrainedValueParameter<ICrossover>("Crossover", "The operator used to cross solutions."));
@@ -303,71 +188,43 @@
       foreach (var selector in ApplicationManager.Manager.GetInstances<ISelector>().Where(s => !(s is IMultiObjectiveSelector)).OrderBy(s => Name))
         SelectorParameter.ValidValues.Add(selector);
-      var porportionalSelector = SelectorParameter.ValidValues.FirstOrDefault(s => s is ProportionalSelector);
-      if (porportionalSelector != null) SelectorParameter.Value = porportionalSelector;
-
-      ParameterizeSelectors();
-
-      qualityAnalyzer = new BestAverageWorstQualityAnalyzer();
-      layerQualityAnalyzer = new BestAverageWorstQualityAnalyzer();
-
-      RecalculateAgeLimits();
-      ParameterizeAnalyzers();
-      UpdateAnalyzers();
-
+      var tournamentSelector = SelectorParameter.ValidValues.OfType<TournamentSelector>().FirstOrDefault();
+      if (tournamentSelector != null) {
+        tournamentSelector.GroupSizeParameter.Value = new IntValue(5);
+        SelectorParameter.Value = tournamentSelector;
+      }
+
+      ParameterizeSelectors();
       Initialize();
-    }
-
-    public override void Prepare() {
-      if (Problem != null)
-        base.Prepare();
     }
 
     #region Events
     protected override void OnProblemChanged() {
-      ParameterizeStochasticOperator(Problem.SolutionCreator);
-      ParameterizeStochasticOperatorForLayer(Problem.Evaluator);
-      foreach (var @operator in Problem.Operators.OfType<IOperator>())
-        ParameterizeStochasticOperator(@operator);
+      base.OnProblemChanged();
       ParameterizeSolutionsCreator();
       ParameterizeMainLoop();
       ParameterizeSelectors();
-      ParameterizeAnalyzers();
-      ParameterizeIterationBasedOperators();
       UpdateCrossovers();
       UpdateMutators();
-      UpdateAnalyzers();
-      Problem.Evaluator.QualityParameter.ActualNameChanged += Evaluator_QualityParameter_ActualNameChanged;
-      base.OnProblemChanged();
-    }
-
+    }
     protected override void Problem_SolutionCreatorChanged(object sender, EventArgs e) {
-      ParameterizeStochasticOperator(Problem.SolutionCreator);
+      base.Problem_SolutionCreatorChanged(sender, e);
       ParameterizeSolutionsCreator();
-      base.Problem_SolutionCreatorChanged(sender, e);
     }
     protected override void Problem_EvaluatorChanged(object sender, EventArgs e) {
-      ParameterizeStochasticOperatorForLayer(Problem.Evaluator);
+      base.Problem_EvaluatorChanged(sender, e);
       ParameterizeSolutionsCreator();
       ParameterizeMainLoop();
       ParameterizeSelectors();
-      ParameterizeAnalyzers();
-      Problem.Evaluator.QualityParameter.ActualNameChanged += Evaluator_QualityParameter_ActualNameChanged;
-      base.Problem_EvaluatorChanged(sender, e);
     }
     protected override void Problem_OperatorsChanged(object sender, EventArgs e) {
-      foreach (var @operator in Problem.Operators.OfType<IOperator>())
-        ParameterizeStochasticOperator(@operator);
-      ParameterizeIterationBasedOperators();
+      base.Problem_OperatorsChanged(sender, e);
       UpdateCrossovers();
       UpdateMutators();
-      UpdateAnalyzers();
-      base.Problem_OperatorsChanged(sender, e);
-    }
-    private void Evaluator_QualityParameter_ActualNameChanged(object sender, EventArgs e) {
+    }
+    protected override void Evaluator_QualityParameter_ActualNameChanged(object sender, EventArgs e) {
+      base.Evaluator_QualityParameter_ActualNameChanged(sender, e);
       ParameterizeMainLoop();
       ParameterizeSelectors();
-      ParameterizeAnalyzers();
-    }
-
+    }
     void PopulationSizeParameter_ValueChanged(object sender, EventArgs e) {
       PopulationSizeParameter.ValueChanged += PopulationSize_ValueChanged;
@@ -383,45 +240,4 @@
     void Elites_ValueChanged(object sender, EventArgs e) {
       ParameterizeSelectors();
-    }
-    private void AgeGapParameter_ValueChanged(object sender, EventArgs e) {
-      AgeGap.ValueChanged += AgeGap_ValueChanged;
-      RecalculateAgeLimits();
-    }
-    private void AgeGap_ValueChanged(object sender, EventArgs e) {
-      RecalculateAgeLimits();
-    }
-    private void AgingSchemeParameter_ValueChanged(object sender, EventArgs e) {
-      AgingScheme.ValueChanged += AgingScheme_ValueChanged;
-      RecalculateAgeLimits();
-    }
-    private void AgingScheme_ValueChanged(object sender, EventArgs e) {
-      RecalculateAgeLimits();
-    }
-    private void NumberOfLayersParameter_ValueChanged(object sender, EventArgs e) {
-      NumberOfLayers.ValueChanged += NumberOfLayers_ValueChanged;
-      RecalculateAgeLimits();
-    }
-    private void NumberOfLayers_ValueChanged(object sender, EventArgs e) {
-      RecalculateAgeLimits();
-    }
-    private void AnalyzerOperators_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<IAnalyzer>> e) {
-      foreach (var analyzer in e.Items) {
-        foreach (var parameter in analyzer.Value.Parameters.OfType<IScopeTreeLookupParameter>()) {
-          parameter.Depth = 2;
-        }
-      }
-    }
-    private void LayerAnalyzerOperators_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<IAnalyzer>> e) {
-      foreach (var analyzer in e.Items) {
-        IParameter resultParameter;
-        if (analyzer.Value.Parameters.TryGetValue("Results", out resultParameter)) {
-          var lookupParameter = resultParameter as ILookupParameter<ResultCollection>;
-          if (lookupParameter != null)
-            lookupParameter.ActualName = "LayerResults";
-        }
-        foreach (var parameter in analyzer.Value.Parameters.OfType<IScopeTreeLookupParameter>()) {
-          parameter.Depth = 1;
-        }
-      }
     }
     #endregion
@@ -430,21 +246,8 @@
     private void Initialize() {
       PopulationSizeParameter.ValueChanged += PopulationSizeParameter_ValueChanged;
-      //PopulationSize.ValueChanged += PopulationSize_ValueChanged; TODO
       ElitesParameter.ValueChanged += ElitesParameter_ValueChanged;
       Elites.ValueChanged += Elites_ValueChanged;
-      if (Problem != null)
-        Problem.Evaluator.QualityParameter.ActualNameChanged += Evaluator_QualityParameter_ActualNameChanged;
-      AgeGapParameter.ValueChanged += AgeGapParameter_ValueChanged;
-      AgeGap.ValueChanged += AgeGap_ValueChanged;
-      AgingSchemeParameter.ValueChanged += AgingSchemeParameter_ValueChanged;
-      AgingScheme.ValueChanged += AgingScheme_ValueChanged;
-      NumberOfLayersParameter.ValueChanged += NumberOfLayersParameter_ValueChanged;
-      NumberOfLayers.ValueChanged += NumberOfLayers_ValueChanged;
-      Analyzer.Operators.ItemsAdded += AnalyzerOperators_ItemsAdded;
-      LayerAnalyzer.Operators.ItemsAdded += LayerAnalyzerOperators_ItemsAdded;
     }
     private void ParameterizeSolutionsCreator() {
-      SolutionsCreator.EvaluatorParameter.ActualName = Problem.EvaluatorParameter.Name;
-      SolutionsCreator.SolutionCreatorParameter.ActualName = Problem.SolutionCreatorParameter.Name;
       MainLoop.LayerUpdator.SolutionsCreator.EvaluatorParameter.ActualName = Problem.EvaluatorParameter.Name;
       MainLoop.LayerUpdator.SolutionsCreator.SolutionCreatorParameter.ActualName = Problem.SolutionCreatorParameter.Name;
@@ -473,50 +276,4 @@
           selector.QualityParameter.Hidden = true;
         }
-      }
-    }
-    private void ParameterizeAnalyzers() {
-      qualityAnalyzer.ResultsParameter.ActualName = "Results";
-      qualityAnalyzer.ResultsParameter.Hidden = true;
-      qualityAnalyzer.QualityParameter.Depth = 2;
-      layerQualityAnalyzer.ResultsParameter.ActualName = "Results";
-      layerQualityAnalyzer.ResultsParameter.Hidden = true;
-      layerQualityAnalyzer.QualityParameter.Depth = 1;
-      if (Problem != null) {
-        qualityAnalyzer.MaximizationParameter.ActualName = Problem.MaximizationParameter.Name;
-        qualityAnalyzer.MaximizationParameter.Hidden = true;
-        qualityAnalyzer.QualityParameter.ActualName = Problem.Evaluator.QualityParameter.ActualName;
-        qualityAnalyzer.QualityParameter.Hidden = true;
-        qualityAnalyzer.BestKnownQualityParameter.ActualName = Problem.BestKnownQualityParameter.Name;
-        qualityAnalyzer.BestKnownQualityParameter.Hidden = true;
-        layerQualityAnalyzer.MaximizationParameter.ActualName = Problem.MaximizationParameter.Name;
-        layerQualityAnalyzer.MaximizationParameter.Hidden = true;
-        layerQualityAnalyzer.QualityParameter.ActualName = Problem.Evaluator.QualityParameter.ActualName;
-        layerQualityAnalyzer.QualityParameter.Hidden = true;
-        layerQualityAnalyzer.BestKnownQualityParameter.ActualName = Problem.BestKnownQualityParameter.Name;
-        layerQualityAnalyzer.BestKnownQualityParameter.Hidden = true;
-      }
-    }
-    private void ParameterizeIterationBasedOperators() {
-      if (Problem != null) {
-        foreach (var @operator in Problem.Operators.OfType<IIterationBasedOperator>()) {
-          @operator.IterationsParameter.ActualName = "Generations";
-          @operator.IterationsParameter.Hidden = true;
-          @operator.MaximumIterationsParameter.ActualName = "MaximumGenerations";
-          @operator.MaximumIterationsParameter.Hidden = true;
-        }
-      }
-    }
-    private void ParameterizeStochasticOperator(IOperator @operator) {
-      var stochasticOperator = @operator as IStochasticOperator;
-      if (stochasticOperator != null) {
-        stochasticOperator.RandomParameter.ActualName = GlobalRandomCreator.RandomParameter.ActualName;
-        stochasticOperator.RandomParameter.Hidden = true;
-      }
-    }
-    private void ParameterizeStochasticOperatorForLayer(IOperator @operator) {
-      var stochasticOperator = @operator as IStochasticOperator;
-      if (stochasticOperator != null) {
-        stochasticOperator.RandomParameter.ActualName = "LocalRandom";
-        stochasticOperator.RandomParameter.Hidden = true;
       }
     }
@@ -555,57 +312,4 @@
       }
     }
-    private void UpdateAnalyzers() {
-      Analyzer.Operators.Clear();
-      LayerAnalyzer.Operators.Clear();
-
-      Analyzer.Operators.Add(qualityAnalyzer, qualityAnalyzer.EnabledByDefault);
-      LayerAnalyzer.Operators.Add(layerQualityAnalyzer, layerQualityAnalyzer.EnabledByDefault);
-
-      if (Problem != null) {
-        foreach (var analyzer in Problem.Operators.OfType<IAnalyzer>()) {
-          Analyzer.Operators.Add(analyzer, analyzer.EnabledByDefault);
-        }
-      }
-    }
-    #endregion
-
-    #region AgeLimits calculation
-    private void RecalculateAgeLimits() {
-      IEnumerable<int> scheme;
-      switch (AgingScheme.Value) {
-        case AgingSchemes.Linear: scheme = LinearAgingScheme(); break;
-        case AgingSchemes.Fibonacci: scheme = FibonacciAgingScheme(); break;
-        case AgingSchemes.Polynomial: scheme = PolynomialAgingScheme(2); break;
-        case AgingSchemes.Exponential: scheme = ExponentialAgingScheme(2); break;
-        default: throw new NotSupportedException("Aging Scheme " + AgingScheme.Value + " is not supported.");
-      }
-
-      int ageGap = AgeGap.Value;
-      AgeLimits = new IntArray(scheme.Select(a => a * ageGap).Take(NumberOfLayers.Value).ToArray());
-    }
-
-    // 1 2 3 4 5 6 7
-    private static IEnumerable<int> LinearAgingScheme() {
-      for (int i = 0; ; i++)
-        yield return i + 1;
-    }
-    // 1 2 3 5 8 13 21
-    private static IEnumerable<int> FibonacciAgingScheme() {
-      for (int i = 1, next = 2, temp; ; temp = next, next = i + next, i = temp)
-        yield return i;
-    }
-    // (n^2): 1 2 4 9 16 25 36
-    private static IEnumerable<int> PolynomialAgingScheme(double exp) {
-      yield return 1;
-      yield return 2;
-      for (int i = 2; ; i++)
-        yield return (int)Math.Pow(i, exp);
-
-    }
-    // 1 2 4 8 16 32 64
-    private static IEnumerable<int> ExponentialAgingScheme(double @base) {
-      for (int i = 0; ; i++)
-        yield return (int)Math.Pow(@base, i);
-    }
     #endregion
   }
Index: branches/ALPS/HeuristicLab.Algorithms.ALPS/3.3/HeuristicLab.Algorithms.ALPS-3.3.csproj
===================================================================
--- branches/ALPS/HeuristicLab.Algorithms.ALPS/3.3/HeuristicLab.Algorithms.ALPS-3.3.csproj	(revision 12115)
+++ branches/ALPS/HeuristicLab.Algorithms.ALPS/3.3/HeuristicLab.Algorithms.ALPS-3.3.csproj	(revision 12119)
@@ -132,4 +132,6 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="AgingSchemeCalculator.cs" />
+    <Compile Include="Alps.cs" />
     <Compile Include="Analyzers\OldestAverageYoungestAgeAnalyzer.cs" />
     <Compile Include="Analyzers\AgeDistributionAnalyzer.cs" />
Index: branches/ALPS/HeuristicLab.Algorithms.ALPS/3.3/ShiftToRightMigrator.cs
===================================================================
--- branches/ALPS/HeuristicLab.Algorithms.ALPS/3.3/ShiftToRightMigrator.cs	(revision 12115)
+++ branches/ALPS/HeuristicLab.Algorithms.ALPS/3.3/ShiftToRightMigrator.cs	(revision 12119)
@@ -25,5 +25,4 @@
 using HeuristicLab.Core;
 using HeuristicLab.Operators;
-using HeuristicLab.Optimization;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
@@ -31,5 +30,5 @@
   [Item("ShiftToRightMigrator", "Migrates the selected sub scopes by shifting them to the next(right) subscope.")]
   [StorableClass]
-  public sealed class ShiftToRightMigrator : SingleSuccessorOperator, IMigrator {
+  public sealed class ShiftToRightMigrator : SingleSuccessorOperator/*, IMigrator*/ {
 
     [StorableConstructor]
