Index: /branches/GeneralizedQAP/GeneralizedQAP.sln
===================================================================
--- /branches/GeneralizedQAP/GeneralizedQAP.sln	(revision 7362)
+++ /branches/GeneralizedQAP/GeneralizedQAP.sln	(revision 7363)
@@ -6,18 +6,50 @@
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views-3.3", "HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views\3.3\HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views-3.3.csproj", "{BFAAC00C-B884-458D-BD74-98C94BFAFA41}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms.3.3", "HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms\3.3\HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms.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
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
+		Debug|x64 = Debug|x64
+		Debug|x86 = Debug|x86
 		Release|Any CPU = Release|Any CPU
+		Release|x64 = Release|x64
+		Release|x86 = Release|x86
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
 		{C739E6D2-5680-4804-A810-8017DA0C238F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{C739E6D2-5680-4804-A810-8017DA0C238F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{C739E6D2-5680-4804-A810-8017DA0C238F}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{C739E6D2-5680-4804-A810-8017DA0C238F}.Debug|x86.ActiveCfg = Debug|Any CPU
 		{C739E6D2-5680-4804-A810-8017DA0C238F}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{C739E6D2-5680-4804-A810-8017DA0C238F}.Release|Any CPU.Build.0 = Release|Any CPU
+		{C739E6D2-5680-4804-A810-8017DA0C238F}.Release|x64.ActiveCfg = Release|Any CPU
+		{C739E6D2-5680-4804-A810-8017DA0C238F}.Release|x86.ActiveCfg = Release|Any CPU
 		{BFAAC00C-B884-458D-BD74-98C94BFAFA41}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{BFAAC00C-B884-458D-BD74-98C94BFAFA41}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{BFAAC00C-B884-458D-BD74-98C94BFAFA41}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{BFAAC00C-B884-458D-BD74-98C94BFAFA41}.Debug|x86.ActiveCfg = Debug|Any CPU
 		{BFAAC00C-B884-458D-BD74-98C94BFAFA41}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{BFAAC00C-B884-458D-BD74-98C94BFAFA41}.Release|Any CPU.Build.0 = Release|Any CPU
+		{BFAAC00C-B884-458D-BD74-98C94BFAFA41}.Release|x64.ActiveCfg = Release|Any CPU
+		{BFAAC00C-B884-458D-BD74-98C94BFAFA41}.Release|x86.ActiveCfg = Release|Any CPU
+		{53AB48BF-532F-417D-B98B-745105BB447A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{53AB48BF-532F-417D-B98B-745105BB447A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{53AB48BF-532F-417D-B98B-745105BB447A}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{53AB48BF-532F-417D-B98B-745105BB447A}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{53AB48BF-532F-417D-B98B-745105BB447A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{53AB48BF-532F-417D-B98B-745105BB447A}.Release|Any CPU.Build.0 = Release|Any CPU
+		{53AB48BF-532F-417D-B98B-745105BB447A}.Release|x64.ActiveCfg = Release|Any CPU
+		{53AB48BF-532F-417D-B98B-745105BB447A}.Release|x86.ActiveCfg = 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|x86.ActiveCfg = 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|x86.ActiveCfg = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/GRASPWithPathRelinking.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/GRASPWithPathRelinking.cs	(revision 7362)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/GRASPWithPathRelinking.cs	(revision 7363)
@@ -29,9 +29,11 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common;
 using HeuristicLab.Random;
 
 namespace HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms {
   /// <summary>
-  /// A genetic algorithm.
+  /// The algorithm combines the Greedy Randomized Adaptive Search Procedure (GRASP) with Path Relinking and is described in Mateus, G., Resende, M., and Silva, R. 2011. GRASP with path-relinking for the generalized quadratic assignment problem. Journal of Heuristics 17, Springer Netherlands, pp. 527-565.
   /// </summary>
   [Item("GRASP+PR", "The algorithm combines the Greedy Randomized Adaptive Search Procedure (GRASP) with Path Relinking and is described in Mateus, G., Resende, M., and Silva, R. 2011. GRASP with path-relinking for the generalized quadratic assignment problem. Journal of Heuristics 17, Springer Netherlands, pp. 527-565.")]
@@ -59,9 +61,9 @@
       get { return (IValueParameter<MultiAnalyzer>)Parameters["Analyzer"]; }
     }
-    private IValueParameter<IntValue> EliteSetSizeParameter {
-      get { return (IValueParameter<IntValue>)Parameters["EliteSetSize"]; }
-    }
-    private IValueParameter<IntValue> LocalImprovementMaximumIterationsParameter {
-      get { return (IValueParameter<IntValue>)Parameters["LocalImprovementMaximumIterations"]; }
+    private IFixedValueParameter<IntValue> EliteSetSizeParameter {
+      get { return (IFixedValueParameter<IntValue>)Parameters["EliteSetSize"]; }
+    }
+    private IFixedValueParameter<IntValue> LocalImprovementMaximumIterationsParameter {
+      get { return (IFixedValueParameter<IntValue>)Parameters["LocalImprovementMaximumIterations"]; }
     }
     private ConstrainedValueParameter<ILocalImprovementOperator> LocalImprovementParameter {
@@ -74,6 +76,6 @@
       get { return (ConstrainedValueParameter<ICrossover>)Parameters["PathRelinking"]; }
     }
-    public ConstrainedValueParameter<IReplacer> EliteSetReplacerParameter {
-      get { return (ConstrainedValueParameter<IReplacer>)Parameters["EliteSetReplacer"]; }
+    public ConstrainedValueParameter<IMerger> EliteSetReplacerParameter {
+      get { return (ConstrainedValueParameter<IMerger>)Parameters["EliteSetMerger"]; }
     }
     #endregion
@@ -94,9 +96,9 @@
     public IntValue EliteSetSize {
       get { return EliteSetSizeParameter.Value; }
-      set { EliteSetSizeParameter.Value = value; }
+      set { EliteSetSizeParameter.Value.Value = value.Value; }
     }
     public IntValue LocalImprovementMaximumIterations {
       get { return LocalImprovementMaximumIterationsParameter.Value; }
-      set { LocalImprovementMaximumIterationsParameter.Value = value; }
+      set { LocalImprovementMaximumIterationsParameter.Value.Value = value.Value; }
     }
 
@@ -110,5 +112,4 @@
     private GRASPWithPathRelinking(GRASPWithPathRelinking original, Cloner cloner)
       : base(original, cloner) {
-      // TODO: clone your private fields here
       RegisterEventHandlers();
     }
@@ -118,10 +119,10 @@
       Parameters.Add(new ValueParameter<IntValue>("Seed", "The random seed used to initialize the new pseudo random number generator."));
       Parameters.Add(new ValueParameter<MultiAnalyzer>("Analyzer", "The operator used to analyze each iteration.", new MultiAnalyzer()));
-      Parameters.Add(new ValueParameter<IntValue>("EliteSetSize", "The elite set stores the best found solutions.", new IntValue(10)));
-      Parameters.Add(new ValueParameter<IntValue>("LocalImprovementMaximumIterations", "The maximum number of iterations performed by the local improvement operator.", new IntValue(100)));
-      Parameters.Add(new ConstrainedValueParameter<ILocalImprovementOperator>("LocalImprovement", "Performs a local search on the solution.", null));
+      Parameters.Add(new FixedValueParameter<IntValue>("EliteSetSize", "The elite set stores the best found solutions.", new IntValue(10)));
+      Parameters.Add(new FixedValueParameter<IntValue>("LocalImprovementMaximumIterations", "The maximum number of iterations performed by the local improvement operator.", new IntValue(100)));
+      Parameters.Add(new ConstrainedValueParameter<ILocalImprovementOperator>("LocalImprovement", "Performs a local search on the solution."));
       Parameters.Add(new FixedValueParameter<IntValue>("MinimumEliteSetSize", "(ρ) The minimum amount of elites for performing path relinking.", new IntValue(1)));
       Parameters.Add(new ConstrainedValueParameter<ICrossover>("PathRelinking", "The operator that performs the path relinking."));
-      Parameters.Add(new ConstrainedValueParameter<IReplacer>("EliteSetReplacer", "The operator that replaces solutions in the elite set."));
+      Parameters.Add(new ConstrainedValueParameter<IMerger>("EliteSetMerger", "The operator that merges new solutions into the elite set."));
 
       RandomCreator randomCreator = new RandomCreator();
@@ -151,5 +152,4 @@
     #region Events
     protected override void OnProblemChanged() {
-      // TODO: Initialize and parameterize operators
       InitializeOperators();
       base.OnProblemChanged();
@@ -157,13 +157,12 @@
 
     protected override void Problem_SolutionCreatorChanged(object sender, EventArgs e) {
-      // TODO: Parameterize operators
+      Parameterize();
       base.Problem_SolutionCreatorChanged(sender, e);
     }
     protected override void Problem_EvaluatorChanged(object sender, EventArgs e) {
-      // TODO: Parameterize operators
+      Parameterize();
       base.Problem_EvaluatorChanged(sender, e);
     }
     protected override void Problem_OperatorsChanged(object sender, EventArgs e) {
-      // TODO: Parameterize operators
       InitializeOperators();
       base.Problem_OperatorsChanged(sender, e);
@@ -176,4 +175,5 @@
       if (Problem != null) {
       }
+      RegisterEventHandlers();
     }
 
@@ -190,34 +190,11 @@
           Analyzer.Operators.Add(analyzer);
         }
-
-        string oldLocalImprovement = String.Empty;
-        if (LocalImprovementParameter.Value != null)
-          oldLocalImprovement = LocalImprovementParameter.Value.Name;
+        InitializeFromInstallation(LocalImprovementParameter, x => x.ProblemType.IsAssignableFrom(Problem.GetType()));
+        InitializeFromProblem(PathRelinkingParameter);
+        InitializeFromProblem(EliteSetReplacerParameter);
+      } else {
         LocalImprovementParameter.ValidValues.Clear();
-        foreach (ILocalImprovementOperator localImprovement in Problem.Operators.OfType<ILocalImprovementOperator>()) {
-          LocalImprovementParameter.ValidValues.Add(localImprovement);
-        }
-        var newLocalImprovement = LocalImprovementParameter.ValidValues.FirstOrDefault(x => x.Name == oldLocalImprovement);
-        if (newLocalImprovement != null) LocalImprovementParameter.Value = newLocalImprovement;
-
-        string oldPathRelinking = String.Empty;
-        if (PathRelinkingParameter.Value != null)
-          oldPathRelinking = PathRelinkingParameter.Value.Name;
         PathRelinkingParameter.ValidValues.Clear();
-        foreach (ICrossover pathRelinking in Problem.Operators.OfType<ICrossover>()) {
-          PathRelinkingParameter.ValidValues.Add(pathRelinking);
-        }
-        var newPathRelinking = PathRelinkingParameter.ValidValues.FirstOrDefault(x => x.Name == oldPathRelinking);
-        if (newPathRelinking != null) PathRelinkingParameter.Value = newPathRelinking;
-
-        string oldReplacer = String.Empty;
-        if (EliteSetReplacerParameter.Value != null)
-          oldReplacer = EliteSetReplacerParameter.Value.Name;
         EliteSetReplacerParameter.ValidValues.Clear();
-        foreach (IReplacer replacer in Problem.Operators.OfType<IReplacer>()) {
-          EliteSetReplacerParameter.ValidValues.Add(replacer);
-        }
-        var newReplacer = EliteSetReplacerParameter.ValidValues.FirstOrDefault(x => x.Name == oldReplacer);
-        if (newReplacer != null) EliteSetReplacerParameter.Value = newReplacer;
       }
 
@@ -234,4 +211,35 @@
       }
     }
+
+    private void InitializeFromProblem<T>(ConstrainedValueParameter<T> parameter) where T : class, INamedItem {
+      InitializeFromProblem(parameter, x => true);
+    }
+    private void InitializeFromProblem<T>(ConstrainedValueParameter<T> parameter, Func<T, bool> condition) where T : class, INamedItem {
+      if (parameter == null) throw new ArgumentNullException("parameter");
+      if (condition == null) throw new ArgumentNullException("condition");
+      string oldName = String.Empty;
+      if (parameter.Value != null) oldName = parameter.Value.Name;
+      parameter.ValidValues.Clear();
+      foreach (var item in Problem.Operators.OfType<T>().Where(condition)) {
+        parameter.ValidValues.Add(item);
+      }
+      var newItem = parameter.ValidValues.FirstOrDefault(x => x.Name == oldName);
+      if (newItem != null) parameter.Value = newItem;
+    }
+    private void InitializeFromInstallation<T>(ConstrainedValueParameter<T> parameter) where T : class, INamedItem {
+      InitializeFromInstallation(parameter, x => true);
+    }
+    private void InitializeFromInstallation<T>(ConstrainedValueParameter<T> parameter, Func<T, bool> condition) where T : class, INamedItem {
+      if (parameter == null) throw new ArgumentNullException("parameter");
+      if (condition == null) throw new ArgumentNullException("condition");
+      string oldName = String.Empty;
+      if (parameter.Value != null) oldName = parameter.Value.Name;
+      parameter.ValidValues.Clear();
+      foreach (var item in ApplicationManager.Manager.GetInstances<T>().Where(condition)) {
+        parameter.ValidValues.Add(item);
+      }
+      var newItem = parameter.ValidValues.FirstOrDefault(x => x.Name == oldName);
+      if (newItem != null) parameter.Value = newItem;
+    }
     #endregion
   }
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/GRASPWithPathRelinkingMainLoop.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/GRASPWithPathRelinkingMainLoop.cs	(revision 7362)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/GRASPWithPathRelinkingMainLoop.cs	(revision 7363)
@@ -30,4 +30,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common;
 using HeuristicLab.Selection;
 
@@ -88,5 +89,5 @@
 
       var variableCreator2 = new VariableCreator();
-      variableCreator2.CollectedValues.Add(new ValueParameter<IntValue>("ActualEliteSetSize", new IntValue(0));
+      variableCreator2.CollectedValues.Add(new ValueParameter<IntValue>("ActualEliteSetSize", new IntValue(0)));
       variableCreator2.Name = "ActualEliteSetSize = 0";
 
@@ -112,5 +113,5 @@
       var selector2 = new RandomSelector();
       selector2.NumberOfSelectedSubScopesParameter.Value = new IntValue(0);
-      
+
       var ssp1 = new SubScopesProcessor();
 
@@ -121,5 +122,5 @@
       solutionsCreator.SolutionCreatorParameter.ActualName = SolutionCreatorParameter.Name;
       solutionsCreator.NumberOfSolutions = new IntValue(1);
-      
+
       var subScopesCounter2 = new SubScopesCounter();
       subScopesCounter2.Name = "Count subscopes";
@@ -147,5 +148,5 @@
       var childrenCreator = new ChildrenCreator();
       childrenCreator.ParentsPerChild = new IntValue(2);
-      
+
       var placeholder2 = new Placeholder();
       placeholder2.Name = "(PathRelinking)";
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms.3.3.csproj
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms.3.3.csproj	(revision 7362)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms.3.3.csproj	(revision 7363)
@@ -38,7 +38,19 @@
   </PropertyGroup>
   <ItemGroup>
+    <Reference Include="HeuristicLab.Analysis-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
+    <Reference Include="HeuristicLab.Collections-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
+    <Reference Include="HeuristicLab.Common-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
+    <Reference Include="HeuristicLab.Core-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
+    <Reference Include="HeuristicLab.Data-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
+    <Reference Include="HeuristicLab.Operators-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
+    <Reference Include="HeuristicLab.Optimization-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
+    <Reference Include="HeuristicLab.Optimization.Operators-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
+    <Reference Include="HeuristicLab.Parameters-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
+    <Reference Include="HeuristicLab.Persistence-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
     <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
       <HintPath>C:\Program Files\HeuristicLab 3.3\PluginInfrastructure-3.3.dll</HintPath>
     </Reference>
+    <Reference Include="HeuristicLab.Random-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
+    <Reference Include="HeuristicLab.Selection-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
     <Reference Include="System" />
     <Reference Include="System.Core" />
@@ -47,4 +59,6 @@
   <ItemGroup>
     <None Include="Plugin.cs.frame" />
+    <Compile Include="GRASPWithPathRelinking.cs" />
+    <Compile Include="GRASPWithPathRelinkingMainLoop.cs" />
     <Compile Include="Plugin.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
@@ -53,4 +67,10 @@
   <ItemGroup>
     <None Include="HeuristicLab.snk" />
+  </ItemGroup>
+  <ItemGroup>
+    <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>
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/Plugin.cs.frame
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/Plugin.cs.frame	(revision 7362)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/Plugin.cs.frame	(revision 7363)
@@ -25,4 +25,15 @@
   [Plugin("HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms", "3.3.6.$WCREV$")]
   [PluginFile("HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Analysis", "3.3")]
+  [PluginDependency("HeuristicLab.Collections", "3.3")]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Data", "3.3")]
+  [PluginDependency("HeuristicLab.Operators", "3.3")]
+  [PluginDependency("HeuristicLab.Optimization", "3.3")]
+  [PluginDependency("HeuristicLab.Optimization.Operators", "3.3")]
+  [PluginDependency("HeuristicLab.Parameters", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]
+  [PluginDependency("HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common", "3.3")]
   public class HeuristicLabProblemsGeneralizedQuadraticAssignmentAlgorithmsPlugin : PluginBase {
   }
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common/3.3/ExtensionMethods.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common/3.3/ExtensionMethods.cs	(revision 7363)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common/3.3/ExtensionMethods.cs	(revision 7363)
@@ -0,0 +1,104 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common {
+  public static class ExtensionMethods {
+    /// <summary>
+    /// Selects an element from an enumerable randomly with equal probability for each element.
+    /// </summary>
+    /// <typeparam name="T">The type of the items that are to be selected.</typeparam>
+    /// <param name="source">The enumerable that contains the items.</param>
+    /// <param name="random">The random number generator, its NextDouble() method must return a value in the range [0;1).</param>
+    /// <param name="selected">True if an element was selected, false otherwise (mainly because of an empty sequence).</param>
+    /// <returns>The selected item.</returns>
+    public static T SelectRandomOrDefault<T>(this IEnumerable<T> source, IRandom random, out bool selected) {
+      int counter = 1;
+      selected = false;
+      T selectedItem = default(T);
+      foreach (T item in source) {
+        if (random.NextDouble() < 1.0 / counter) {
+          selectedItem = item;
+          selected = true;
+        }
+      }
+      return selectedItem;
+    }
+
+    /// <summary>
+    /// Shuffles an enumerable and returns an new enumerable according to the Fisher-Yates shuffle.
+    /// </summary>
+    /// <remarks>
+    /// Source code taken from http://stackoverflow.com/questions/1287567/c-is-using-random-and-orderby-a-good-shuffle-algorithm.
+    /// Note that this is an online shuffle, but the source enumerable is transformed into an array.
+    /// </remarks>
+    /// <typeparam name="T">The type of the items that are to be shuffled.</typeparam>
+    /// <param name="source">The enumerable that contains the items.</param>
+    /// <param name="random">The random number generator, its Next(int) method must deliver uniformly distributed random numbers.</param>
+    /// <returns>An enumerable with the elements shuffled.</returns>
+    public static IEnumerable<T> Shuffle<T>(this IEnumerable<T> source, IRandom random) {
+      T[] elements = source.ToArray();
+      // Note i > 0 to avoid final pointless iteration
+      for (int i = elements.Length - 1; i > 0; i--) {
+        // Swap element "i" with a random earlier element it (or itself)
+        int swapIndex = random.Next(i + 1);
+        yield return elements[swapIndex];
+        elements[swapIndex] = elements[i];
+        // we don't actually perform the swap, we can forget about the
+        // swapped element because we already returned it.
+      }
+
+      // there is one item remaining that was not returned - we return it now
+      yield return elements[0];
+    }
+
+    /// <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="initial">The operator where the walk starts (is also yielded).</param>
+    /// <returns>An enumeration of all the operators that could be found.</returns>
+    public static IEnumerable<IOperator> Walk(this IOperator initial) {
+      var open = new Stack<IOperator>();
+      var visited = new HashSet<IOperator>();
+      open.Push(initial);
+
+      while (open.Any()) {
+        IOperator current = open.Pop();
+        if (visited.Contains(current)) continue;
+        visited.Add(current);
+
+        foreach (var parameter in current.Parameters.OfType<IValueParameter>()) {
+          if (typeof(IOperator).IsAssignableFrom(parameter.DataType)) {
+            if (parameter.Value != null)
+              open.Push((IOperator)parameter.Value);
+          }
+        }
+
+        yield return current;
+      }
+    }
+
+  }
+}
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common/3.3/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common-3.3.csproj
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common/3.3/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common-3.3.csproj	(revision 7363)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common/3.3/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common-3.3.csproj	(revision 7363)
@@ -0,0 +1,119 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{DA367BE5-4F53-4243-933B-32AAB86189D5}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common</RootNamespace>
+    <AssemblyName>HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common-3.3</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</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>..\..\..\..\trunk\sources\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Collections-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Collections-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Common-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Common-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Common.Resources-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Common.Resources-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Core-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Data-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Data-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Encodings.IntegerVectorEncoding-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Encodings.IntegerVectorEncoding-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Operators-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Operators-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Optimization-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Optimization-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Parameters-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Parameters-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Persistence-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Persistence-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Data" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Plugin.cs.frame" />
+    <Compile Include="ExtensionMethods.cs" />
+    <Compile Include="IMerger.cs" />
+    <Compile Include="Plugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+  <PropertyGroup>
+    <PostBuildEvent>
+    </PostBuildEvent>
+  </PropertyGroup>
+  <!-- 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>
+  -->
+</Project>
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common/3.3/IMerger.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common/3.3/IMerger.cs	(revision 7363)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common/3.3/IMerger.cs	(revision 7363)
@@ -0,0 +1,27 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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;
+
+namespace HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common {
+  public interface IMerger : IOperator {
+  }
+}
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common/3.3/Plugin.cs.frame
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common/3.3/Plugin.cs.frame	(revision 7363)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common/3.3/Plugin.cs.frame	(revision 7363)
@@ -0,0 +1,29 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.PluginInfrastructure;
+
+namespace HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common {
+  [Plugin("HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common", "3.3.0.$WCREV$")]
+  [PluginFile("HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common-3.3.dll", PluginFileType.Assembly)]
+  public class HeuristicLabProblemsGeneralizedQuadraticAssignmentCommonPlugin : PluginBase {
+  }
+}
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common/3.3/Properties/AssemblyInfo.frame	(revision 7363)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common/3.3/Properties/AssemblyInfo.frame	(revision 7363)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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;
+
+// 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.Problems.GeneralizedQuadraticAssignment.Common")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("HEAL")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2012 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("7c14407e-6980-465b-ba3a-4a916d48989b")]
+
+// 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 Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.6.$WCREV$")]
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/Plugin.cs.frame
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/Plugin.cs.frame	(revision 7362)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/Plugin.cs.frame	(revision 7363)
@@ -25,5 +25,4 @@
   [Plugin("HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views", "3.3.6.$WCREV$")]
   [PluginFile("HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views-3.3.dll", PluginFileType.Assembly)]
-  [PluginDependency("HeuristicLab.Collections", "3.3")]
   [PluginDependency("HeuristicLab.Common", "3.3")]
   [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
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 7362)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/HeuristicLab.Problems.GeneralizedQuadraticAssignment-3.3.csproj	(revision 7363)
@@ -114,4 +114,10 @@
     <None Include="HeuristicLab.snk" />
   </ItemGroup>
+  <ItemGroup>
+    <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>
+  </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <PropertyGroup>
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Interfaces/IGQAPManipulator.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Interfaces/IGQAPManipulator.cs	(revision 7362)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Interfaces/IGQAPManipulator.cs	(revision 7363)
@@ -22,7 +22,8 @@
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.IntegerVectorEncoding;
+using HeuristicLab.Optimization;
 
 namespace HeuristicLab.Problems.GeneralizedQuadraticAssignment {
-  public interface IGQAPManipulator : IGQAPOperator {
+  public interface IGQAPManipulator : IGQAPOperator, IManipulator {
     ILookupParameter<IRandom> RandomParameter { get; }
     ILookupParameter<IntegerVector> IntegerVectorParameter { get; }
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Plugin.cs.frame
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Plugin.cs.frame	(revision 7362)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Plugin.cs.frame	(revision 7363)
@@ -35,4 +35,5 @@
   [PluginDependency("HeuristicLab.Parameters", "3.3")]
   [PluginDependency("HeuristicLab.Persistence", "3.3")]
+  [PluginDependency("HeuristicLab.Problems.GeneralizedQuadraticAssignment.Common", "3.3")]
   public class HeuristicLabProblemsGeneralizedQuadraticAssignmentPlugin : PluginBase {
   }
