Index: /branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/AlpsSsGeneticAlgorithm.cs
===================================================================
--- /branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/AlpsSsGeneticAlgorithm.cs	(revision 12191)
+++ /branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/AlpsSsGeneticAlgorithm.cs	(revision 12192)
@@ -64,4 +64,7 @@
       get { return (IFixedValueParameter<BoolValue>)Parameters["ReevaluateElites"]; }
     }
+    private IValueParameter<IntValue> BatchSizeParameter {
+      get { return (IValueParameter<IntValue>)Parameters["BatchSize"]; }
+    }
     #endregion
 
@@ -127,4 +130,5 @@
       Parameters.Add(new ValueParameter<IntValue>("Elites", "The numer of elite solutions which are kept in each generation.", new IntValue(1)));
       Parameters.Add(new FixedValueParameter<BoolValue>("ReevaluateElites", "Flag to determine if elite individuals should be reevaluated (i.e., if stochastic fitness functions are used.)", new BoolValue(false)) { Hidden = true });
+      Parameters.Add(new ValueParameter<IntValue>("BatchSize", "Number of inner iterations before updates and analyzers are fired.", new IntValue(100)) { Hidden = true });
       AgeInheritance = new ReductionOperation(ReductionOperations.Min);
 
@@ -140,4 +144,5 @@
       var initializeAge = new VariableCreator() { Name = "Initialize Age" };
       var initializeEvaluatedSolutions = new ExpressionCalculator() { Name = "Initialize EvaluatedSolutions" };
+      var initializeResultEvaluatedSolutions = new Assigner() { Name = "Initialize ResultEvaluatedSolutions" };
       var initializePopulationSize = new Assigner() { Name = "Initialize PopulationSize" };
       var resultsCollector = new ResultsCollector();
@@ -182,5 +187,9 @@
       initializeEvaluatedSolutions.CollectedValues.Add(new LookupParameter<IntValue>("LayerSize"));
       initializeEvaluatedSolutions.CollectedValues.Add(new LookupParameter<IntValue>("NumberOfLayers"));
-      initializeEvaluatedSolutions.Successor = initializePopulationSize;
+      initializeEvaluatedSolutions.Successor = initializeResultEvaluatedSolutions;
+
+      initializeResultEvaluatedSolutions.LeftSideParameter.ActualName = "ResultEvaluatedSolutions";
+      initializeResultEvaluatedSolutions.RightSideParameter.ActualName = "EvaluatedSolutions";
+      initializeResultEvaluatedSolutions.Successor = initializePopulationSize;
 
       initializePopulationSize.LeftSideParameter.ActualName = "PopulationSize";
@@ -188,5 +197,5 @@
       initializePopulationSize.Successor = resultsCollector;
 
-      resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>("Evaluated Solutions", null, "EvaluatedSolutions"));
+      resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>("Evaluated Solutions", null, "ResultEvaluatedSolutions"));
       resultsCollector.Successor = mainLoop;
 
Index: /branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/AlpsSsGeneticAlgorithmMainLoop.cs
===================================================================
--- /branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/AlpsSsGeneticAlgorithmMainLoop.cs	(revision 12191)
+++ /branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/AlpsSsGeneticAlgorithmMainLoop.cs	(revision 12192)
@@ -71,6 +71,8 @@
 
       var variableCreator = new VariableCreator() { Name = "Initialize" };
+      var resultsColletor = new ResultsCollector();
       var layersProcessor = new NamedSubScopeProcessor() { Name = "Process Layers" };
-      var randomScopeProcessor = new RandomLayerProcessor() { Name = "Select a layer" };
+      var initializeBatchIteration = new Assigner() { Name = "Initialize BatchIterations" };
+      var randomLayerProcessor = new RandomLayerProcessor() { Name = "Select a layer" };
       var isLayerZeroComperator = new Comparator() { Name = "IsLayerZero = Layer == 0" };
       var isLayerZeroBranch = new ConditionalBranch() { Name = "IsLayerZero?" };
@@ -95,6 +97,10 @@
       var resetTargetIndex = new Assigner() { Name = "TargetIndex = 0" };
       var tryMoveUp = new AlpsSsMover() { Name = "Try Move Up" };
-      var incrementEvaluations = new IntCounter() { Name = "incr. EvaluatedSolutions" };
+      var incrementEvaluations = new IntCounter() { Name = "Incr. EvaluatedSolutions" };
+      var incrementBatchIterations = new IntCounter() { Name = "Incr. BatchIterations" };
+      var batchFinishedComperator = new Comparator() { Name = "BatchFinished = BatchIterations >= BatchSize" };
+      var batchFinishedBranch = new ConditionalBranch() { Name = "BatchFinished?" };
       var incrIterations = new IntCounter() { Name = "Incr. Iterations" };
