Index: branches/QAP/HeuristicLab.Problems.QuadraticAssignment/3.3/Analyzers/BestQAPSolutionAnalyzer.cs
===================================================================
--- branches/QAP/HeuristicLab.Problems.QuadraticAssignment/3.3/Analyzers/BestQAPSolutionAnalyzer.cs	(revision 5583)
+++ branches/QAP/HeuristicLab.Problems.QuadraticAssignment/3.3/Analyzers/BestQAPSolutionAnalyzer.cs	(revision 5583)
@@ -0,0 +1,133 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.PermutationEncoding;
+using HeuristicLab.Operators;
+using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.QuadraticAssignment {
+  /// <summary>
+  /// An operator for analyzing the best solution of Quadratic Assignment Problems.
+  /// </summary>
+  [Item("BestQAPSolutionAnalyzer", "An operator for analyzing the best solution of Quadratic Assignment Problems.")]
+  [StorableClass]
+  public sealed class BestQAPSolutionAnalyzer : SingleSuccessorOperator, IAnalyzer {
+    public LookupParameter<BoolValue> MaximizationParameter {
+      get { return (LookupParameter<BoolValue>)Parameters["Maximization"]; }
+    }
+    public LookupParameter<DoubleMatrix> CoordinatesParameter {
+      get { return (LookupParameter<DoubleMatrix>)Parameters["Coordinates"]; }
+    }
+    public LookupParameter<DoubleMatrix> DistancesParameter {
+      get { return (LookupParameter<DoubleMatrix>)Parameters["Distances"]; }
+    }
+    public LookupParameter<DoubleMatrix> WeightsParameter {
+      get { return (LookupParameter<DoubleMatrix>)Parameters["Weights"]; }
+    }
+    public ScopeTreeLookupParameter<Permutation> PermutationParameter {
+      get { return (ScopeTreeLookupParameter<Permutation>)Parameters["Permutation"]; }
+    }
+    public ScopeTreeLookupParameter<DoubleValue> QualityParameter {
+      get { return (ScopeTreeLookupParameter<DoubleValue>)Parameters["Quality"]; }
+    }
+    public LookupParameter<QAPAssignment> BestSolutionParameter {
+      get { return (LookupParameter<QAPAssignment>)Parameters["BestSolution"]; }
+    }
+    public ValueLookupParameter<ResultCollection> ResultsParameter {
+      get { return (ValueLookupParameter<ResultCollection>)Parameters["Results"]; }
+    }
+    public LookupParameter<DoubleValue> BestKnownQualityParameter {
+      get { return (LookupParameter<DoubleValue>)Parameters["BestKnownQuality"]; }
+    }
+    public LookupParameter<Permutation> BestKnownSolutionParameter {
+      get { return (LookupParameter<Permutation>)Parameters["BestKnownSolution"]; }
+    }
+
+    [StorableConstructor]
+    private BestQAPSolutionAnalyzer(bool deserializing) : base(deserializing) { }
+    private BestQAPSolutionAnalyzer(BestQAPSolutionAnalyzer original, Cloner cloner) : base(original, cloner) { }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new BestQAPSolutionAnalyzer(this, cloner);
+    }
+    public BestQAPSolutionAnalyzer()
+      : base() {
+      Parameters.Add(new LookupParameter<BoolValue>("Maximization", "True if the problem is a maximization problem."));
+      Parameters.Add(new LookupParameter<DoubleMatrix>("Coordinates", "The x- and y-Coordinates of the locations."));
+      Parameters.Add(new LookupParameter<DoubleMatrix>("Distances", "The distances between the locations."));
+      Parameters.Add(new LookupParameter<DoubleMatrix>("Weights", "The weights between the facilities."));
+      Parameters.Add(new ScopeTreeLookupParameter<Permutation>("Permutation", "The QAP solutions from which the best solution should be analyzed."));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The qualities of the QAP solutions which should be analyzed."));
+      Parameters.Add(new LookupParameter<QAPAssignment>("BestSolution", "The best QAP solution."));
+      Parameters.Add(new ValueLookupParameter<ResultCollection>("Results", "The result collection where the best QAP solution should be stored."));
+      Parameters.Add(new LookupParameter<DoubleValue>("BestKnownQuality", "The quality of the best known solution of this QAP instance."));
+      Parameters.Add(new LookupParameter<Permutation>("BestKnownSolution", "The best known solution of this QAP instance."));
+    }
+
+    public override IOperation Apply() {
+      DoubleMatrix coordinates = CoordinatesParameter.ActualValue;
+      DoubleMatrix distances = DistancesParameter.ActualValue;
+      DoubleMatrix weights = WeightsParameter.ActualValue;
+      ItemArray<Permutation> permutations = PermutationParameter.ActualValue;
+      ItemArray<DoubleValue> qualities = QualityParameter.ActualValue;
+      ResultCollection results = ResultsParameter.ActualValue;
+      bool max = MaximizationParameter.ActualValue.Value;
+      DoubleValue bestKnownQuality = BestKnownQualityParameter.ActualValue;
+
+      int i = -1;
+      if (!max)
+        i = qualities.Select((x, index) => new { index, x.Value }).OrderBy(x => x.Value).First().index;
+      else i = qualities.Select((x, index) => new { index, x.Value }).OrderByDescending(x => x.Value).First().index;
+
+      if (bestKnownQuality == null ||
+          max && qualities[i].Value > bestKnownQuality.Value ||
+          !max && qualities[i].Value < bestKnownQuality.Value) {
+        BestKnownQualityParameter.ActualValue = new DoubleValue(qualities[i].Value);
+        BestKnownSolutionParameter.ActualValue = (Permutation)permutations[i].Clone();
+      }
+
+      QAPAssignment assignment = BestSolutionParameter.ActualValue;
+      if (assignment == null) {
+        assignment = new QAPAssignment(weights, (Permutation)permutations[i].Clone(), new DoubleValue(qualities[i].Value));
+        assignment.Coordinates = coordinates;
+        assignment.Distances = distances;
+        BestSolutionParameter.ActualValue = assignment;
+        results.Add(new Result("Best QAP Solution", assignment));
+      } else {
+        if (max && assignment.Quality.Value < qualities[i].Value ||
+          !max && assignment.Quality.Value > qualities[i].Value) {
+          assignment.Coordinates = coordinates;
+          assignment.Distances = distances;
+          assignment.Weights = weights;
+          assignment.Assignment = (Permutation)permutations[i].Clone();
+          assignment.Quality.Value = qualities[i].Value;
+        }
+      }
+
+      return base.Apply();
+    }
+  }
+}
Index: branches/QAP/HeuristicLab.Problems.QuadraticAssignment/3.3/Data/kra32.dat
===================================================================
--- branches/QAP/HeuristicLab.Problems.QuadraticAssignment/3.3/Data/kra32.dat	(revision 5563)
+++ branches/QAP/HeuristicLab.Problems.QuadraticAssignment/3.3/Data/kra32.dat	(revision 5583)
@@ -1,3 +1,4 @@
 32
