Index: /branches/GeneralizedQAP/GeneralizedQAP.sln
===================================================================
--- /branches/GeneralizedQAP/GeneralizedQAP.sln	(revision 15491)
+++ /branches/GeneralizedQAP/GeneralizedQAP.sln	(revision 15492)
@@ -9,6 +9,4 @@
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Algorithms.GRASP-3.3", "HeuristicLab.Algorithms.GRASP\3.3\HeuristicLab.Algorithms.GRASP-3.3.csproj", "{53AB48BF-532F-417D-B98B-745105BB447A}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common-3.3", "HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common\3.3\HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common-3.3.csproj", "{DA367BE5-4F53-4243-933B-32AAB86189D5}"
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTests", "UnitTests\UnitTests.csproj", "{68C6C157-08DA-414F-9256-CCCA13038399}"
@@ -66,16 +64,4 @@
 		{53AB48BF-532F-417D-B98B-745105BB447A}.Release|x86.ActiveCfg = Release|Any CPU
 		{53AB48BF-532F-417D-B98B-745105BB447A}.Release|x86.Build.0 = Release|Any CPU
-		{DA367BE5-4F53-4243-933B-32AAB86189D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{DA367BE5-4F53-4243-933B-32AAB86189D5}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{DA367BE5-4F53-4243-933B-32AAB86189D5}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{DA367BE5-4F53-4243-933B-32AAB86189D5}.Debug|x64.Build.0 = Debug|Any CPU
-		{DA367BE5-4F53-4243-933B-32AAB86189D5}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{DA367BE5-4F53-4243-933B-32AAB86189D5}.Debug|x86.Build.0 = Debug|Any CPU
-		{DA367BE5-4F53-4243-933B-32AAB86189D5}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{DA367BE5-4F53-4243-933B-32AAB86189D5}.Release|Any CPU.Build.0 = Release|Any CPU
-		{DA367BE5-4F53-4243-933B-32AAB86189D5}.Release|x64.ActiveCfg = Release|Any CPU
-		{DA367BE5-4F53-4243-933B-32AAB86189D5}.Release|x64.Build.0 = Release|Any CPU
-		{DA367BE5-4F53-4243-933B-32AAB86189D5}.Release|x86.ActiveCfg = Release|Any CPU
-		{DA367BE5-4F53-4243-933B-32AAB86189D5}.Release|x86.Build.0 = Release|Any CPU
 		{68C6C157-08DA-414F-9256-CCCA13038399}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{68C6C157-08DA-414F-9256-CCCA13038399}.Debug|Any CPU.Build.0 = Debug|Any CPU
Index: /branches/GeneralizedQAP/HeuristicLab.Algorithms.GRASP/3.3/GRASPWithPathRelinking.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Algorithms.GRASP/3.3/GRASPWithPathRelinking.cs	(revision 15491)
+++ /branches/GeneralizedQAP/HeuristicLab.Algorithms.GRASP/3.3/GRASPWithPathRelinking.cs	(revision 15492)
@@ -31,5 +31,4 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.PluginInfrastructure;
-using HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common;
 using HeuristicLab.Random;
 
Index: /branches/GeneralizedQAP/HeuristicLab.Algorithms.GRASP/3.3/GRASPWithPathRelinkingMainLoop.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Algorithms.GRASP/3.3/GRASPWithPathRelinkingMainLoop.cs	(revision 15491)
+++ /branches/GeneralizedQAP/HeuristicLab.Algorithms.GRASP/3.3/GRASPWithPathRelinkingMainLoop.cs	(revision 15492)
@@ -21,4 +21,5 @@
 
 using System;
+using System.Collections.Generic;
 using System.Linq;
 using HeuristicLab.Common;
@@ -30,5 +31,4 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common;
 using HeuristicLab.Selection;
 
@@ -196,9 +196,39 @@
 
     private void Parameterize() {
-      var operators = OperatorGraph.InitialOperator.Walk().ToArray();
+      var operators = Walk(OperatorGraph).ToArray();
 
       foreach (var solutionsCreator in operators.OfType<SolutionsCreator>()) {
         solutionsCreator.SolutionCreatorParameter.ActualName = SolutionCreatorParameter.Name;
         solutionsCreator.EvaluatorParameter.ActualName = EvaluatorParameter.Name;
+      }
+    }
+
+    /// <summary>
+    /// Walks an operator graph in that it jumps from one operator to all its operator parameters and yields each operator it touches.
+    /// Cycles are detected and not walked twice.
+    /// </summary>
+    /// <param name="graph">The operator graph that should be walked.</param>
+    /// <returns>An enumeration of all the operators that could be found.</returns>
+    private IEnumerable<IOperator> Walk(OperatorGraph graph) {
+      var open = new Stack<IOperator>();
+      var visited = new HashSet<IOperator>();
+      open.Push(graph.InitialOperator);
+
+      while (open.Any()) {
+        IOperator current = open.Pop();
+        if (visited.Contains(current)) continue;
+        visited.Add(current);
+        yield return current;
+
+        foreach (var parameter in current.Parameters.OfType<IValueParameter>()) {
+          if (typeof(IOperator).IsAssignableFrom(parameter.DataType)) {
+            if (parameter.Value != null)
+              open.Push((IOperator)parameter.Value);
+          }
+        }
+        var algOp = current as AlgorithmOperator;
+        if (algOp != null && algOp.OperatorGraph.InitialOperator != null) {
+          open.Push(algOp.OperatorGraph.InitialOperator);
+        }
       }
     }
Index: /branches/GeneralizedQAP/HeuristicLab.Algorithms.GRASP/3.3/HeuristicLab.Algorithms.GRASP-3.3.csproj
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Algorithms.GRASP/3.3/HeuristicLab.Algorithms.GRASP-3.3.csproj	(revision 15491)
+++ /branches/GeneralizedQAP/HeuristicLab.Algorithms.GRASP/3.3/HeuristicLab.Algorithms.GRASP-3.3.csproj	(revision 15492)
@@ -110,9 +110,4 @@
       <Private>False</Private>
     </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common\3.3\HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common-3.3.csproj">
-      <Project>{DA367BE5-4F53-4243-933B-32AAB86189D5}</Project>
-      <Name>HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
Index: /branches/GeneralizedQAP/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/IntegerVectorEqualityComparer.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/IntegerVectorEqualityComparer.cs	(revision 15491)
+++ /branches/GeneralizedQAP/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/IntegerVectorEqualityComparer.cs	(revision 15492)
@@ -45,4 +45,10 @@
       }
     }
