Index: trunk/sources/HeuristicLab.Problems.TravelingSalesman/3.3/TravelingSalesmanProblem.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TravelingSalesman/3.3/TravelingSalesmanProblem.cs	(revision 3504)
+++ trunk/sources/HeuristicLab.Problems.TravelingSalesman/3.3/TravelingSalesmanProblem.cs	(revision 3616)
@@ -71,10 +71,4 @@
       get { return EvaluatorParameter; }
     }
-    public OptionalValueParameter<ITSPSolutionsVisualizer> VisualizerParameter {
-      get { return (OptionalValueParameter<ITSPSolutionsVisualizer>)Parameters["Visualizer"]; }
-    }
-    IParameter IProblem.VisualizerParameter {
-      get { return VisualizerParameter; }
-    }
     public OptionalValueParameter<DoubleValue> BestKnownQualityParameter {
       get { return (OptionalValueParameter<DoubleValue>)Parameters["BestKnownQuality"]; }
@@ -118,11 +112,4 @@
       get { return EvaluatorParameter.Value; }
     }
-    public ITSPSolutionsVisualizer Visualizer {
-      get { return VisualizerParameter.Value; }
-      set { VisualizerParameter.Value = value; }
-    }
-    ISolutionsVisualizer IProblem.Visualizer {
-      get { return VisualizerParameter.Value; }
-    }
     public DoubleValue BestKnownQuality {
       get { return BestKnownQualityParameter.Value; }
@@ -133,7 +120,10 @@
       set { BestKnownSolutionParameter.Value = value; }
     }
-    private List<IPermutationOperator> operators;
+    private List<IOperator> operators;
     public IEnumerable<IOperator> Operators {
-      get { return operators.Cast<IOperator>(); }
+      get { return operators; }
+    }
+    private BestTSPSolutionAnalyzer Analyzer {
+      get { return operators.OfType<BestTSPSolutionAnalyzer>().FirstOrDefault(); }
     }
     #endregion
@@ -143,5 +133,4 @@
       RandomPermutationCreator creator = new RandomPermutationCreator();
       TSPRoundedEuclideanPathEvaluator evaluator = new TSPRoundedEuclideanPathEvaluator();
-      BestPathTSPTourVisualizer visualizer = new BestPathTSPTourVisualizer();
 
       Parameters.Add(new ValueParameter<BoolValue>("Maximization", "Set to false as the Traveling Salesman Problem is a minimization problem.", new BoolValue(false)));
@@ -151,5 +140,4 @@
       Parameters.Add(new ValueParameter<IPermutationCreator>("SolutionCreator", "The operator which should be used to create new TSP solutions.", creator));
       Parameters.Add(new ValueParameter<ITSPEvaluator>("Evaluator", "The operator which should be used to evaluate TSP solutions.", evaluator));
-      Parameters.Add(new OptionalValueParameter<ITSPSolutionsVisualizer>("Visualizer", "The operator which should be used to visualize TSP solutions.", visualizer));
       Parameters.Add(new OptionalValueParameter<DoubleValue>("BestKnownQuality", "The quality of the best known solution of this TSP instance."));
       Parameters.Add(new OptionalValueParameter<Permutation>("BestKnownSolution", "The best known solution of this TSP instance."));
@@ -166,5 +154,4 @@
       ParameterizeSolutionCreator();
       ParameterizeEvaluator();
-      ParameterizeVisualizer();
 
       Initialize();
@@ -221,9 +208,4 @@
         EvaluatorChanged(this, EventArgs.Empty);
     }
-    public event EventHandler VisualizerChanged;
-    private void OnVisualizerChanged() {
-      if (VisualizerChanged != null)
-        VisualizerChanged(this, EventArgs.Empty);
-    }
     public event EventHandler OperatorsChanged;
     private void OnOperatorsChanged() {
@@ -249,5 +231,5 @@
       ParameterizeSolutionCreator();
       ParameterizeEvaluator();
-      ParameterizeVisualizer();
+      ParameterizeAnalyzer();
       ParameterizeOperators();
       OnSolutionCreatorChanged();
@@ -255,5 +237,5 @@
     private void SolutionCreator_PermutationParameter_ActualNameChanged(object sender, EventArgs e) {
       ParameterizeEvaluator();
-      ParameterizeVisualizer();
+      ParameterizeAnalyzer();
       ParameterizeOperators();
     }
@@ -262,14 +244,10 @@
       ParameterizeEvaluator();
       UpdateMoveEvaluators();
-      ParameterizeVisualizer();
+      ParameterizeAnalyzer();
       ClearDistanceMatrix();
       OnEvaluatorChanged();
     }
     private void Evaluator_QualityParameter_ActualNameChanged(object sender, EventArgs e) {
-      ParameterizeVisualizer();
-    }
-    private void VisualizerParameter_ValueChanged(object sender, EventArgs e) {
-      ParameterizeVisualizer();
-      OnVisualizerChanged();
+      ParameterizeAnalyzer();
     }
     private void MoveGenerator_InversionMoveParameter_ActualNameChanged(object sender, EventArgs e) {
@@ -298,10 +276,11 @@
       EvaluatorParameter.ValueChanged += new EventHandler(EvaluatorParameter_ValueChanged);
       Evaluator.QualityParameter.ActualNameChanged += new EventHandler(Evaluator_QualityParameter_ActualNameChanged);
-      VisualizerParameter.ValueChanged += new EventHandler(VisualizerParameter_ValueChanged);
     }
 
     private void InitializeOperators() {
-      operators = new List<IPermutationOperator>();
-      operators.AddRange(ApplicationManager.Manager.GetInstances<IPermutationOperator>());
+      operators = new List<IOperator>();
+      operators.Add(new BestTSPSolutionAnalyzer());
+      ParameterizeAnalyzer();
+      operators.AddRange(ApplicationManager.Manager.GetInstances<IPermutationOperator>().Cast<IOperator>());
       ParameterizeOperators();
       UpdateMoveEvaluators();
@@ -344,11 +323,10 @@
       }
     }
-    private void ParameterizeVisualizer() {
-      if (Visualizer != null) {
-        Visualizer.QualityParameter.ActualName = Evaluator.QualityParameter.ActualName;
-        if (Visualizer is ICoordinatesTSPSolutionsVisualizer)
-          ((ICoordinatesTSPSolutionsVisualizer)Visualizer).CoordinatesParameter.ActualName = CoordinatesParameter.Name;
-        if (Visualizer is IPathCoordinatesTSPSolutionsVisualizer)
-          ((IPathCoordinatesTSPSolutionsVisualizer)Visualizer).PermutationParameter.ActualName = SolutionCreator.PermutationParameter.ActualName;
+    private void ParameterizeAnalyzer() {
+      if (Analyzer != null) {
+        Analyzer.QualityParameter.ActualName = Evaluator.QualityParameter.ActualName;
+        Analyzer.CoordinatesParameter.ActualName = CoordinatesParameter.Name;
+        Analyzer.PermutationParameter.ActualName = SolutionCreator.PermutationParameter.ActualName;
+        Analyzer.ResultsParameter.ActualName = "Results";
       }
     }
