Index: trunk/sources/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj
===================================================================
--- trunk/sources/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj	(revision 3096)
+++ trunk/sources/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj	(revision 3097)
@@ -86,4 +86,5 @@
     <None Include="HeuristicLabOptimizationPlugin.cs.frame" />
     <Compile Include="Algorithm.cs" />
+    <Compile Include="Interfaces\ISolutionVisualizer.cs" />
     <Compile Include="Interfaces\IDiscreteDoubleValueModifier.cs" />
     <Compile Include="Interfaces\IMoveOperator.cs" />
Index: trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/ISolutionVisualizer.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/ISolutionVisualizer.cs	(revision 3097)
+++ trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/ISolutionVisualizer.cs	(revision 3097)
@@ -0,0 +1,31 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.Optimization {
+  /// <summary>
+  /// An interface which represents an operator for visualizing solutions.
+  /// </summary>
+  public interface ISolutionVisualizer : IOperator {
+    ILookupParameter<IItem> VisualizationParameter { get; }
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.TSP/3.3/HeuristicLab.Problems.TSP-3.3.csproj
===================================================================
--- trunk/sources/HeuristicLab.Problems.TSP/3.3/HeuristicLab.Problems.TSP-3.3.csproj	(revision 3096)
+++ trunk/sources/HeuristicLab.Problems.TSP/3.3/HeuristicLab.Problems.TSP-3.3.csproj	(revision 3097)
@@ -84,4 +84,8 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="Interfaces\IPathTSPTourVisualizer.cs" />
+    <Compile Include="Interfaces\ITSPTourVisualizer.cs" />
+    <Compile Include="TSPTour.cs" />
+    <Compile Include="Visualizers\PathTSPTourVisualizer.cs" />
     <Compile Include="Evaluators\TSPCoordinatesPathEvaluator.cs" />
     <Compile Include="Evaluators\TSPEvaluator.cs" />
Index: trunk/sources/HeuristicLab.Problems.TSP/3.3/Interfaces/IPathTSPTourVisualizer.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TSP/3.3/Interfaces/IPathTSPTourVisualizer.cs	(revision 3097)
+++ trunk/sources/HeuristicLab.Problems.TSP/3.3/Interfaces/IPathTSPTourVisualizer.cs	(revision 3097)
@@ -0,0 +1,32 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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;
+using HeuristicLab.Encodings.PermutationEncoding;
+
+namespace HeuristicLab.Problems.TSP {
+  /// <summary>
+  /// An interface which represents an operator for visualizing tours of Traveling Salesman Problems given in path representation.
+  /// </summary>
+  public interface IPathTSPTourVisualizer : ITSPTourVisualizer {
+    ILookupParameter<Permutation> PermutationParameter { get; }
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.TSP/3.3/Interfaces/ITSPTourVisualizer.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TSP/3.3/Interfaces/ITSPTourVisualizer.cs	(revision 3097)
+++ trunk/sources/HeuristicLab.Problems.TSP/3.3/Interfaces/ITSPTourVisualizer.cs	(revision 3097)
@@ -0,0 +1,33 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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;
+using HeuristicLab.Data;
+using HeuristicLab.Optimization;
+
+namespace HeuristicLab.Problems.TSP {
+  /// <summary>
+  /// An interface which represents an operator for visualizing tours of Traveling Salesman Problems.
+  /// </summary>
+  public interface ITSPTourVisualizer : ISolutionVisualizer {
+    ILookupParameter<DoubleMatrix> CoordinatesParameter { get; }
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.TSP/3.3/TSPTour.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TSP/3.3/TSPTour.cs	(revision 3096)
+++ trunk/sources/HeuristicLab.Problems.TSP/3.3/TSPTour.cs	(revision 3097)
@@ -1,5 +1,5 @@
 #region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -21,90 +21,65 @@
 
 using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Xml;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
-using HeuristicLab.Permutation;
+using HeuristicLab.Encodings.PermutationEncoding;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Problems.TSP {
   /// <summary>
-  /// Represent the tour of a TSP.
+  /// Represents a tour of a Traveling Salesman Problem which can be visualized in the GUI.
   /// </summary>
-  public class TSPTour : ItemBase, IVisualizationItem {
-
+  [Item("TSPTour", "Represents a tour of a Traveling Salesman Problem which can be visualized in the GUI.")]
+  [StorableClass]
+  public sealed class TSPTour : Item {
+    private DoubleMatrix coordinates;
     [Storable]
-    private DoubleMatrixData myCoordinates;
-    /// <summary>
-    /// Gets or sets the coordinates of the current instance.
-    /// </summary>
-    public DoubleMatrixData Coordinates {
-      get { return myCoordinates; }
-      set { myCoordinates = value; }
+    public DoubleMatrix Coordinates {
+      get { return coordinates; }
+      set {
+        if (value == null) throw new ArgumentNullException();
+        if (coordinates != value) {
+          coordinates = value;
+          OnCoordinatesChanged();
+        }
+      }
+    }
+    private Permutation permutation;
+    [Storable]
+    public Permutation Permutation {
+      get { return permutation; }
+      set {
+        if (value == null) throw new ArgumentNullException();
+        if (permutation != value) {
+          permutation = value;
+          OnPermutationChanged();
+        }
+      }
     }
 
-    [Storable]
-    private Permutation.Permutation myTour;
-    /// <summary>
-    /// Gets or sets the current permutation/tour of the current instance.
-    /// </summary>
-    public Permutation.Permutation Tour {
-      get { return myTour; }
-      set { myTour = value; }
+    private TSPTour() : base() { }
+    public TSPTour(DoubleMatrix coordinates, Permutation permutation)
+      : base() {
+      if ((coordinates == null) || (permutation == null)) throw new ArgumentNullException();
+      this.coordinates = coordinates;
+      this.permutation = permutation;
     }
 
-
-    /// <summary>
-    /// Initializes a new instance of <see cref="TSPTour"/>.
-    /// </summary>
-    public TSPTour() { }
-    /// <summary>
-    /// Initializes a new instance of <see cref="TSPTour"/> with the given <paramref name="coordinates"/>
-    /// and the given <paramref name="tour"/>.
-    /// </summary>
-    /// <param name="coordinates">The coordinates of the TSP.</param>
-    /// <param name="tour">The tour the current instance should represent.</param>
-    public TSPTour(DoubleMatrixData coordinates, Permutation.Permutation tour) {
-      myCoordinates = coordinates;
-      myTour = tour;
-    }
-
-    /// <summary>
-    /// Clones the current instance (deep clone).
-    /// </summary>
-    /// <remarks>Uses <see cref="cloner.Clone"/> method of class <see cref="Auxiliary"/> to clone
-    /// the coordinates.</remarks>
-    /// <param name="clonedObjects">Dictionary of all already cloned objects. (Needed to avoid cycles.)</param>
-    /// <returns>The cloned object as <see cref="TSPTour"/>.</returns>
-    public override IItem Clone(ICloner cloner) {
-      TSPTour clone = (TSPTour)base.Clone(cloner);
-      clone.myCoordinates = (DoubleMatrixData)cloner.Clone(Coordinates);
-      clone.myTour = Tour;
+    public override IDeepCloneable Clone(Cloner cloner) {
+      TSPTour clone = new TSPTour((DoubleMatrix)cloner.Clone(coordinates), (Permutation)cloner.Clone(permutation));
+      cloner.RegisterClonedObject(this, clone);
       return clone;
     }
 
-    /// <summary>
-    /// Occurs when the coordinates of the current instance have been changed.
-    /// </summary>
     public event EventHandler CoordinatesChanged;
-    /// <summary>
-    /// Fires a new <c>CoordinatesChanged</c> event.
-    /// </summary>
-    protected virtual void OnCoordinatesChanged() {
+    private void OnCoordinatesChanged() {
       if (CoordinatesChanged != null)
-        CoordinatesChanged(this, new EventArgs());
+        CoordinatesChanged(this, EventArgs.Empty);
     }
-    /// <summary>
-    /// Occurs when the tour of the current instance has been changed.
-    /// </summary>
-    public event EventHandler TourChanged;
-    /// <summary>
-    /// Fires a new <c>TourChanged</c> event.
-    /// </summary>
-    protected virtual void OnTourChanged() {
-      if (TourChanged != null)
-        TourChanged(this, new EventArgs());
-    }    
+    public event EventHandler PermutationChanged;
+    private void OnPermutationChanged() {
+      if (PermutationChanged != null)
+        PermutationChanged(this, EventArgs.Empty);
+    }
   }
 }
Index: trunk/sources/HeuristicLab.Problems.TSP/3.3/Visualizers/PathTSPTourVisualizer.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.TSP/3.3/Visualizers/PathTSPTourVisualizer.cs	(revision 3097)
+++ trunk/sources/HeuristicLab.Problems.TSP/3.3/Visualizers/PathTSPTourVisualizer.cs	(revision 3097)
@@ -0,0 +1,61 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.PermutationEncoding;
+using HeuristicLab.Operators;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.TSP {
+  /// <summary>
+  /// An operator for visualizing tours of Traveling Salesman Problems given in path representation.
+  /// </summary>
+  [Item("PathTSPTourVisualizer", "An operator for visualizing tours of Traveling Salesman Problems given in path representation.")]
+  [StorableClass]
+  public sealed class PathTSPTourVisualizer : SingleSuccessorOperator, IPathTSPTourVisualizer {
+    public ILookupParameter<DoubleMatrix> CoordinatesParameter {
+      get { return (ILookupParameter<DoubleMatrix>)Parameters["Coordinates"]; }
+    }
+    public ILookupParameter<Permutation> PermutationParameter {
+      get { return (ILookupParameter<Permutation>)Parameters["Permutation"]; }
+    }
+    public ILookupParameter<IItem> VisualizationParameter {
+      get { return (ILookupParameter<IItem>)Parameters["Visualization"]; }
+    }
+
+    public PathTSPTourVisualizer()
+      : base() {
+      Parameters.Add(new LookupParameter<DoubleMatrix>("Coordinates", "The x- and y-Coordinates of the cities."));
+      Parameters.Add(new LookupParameter<Permutation>("Permutation", "The TSP solution given in path representation which should be visualized."));
+      Parameters.Add(new LookupParameter<IItem>("Visualization", "An item which represents the visualization of the given TSP solution."));
+    }
+
+    public override IOperation Apply() {
+      DoubleMatrix coordinates = CoordinatesParameter.ActualValue;
+      Permutation permutation = PermutationParameter.ActualValue;
+      TSPTour tour = new TSPTour(coordinates, permutation);
+      VisualizationParameter.ActualValue = tour;
+      return base.Apply();
+    }
+  }
+}
