Index: trunk/sources/HeuristicLab.Problems.BinPacking/3.3/2D/IntegerVectorEncoding/IntegerVectorProblem.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.BinPacking/3.3/2D/IntegerVectorEncoding/IntegerVectorProblem.cs	(revision 14916)
+++ trunk/sources/HeuristicLab.Problems.BinPacking/3.3/2D/IntegerVectorEncoding/IntegerVectorProblem.cs	(revision 15069)
@@ -24,8 +24,10 @@
 using System.Collections.Generic;
 using System.Linq;
+using HeuristicLab.Analysis;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.IntegerVectorEncoding;
 using HeuristicLab.Optimization;
+using HeuristicLab.Optimization.Operators;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
@@ -52,4 +54,5 @@
       Encoding = new IntegerVectorEncoding(EncodedSolutionName, Items.Count, min: 0, max: LowerBound + 1); // NOTE: assumes that all items can be packed into LowerBound+1 bins
       AddOperators();
+      Parameterize();
       RegisterEventHandlers();
     }
@@ -63,23 +66,26 @@
     }
 
+    protected override void OnEncodingChanged() {
+      base.OnEncodingChanged();
+      Parameterize();
+    }
 
     private void AddOperators() {
-
       // move operators are not yet supported (TODO)
       Operators.RemoveAll(x => x is SingleObjectiveMoveGenerator);
       Operators.RemoveAll(x => x is SingleObjectiveMoveMaker);
       Operators.RemoveAll(x => x is SingleObjectiveMoveEvaluator);
+      Operators.Add(new HammingSimilarityCalculator());
+      Operators.Add(new EuclideanSimilarityCalculator());
+      Operators.Add(new QualitySimilarityCalculator());
+      Operators.Add(new PopulationSimilarityAnalyzer(Operators.OfType<ISolutionSimilarityCalculator>()));
 
-      Encoding.ConfigureOperators(Operators.OfType<IOperator>()); // gkronber: not strictly necessary (only when customer ops are added)
+      Encoding.ConfigureOperators(Operators.OfType<IOperator>());
     }
 
     private void RegisterEventHandlers() {
       // update encoding length when number of items is changed
-      ItemsParameter.ValueChanged += (sender, args) => Encoding.Length = Items.Count;
-      LowerBoundParameter.Value.ValueChanged += (sender, args) => {
-        for (int i = 0; i < Encoding.Bounds.Rows; i++) {
-          Encoding.Bounds[i, 1] = LowerBound + 1;
-        }
-      };
+      ItemsParameter.ValueChanged += (sender, args) => Parameterize();
+      LowerBoundParameter.Value.ValueChanged += (sender, args) => Parameterize();
     }
 
@@ -96,4 +102,15 @@
       return result;
     }
+
+    private void Parameterize() {
+      Encoding.Length = Items.Count;
+      for (int i = 0; i < Encoding.Bounds.Rows; i++) {
+        Encoding.Bounds[i, 1] = LowerBound + 1;
+      }
+      foreach (var similarityCalculator in Operators.OfType<ISolutionSimilarityCalculator>()) {
+        similarityCalculator.SolutionVariableName = Encoding.SolutionCreator.IntegerVectorParameter.ActualName;
+        similarityCalculator.QualityVariableName = Evaluator.QualityParameter.ActualName;
+      }
+    }
     #endregion
   }
Index: trunk/sources/HeuristicLab.Problems.BinPacking/3.3/2D/PermutationEncoding/PermutationProblem.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.BinPacking/3.3/2D/PermutationEncoding/PermutationProblem.cs	(revision 14916)
+++ trunk/sources/HeuristicLab.Problems.BinPacking/3.3/2D/PermutationEncoding/PermutationProblem.cs	(revision 15069)
@@ -23,9 +23,10 @@
 
 using System.Linq;
-using System.Windows.Forms;
+using HeuristicLab.Analysis;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.PermutationEncoding;
 using HeuristicLab.Optimization;
+using HeuristicLab.Optimization.Operators;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
@@ -51,4 +52,5 @@
       Encoding = new PermutationEncoding(EncodedSolutionName, Items.Count, PermutationTypes.Absolute);
       AddOperators();
+      Parameterize();
       RegisterEventHandlers();
     }
@@ -62,4 +64,8 @@
     }
 