+
 0 2 2 2 2 2 2 2 3 0 3 2 0 0 0 3 3 0 0 2 1 2 1 1 0 3 0 0 0 0 0 0 
 2 0 2 2 3 2 3 2 0 0 2 1 0 0 2 3 3 0 0 2 1 2 1 1 0 3 0 0 0 0 0 0 
@@ -33,34 +34,34 @@
 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
 
-0 10 20 30 10 20 30 40 20 30 40 50 30 40 50 60 23 33 43 53 33 43 53 63 43 53 63 73 53 63 73 83 
-10 0 10 20 20 10 20 30 30 20 30 40 40 30 40 50 33 23 33 43 43 33 43 53 53 43 53 63 63 53 63 73 
-20 10 0 10 30 20 10 20 40 30 20 30 50 40 30 40 43 33 23 33 53 43 33 43 63 53 43 53 73 63 53 63 
-30 20 10 0 40 30 20 10 50 40 30 20 60 50 40 30 53 43 33 23 63 53 43 33 73 63 53 43 83 73 63 53 
-10 20 30 40 0 10 20 30 10 20 30 40 20 30 40 50 33 43 53 63 23 33 43 53 33 43 53 63 43 53 63 73 
-20 10 20 30 10 0 10 20 20 10 20 30 30 20 30 40 43 33 43 53 33 23 33 43 43 33 43 53 53 43 53 63 
-30 20 10 20 20 10 0 10 30 20 10 20 40 30 20 30 53 43 33 43 43 33 23 33 53 43 33 43 63 53 43 53 
-40 30 20 10 30 20 10 0 40 30 20 10 50 40 30 20 63 53 43 33 53 43 33 23 63 53 43 33 73 63 53 43 
-20 30 40 50 10 20 30 40 0 10 20 30 10 20 30 40 43 53 63 73 33 43 53 63 23 33 43 53 33 43 53 63 
-30 20 30 40 20 10 20 30 10 0 10 20 20 10 20 30 53 43 53 63 43 33 43 53 33 23 33 43 43 33 43 53 
-40 30 20 30 30 20 10 20 20 10 0 10 30 20 10 20 63 53 43 53 53 43 33 43 43 33 23 33 53 43 33 43 
-50 40 30 20 40 30 20 10 30 20 10 0 40 30 20 10 73 63 53 43 63 53 43 33 53 43 33 23 63 53 43 33 
-30 40 50 60 20 30 40 50 10 20 30 40 0 10 20 30 53 63 73 83 43 53 63 73 33 43 53 63 23 33 43 53 
-40 30 40 50 30 20 30 40 20 10 20 30 10 0 10 20 63 53 63 73 53 43 53 63 43 33 43 53 33 23 33 43 
-50 40 30 40 40 30 20 30 30 20 10 20 20 10 0 10 73 63 53 63 63 53 43 53 53 43 33 43 43 33 23 33 
-60 50 40 30 50 40 30 20 40 30 20 10 30 20 10 0 83 73 63 53 73 63 53 43 63 53 43 33 53 43 33 23 
-23 33 43 53 33 43 53 63 43 53 63 73 53 63 73 83 0 10 20 30 10 20 30 40 20 30 40 50 30 40 50 60 
-33 23 33 43 43 33 43 53 53 43 53 63 63 53 63 73 10 0 10 20 20 10 20 30 30 20 30 40 40 30 40 50 
-43 33 23 33 53 43 33 43 63 53 43 53 73 63 53 63 20 10 0 10 30 20 10 20 40 30 20 30 50 40 30 40 
-53 43 33 23 63 53 43 33 73 63 53 43 83 73 63 53 30 20 10 0 40 30 20 10 50 40 30 20 60 50 40 30 
-33 43 53 63 23 33 43 53 33 43 53 63 43 53 63 73 10 20 30 40 0 10 20 30 10 20 30 40 20 30 40 50 
-43 33 43 53 33 23 33 43 43 33 43 53 53 43 53 63 20 10 20 30 10 0 10 20 20 10 20 30 30 20 30 40 
-53 43 33 43 43 33 23 33 53 43 33 43 63 53 43 53 30 20 10 20 20 10 0 10 30 20 10 20 40 30 20 30 
-63 53 43 33 53 43 33 23 63 53 43 33 73 63 53 43 40 30 20 10 30 20 10 0 40 30 20 10 50 40 30 20 
-43 53 63 73 33 43 53 63 23 33 43 53 33 43 53 63 20 30 40 50 10 20 30 40 0 10 20 30 10 20 30 40 
-53 43 53 63 43 33 43 53 33 23 33 43 43 33 43 53 30 20 30 40 20 10 20 30 10 0 10 20 20 10 20 30 
-63 53 43 53 53 43 33 43 43 33 23 33 53 43 33 43 40 30 20 30 30 20 10 20 20 10 0 10 30 20 10 20 
-73 63 53 43 63 53 43 33 53 43 33 23 63 53 43 33 50 40 30 20 40 30 20 10 30 20 10 0 40 30 20 10 
-53 63 73 83 43 53 63 73 33 43 53 63 23 33 43 53 30 40 50 60 20 30 40 50 10 20 30 40 0 10 20 30 
-63 53 63 73 53 43 53 63 43 33 43 53 33 23 33 43 40 30 40 50 30 20 30 40 20 10 20 30 10 0 10 20 
-73 63 53 63 63 53 43 53 53 43 33 43 43 33 23 33 50 40 30 40 40 30 20 30 30 20 10 20 20 10 0 10 
-83 73 63 53 73 63 53 43 63 53 43 33 53 43 33 23 60 50 40 30 50 40 30 20 40 30 20 10 30 20 10 0 
+0 50 100 150 50 100 150 200 100 150 200 250 150 200 250 300 115 165 215 265 165 215 265 315 215 265 315 365 265 315 365 415 
+50 0 50 100 100 50 100 150 150 100 150 200 200 150 200 250 165 115 165 215 215 165 215 265 265 215 265 315 315 265 315 365 
+100 50 0 50 150 100 50 100 200 150 100 150 250 200 150 200 215 165 115 165 265 215 165 215 315 265 215 265 365 315 265 315 
+150 100 50 0 200 150 100 50 250 200 150 100 300 250 200 150 265 215 165 115 315 265 215 165 365 315 265 215 415 365 315 265 
+50 100 150 200 0 50 100 150 50 100 150 200 100 150 200 250 165 215 265 315 115 165 215 265 165 215 265 315 215 265 315 365 
+100 50 100 150 50 0 50 100 100 50 100 150 150 100 150 200 215 165 215 265 165 115 165 215 215 165 215 265 265 215 265 315 
+150 100 50 100 100 50 0 50 150 100 50 100 200 150 100 150 265 215 165 215 215 165 115 165 265 215 165 215 315 265 215 265 
+200 150 100 50 150 100 50 0 200 150 100 50 250 200 150 100 315 265 215 165 265 215 165 115 315 265 215 165 365 315 265 215 
+100 150 200 250 50 100 150 200 0 50 100 150 50 100 150 200 215 265 315 365 165 215 265 315 115 165 215 265 165 215 265 315 
+150 100 150 200 100 50 100 150 50 0 50 100 100 50 100 150 265 215 265 315 215 165 215 265 165 115 165 215 215 165 215 265 
+200 150 100 150 150 100 50 100 100 50 0 50 150 100 50 100 315 265 215 265 265 215 165 215 215 165 115 165 265 215 165 215 
+250 200 150 100 200 150 100 50 150 100 50 0 200 150 100 50 365 315 265 215 315 265 215 165 265 215 165 115 315 265 215 165 
+150 200 250 300 100 150 200 250 50 100 150 200 0 50 100 150 265 315 365 415 215 265 315 365 165 215 265 315 115 165 215 265 
+200 150 200 250 150 100 150 200 100 50 100 150 50 0 50 100 315 265 315 365 265 215 265 315 215 165 215 265 165 115 165 215 
+250 200 150 200 200 150 100 150 150 100 50 100 100 50 0 50 365 315 265 315 315 265 215 265 265 215 165 215 215 165 115 165 
+300 250 200 150 250 200 150 100 200 150 100 50 150 100 50 0 415 365 315 265 365 315 265 215 315 265 215 165 265 215 165 115 
+115 165 215 265 165 215 265 315 215 265 315 365 265 315 365 415 0 50 100 150 50 100 150 200 100 150 200 250 150 200 250 300 
+165 115 165 215 215 165 215 265 265 215 265 315 315 265 315 365 50 0 50 100 100 50 100 150 150 100 150 200 200 150 200 250 
+215 165 115 165 265 215 165 215 315 265 215 265 365 315 265 315 100 50 0 50 150 100 50 100 200 150 100 150 250 200 150 200 
+265 215 165 115 315 265 215 165 365 315 265 215 415 365 315 265 150 100 50 0 200 150 100 50 250 200 150 100 300 250 200 150 
+165 215 265 315 115 165 215 265 165 215 265 315 215 265 315 365 50 100 150 200 0 50 100 150 50 100 150 200 100 150 200 250 
+215 165 215 265 165 115 165 215 215 165 215 265 265 215 265 315 100 50 100 150 50 0 50 100 100 50 100 150 150 100 150 200 
+265 215 165 215 215 165 115 165 265 215 165 215 315 265 215 265 150 100 50 100 100 50 0 50 150 100 50 100 200 150 100 150 
+315 265 215 165 265 215 165 115 315 265 215 165 365 315 265 215 200 150 100 50 150 100 50 0 200 150 100 50 250 200 150 100 
+215 265 315 365 165 215 265 315 115 165 215 265 165 215 265 315 100 150 200 250 50 100 150 200 0 50 100 150 50 100 150 200 
+265 215 265 315 215 165 215 265 165 115 165 215 215 165 215 265 150 100 150 200 100 50 100 150 50 0 50 100 100 50 100 150 
+315 265 215 265 265 215 165 215 215 165 115 165 265 215 165 215 200 150 100 150 150 100 50 100 100 50 0 50 150 100 50 100 
+365 315 265 215 315 265 215 165 265 215 165 115 315 265 215 165 250 200 150 100 200 150 100 50 150 100 50 0 200 150 100 50 
+265 315 365 415 215 265 315 365 165 215 265 315 115 165 215 265 150 200 250 300 100 150 200 250 50 100 150 200 0 50 100 150 
+315 265 315 365 265 215 265 315 215 165 215 265 165 115 165 215 200 150 200 250 150 100 150 200 100 50 100 150 50 0 50 100 
+365 315 265 315 315 265 215 265 265 215 165 215 215 165 115 165 250 200 150 200 200 150 100 150 150 100 50 100 100 50 0 50 
+415 365 315 265 365 315 265 215 315 265 215 165 265 215 165 115 300 250 200 150 250 200 150 100 200 150 100 50 150 100 50 0 
Index: branches/QAP/HeuristicLab.Problems.QuadraticAssignment/3.3/Data/lipa30a.dat
===================================================================
--- branches/QAP/HeuristicLab.Problems.QuadraticAssignment/3.3/Data/lipa30a.dat	(revision 5563)
+++ branches/QAP/HeuristicLab.Problems.QuadraticAssignment/3.3/Data/lipa30a.dat	(revision 5583)
@@ -1,3 +1,2 @@
-
  30
 