+      var updateResultEvaluatedSolutions = new IntCounter() { Name = "Update ResultEvaluatedSolutions" };
       var layerAnalyzerProcessor = new UniformSubScopesProcessor();
       var layerAnalyzer = new Placeholder() { Name = "LayerAnalyzer (Placeholder)" };
@@ -114,12 +120,19 @@
       variableCreator.CollectedValues.Add(new ValueParameter<BoolValue>("ValidParents", new BoolValue(false)));
       variableCreator.CollectedValues.Add(new ValueParameter<BoolValue>("IsLayerZero", new BoolValue(false)));
-      variableCreator.Successor = layersProcessor;
-
-      layersProcessor.Operator = randomScopeProcessor;
+      variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("BatchIterations", new IntValue(0)));
+      variableCreator.Successor = resultsColletor;
+
+      resultsColletor.CollectedValues.Add(new LookupParameter<IntValue>("Iterations"));
+      resultsColletor.Successor = layersProcessor;
+
       layersProcessor.TargetScopeParameter.ActualName = "Layers";
-
-      randomScopeProcessor.Operator = isLayerZeroComperator;
-      // TODO move to old individuals
-      randomScopeProcessor.Successor = incrIterations;
+      layersProcessor.Operator = initializeBatchIteration;
+
+      initializeBatchIteration.LeftSideParameter.ActualName = "BatchIterations";
+      initializeBatchIteration.RightSideParameter.Value = new IntValue(0);
+      initializeBatchIteration.Successor = randomLayerProcessor;
+
+      randomLayerProcessor.Operator = isLayerZeroComperator;
+      randomLayerProcessor.Successor = incrementBatchIterations;
 
       isLayerZeroComperator.LeftSideParameter.ActualName = "Layer";
@@ -203,10 +216,28 @@
       tryMoveUp.Successor = incrementEvaluations;
 
+      incrementEvaluations.ValueParameter.ActualName = "EvaluatedSolutions";
       incrementEvaluations.Increment = new IntValue(1);
-      incrementEvaluations.ValueParameter.ActualName = "EvaluatedSolutions";
+
+      incrementBatchIterations.ValueParameter.ActualName = "BatchIterations";
+      incrementBatchIterations.Increment = new IntValue(1);
+      incrementBatchIterations.Successor = batchFinishedComperator;
+
+      batchFinishedComperator.LeftSideParameter.ActualName = "BatchIterations";
+      batchFinishedComperator.RightSideParameter.ActualName = "BatchSize";
+      batchFinishedComperator.ResultParameter.ActualName = "BatchFinished";
+      batchFinishedComperator.Successor = batchFinishedBranch;
+
+      batchFinishedBranch.ConditionParameter.ActualName = "BatchFinished";
+      batchFinishedBranch.TrueBranch = incrIterations;
+      batchFinishedBranch.FalseBranch = randomLayerProcessor;
 
       incrIterations.ValueParameter.ActualName = "Iterations";
       incrIterations.Increment = new IntValue(1);
-      incrIterations.Successor = layerAnalyzerProcessor;
+      incrIterations.Successor = updateResultEvaluatedSolutions;
+
+      updateResultEvaluatedSolutions.ValueParameter.ActualName = "ResultEvaluatedSolutions";
+      updateResultEvaluatedSolutions.IncrementParameter.ActualName = "BatchSize";
+      updateResultEvaluatedSolutions.IncrementParameter.Value = null;
+      updateResultEvaluatedSolutions.Successor = layerAnalyzerProcessor;
 
       layerAnalyzerProcessor.Operator = layerAnalyzer;
@@ -225,5 +256,5 @@
 
       terminateBranch.ConditionParameter.ActualName = "Terminate";
-      terminateBranch.FalseBranch = randomScopeProcessor;
+      terminateBranch.FalseBranch = initializeBatchIteration;
     }
   }
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 12191)
+++ /branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/HeuristicLab.Algorithms.ALPS.SteadyState-3.3.csproj	(revision 12192)
@@ -76,4 +76,8 @@
   </PropertyGroup>
   <ItemGroup>
+    <Reference Include="HeuristicLab.Analysis-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Analysis-3.3.dll</HintPath>
+    </Reference>
     <Reference Include="HeuristicLab.Collections-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
       <SpecificVersion>False</SpecificVersion>
Index: /branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/SteadyStateMatingPoolCreator.cs
===================================================================
--- /branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/SteadyStateMatingPoolCreator.cs	(revision 12191)
+++ /branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/SteadyStateMatingPoolCreator.cs	(revision 12192)
@@ -93,5 +93,5 @@
         let age = (evaluations - evalsCreated) / popSize
         where age < ageLimit
-        select (IScope)individual.Clone();
+        select (IScope)individual/*.Clone()*/;
 
       foreach (var individual in matingPool) {