+
+    public static IEnumerable<int> GetDifferingIndices(IntegerVector a, IntegerVector b) {
+      if (a == null || b == null) throw new ArgumentNullException("arguments must not be null");
+      for (int i = 0; i < a.Length; i++)
+        if (a[i] != b[i]) yield return i;
+    }
   }
 }
Index: /branches/GeneralizedQAP/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj	(revision 15491)
+++ /branches/GeneralizedQAP/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj	(revision 15492)
@@ -156,4 +156,5 @@
     <Compile Include="Interfaces\ILocalImprovementAlgorithmOperator.cs" />
     <Compile Include="Interfaces\IMultiObjectiveOperator.cs" />
+    <Compile Include="Interfaces\IPopulationReducer.cs" />
     <Compile Include="MultiObjective\DominationCalculator.cs" />
     <Compile Include="Results\IResultParameter.cs" />
Index: /branches/GeneralizedQAP/HeuristicLab.Optimization/3.3/Interfaces/IPopulationReducer.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Optimization/3.3/Interfaces/IPopulationReducer.cs	(revision 15492)
+++ /branches/GeneralizedQAP/HeuristicLab.Optimization/3.3/Interfaces/IPopulationReducer.cs	(revision 15492)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2017 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.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Optimization {
+  public interface IPopulationReducer : IReducer {
+    ILookupParameter<IntValue> MinimumPopulationSizeParameter { get; }
+    ILookupParameter<IntValue> MaximumPopulationSizeParameter { get; }
+  }
+}
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/HeuristicLab.Problems.GeneralizedQuadraticAssignment-3.3.csproj
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/HeuristicLab.Problems.GeneralizedQuadraticAssignment-3.3.csproj	(revision 15491)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/HeuristicLab.Problems.GeneralizedQuadraticAssignment-3.3.csproj	(revision 15492)
@@ -186,9 +186,4 @@
       <Private>False</Private>
     </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common\3.3\HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common-3.3.csproj">