Index: branches/QAP/HeuristicLab.Problems.QuadraticAssignment/3.3/Data/lipa50a.dat
===================================================================
--- branches/QAP/HeuristicLab.Problems.QuadraticAssignment/3.3/Data/lipa50a.dat	(revision 5563)
+++ branches/QAP/HeuristicLab.Problems.QuadraticAssignment/3.3/Data/lipa50a.dat	(revision 5583)
@@ -1,3 +1,2 @@
-
  50
 
Index: branches/QAP/HeuristicLab.Problems.QuadraticAssignment/3.3/Data/tai25a.dat
===================================================================
--- branches/QAP/HeuristicLab.Problems.QuadraticAssignment/3.3/Data/tai25a.dat	(revision 5563)
+++ branches/QAP/HeuristicLab.Problems.QuadraticAssignment/3.3/Data/tai25a.dat	(revision 5583)
@@ -1,3 +1,3 @@
-          25 1167256 
+25
 
   0 92 69 62 32 97  5 39 50 82 93 71 35 14 20 74 49 50 37 79 19 51 70 42 26
Index: branches/QAP/HeuristicLab.Problems.QuadraticAssignment/3.3/HeuristicLab.Problems.QuadraticAssignment-3.3.csproj
===================================================================
--- branches/QAP/HeuristicLab.Problems.QuadraticAssignment/3.3/HeuristicLab.Problems.QuadraticAssignment-3.3.csproj	(revision 5563)
+++ branches/QAP/HeuristicLab.Problems.QuadraticAssignment/3.3/HeuristicLab.Problems.QuadraticAssignment-3.3.csproj	(revision 5583)
@@ -141,7 +141,9 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="Analyzers\BestQAPSolutionAnalyzer.cs" />
     <Compile Include="Evaluators\QAPEvaluator.cs" />
     <Compile Include="Interfaces\IQAPEvaluator.cs" />
     <Compile Include="Parsers\QAPLIBParser.cs" />