+    protected override void OnEncodingChanged() {
+      base.OnEncodingChanged();
+      Parameterize();
+    }
 
     private void AddOperators() {
@@ -70,4 +76,7 @@
       Operators.RemoveAll(x => x is SingleObjectiveMoveMaker);
       Operators.RemoveAll(x => x is SingleObjectiveMoveEvaluator);
+      Operators.Add(new HammingSimilarityCalculator());
+      Operators.Add(new QualitySimilarityCalculator());
+      Operators.Add(new PopulationSimilarityAnalyzer(Operators.OfType<ISolutionSimilarityCalculator>()));
 
       Encoding.ConfigureOperators(Operators.OfType<IOperator>());
@@ -83,5 +92,13 @@
     private void RegisterEventHandlers() {
       // update encoding length when number of items is changed
-      ItemsParameter.ValueChanged += (sender, args) => Encoding.Length = Items.Count;
+      ItemsParameter.ValueChanged += (sender, args) => Parameterize();
+    }
+
+    private void Parameterize() {
+      Encoding.Length = Items.Count;
+      foreach (var similarityCalculator in Operators.OfType<ISolutionSimilarityCalculator>()) {
+        similarityCalculator.SolutionVariableName = Encoding.SolutionCreator.PermutationParameter.ActualName;
+        similarityCalculator.QualityVariableName = Evaluator.QualityParameter.ActualName;
+      }
     }
   }
Index: trunk/sources/HeuristicLab.Problems.BinPacking/3.3/3D/IntegerVectorEncoding/IntegerVectorProblem.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.BinPacking/3.3/3D/IntegerVectorEncoding/IntegerVectorProblem.cs	(revision 14916)
+++ trunk/sources/HeuristicLab.Problems.BinPacking/3.3/3D/IntegerVectorEncoding/IntegerVectorProblem.cs	(revision 15069)
@@ -24,8 +24,10 @@
 using System.Collections.Generic;
 using System.Linq;
+using HeuristicLab.Analysis;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.IntegerVectorEncoding;
 using HeuristicLab.Optimization;
+using HeuristicLab.Optimization.Operators;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
@@ -51,4 +53,5 @@
       Encoding = new IntegerVectorEncoding(EncodedSolutionName, Items.Count, min: 0, max: LowerBound + 1); // NOTE: assumes that all items can be packed into LowerBound+1 bins
       AddOperators();
+      Parameterize();
       RegisterEventHandlers();
     }
@@ -62,11 +65,18 @@
     }
 
+    protected override void OnEncodingChanged() {
+      base.OnEncodingChanged();
+      Parameterize();
+    }
 
     private void AddOperators() {
-
       // move operators are not yet supported (TODO)
       Operators.RemoveAll(x => x is SingleObjectiveMoveGenerator);
       Operators.RemoveAll(x => x is SingleObjectiveMoveMaker);
       Operators.RemoveAll(x => x is SingleObjectiveMoveEvaluator);
+      Operators.Add(new HammingSimilarityCalculator());
+      Operators.Add(new EuclideanSimilarityCalculator());
+      Operators.Add(new QualitySimilarityCalculator());
+      Operators.Add(new PopulationSimilarityAnalyzer(Operators.OfType<ISolutionSimilarityCalculator>()));
 
       Encoding.ConfigureOperators(Operators.OfType<IOperator>()); // gkronber: not strictly necessary (only when customer ops are added)
@@ -75,14 +85,9 @@
     private void RegisterEventHandlers() {
       // update encoding length when number of items is changed
-      ItemsParameter.ValueChanged += (sender, args) => Encoding.Length = Items.Count;
-      LowerBoundParameter.Value.ValueChanged += (sender, args) => {
-        for (int i = 0; i < Encoding.Bounds.Rows; i++) {
-          Encoding.Bounds[i, 1] = LowerBound + 1;
-        }
-      };
+      ItemsParameter.ValueChanged += (sender, args) => Parameterize();
+      LowerBoundParameter.Value.ValueChanged += (sender, args) => Parameterize();
     }
 
     #region helpers
-
     public static List<List<int>> GenerateSequenceMatrix(IntegerVector intVec) {
       List<List<int>> result = new List<List<int>>();
@@ -95,4 +100,15 @@
       return result;
     }
+
+    private void Parameterize() {
+      Encoding.Length = Items.Count;
+      for (int i = 0; i < Encoding.Bounds.Rows; i++) {
+        Encoding.Bounds[i, 1] = LowerBound + 1;
+      }
+      foreach (var similarityCalculator in Operators.OfType<ISolutionSimilarityCalculator>()) {
+        similarityCalculator.SolutionVariableName = Encoding.SolutionCreator.IntegerVectorParameter.ActualName;
+        similarityCalculator.QualityVariableName = Evaluator.QualityParameter.ActualName;
+      }
+    }
     #endregion
   }
