Index: trunk/sources/HeuristicLab.Evolutionary/3.2/ChildrenInitializer.cs
===================================================================
--- trunk/sources/HeuristicLab.Evolutionary/3.2/ChildrenInitializer.cs	(revision 1529)
+++ trunk/sources/HeuristicLab.Evolutionary/3.2/ChildrenInitializer.cs	(revision 1529)
@@ -0,0 +1,76 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2009 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.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.Evolutionary {
+  /// <summary>
+  /// Initializes and prepares the children for crossover
+  /// </summary>
+  public class ChildrenInitializer : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get {
+        return @"This operator prepares the individuals for crossover.";
+      }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ChildrenInitializer"/> with one variable info: <c>ParentsPerChild</c>.
+    /// </summary>
+    public ChildrenInitializer()
+      : base() {
+      AddVariableInfo(new VariableInfo("ParentsPerChild", "Denotes the number of parents that should be crossed per child. Note that some of the typical crossover operators can only work with 2 parents.", typeof(IntData), VariableKind.In));
+      GetVariableInfo("ParentsPerChild").Local = true;
+      AddVariable(new Variable("ParentsPerChild", new IntData(2)));
+    }
+
+    /// <summary>
+    /// Initializes the children as new scopes and inserts their parents as subscopes.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown when the number of selected parents is not a natural multiple of <c>ParentsPerChild</c>.</exception>
+    /// <param name="scope">The scope that houses all the selected parents as subscopes.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      int parents = GetVariableValue<IntData>("ParentsPerChild", scope, true).Data;
+      int children = scope.SubScopes.Count;
+      if (children % parents > 0) throw new InvalidOperationException("ERROR in ChildrenInitializer: The number of selected parents is not a natural multiple of ParentsPerChild");
+      children /= parents;
+
+      for (int i = 0; i < children; i++) {
+        IScope child = new Scope(i.ToString());
+        for (int y = 0; y < parents; y++) {
+          IScope parenty = scope.SubScopes[0];
+          scope.RemoveSubScope(parenty);
+          child.AddSubScope(parenty);
+        }
+        scope.AddSubScope(child);
+      }
+
+      return null;
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Evolutionary/3.2/CrossoverBase.cs
===================================================================
--- trunk/sources/HeuristicLab.Evolutionary/3.2/CrossoverBase.cs	(revision 1529)
+++ trunk/sources/HeuristicLab.Evolutionary/3.2/CrossoverBase.cs	(revision 1529)
@@ -0,0 +1,60 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.Evolutionary {
+  /// <summary>
+  /// Base class for crossover operators.
+  /// </summary>
+  public abstract class CrossoverBase : OperatorBase {
+    /// <summary>
+    /// Initializes a new instance of <see cref="CrossoverBase"/> with one variable info (<c>Random</c>).
+    /// </summary>
+    public CrossoverBase()
+      : base() {
+      AddVariableInfo(new VariableInfo("Random", "Pseudo random number generator", typeof(IRandom), VariableKind.In));
+    }
+
+    /// <summary>
+    /// Retrieves the random number generator and calls <see cref="Cross(HeuristicLab.Core.IScope, HeuristicLab.Core.IRandom)"/>.
+    /// </summary>
+    /// <param name="scope">The current scope which represents a new child.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      IRandom random = GetVariableValue<IRandom>("Random", scope, true);
+      Cross(scope, random);
+      return null;
+    }
+
+    /// <summary>
+    /// Performs a crossover of all parents (sub-scopes) of <paramref name="scope"/> to create a new child.
+    /// Note that all children have to be prepared using the <see cref="HeuristicLab.Evolutionary.ChildrenInitializer"/>.
+    /// </summary>
+    /// <param name="scope">The current scope which represents a new child.</param>
+    /// <param name="random">A random number generator.</param>
+    protected abstract void Cross(IScope scope, IRandom random);
+  }
+}
Index: trunk/sources/HeuristicLab.Evolutionary/3.2/HeuristicLab.Evolutionary.csproj
===================================================================
--- trunk/sources/HeuristicLab.Evolutionary/3.2/HeuristicLab.Evolutionary.csproj	(revision 1529)
+++ trunk/sources/HeuristicLab.Evolutionary/3.2/HeuristicLab.Evolutionary.csproj	(revision 1529)
@@ -0,0 +1,126 @@
+﻿<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{F5614C53-153C-4A37-A608-121E1C087F07}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Evolutionary</RootNamespace>
+    <AssemblyName>HeuristicLab.Evolutionary-3.2</AssemblyName>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>2.0</OldToolsVersion>
+    <UpgradeBackupLocation>
+    </UpgradeBackupLocation>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
+    <DocumentationFile>bin\Release\HeuristicLab.Evolutionary-3.2.XML</DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.Evolutionary-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.Evolutionary-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="ChildrenInitializer.cs" />
+    <Compile Include="SASEGASAReunificator.cs" />
+    <Compile Include="CrossoverBase.cs" />
+    <Compile Include="HeuristicLabEvolutionaryPlugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="SubScopesStorer.cs" />
+    <Compile Include="SuccessRuleMutationStrengthAdjuster.cs" />
+    <Compile Include="UnidirectionalRingMigrator.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Data\HeuristicLab.Data.csproj">
+      <Project>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</Project>
+      <Name>HeuristicLab.Data</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Operators\HeuristicLab.Operators.csproj">
+      <Project>{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}</Project>
+      <Name>HeuristicLab.Operators</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: trunk/sources/HeuristicLab.Evolutionary/3.2/HeuristicLabEvolutionaryPlugin.cs
===================================================================
--- trunk/sources/HeuristicLab.Evolutionary/3.2/HeuristicLabEvolutionaryPlugin.cs	(revision 1529)
+++ trunk/sources/HeuristicLab.Evolutionary/3.2/HeuristicLabEvolutionaryPlugin.cs	(revision 1529)
@@ -0,0 +1,38 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Evolutionary {
+  /// <summary>
+  /// Plugin class for HeuristicLab.Evolutionary plugin.
+  /// </summary>
+  [ClassInfo(Name = "HeuristicLab.Evolutionary-3.2")]
+  [PluginFile(Filename = "HeuristicLab.Evolutionary-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Operators-3.2")]
+  public class HeuristicLabEvolutionaryPlugin : PluginBase {
+  }
+}
Index: trunk/sources/HeuristicLab.Evolutionary/3.2/Properties/AssemblyInfo.frame
===================================================================
--- trunk/sources/HeuristicLab.Evolutionary/3.2/Properties/AssemblyInfo.frame	(revision 1529)
+++ trunk/sources/HeuristicLab.Evolutionary/3.2/Properties/AssemblyInfo.frame	(revision 1529)
@@ -0,0 +1,58 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Evolutionary")]
+[assembly: AssemblyDescription("HeuristicLab classes for evolutionary algorithms")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("75ed50d2-6d31-4308-a373-c3820769afb8")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: trunk/sources/HeuristicLab.Evolutionary/3.2/SASEGASAReunificator.cs
===================================================================
--- trunk/sources/HeuristicLab.Evolutionary/3.2/SASEGASAReunificator.cs	(revision 1529)
+++ trunk/sources/HeuristicLab.Evolutionary/3.2/SASEGASAReunificator.cs	(revision 1529)
@@ -0,0 +1,80 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Evolutionary {
+  /// <summary>
+  /// Joins all sub sub scopes of a specified scope, reduces the number of sub 
+  /// scopes by 1 and uniformly partitions the sub sub scopes again, maintaining the order.
+  /// </summary>
+  public class SASEGASAReunificator : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Joins all sub sub scopes of the given <paramref name="scope"/>, reduces the number of sub 
+    /// scopes by 1 and uniformly partitions the sub sub scopes again, maintaining the order.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown when only 0 or 1 sub scope is available.</exception>
+    /// <param name="scope">The current scope whose sub scopes to reduce.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      int subScopes = scope.SubScopes.Count;
+      if (subScopes <= 1)
+        throw new InvalidOperationException("SASEGASA reunification requires 2 or more sub-scopes");
+
+      // get all sub-sub-scopes
+      IList<IScope> subSubScopes = new List<IScope>();
+      for (int i = 0; i < scope.SubScopes.Count; i++) {
+        while (scope.SubScopes[i].SubScopes.Count > 0) {
+          subSubScopes.Add(scope.SubScopes[i].SubScopes[0]);
+          scope.SubScopes[i].RemoveSubScope(scope.SubScopes[i].SubScopes[0]);
+        }
+      }
+
+      // reduce number of sub-scopes by 1 and partition sub-sub-scopes again
+      scope.RemoveSubScope(scope.SubScopes[scope.SubScopes.Count - 1]);
+      subScopes--;
+      int subSubScopesCount = subSubScopes.Count / subScopes;
+      for (int i = 0; i < subScopes; i++) {
+        for (int j = 0; j < subSubScopesCount; j++) {
+          scope.SubScopes[i].AddSubScope(subSubScopes[0]);
+          subSubScopes.RemoveAt(0);
+        }
+      }
+
+      // add remaining sub-sub-scopes to last sub-scope
+      while (subSubScopes.Count > 0) {
+        scope.SubScopes[scope.SubScopes.Count - 1].AddSubScope(subSubScopes[0]);
+        subSubScopes.RemoveAt(0);
+      }
+
+      return null;
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Evolutionary/3.2/SubScopesStorer.cs
===================================================================
--- trunk/sources/HeuristicLab.Evolutionary/3.2/SubScopesStorer.cs	(revision 1529)
+++ trunk/sources/HeuristicLab.Evolutionary/3.2/SubScopesStorer.cs	(revision 1529)
@@ -0,0 +1,104 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.Evolutionary {
+  /// <summary>
+  /// Stores the sub scopes of the right sub scope until enough newly created child scopes are available
+  /// (for example to replace a generation).
+  /// </summary>
+  public class SubScopesStorer : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="SubScopesStorer"/> with two variable infos 
+    /// (<c>SubScopes</c> and <c>SubScopesStore</c>).
+    /// </summary>
+    public SubScopesStorer()
+      : base() {
+      AddVariableInfo(new VariableInfo("SubScopes", "Number of sub-scopes that should be available", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("SubScopesStore", "Temporarily stored sub-scopes", typeof(ItemList<IScope>), VariableKind.New | VariableKind.In | VariableKind.Out | VariableKind.Deleted));
+    }
+
+    /// <summary>
+    /// Stores all sub scopes of the right branch to get the required number of sub scopes. Shifts the left
+    /// branch one level up, if sub scopes are still missing (so that another selection and mutation circle
+    /// can take place). 
+    /// </summary>
+    /// <param name="scope">The current scope whose sub scopes to store.</param>
+    /// <returns><c>null</c> if the required number of sub scopes is available, the next 
+    /// <see cref="AtomicOperation"/> if sub scopes are still missing.</returns>
+    public override IOperation Apply(IScope scope) {
+      IntData subScopes = GetVariableValue<IntData>("SubScopes", scope, true);
+      ItemList<IScope> subScopesStore = GetVariableValue<ItemList<IScope>>("SubScopesStore", scope, false);
+
+      if (subScopesStore == null) {
+        subScopesStore = new ItemList<IScope>();
+        IVariableInfo info = GetVariableInfo("SubScopesStore");
+        if (info.Local)
+          AddVariable(new Variable(info.ActualName, subScopesStore));
+        else
+          scope.AddVariable(new Variable(scope.TranslateName(info.FormalName), subScopesStore));
+      }
+
+      IScope left = scope.SubScopes[0];
+      IScope right = scope.SubScopes[1];
+
+      if (right.SubScopes.Count + subScopesStore.Count
+          >= subScopes.Data) {  // enough sub-scopes available
+        // restore sub-scopes
+        for (int i = 0; i < subScopesStore.Count; i++) {
+          right.AddSubScope(subScopesStore[i]);
+          IVariableInfo info = GetVariableInfo("SubScopesStore");
+          if (info.Local)
+            RemoveVariable(info.ActualName);
+          else
+            scope.RemoveVariable(scope.TranslateName(info.FormalName));
+        }
+        return null;
+      } else {  // not enough sub-scopes available
+        // store sub-scopes
+        for (int i = 0; i < right.SubScopes.Count; i++) {
+          IScope s = right.SubScopes[0];
+          right.RemoveSubScope(s);
+          subScopesStore.Add(s);
+        }
+
+        // shift left on level up
+        scope.RemoveSubScope(right);
+        scope.RemoveSubScope(left);
+        for (int i = 0; i < left.SubScopes.Count; i++)
+          scope.AddSubScope(left.SubScopes[i]);
+
+        return new AtomicOperation(SubOperators[0], scope);
+      }
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Evolutionary/3.2/SuccessRuleMutationStrengthAdjuster.cs
===================================================================
--- trunk/sources/HeuristicLab.Evolutionary/3.2/SuccessRuleMutationStrengthAdjuster.cs	(revision 1529)
+++ trunk/sources/HeuristicLab.Evolutionary/3.2/SuccessRuleMutationStrengthAdjuster.cs	(revision 1529)
@@ -0,0 +1,90 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Evolutionary {
+  /// <summary>
+  /// Adjusts the mutation strength based on the ratio of successful offsprings.
+  /// </summary>
+  public class SuccessRuleMutationStrengthAdjuster : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"Adjusts the mutation strength based on the ratio of successful offsprings"; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="SuccessRuleMutationStrengthAdjuster"/> with six variable
+    /// infos (<c>ShakingFactor</c>, <c>SuccessfulChild</c>, <c>TargetSuccessProbability</c>, 
+    /// <c>SuccessProbability</c>, <c>LearningRate</c> and <c>DampeningFactor</c>).
+    /// </summary>
+    public SuccessRuleMutationStrengthAdjuster() {
+      AddVariableInfo(new VariableInfo("ShakingFactor", "The mutation strength to adjust", typeof(DoubleData), VariableKind.In | VariableKind.Out));
+      AddVariableInfo(new VariableInfo("SuccessfulChild", "Variable that tells if a child has become better than its parent", typeof(BoolData), VariableKind.In | VariableKind.Deleted));
+      AddVariableInfo(new VariableInfo("TargetSuccessProbability", "The targeted probability to create a successful offsrping", typeof(DoubleData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("SuccessProbability", "The measured probability to create a successful offspring", typeof(DoubleData), VariableKind.New | VariableKind.In | VariableKind.Out));
+      AddVariableInfo(new VariableInfo("LearningRate", "The speed at which the success probability changes", typeof(DoubleData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("DampeningFactor", "Influences the strength of the adjustment to the mutation strength", typeof(DoubleData), VariableKind.In));
+    }
+
+    /// <summary>
+    /// Adjusts the mutation strength based on the ratio of successful offsprings.
+    /// </summary>
+    /// <param name="scope">The current scope where to adjust the mutation strength.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      DoubleData shakingFactor = GetVariableValue<DoubleData>("ShakingFactor", scope, true);
+      DoubleData targetSuccessProb = GetVariableValue<DoubleData>("TargetSuccessProbability", scope, true);
+      DoubleData successProb = GetVariableValue<DoubleData>("SuccessProbability", scope, true);
+      if (successProb == null) {
+        IVariableInfo successProbInfo = GetVariableInfo("SuccessProbability");
+        IVariable successProbVar;
+        if (successProbInfo.Local) {
+          successProbVar = new Variable(successProbInfo.ActualName, new DoubleData(targetSuccessProb.Data));
+          AddVariable(successProbVar);
+        } else {
+          successProbVar = new Variable(scope.TranslateName(successProbInfo.FormalName), new DoubleData(targetSuccessProb.Data));
+          scope.AddVariable(successProbVar);
+        }
+        successProb = (DoubleData)successProbVar.Value;
+      }
+      DoubleData learningRate = GetVariableValue<DoubleData>("LearningRate", scope, true);
+      DoubleData dampeningFactor = GetVariableValue<DoubleData>("DampeningFactor", scope, true);
+
+      double success = 0.0;
+      for (int i = 0 ; i < scope.SubScopes.Count ; i++) {
+        if (scope.SubScopes[i].GetVariableValue<BoolData>("SuccessfulChild", false).Data) {
+          success++;
+        }
+        scope.SubScopes[i].RemoveVariable(scope.SubScopes[i].TranslateName("SuccessfulChild"));
+      }
+      if (scope.SubScopes.Count > 0) success /= scope.SubScopes.Count;
+
+      successProb.Data = (1.0 - learningRate.Data) * successProb.Data + success * learningRate.Data;
+      shakingFactor.Data *= Math.Exp((successProb.Data - ((targetSuccessProb.Data * (1.0 - successProb.Data)) / (1.0 - targetSuccessProb.Data))) / dampeningFactor.Data);
+      return null;
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Evolutionary/3.2/UnidirectionalRingMigrator.cs
===================================================================
--- trunk/sources/HeuristicLab.Evolutionary/3.2/UnidirectionalRingMigrator.cs	(revision 1529)
+++ trunk/sources/HeuristicLab.Evolutionary/3.2/UnidirectionalRingMigrator.cs	(revision 1529)
@@ -0,0 +1,69 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Evolutionary {
+  /// <summary>
+  /// Operator class that migrates one sub scope of each child to its left neighbour sub scope, like a ring.
+  /// </summary>
+  public class UnidirectionalRingMigrator : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Migrates every first sub scope of each child to its left neighbour (like a ring).
+    /// <pre>                                                               
+    ///                    scope                    scope             
+    ///                /     |     \            /     |     \         
+    ///               A      B      C    =>    A      B      C           
+    ///              /|\    /|\    /|\        /|\    /|\    /|\       
+    ///             G H I  J K L  M N O      H I J  K L M  N O G     
+    /// </pre>
+    /// </summary>
+    /// <param name="scope">The scope whose sub scopes of the children should migrate.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      IList<IScope> emigrantsList = new List<IScope>();
+
+      for (int i = 0; i < scope.SubScopes.Count; i++) {
+        IScope emigrants = scope.SubScopes[i].SubScopes[1];
+        scope.SubScopes[i].RemoveSubScope(emigrants);
+        emigrantsList.Add(emigrants);
+      }
+
+      // shift first emigrants to end of list
+      emigrantsList.Add(emigrantsList[0]);
+      emigrantsList.RemoveAt(0);
+
+      for (int i = 0; i < scope.SubScopes.Count; i++)
+        scope.SubScopes[i].AddSubScope(emigrantsList[i]);
+
+      return null;
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Evolutionary/ChildrenInitializer.cs
===================================================================
--- trunk/sources/HeuristicLab.Evolutionary/ChildrenInitializer.cs	(revision 1528)
+++ 	(revision )
@@ -1,76 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2009 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.Text;
-using HeuristicLab.Core;
-using HeuristicLab.Data;
-using HeuristicLab.Operators;
-
-namespace HeuristicLab.Evolutionary {
-  /// <summary>
-  /// Initializes and prepares the children for crossover
-  /// </summary>
-  public class ChildrenInitializer : OperatorBase {
-    /// <inheritdoc select="summary"/>
-    public override string Description {
-      get {
-        return @"This operator prepares the individuals for crossover.";
-      }
-    }
-
-    /// <summary>
-    /// Initializes a new instance of <see cref="ChildrenInitializer"/> with one variable info: <c>ParentsPerChild</c>.
-    /// </summary>
-    public ChildrenInitializer()
-      : base() {
-      AddVariableInfo(new VariableInfo("ParentsPerChild", "Denotes the number of parents that should be crossed per child. Note that some of the typical crossover operators can only work with 2 parents.", typeof(IntData), VariableKind.In));
-      GetVariableInfo("ParentsPerChild").Local = true;
-      AddVariable(new Variable("ParentsPerChild", new IntData(2)));
-    }
-
-    /// <summary>
-    /// Initializes the children as new scopes and inserts their parents as subscopes.
-    /// </summary>
-    /// <exception cref="InvalidOperationException">Thrown when the number of selected parents is not a natural multiple of <c>ParentsPerChild</c>.</exception>
-    /// <param name="scope">The scope that houses all the selected parents as subscopes.</param>
-    /// <returns><c>null</c>.</returns>
-    public override IOperation Apply(IScope scope) {
-      int parents = GetVariableValue<IntData>("ParentsPerChild", scope, true).Data;
-      int children = scope.SubScopes.Count;
-      if (children % parents > 0) throw new InvalidOperationException("ERROR in ChildrenInitializer: The number of selected parents is not a natural multiple of ParentsPerChild");
-      children /= parents;
-
-      for (int i = 0; i < children; i++) {
-        IScope child = new Scope(i.ToString());
-        for (int y = 0; y < parents; y++) {
-          IScope parenty = scope.SubScopes[0];
-          scope.RemoveSubScope(parenty);
-          child.AddSubScope(parenty);
-        }
-        scope.AddSubScope(child);
-      }
-
-      return null;
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.Evolutionary/CrossoverBase.cs
===================================================================
--- trunk/sources/HeuristicLab.Evolutionary/CrossoverBase.cs	(revision 1528)
+++ 	(revision )
@@ -1,60 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 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.Text;
-using HeuristicLab.Core;
-using HeuristicLab.Operators;
-
-namespace HeuristicLab.Evolutionary {
-  /// <summary>
-  /// Base class for crossover operators.
-  /// </summary>
-  public abstract class CrossoverBase : OperatorBase {
-    /// <summary>
-    /// Initializes a new instance of <see cref="CrossoverBase"/> with one variable info (<c>Random</c>).
-    /// </summary>
-    public CrossoverBase()
-      : base() {
-      AddVariableInfo(new VariableInfo("Random", "Pseudo random number generator", typeof(IRandom), VariableKind.In));
-    }
-
-    /// <summary>
-    /// Retrieves the random number generator and calls <see cref="Cross(HeuristicLab.Core.IScope, HeuristicLab.Core.IRandom)"/>.
-    /// </summary>
-    /// <param name="scope">The current scope which represents a new child.</param>
-    /// <returns><c>null</c>.</returns>
-    public override IOperation Apply(IScope scope) {
-      IRandom random = GetVariableValue<IRandom>("Random", scope, true);
-      Cross(scope, random);
-      return null;
-    }
-
-    /// <summary>
-    /// Performs a crossover of all parents (sub-scopes) of <paramref name="scope"/> to create a new child.
-    /// Note that all children have to be prepared using the <see cref="HeuristicLab.Evolutionary.ChildrenInitializer"/>.
-    /// </summary>
-    /// <param name="scope">The current scope which represents a new child.</param>
-    /// <param name="random">A random number generator.</param>
-    protected abstract void Cross(IScope scope, IRandom random);
-  }
-}
Index: trunk/sources/HeuristicLab.Evolutionary/HeuristicLab.Evolutionary.csproj
===================================================================
--- trunk/sources/HeuristicLab.Evolutionary/HeuristicLab.Evolutionary.csproj	(revision 1528)
+++ 	(revision )
@@ -1,126 +1,0 @@
-﻿<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProductVersion>9.0.30729</ProductVersion>
-    <SchemaVersion>2.0</SchemaVersion>
-    <ProjectGuid>{F5614C53-153C-4A37-A608-121E1C087F07}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>HeuristicLab.Evolutionary</RootNamespace>
-    <AssemblyName>HeuristicLab.Evolutionary-3.2</AssemblyName>
-    <SignAssembly>true</SignAssembly>
-    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>2.0</OldToolsVersion>
-    <UpgradeBackupLocation>
-    </UpgradeBackupLocation>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>bin\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <DebugType>pdbonly</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>bin\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
-    <DocumentationFile>bin\Release\HeuristicLab.Evolutionary-3.2.XML</DocumentationFile>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x86\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x86</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
-    <OutputPath>bin\x86\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <DocumentationFile>bin\Release\HeuristicLab.Evolutionary-3.2.XML</DocumentationFile>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x86</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x64\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
-    <OutputPath>bin\x64\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <DocumentationFile>bin\Release\HeuristicLab.Evolutionary-3.2.XML</DocumentationFile>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="System" />
-    <Reference Include="System.Data" />
-    <Reference Include="System.Xml" />
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="ChildrenInitializer.cs" />
-    <Compile Include="SASEGASAReunificator.cs" />
-    <Compile Include="CrossoverBase.cs" />
-    <Compile Include="HeuristicLabEvolutionaryPlugin.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="SubScopesStorer.cs" />
-    <Compile Include="SuccessRuleMutationStrengthAdjuster.cs" />
-    <Compile Include="UnidirectionalRingMigrator.cs" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="HeuristicLab.snk" />
-    <None Include="Properties\AssemblyInfo.frame" />
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
-      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
-      <Name>HeuristicLab.Core</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\HeuristicLab.Data\HeuristicLab.Data.csproj">
-      <Project>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</Project>
-      <Name>HeuristicLab.Data</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\HeuristicLab.Operators\HeuristicLab.Operators.csproj">
-      <Project>{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}</Project>
-      <Name>HeuristicLab.Operators</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
-      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
-      <Name>HeuristicLab.PluginInfrastructure</Name>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
-       Other similar extension points exist, see Microsoft.Common.targets.
-  <Target Name="BeforeBuild">
-  </Target>
-  <Target Name="AfterBuild">
-  </Target>
-  -->
-  <PropertyGroup>
-    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
-set ProjectDir=$(ProjectDir)
-set SolutionDir=$(SolutionDir)
-set Outdir=$(Outdir)
-
-call PreBuildEvent.cmd</PreBuildEvent>
-  </PropertyGroup>
-</Project>
Index: trunk/sources/HeuristicLab.Evolutionary/HeuristicLabEvolutionaryPlugin.cs
===================================================================
--- trunk/sources/HeuristicLab.Evolutionary/HeuristicLabEvolutionaryPlugin.cs	(revision 1528)
+++ 	(revision )
@@ -1,38 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 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.Text;
-using HeuristicLab.PluginInfrastructure;
-
-namespace HeuristicLab.Evolutionary {
-  /// <summary>
-  /// Plugin class for HeuristicLab.Evolutionary plugin.
-  /// </summary>
-  [ClassInfo(Name = "HeuristicLab.Evolutionary-3.2")]
-  [PluginFile(Filename = "HeuristicLab.Evolutionary-3.2.dll", Filetype = PluginFileType.Assembly)]
-  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
-  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
-  [Dependency(Dependency = "HeuristicLab.Operators-3.2")]
-  public class HeuristicLabEvolutionaryPlugin : PluginBase {
-  }
-}
Index: trunk/sources/HeuristicLab.Evolutionary/SASEGASAReunificator.cs
===================================================================
--- trunk/sources/HeuristicLab.Evolutionary/SASEGASAReunificator.cs	(revision 1528)
+++ 	(revision )
@@ -1,80 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 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.Text;
-using HeuristicLab.Core;
-using HeuristicLab.Data;
-
-namespace HeuristicLab.Evolutionary {
-  /// <summary>
-  /// Joins all sub sub scopes of a specified scope, reduces the number of sub 
-  /// scopes by 1 and uniformly partitions the sub sub scopes again, maintaining the order.
-  /// </summary>
-  public class SASEGASAReunificator : OperatorBase {
-    /// <inheritdoc select="summary"/>
-    public override string Description {
-      get { return @"TODO\r\nOperator description still missing ..."; }
-    }
-
-    /// <summary>
-    /// Joins all sub sub scopes of the given <paramref name="scope"/>, reduces the number of sub 
-    /// scopes by 1 and uniformly partitions the sub sub scopes again, maintaining the order.
-    /// </summary>
-    /// <exception cref="InvalidOperationException">Thrown when only 0 or 1 sub scope is available.</exception>
-    /// <param name="scope">The current scope whose sub scopes to reduce.</param>
-    /// <returns><c>null</c>.</returns>
-    public override IOperation Apply(IScope scope) {
-      int subScopes = scope.SubScopes.Count;
-      if (subScopes <= 1)
-        throw new InvalidOperationException("SASEGASA reunification requires 2 or more sub-scopes");
-
-      // get all sub-sub-scopes
-      IList<IScope> subSubScopes = new List<IScope>();
-      for (int i = 0; i < scope.SubScopes.Count; i++) {
-        while (scope.SubScopes[i].SubScopes.Count > 0) {
-          subSubScopes.Add(scope.SubScopes[i].SubScopes[0]);
-          scope.SubScopes[i].RemoveSubScope(scope.SubScopes[i].SubScopes[0]);
-        }
-      }
-
-      // reduce number of sub-scopes by 1 and partition sub-sub-scopes again
-      scope.RemoveSubScope(scope.SubScopes[scope.SubScopes.Count - 1]);
-      subScopes--;
-      int subSubScopesCount = subSubScopes.Count / subScopes;
-      for (int i = 0; i < subScopes; i++) {
-        for (int j = 0; j < subSubScopesCount; j++) {
-          scope.SubScopes[i].AddSubScope(subSubScopes[0]);
-          subSubScopes.RemoveAt(0);
-        }
-      }
-
-      // add remaining sub-sub-scopes to last sub-scope
-      while (subSubScopes.Count > 0) {
-        scope.SubScopes[scope.SubScopes.Count - 1].AddSubScope(subSubScopes[0]);
-        subSubScopes.RemoveAt(0);
-      }
-
-      return null;
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.Evolutionary/SubScopesStorer.cs
===================================================================
--- trunk/sources/HeuristicLab.Evolutionary/SubScopesStorer.cs	(revision 1528)
+++ 	(revision )
@@ -1,104 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 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.Text;
-using HeuristicLab.Core;
-using HeuristicLab.Data;
-using HeuristicLab.Operators;
-
-namespace HeuristicLab.Evolutionary {
-  /// <summary>
-  /// Stores the sub scopes of the right sub scope until enough newly created child scopes are available
-  /// (for example to replace a generation).
-  /// </summary>
-  public class SubScopesStorer : OperatorBase {
-    /// <inheritdoc select="summary"/>
-    public override string Description {
-      get { return @"TODO\r\nOperator description still missing ..."; }
-    }
-
-    /// <summary>
-    /// Initializes a new instance of <see cref="SubScopesStorer"/> with two variable infos 
-    /// (<c>SubScopes</c> and <c>SubScopesStore</c>).
-    /// </summary>
-    public SubScopesStorer()
-      : base() {
-      AddVariableInfo(new VariableInfo("SubScopes", "Number of sub-scopes that should be available", typeof(IntData), VariableKind.In));
-      AddVariableInfo(new VariableInfo("SubScopesStore", "Temporarily stored sub-scopes", typeof(ItemList<IScope>), VariableKind.New | VariableKind.In | VariableKind.Out | VariableKind.Deleted));
-    }
-
-    /// <summary>
-    /// Stores all sub scopes of the right branch to get the required number of sub scopes. Shifts the left
-    /// branch one level up, if sub scopes are still missing (so that another selection and mutation circle
-    /// can take place). 
-    /// </summary>
-    /// <param name="scope">The current scope whose sub scopes to store.</param>
-    /// <returns><c>null</c> if the required number of sub scopes is available, the next 
-    /// <see cref="AtomicOperation"/> if sub scopes are still missing.</returns>
-    public override IOperation Apply(IScope scope) {
-      IntData subScopes = GetVariableValue<IntData>("SubScopes", scope, true);
-      ItemList<IScope> subScopesStore = GetVariableValue<ItemList<IScope>>("SubScopesStore", scope, false);
-
-      if (subScopesStore == null) {
-        subScopesStore = new ItemList<IScope>();
-        IVariableInfo info = GetVariableInfo("SubScopesStore");
-        if (info.Local)
-          AddVariable(new Variable(info.ActualName, subScopesStore));
-        else
-          scope.AddVariable(new Variable(scope.TranslateName(info.FormalName), subScopesStore));
-      }
-
-      IScope left = scope.SubScopes[0];
-      IScope right = scope.SubScopes[1];
-
-      if (right.SubScopes.Count + subScopesStore.Count
-          >= subScopes.Data) {  // enough sub-scopes available
-        // restore sub-scopes
-        for (int i = 0; i < subScopesStore.Count; i++) {
-          right.AddSubScope(subScopesStore[i]);
-          IVariableInfo info = GetVariableInfo("SubScopesStore");
-          if (info.Local)
-            RemoveVariable(info.ActualName);
-          else
-            scope.RemoveVariable(scope.TranslateName(info.FormalName));
-        }
-        return null;
-      } else {  // not enough sub-scopes available
-        // store sub-scopes
-        for (int i = 0; i < right.SubScopes.Count; i++) {
-          IScope s = right.SubScopes[0];
-          right.RemoveSubScope(s);
-          subScopesStore.Add(s);
-        }
-
-        // shift left on level up
-        scope.RemoveSubScope(right);
-        scope.RemoveSubScope(left);
-        for (int i = 0; i < left.SubScopes.Count; i++)
-          scope.AddSubScope(left.SubScopes[i]);
-
-        return new AtomicOperation(SubOperators[0], scope);
-      }
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.Evolutionary/SuccessRuleMutationStrengthAdjuster.cs
===================================================================
--- trunk/sources/HeuristicLab.Evolutionary/SuccessRuleMutationStrengthAdjuster.cs	(revision 1528)
+++ 	(revision )
@@ -1,90 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 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.Text;
-using HeuristicLab.Core;
-using HeuristicLab.Data;
-
-namespace HeuristicLab.Evolutionary {
-  /// <summary>
-  /// Adjusts the mutation strength based on the ratio of successful offsprings.
-  /// </summary>
-  public class SuccessRuleMutationStrengthAdjuster : OperatorBase {
-    /// <inheritdoc select="summary"/>
-    public override string Description {
-      get { return @"Adjusts the mutation strength based on the ratio of successful offsprings"; }
-    }
-
-    /// <summary>
-    /// Initializes a new instance of <see cref="SuccessRuleMutationStrengthAdjuster"/> with six variable
-    /// infos (<c>ShakingFactor</c>, <c>SuccessfulChild</c>, <c>TargetSuccessProbability</c>, 
-    /// <c>SuccessProbability</c>, <c>LearningRate</c> and <c>DampeningFactor</c>).
-    /// </summary>
-    public SuccessRuleMutationStrengthAdjuster() {
-      AddVariableInfo(new VariableInfo("ShakingFactor", "The mutation strength to adjust", typeof(DoubleData), VariableKind.In | VariableKind.Out));
-      AddVariableInfo(new VariableInfo("SuccessfulChild", "Variable that tells if a child has become better than its parent", typeof(BoolData), VariableKind.In | VariableKind.Deleted));
-      AddVariableInfo(new VariableInfo("TargetSuccessProbability", "The targeted probability to create a successful offsrping", typeof(DoubleData), VariableKind.In));
-      AddVariableInfo(new VariableInfo("SuccessProbability", "The measured probability to create a successful offspring", typeof(DoubleData), VariableKind.New | VariableKind.In | VariableKind.Out));
-      AddVariableInfo(new VariableInfo("LearningRate", "The speed at which the success probability changes", typeof(DoubleData), VariableKind.In));
-      AddVariableInfo(new VariableInfo("DampeningFactor", "Influences the strength of the adjustment to the mutation strength", typeof(DoubleData), VariableKind.In));
-    }
-
-    /// <summary>
-    /// Adjusts the mutation strength based on the ratio of successful offsprings.
-    /// </summary>
-    /// <param name="scope">The current scope where to adjust the mutation strength.</param>
-    /// <returns><c>null</c>.</returns>
-    public override IOperation Apply(IScope scope) {
-      DoubleData shakingFactor = GetVariableValue<DoubleData>("ShakingFactor", scope, true);
-      DoubleData targetSuccessProb = GetVariableValue<DoubleData>("TargetSuccessProbability", scope, true);
-      DoubleData successProb = GetVariableValue<DoubleData>("SuccessProbability", scope, true);
-      if (successProb == null) {
-        IVariableInfo successProbInfo = GetVariableInfo("SuccessProbability");
-        IVariable successProbVar;
-        if (successProbInfo.Local) {
-          successProbVar = new Variable(successProbInfo.ActualName, new DoubleData(targetSuccessProb.Data));
-          AddVariable(successProbVar);
-        } else {
-          successProbVar = new Variable(scope.TranslateName(successProbInfo.FormalName), new DoubleData(targetSuccessProb.Data));
-          scope.AddVariable(successProbVar);
-        }
-        successProb = (DoubleData)successProbVar.Value;
-      }
-      DoubleData learningRate = GetVariableValue<DoubleData>("LearningRate", scope, true);
-      DoubleData dampeningFactor = GetVariableValue<DoubleData>("DampeningFactor", scope, true);
-
-      double success = 0.0;
-      for (int i = 0 ; i < scope.SubScopes.Count ; i++) {
-        if (scope.SubScopes[i].GetVariableValue<BoolData>("SuccessfulChild", false).Data) {
-          success++;
-        }
-        scope.SubScopes[i].RemoveVariable(scope.SubScopes[i].TranslateName("SuccessfulChild"));
-      }
-      if (scope.SubScopes.Count > 0) success /= scope.SubScopes.Count;
-
-      successProb.Data = (1.0 - learningRate.Data) * successProb.Data + success * learningRate.Data;
-      shakingFactor.Data *= Math.Exp((successProb.Data - ((targetSuccessProb.Data * (1.0 - successProb.Data)) / (1.0 - targetSuccessProb.Data))) / dampeningFactor.Data);
-      return null;
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.Evolutionary/UnidirectionalRingMigrator.cs
===================================================================
--- trunk/sources/HeuristicLab.Evolutionary/UnidirectionalRingMigrator.cs	(revision 1528)
+++ 	(revision )
@@ -1,69 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 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.Text;
-using HeuristicLab.Core;
-using HeuristicLab.Data;
-
-namespace HeuristicLab.Evolutionary {
-  /// <summary>
-  /// Operator class that migrates one sub scope of each child to its left neighbour sub scope, like a ring.
-  /// </summary>
-  public class UnidirectionalRingMigrator : OperatorBase {
-    /// <inheritdoc select="summary"/>
-    public override string Description {
-      get { return @"TODO\r\nOperator description still missing ..."; }
-    }
-
-    /// <summary>
-    /// Migrates every first sub scope of each child to its left neighbour (like a ring).
-    /// <pre>                                                               
-    ///                    scope                    scope             
-    ///                /     |     \            /     |     \         
-    ///               A      B      C    =>    A      B      C           
-    ///              /|\    /|\    /|\        /|\    /|\    /|\       
-    ///             G H I  J K L  M N O      H I J  K L M  N O G     
-    /// </pre>
-    /// </summary>
-    /// <param name="scope">The scope whose sub scopes of the children should migrate.</param>
-    /// <returns><c>null</c>.</returns>
-    public override IOperation Apply(IScope scope) {
-      IList<IScope> emigrantsList = new List<IScope>();
-
-      for (int i = 0; i < scope.SubScopes.Count; i++) {
-        IScope emigrants = scope.SubScopes[i].SubScopes[1];
-        scope.SubScopes[i].RemoveSubScope(emigrants);
-        emigrantsList.Add(emigrants);
-      }
-
-      // shift first emigrants to end of list
-      emigrantsList.Add(emigrantsList[0]);
-      emigrantsList.RemoveAt(0);
-
-      for (int i = 0; i < scope.SubScopes.Count; i++)
-        scope.SubScopes[i].AddSubScope(emigrantsList[i]);
-
-      return null;
-    }
-  }
-}