+    <Compile Include="QAPAssignment.cs" />
     <Compile Include="QuadraticAssignmentProblem.cs" />
     <EmbeddedResource Include="Data\bur26a.dat" />
Index: branches/QAP/HeuristicLab.Problems.QuadraticAssignment/3.3/QAPAssignment.cs
===================================================================
--- branches/QAP/HeuristicLab.Problems.QuadraticAssignment/3.3/QAPAssignment.cs	(revision 5583)
+++ branches/QAP/HeuristicLab.Problems.QuadraticAssignment/3.3/QAPAssignment.cs	(revision 5583)
@@ -0,0 +1,99 @@
+﻿using System.ComponentModel;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.PermutationEncoding;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.QuadraticAssignment {
+  [Item("QAP Assignment", "Represents a solution to the QAP.")]
+  [StorableClass]
+  public sealed class QAPAssignment : Item, INotifyPropertyChanged {
+    [Storable]
+    private DoubleMatrix coordinates;
+    public DoubleMatrix Coordinates {
+      get { return coordinates; }
+      set {
+        bool changed = (coordinates != value);
+        coordinates = value;
+        if (changed) OnPropertyChanged("Coordinates");
+      }
+    }
+
+    public DoubleMatrix ViewCoordinates { get; set; }
+
+    [Storable]
+    private DoubleMatrix distances;
+    public DoubleMatrix Distances {
+      get { return distances; }
+      set {
+        bool changed = (distances != value);
+        distances = value;
+        if (changed) OnPropertyChanged("Distances");
+      }
+    }
+
+    [Storable]
+    private DoubleMatrix weights;
+    public DoubleMatrix Weights {
+      get { return weights; }
+      set {
+        bool changed = (weights != value);
+        weights = value;
+        if (changed) OnPropertyChanged("Weights");
+      }
+    }
+
+    [Storable]
+    private Permutation assignment;
+    public Permutation Assignment {
+      get { return assignment; }
+      set {
+        bool changed = (assignment != value);
+        assignment = value;
+        if (changed) OnPropertyChanged("Assignment");
+      }
+    }
+
+    [Storable]
+    private DoubleValue quality;
+    public DoubleValue Quality {
+      get { return quality; }
+      set {
+        bool changed = (quality != value);
+        quality = value;
+        if (changed) OnPropertyChanged("Quality");
+      }
+    }
+
+    [StorableConstructor]
+    private QAPAssignment(bool deserializing) : base(deserializing) { }
+    private QAPAssignment(QAPAssignment original, Cloner cloner)
+      : base(original, cloner) {
+      coordinates = cloner.Clone(original.coordinates);
+      distances = cloner.Clone(original.distances);
+      weights = cloner.Clone(original.weights);
+      assignment = cloner.Clone(original.assignment);
+      quality = cloner.Clone(original.quality);
+    }
+    public QAPAssignment(DoubleMatrix weights, Permutation assignment) {
+      this.weights = weights;
+      this.assignment = assignment;
+    }
+    public QAPAssignment(DoubleMatrix weights, Permutation assignment, DoubleValue quality)
+      : this(weights, assignment) {
+      this.quality = quality;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new QAPAssignment(this, cloner);
+    }
+
+
+    public event PropertyChangedEventHandler PropertyChanged;
+    private void OnPropertyChanged(string propertyName) {
+      var handler = PropertyChanged;
+      if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
+    }
+  }
+}
Index: branches/QAP/HeuristicLab.Problems.QuadraticAssignment/3.3/QuadraticAssignmentProblem.cs
===================================================================
--- branches/QAP/HeuristicLab.Problems.QuadraticAssignment/3.3/QuadraticAssignmentProblem.cs	(revision 5563)
+++ branches/QAP/HeuristicLab.Problems.QuadraticAssignment/3.3/QuadraticAssignmentProblem.cs	(revision 5583)
@@ -97,4 +97,8 @@
       }
     }