-      <Project>{DA367BE5-4F53-4243-933B-32AAB86189D5}</Project>
-      <Name>HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
   </ItemGroup>
   <ItemGroup />
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Operators/Crossovers/GQAPPathRelinking.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Operators/Crossovers/GQAPPathRelinking.cs	(revision 15491)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Operators/Crossovers/GQAPPathRelinking.cs	(revision 15492)
@@ -137,5 +137,5 @@
       var fix = new HashSet<int>();
       var nonFix = new HashSet<int>(Enumerable.Range(0, demands.Length));
-      var phi = new HashSet<int>((pi_prime.GetDifferingIndices(target)));
+      var phi = new HashSet<int>((IntegerVectorEqualityComparer.GetDifferingIndices(pi_prime, target)));
 
       while (phi.Any()) {
@@ -176,5 +176,5 @@
               bool contains = false;
               foreach (var b in B) {
-                if (!solution.Assignment.GetDifferingIndices(b.Assignment).Any()) {
+                if (!IntegerVectorEqualityComparer.GetDifferingIndices(solution.Assignment, b.Assignment).Any()) {
                   contains = true;
                   break;
@@ -189,5 +189,5 @@
           if (maximization.Value) pi = B.SampleProportional(random, 1, B.Select(x => x.Quality.Value), false).First();
           else pi = B.SampleProportional(random, 1, B.Select(x => 1.0 / x.Quality.Value), false).First();
-          var diff = pi.Assignment.GetDifferingIndices(target);
+          var diff = IntegerVectorEqualityComparer.GetDifferingIndices(pi.Assignment, target);
           var I = phi.Except(diff);
           var i = I.SampleRandom(random);
@@ -203,5 +203,5 @@
           }
         } else return result;
-        phi = new HashSet<int>(pi_prime.GetDifferingIndices(target));
+        phi = new HashSet<int>(IntegerVectorEqualityComparer.GetDifferingIndices(pi_prime, target));
       }
 
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Operators/PopulationReducers/GQAPQualitySimilarityReducer.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Operators/PopulationReducers/GQAPQualitySimilarityReducer.cs	(revision 15491)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Operators/PopulationReducers/GQAPQualitySimilarityReducer.cs	(revision 15492)
@@ -27,7 +27,7 @@
 using HeuristicLab.Encodings.IntegerVectorEncoding;
 using HeuristicLab.Operators;
+using HeuristicLab.Optimization;
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common;
 
 namespace HeuristicLab.Problems.GeneralizedQuadraticAssignment.Operators {
Index: /branches/GeneralizedQAP/UnitTests/UnitTests.csproj
===================================================================
--- /branches/GeneralizedQAP/UnitTests/UnitTests.csproj	(revision 15491)
+++ /branches/GeneralizedQAP/UnitTests/UnitTests.csproj	(revision 15492)
@@ -115,8 +115,4 @@
       <Name>HeuristicLab.Optimization-3.3</Name>
     </ProjectReference>
-    <ProjectReference Include="..\HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common\3.3\HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common-3.3.csproj">
-      <Project>{DA367BE5-4F53-4243-933B-32AAB86189D5}</Project>
-      <Name>HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common-3.3</Name>
-    </ProjectReference>
     <ProjectReference Include="..\HeuristicLab.Problems.GeneralizedQuadraticAssignment\3.3\HeuristicLab.Problems.GeneralizedQuadraticAssignment-3.3.csproj">
       <Project>{C739E6D2-5680-4804-A810-8017DA0C238F}</Project>
