Index: branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/MutationPerformanceAnalyzer.cs
===================================================================
--- branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/MutationPerformanceAnalyzer.cs	(revision 8410)
+++ branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/MutationPerformanceAnalyzer.cs	(revision 8411)
@@ -29,7 +29,7 @@
 using HeuristicLab.Operators;
 using HeuristicLab.Optimization;
-using HeuristicLab.Optimization.Operators;
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Problems.TravelingSalesman;
 
 namespace HeuristicLab.Analysis.AlgorithmBehavior.Analyzers {
@@ -66,7 +66,4 @@
       get { return (ILookupParameter<Permutation>)Parameters["PermutationAfterMutation"]; }
     }
-    public IValueParameter<SingleObjectiveSolutionSimilarityCalculator> SimilarityCalculatorParameter {
-      get { return (IValueParameter<SingleObjectiveSolutionSimilarityCalculator>)Parameters["SimilarityCalculator"]; }
-    }
     #endregion
 
@@ -78,5 +75,5 @@
 
     ScatterPlot plot, diversityPlot;
-    DataRow dtRow, dtDivRow;
+    DataRow dtRow;
     int cnt = 0;
 
@@ -96,10 +93,8 @@
 
       Parameters.Add(new LookupParameter<Permutation>("PermutationBeforeMutation"));
-      QualityAfterMutationParameter.ActualName = "TSPTourClone";
+      PermutationBeforeMutationParameter.ActualName = "TSPTourClone";
 
       Parameters.Add(new LookupParameter<Permutation>("PermutationAfterMutation"));
-      QualityAfterMutationParameter.ActualName = "TSPTour";
-
-      Parameters.Add(new ValueParameter<SingleObjectiveSolutionSimilarityCalculator>("SimilarityCalculator"));
+      PermutationAfterMutationParameter.ActualName = "TSPTour";
     }
 
@@ -109,17 +104,23 @@
 
     public override IOperation Apply() {
-      Point2D<double> curPoint;
+      Point2D<double> curPoint, divPoint;
       var qualityCX = QualityAfterCrossoverParameter.ActualValue.Value;
       var qualityM = QualityAfterMutationParameter.ActualValue.Value;
+      var permutationBefore = PermutationBeforeMutationParameter.ActualValue;
+      var permutationAfter = PermutationAfterMutationParameter.ActualValue;
 
+      divPoint = new Point2D<double>(cnt, TSPSimilarityCalculator.CalculateSimilarity(permutationBefore, permutationAfter));
       curPoint = new Point2D<double>(cnt++, qualityCX - qualityM);
 
       string curGenStr = GenerationsParameter.ActualValue.Value.ToString();
-      ScatterPlotDataRow row;
+      ScatterPlotDataRow row, divRow;
 
       if (!Results.ContainsKey("Mutation Scatter Plot")) {
         InitializePlot();
+        InitializeDiversityPlot();
         Results.Add(new Result("Mutation Scatter Plot", plot));
         Results.Add(new Result("Mutation Scatter Plot History", new ScatterPlotHistory()));
+        Results.Add(new Result("Mutation Diversity Plot", diversityPlot));
+        Results.Add(new Result("Mutation Diversity Plot History", new ScatterPlotHistory()));
         cnt = 0;
 
@@ -136,7 +137,10 @@
             dtRow.Values.Add(avg);
             ((ScatterPlotHistory)Results["Mutation Scatter Plot History"].Value).Add(plot);
+            ((ScatterPlotHistory)Results["Mutation Diversity Plot History"].Value).Add(diversityPlot);
           }
           InitializePlot();
+          InitializeDiversityPlot();
           Results["Mutation Scatter Plot"].Value = plot;
+          Results["Mutation Diversity Plot"].Value = diversityPlot;
           cnt = 0;
         }
@@ -148,6 +152,14 @@
         row.VisualProperties.PointSize = 5;
         plot.Rows.Add(row);
+
+        points = new List<Point2D<double>>();
+        points.Add(divPoint);
+        divRow = new ScatterPlotDataRow(curGenStr, null, points);
+        divRow.VisualProperties.PointStyle = ScatterPlotDataRowVisualProperties.ScatterPlotDataRowPointStyle.Circle;
+        divRow.VisualProperties.PointSize = 5;
+        diversityPlot.Rows.Add(divRow);
       } else {
         plot.Rows[curGenStr].Points.Add(curPoint);
+        diversityPlot.Rows[curGenStr].Points.Add(divPoint);
       }
 