+
+    private BestQAPSolutionAnalyzer BestQAPSolutionAnalyzer {
+      get { return Operators.OfType<BestQAPSolutionAnalyzer>().FirstOrDefault(); }
+    }
     #endregion
 
@@ -160,9 +164,12 @@
       ParameterizeSolutionCreator();
       ParameterizeEvaluator();
+      ParameterizeAnalyzers();
       ParameterizeOperators();
       base.OnSolutionCreatorChanged();
     }
     protected override void OnEvaluatorChanged() {
-      ParameterizeEvaluator();
+      Evaluator.QualityParameter.ActualNameChanged += new EventHandler(Evaluator_QualityParameter_ActualNameChanged);
+      ParameterizeEvaluator();
+      ParameterizeAnalyzers();
       ParameterizeOperators();
       base.OnEvaluatorChanged();
@@ -171,4 +178,9 @@
     private void SolutionCreator_PermutationParameter_ActualNameChanged(object sender, EventArgs e) {
       ParameterizeEvaluator();
+      ParameterizeAnalyzers();
+      ParameterizeOperators();
+    }
+    private void Evaluator_QualityParameter_ActualNameChanged(object sender, EventArgs e) {
+      ParameterizeAnalyzers();
       ParameterizeOperators();
     }
@@ -196,8 +208,11 @@
       Weights.RowsChanged += new EventHandler(Weights_RowsChanged);
       SolutionCreator.PermutationParameter.ActualNameChanged += new EventHandler(SolutionCreator_PermutationParameter_ActualNameChanged);
+      Evaluator.QualityParameter.ActualNameChanged += new EventHandler(Evaluator_QualityParameter_ActualNameChanged);
     }
 
     private void InitializeOperators() {
       Operators.AddRange(ApplicationManager.Manager.GetInstances<IPermutationOperator>());
+      Operators.Add(new BestQAPSolutionAnalyzer());
+      ParameterizeAnalyzers();
       ParameterizeOperators();
     }