Index: trunk/sources/HeuristicLab.Problems.BinPacking/3.3/3D/PermutationEncoding/PermutationProblem.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.BinPacking/3.3/3D/PermutationEncoding/PermutationProblem.cs	(revision 14916)
+++ trunk/sources/HeuristicLab.Problems.BinPacking/3.3/3D/PermutationEncoding/PermutationProblem.cs	(revision 15069)
@@ -23,8 +23,10 @@
 
 using System.Linq;
+using HeuristicLab.Analysis;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.PermutationEncoding;
 using HeuristicLab.Optimization;
+using HeuristicLab.Optimization.Operators;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
@@ -49,4 +51,5 @@
       Encoding = new PermutationEncoding(EncodedSolutionName, Items.Count, PermutationTypes.Absolute);
       AddOperators();
+      Parameterize();
       RegisterEventHandlers();
     }
@@ -60,4 +63,8 @@
     }
 
+    protected override void OnEncodingChanged() {
+      base.OnEncodingChanged();
+      Parameterize();
+    }
 
     private void AddOperators() {
@@ -68,4 +75,7 @@
       Operators.RemoveAll(x => x is SingleObjectiveMoveMaker);
       Operators.RemoveAll(x => x is SingleObjectiveMoveEvaluator);
+      Operators.Add(new HammingSimilarityCalculator());
+      Operators.Add(new QualitySimilarityCalculator());
+      Operators.Add(new PopulationSimilarityAnalyzer(Operators.OfType<ISolutionSimilarityCalculator>()));
 
       Encoding.ConfigureOperators(Operators.OfType<IOperator>());
@@ -82,5 +92,13 @@
     private void RegisterEventHandlers() {
       // update encoding length when number of items is changed
-      ItemsParameter.ValueChanged += (sender, args) => Encoding.Length = Items.Count;
+      ItemsParameter.ValueChanged += (sender, args) => Parameterize();
+    }
+
+    private void Parameterize() {
+      Encoding.Length = Items.Count;
+      foreach (var similarityCalculator in Operators.OfType<ISolutionSimilarityCalculator>()) {
+        similarityCalculator.SolutionVariableName = Encoding.SolutionCreator.PermutationParameter.ActualName;
+        similarityCalculator.QualityVariableName = Evaluator.QualityParameter.ActualName;
+      }
     }
   }
Index: trunk/sources/HeuristicLab.Problems.BinPacking/3.3/HeuristicLab.Problems.BinPacking-3.3.csproj
===================================================================
--- trunk/sources/HeuristicLab.Problems.BinPacking/3.3/HeuristicLab.Problems.BinPacking-3.3.csproj	(revision 14916)
+++ trunk/sources/HeuristicLab.Problems.BinPacking/3.3/HeuristicLab.Problems.BinPacking-3.3.csproj	(revision 15069)
@@ -150,4 +150,9 @@
   <ItemGroup />
   <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Analysis\3.3\HeuristicLab.Analysis-3.3.csproj">
+      <Project>{887425B4-4348-49ED-A457-B7D2C26DDBF9}</Project>
+      <Name>HeuristicLab.Analysis-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Collections\3.3\HeuristicLab.Collections-3.3.csproj">
       <Project>{958B43BC-CC5C-4FA2-8628-2B3B01D890B6}</Project>
@@ -183,4 +188,9 @@
       <Project>{23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE}</Project>
       <Name>HeuristicLab.Operators-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Optimization.Operators\3.3\HeuristicLab.Optimization.Operators-3.3.csproj">
+      <Project>{25087811-F74C-4128-BC86-8324271DA13E}</Project>
+      <Name>HeuristicLab.Optimization.Operators-3.3</Name>
       <Private>False</Private>
     </ProjectReference>
Index: trunk/sources/HeuristicLab.Problems.BinPacking/3.3/Plugin.cs.frame
===================================================================
--- trunk/sources/HeuristicLab.Problems.BinPacking/3.3/Plugin.cs.frame	(revision 14916)
+++ trunk/sources/HeuristicLab.Problems.BinPacking/3.3/Plugin.cs.frame	(revision 15069)
@@ -28,4 +28,5 @@
   [Plugin("HeuristicLab.Problems.BinPacking", "3.3.14.$WCREV$")]
   [PluginFile("HeuristicLab.Problems.BinPacking-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Analysis", "3.3")]
   [PluginDependency("HeuristicLab.Collections", "3.3")]
   [PluginDependency("HeuristicLab.Common", "3.3")]
@@ -36,4 +37,5 @@
   [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")]
