Index: /branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/AlpsSsGeneticAlgorithm.cs
===================================================================
--- /branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/AlpsSsGeneticAlgorithm.cs	(revision 12152)
+++ /branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/AlpsSsGeneticAlgorithm.cs	(revision 12153)
@@ -40,6 +40,6 @@
   public class AlpsSsGeneticAlgorithm : Alps {
     #region Parameter Properties
-    private IValueParameter<IntValue> PopulationSizeParameter {
-      get { return (IValueParameter<IntValue>)Parameters["PopulationSize"]; }
+    private IValueParameter<IntValue> LayerSizeParameter {
+      get { return (IValueParameter<IntValue>)Parameters["LayerSize"]; }
     }
     private IValueParameter<IntValue> MaximumIterationsParameter {
@@ -67,7 +67,7 @@
 
     #region Properties
-    public IntValue PopulationSize {
-      get { return PopulationSizeParameter.Value; }
-      set { PopulationSizeParameter.Value = value; }
+    public IntValue LayerSize {
+      get { return LayerSizeParameter.Value; }
+      set { LayerSizeParameter.Value = value; }
     }
     public IntValue MaximumIterations {
@@ -119,5 +119,5 @@
     public AlpsSsGeneticAlgorithm()
       : base() {
-      Parameters.Add(new ValueParameter<IntValue>("PopulationSize", "The size of the population of solutions each layer.", new IntValue(100)));
+      Parameters.Add(new ValueParameter<IntValue>("LayerSize", "The size of the population of solutions each layer.", new IntValue(100)));
       Parameters.Add(new ValueParameter<IntValue>("MaximumIterations", "The maximum number of iterations that should be processed.", new IntValue(1000)));
       Parameters.Add(new ConstrainedValueParameter<ISelector>("Selector", "The operator used to select solutions for reproduction."));
@@ -130,14 +130,14 @@
 
       var randomCreator = new RandomCreator();
-      var layer0Creator = new SubScopesCreator() { Name = "Create Layer Zero" };
-      var layer0Processor = new /*Layer*/UniformSubScopesProcessor();
-      var layer0VariableCreator = new VariableCreator();
-      var layer0SolutionsCreator = new SolutionsCreator();
+      var workingScopeCreator = new NamedSubScopesCreator() { Name = "Create WorkingScope and Layers-Scope" };
+      var layersProcessor = new SubScopesProcessor();
+      var layerCreator = new SubScopesCreator() { Name = "Create Layer" };
+      var layerProcessor = new /*Layer*/UniformSubScopesProcessor();
+      var layerVariableCreator = new VariableCreator() { Name = "Initialize Layer" };
+      var layerSolutionsCreator = new SolutionsCreator();
       var initializeAgeProcessor = new UniformSubScopesProcessor();
       var initializeAge = new VariableCreator() { Name = "Initialize Age" };
-      var initializeLayerPopulationSize = new SubScopesCounter() { Name = "Init LayerPopulationCounter" };
-      var initializeLocalEvaluatedSolutions = new Assigner() { Name = "Initialize LayerEvaluatedSolutions" };
-      var initializeGlobalEvaluatedSolutions = new DataReducer() { Name = "Initialize EvaluatedSolutions" };
-      var initializeCurrentPopulationSize = new Assigner() { Name = "CurrentPopulationSize = EvaluatedSolutions" };
+      var initializeEvaluatedSolutions = new ExpressionCalculator() { Name = "Initialize EvaluatedSolutions" };
+      var initializePopulationSize = new Assigner() { Name = "Initialize PopulationSize" };
       var resultsCollector = new ResultsCollector();
       var mainLoop = new AlpsSsGeneticAlgorithmMainLoop();
@@ -147,42 +147,41 @@
       randomCreator.SeedParameter.Value = null;
       randomCreator.SetSeedRandomlyParameter.Value = null;
-      randomCreator.Successor = layer0Creator;
-
-      layer0Creator.NumberOfSubScopesParameter.Value = new IntValue(1);
-      layer0Creator.Successor = layer0Processor;
-
-      layer0Processor.Operator = layer0VariableCreator;
-      layer0Processor.Successor = initializeGlobalEvaluatedSolutions;
-
-      layer0VariableCreator.CollectedValues.Add(new ValueParameter<IntValue>("Layer", new IntValue(0)));
-      layer0VariableCreator.Successor = layer0SolutionsCreator;
-
-      layer0SolutionsCreator.NumberOfSolutionsParameter.ActualName = PopulationSizeParameter.Name;
-      layer0SolutionsCreator.Successor = initializeAgeProcessor;
+      randomCreator.Successor = workingScopeCreator;
+
+      workingScopeCreator.NamesParameter.Value = new StringArray(new[] { "WorkingScope", "Layers" });
+      workingScopeCreator.Successor = layersProcessor;
+
+      layersProcessor.Operators.Add(new EmptyOperator());
+      layersProcessor.Operators.Add(layerCreator);
+
+      layerCreator.NumberOfSubScopesParameter.ActualName = "NumberOfLayers";
+      layerCreator.NumberOfSubScopesParameter.Value = null;
+      layerCreator.Successor = layerProcessor;
+
+      layerProcessor.Operator = layerVariableCreator;
+      layerProcessor.Successor = initializeEvaluatedSolutions;
+
+      layerVariableCreator.CollectedValues.Add(new ValueParameter<ResultCollection>("LayerResults"));
+      layerVariableCreator.Successor = layerSolutionsCreator;
+
+      layerSolutionsCreator.NumberOfSolutionsParameter.ActualName = LayerSizeParameter.Name;
+      layerSolutionsCreator.Successor = initializeAgeProcessor;
 
       initializeAgeProcessor.Operator = initializeAge;
-      initializeAgeProcessor.Successor = initializeLayerPopulationSize;
 
       initializeAge.CollectedValues.Add(new ValueParameter<IntValue>("EvalsCreated", new IntValue(1)));
-
-      initializeLayerPopulationSize.ValueParameter.ActualName = "LayerPopulationSize";
-      initializeLayerPopulationSize.Successor = initializeLocalEvaluatedSolutions;
-
-      initializeLocalEvaluatedSolutions.LeftSideParameter.ActualName = "LayerEvaluatedSolutions";
-      initializeLocalEvaluatedSolutions.RightSideParameter.ActualName = "LayerPopulationSize";
-      initializeLocalEvaluatedSolutions.Successor = null;
-
-      initializeGlobalEvaluatedSolutions.ReductionOperation.Value.Value = ReductionOperations.Sum;
-      initializeGlobalEvaluatedSolutions.TargetOperation.Value.Value = ReductionOperations.Assign;
-      initializeGlobalEvaluatedSolutions.ParameterToReduce.ActualName = "LayerEvaluatedSolutions";
-      initializeGlobalEvaluatedSolutions.TargetParameter.ActualName = "EvaluatedSolutions";
-      initializeGlobalEvaluatedSolutions.Successor = initializeCurrentPopulationSize;
-
-      initializeCurrentPopulationSize.LeftSideParameter.ActualName = "CurrentPoulationSize";
-      initializeCurrentPopulationSize.RightSideParameter.ActualName = "EvaluatedSolutions";
-      initializeCurrentPopulationSize.Successor = resultsCollector;
+      initializeAge.CollectedValues.Add(new ValueParameter<IntValue>("LastMove", new IntValue(1)));
+
+      initializeEvaluatedSolutions.ExpressionResultParameter.ActualName = "EvaluatedSolutions";
+      initializeEvaluatedSolutions.ExpressionParameter.Value = new StringValue("LayerSize NumberOfLayers * toint");
+      initializeEvaluatedSolutions.CollectedValues.Add(new LookupParameter<IntValue>("LayerSize"));
+      initializeEvaluatedSolutions.CollectedValues.Add(new LookupParameter<IntValue>("NumberOfLayers"));
+      initializeEvaluatedSolutions.Successor = initializePopulationSize;
+
+      initializePopulationSize.LeftSideParameter.ActualName = "PopulationSize";
+      initializePopulationSize.RightSideParameter.ActualName = "EvaluatedSolutions";
+      initializePopulationSize.Successor = resultsCollector;
 
       resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>("Evaluated Solutions", null, "EvaluatedSolutions"));
-      resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>("Current PopulationSize", null, "CurrentPopulationSize"));
       resultsCollector.Successor = mainLoop;
 
@@ -234,17 +233,10 @@
     #region Parameterization
     private void Initialize() {
-      //
     }
     private void ParameterizeSolutionsCreator() {
-      //MainLoop.LayerUpdator.SolutionsCreator.EvaluatorParameter.ActualName = Problem.EvaluatorParameter.Name;
-      //MainLoop.LayerUpdator.SolutionsCreator.SolutionCreatorParameter.ActualName = Problem.SolutionCreatorParameter.Name;
     }
     private void ParameterizeMainLoop() {
       MainLoop.MaximizationParameter.ActualName = Problem.MaximizationParameter.Name;
       MainLoop.QualityParameter.ActualName = Problem.Evaluator.QualityParameter.ActualName;
-      //MainLoop.MainOperator.EvaluatorParameter.ActualName = Problem.EvaluatorParameter.Name;
-      //MainLoop.MainOperator.MaximizationParameter.ActualName = Problem.MaximizationParameter.Name;
-      //MainLoop.MainOperator.QualityParameter.ActualName = Problem.Evaluator.QualityParameter.ActualName;
-      //MainLoop.LayerUpdator.SolutionsCreator.NumberOfSolutionsParameter.ActualName = PopulationSizeParameter.Name;
     }
     private void ParameterizeSelectors() {
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 12152)
+++ /branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/HeuristicLab.Algorithms.ALPS.SteadyState-3.3.csproj	(revision 12153)
@@ -138,4 +138,5 @@
     <Compile Include="AlpsSsGeneticAlgorithmMainOperator.cs" />
     <Compile Include="AlpsSsMover.cs" />
+    <Compile Include="NamedSubScopesCreator.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="Plugin.cs" />
Index: /branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/NamedSubScopesCreator.cs
===================================================================
--- /branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/NamedSubScopesCreator.cs	(revision 12153)
+++ /branches/ALPS/HeuristicLab.Algorithms.ALPS.SteadyState/3.3/NamedSubScopesCreator.cs	(revision 12153)
@@ -0,0 +1,59 @@
+﻿#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 HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Algorithms.ALPS.SteadyState {
+  [Item("NamedSubScopesCreator", "An operator which create named subscopes.")]
+  [StorableClass]
+  public class NamedSubScopesCreator : SingleSuccessorOperator {
+    #region Parameter Properties
+    public IValueLookupParameter<StringArray> NamesParameter {
+      get { return (IValueLookupParameter<StringArray>)Parameters["Names"]; }
+    }
+    #endregion
+
+    [StorableConstructor]
+    protected NamedSubScopesCreator(bool deserializing) : base(deserializing) { }
+    protected NamedSubScopesCreator(NamedSubScopesCreator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public NamedSubScopesCreator()
+      : base() {
+      Parameters.Add(new ValueLookupParameter<StringArray>("Names", "Names for the new SubScopes.", new StringArray(new[] { "A", "B" })));
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new NamedSubScopesCreator(this, cloner);
+    }
+
+    public override IOperation Apply() {
+      foreach (string name in NamesParameter.Value) {
+        ExecutionContext.Scope.SubScopes.Add(new Scope(name));
+      }
+      return base.Apply();
+    }
+  }
+}