@@ -215,4 +230,17 @@
         Evaluator.CoordinatesParameter.ActualName = CoordinatesParameter.Name;
         Evaluator.WeightsParameter.ActualName = WeightsParameter.Name;
+      }
+    }
+    private void ParameterizeAnalyzers() {
+      if (BestQAPSolutionAnalyzer != null) {
+        BestQAPSolutionAnalyzer.QualityParameter.ActualName = Evaluator.QualityParameter.ActualName;
+        BestQAPSolutionAnalyzer.CoordinatesParameter.ActualName = CoordinatesParameter.Name;
+        BestQAPSolutionAnalyzer.DistancesParameter.ActualName = DistanceMatrixParameter.Name;
+        BestQAPSolutionAnalyzer.WeightsParameter.ActualName = WeightsParameter.Name;
+        BestQAPSolutionAnalyzer.PermutationParameter.ActualName = SolutionCreator.PermutationParameter.ActualName;
+        BestQAPSolutionAnalyzer.ResultsParameter.ActualName = "Results";
+        BestQAPSolutionAnalyzer.BestKnownQualityParameter.ActualName = BestKnownQualityParameter.Name;
+        BestQAPSolutionAnalyzer.BestKnownSolutionParameter.ActualName = BestKnownSolutionParameter.Name;
+        BestQAPSolutionAnalyzer.MaximizationParameter.ActualName = MaximizationParameter.Name;
       }
     }
