Index: anches/PerformanceComparison/HeuristicLab.Analysis.FitnessLandscape/3.3/FDC/HeatMap.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.Analysis.FitnessLandscape/3.3/FDC/HeatMap.cs	(revision 13667)
+++ 	(revision )
@@ -1,97 +1,0 @@
-﻿#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 System.Collections.Generic;
-using System.Drawing;
-using System.Linq;
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Common.Resources;
-
-namespace HeuristicLab.Analysis.FitnessLandscape {
-
-  [Item("HeatMap", "A heat map of 2D data")]
-  [StorableClass]
-  public class HeatMap : NamedItem {
-
-    public static new Image StaticItemImage { get { return VSImageLibrary.Image; } }
-
-    #region Persistence
-
-    private IEnumerable<float> GetPointCoordinates() {
-      foreach (var p in points) {
-        yield return p.X;
-        yield return p.Y;
-      }
-    }
-
-    [Storable(Name = "Points")]
-    private List<float> PointsPersistence {
-      get {
-        return new List<float>(GetPointCoordinates());
-      }
-      set {
-        points = new List<PointF>();
-        var iter = value.GetEnumerator();
-        while (iter.MoveNext()) {
-          float x = iter.Current;
-          iter.MoveNext();
-          float y = iter.Current;
-          points.Add(new PointF(x, y));
-        }
-      }
-    }
-    #endregion
-
-    private List<PointF> points;
-    public IEnumerable<PointF> Points {
-      get { return points; }
-    }
-
-    public void Add(IEnumerable<PointF> points) {
-      this.points.AddRange(points);
-    }
-
-    [StorableConstructor]
-    protected HeatMap(bool deserializing) : base(deserializing) { }
-    protected HeatMap(HeatMap original, Cloner cloner)
-      : base(original, cloner) {
-      points = new List<PointF>(original.points.Select(p => new PointF(p.X, p.Y)));
-    }
-
-
-    public HeatMap() {
-      points = new List<PointF>();
-      Name = "Heat Map";
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new HeatMap(this, cloner);
-    }
-
-
-    internal void Clear() {
-      var oldPoints = points;
-      points = new List<PointF>();
-    }
-  }
-}
Index: /branches/PerformanceComparison/HeuristicLab.Analysis.FitnessLandscape/3.3/HeuristicLab.Analysis.FitnessLandscape-3.3.csproj
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.Analysis.FitnessLandscape/3.3/HeuristicLab.Analysis.FitnessLandscape-3.3.csproj	(revision 13667)
+++ /branches/PerformanceComparison/HeuristicLab.Analysis.FitnessLandscape/3.3/HeuristicLab.Analysis.FitnessLandscape-3.3.csproj	(revision 13668)
@@ -204,5 +204,4 @@
     <Compile Include="FDC\QAPPermutationFitnessDistanceCorrelationAnalyzer.cs" />
     <Compile Include="FDC\BinaryVectorFitnessDistanceCorrelationAnalyzer.cs" />
-    <Compile Include="FDC\HeatMap.cs" />
     <Compile Include="Plugin.cs" />
     <Compile Include="FDC\PermutationFitnessDistanceCorrelationAnalyzer.cs" />
Index: /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem.Common/3.3/ExpertSystem.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem.Common/3.3/ExpertSystem.cs	(revision 13667)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem.Common/3.3/ExpertSystem.cs	(revision 13668)
@@ -123,6 +123,4 @@
     }
 
-    [Storable(Name = "solutionPool")]
-    private ItemList<IScope> oldBackwardsCompatible;
     [Storable(Name = "newSolutionPool")]
     private CheckedItemList<IScope> solutionPool;
@@ -199,9 +197,4 @@
     private void AfterDeserialization() {
       readOnlySuggestedInstances = suggestedInstances.AsReadOnly();
-      // BackwardsCompatibility3.3
-      #region Backwards compatible code, remove with trunk integration
-      if (oldBackwardsCompatible != null) solutionPool = new CheckedItemList<IScope>(solutionPool);
-      else if (solutionPool == null) solutionPool = new CheckedItemList<IScope>();
-      #endregion
       RegisterEventHandlers();
     }
@@ -364,4 +357,5 @@
       var selectedInstance = suggestedInstances[index];
       var algorithm = (IAlgorithm)selectedInstance.Clone();
+      algorithm.Problem = Problem.CloneProblem();
       algorithm.Prepare(true);
       IParameter stopParam;
@@ -384,4 +378,5 @@
       var selectedInstance = suggestedInstances[index];
       var algorithm = (IAlgorithm)selectedInstance.Clone();
+      algorithm.Problem = Problem.CloneProblem();
       algorithm.Prepare(true);
       IParameter stopParam;
Index: /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/ExpertSystemView.Designer.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/ExpertSystemView.Designer.cs	(revision 13667)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/ExpertSystemView.Designer.cs	(revision 13668)
@@ -38,5 +38,8 @@
       System.Windows.Forms.DataVisualization.Charting.Legend legend1 = new System.Windows.Forms.DataVisualization.Charting.Legend();
       System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series();
+      System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea2 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
+      System.Windows.Forms.DataVisualization.Charting.Legend legend2 = new System.Windows.Forms.DataVisualization.Charting.Legend();
       System.Windows.Forms.DataVisualization.Charting.Series series2 = new System.Windows.Forms.DataVisualization.Charting.Series();
+      System.Windows.Forms.DataVisualization.Charting.Series series3 = new System.Windows.Forms.DataVisualization.Charting.Series();
       this.evaluationsLimitabel = new System.Windows.Forms.Label();
       this.maxEvaluationsTextBox = new System.Windows.Forms.TextBox();
@@ -45,4 +48,5 @@
       this.problemViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
       this.algorithmTabPage = new System.Windows.Forms.TabPage();
+      this.algorithmCloneButton = new System.Windows.Forms.Button();
       this.algorithmStartButton = new System.Windows.Forms.Button();
       this.algorithmViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
@@ -65,8 +69,10 @@
       this.solutionsDiversityTabPage = new System.Windows.Forms.TabPage();
       this.solutionsDiversityViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.solutionsFdcTabPage = new System.Windows.Forms.TabPage();
+      this.solutionsFdcViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
       this.solutionsLengthScaleTabPage = new System.Windows.Forms.TabPage();
       this.solutionsLengthScaleViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
       this.solutionsNetworkTabPage = new System.Windows.Forms.TabPage();
-      this.solutionsNetworkViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.solutionsNetworkChart = new HeuristicLab.Visualization.ChartControlsExtensions.EnhancedChart();
       this.okbTabPage = new System.Windows.Forms.TabPage();
       this.kbViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
@@ -83,6 +89,4 @@
       this.okbDownloadButton = new System.Windows.Forms.Button();
       this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
-      this.solutionsFdcTabPage = new System.Windows.Forms.TabPage();
-      this.solutionsFdcViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
       this.tabControl.SuspendLayout();
@@ -95,6 +99,8 @@
       this.solutionsQualityTabPage.SuspendLayout();
       this.solutionsDiversityTabPage.SuspendLayout();
+      this.solutionsFdcTabPage.SuspendLayout();
       this.solutionsLengthScaleTabPage.SuspendLayout();
       this.solutionsNetworkTabPage.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.solutionsNetworkChart)).BeginInit();
       this.okbTabPage.SuspendLayout();
       this.problemInstancesTabPage.SuspendLayout();
@@ -103,5 +109,4 @@
       this.mapTabPage.SuspendLayout();
       ((System.ComponentModel.ISupportInitialize)(this.instanceMapChart)).BeginInit();
-      this.solutionsFdcTabPage.SuspendLayout();
       this.SuspendLayout();
       // 
@@ -182,4 +187,5 @@
       // algorithmTabPage
       // 
+      this.algorithmTabPage.Controls.Add(this.algorithmCloneButton);
       this.algorithmTabPage.Controls.Add(this.algorithmStartButton);
       this.algorithmTabPage.Controls.Add(this.algorithmViewHost);
@@ -194,8 +200,19 @@
       this.algorithmTabPage.UseVisualStyleBackColor = true;
       // 
+      // algorithmCloneButton
+      // 
+      this.algorithmCloneButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.algorithmCloneButton.Location = new System.Drawing.Point(649, 5);
+      this.algorithmCloneButton.Name = "algorithmCloneButton";
+      this.algorithmCloneButton.Size = new System.Drawing.Size(26, 23);
+      this.algorithmCloneButton.TabIndex = 3;
+      this.algorithmCloneButton.Text = "Clone";
+      this.algorithmCloneButton.UseVisualStyleBackColor = true;
+      this.algorithmCloneButton.Click += new System.EventHandler(this.AlgorithmCloneButtonOnClick);
+      // 
       // algorithmStartButton
       // 
       this.algorithmStartButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
-      this.algorithmStartButton.Location = new System.Drawing.Point(649, 5);
+      this.algorithmStartButton.Location = new System.Drawing.Point(617, 5);
       this.algorithmStartButton.Name = "algorithmStartButton";
       this.algorithmStartButton.Size = new System.Drawing.Size(26, 23);
@@ -238,5 +255,5 @@
       this.suggestedInstancesComboBox.Location = new System.Drawing.Point(178, 6);
       this.suggestedInstancesComboBox.Name = "suggestedInstancesComboBox";
-      this.suggestedInstancesComboBox.Size = new System.Drawing.Size(465, 21);
+      this.suggestedInstancesComboBox.Size = new System.Drawing.Size(433, 21);
       this.suggestedInstancesComboBox.TabIndex = 0;
       this.suggestedInstancesComboBox.SelectedIndexChanged += new System.EventHandler(this.SuggestedInstancesComboBoxOnSelectedIndexChanged);
@@ -431,4 +448,29 @@
       this.solutionsDiversityViewHost.ViewType = null;
       // 
+      // solutionsFdcTabPage
+      // 
+      this.solutionsFdcTabPage.Controls.Add(this.solutionsFdcViewHost);
+      this.solutionsFdcTabPage.Location = new System.Drawing.Point(4, 22);
+      this.solutionsFdcTabPage.Name = "solutionsFdcTabPage";
+      this.solutionsFdcTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.solutionsFdcTabPage.Size = new System.Drawing.Size(667, 366);
+      this.solutionsFdcTabPage.TabIndex = 5;
+      this.solutionsFdcTabPage.Text = "Fitness-Distance Analysis";
+      this.solutionsFdcTabPage.UseVisualStyleBackColor = true;
+      // 
+      // solutionsFdcViewHost
+      // 
+      this.solutionsFdcViewHost.Caption = "View";
+      this.solutionsFdcViewHost.Content = null;
+      this.solutionsFdcViewHost.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.solutionsFdcViewHost.Enabled = false;
+      this.solutionsFdcViewHost.Location = new System.Drawing.Point(3, 3);
+      this.solutionsFdcViewHost.Name = "solutionsFdcViewHost";
+      this.solutionsFdcViewHost.ReadOnly = false;
+      this.solutionsFdcViewHost.Size = new System.Drawing.Size(661, 360);
+      this.solutionsFdcViewHost.TabIndex = 0;
+      this.solutionsFdcViewHost.ViewsLabelVisible = true;
+      this.solutionsFdcViewHost.ViewType = null;
+      // 
       // solutionsLengthScaleTabPage
       // 
@@ -458,5 +500,5 @@
       // solutionsNetworkTabPage
       // 
-      this.solutionsNetworkTabPage.Controls.Add(this.solutionsNetworkViewHost);
+      this.solutionsNetworkTabPage.Controls.Add(this.solutionsNetworkChart);
       this.solutionsNetworkTabPage.Location = new System.Drawing.Point(4, 22);
       this.solutionsNetworkTabPage.Name = "solutionsNetworkTabPage";
@@ -467,17 +509,34 @@
       this.solutionsNetworkTabPage.UseVisualStyleBackColor = true;
       // 
-      // solutionsNetworkViewHost
-      // 
-      this.solutionsNetworkViewHost.Caption = "View";
-      this.solutionsNetworkViewHost.Content = null;
-      this.solutionsNetworkViewHost.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.solutionsNetworkViewHost.Enabled = false;
-      this.solutionsNetworkViewHost.Location = new System.Drawing.Point(3, 3);
-      this.solutionsNetworkViewHost.Name = "solutionsNetworkViewHost";
-      this.solutionsNetworkViewHost.ReadOnly = false;
-      this.solutionsNetworkViewHost.Size = new System.Drawing.Size(661, 360);
-      this.solutionsNetworkViewHost.TabIndex = 0;
-      this.solutionsNetworkViewHost.ViewsLabelVisible = true;
-      this.solutionsNetworkViewHost.ViewType = null;
+      // solutionsNetworkChart
+      // 
+      chartArea1.AxisX.LabelStyle.Enabled = false;
+      chartArea1.AxisX.LineWidth = 0;
+      chartArea1.AxisX.MajorGrid.Enabled = false;
+      chartArea1.AxisX.MajorTickMark.Enabled = false;
+      chartArea1.AxisY.LabelStyle.Enabled = false;
+      chartArea1.AxisY.LineWidth = 0;
+      chartArea1.AxisY.MajorGrid.Enabled = false;
+      chartArea1.AxisY.MajorTickMark.Enabled = false;
+      chartArea1.Name = "SolutionsNetworkChartArea";
+      this.solutionsNetworkChart.ChartAreas.Add(chartArea1);
+      this.solutionsNetworkChart.Dock = System.Windows.Forms.DockStyle.Fill;
+      legend1.Enabled = false;
+      legend1.Name = "Legend1";
+      this.solutionsNetworkChart.Legends.Add(legend1);
+      this.solutionsNetworkChart.Location = new System.Drawing.Point(3, 3);
+      this.solutionsNetworkChart.Name = "solutionsNetworkChart";
+      series1.ChartArea = "SolutionsNetworkChartArea";
+      series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Bubble;
+      series1.IsValueShownAsLabel = true;
+      series1.Label = "#LABEL";
+      series1.Legend = "Legend1";
+      series1.MarkerStyle = System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Circle;
+      series1.Name = "SolutionSeries";
+      series1.YValuesPerPoint = 2;
+      this.solutionsNetworkChart.Series.Add(series1);
+      this.solutionsNetworkChart.Size = new System.Drawing.Size(661, 360);
+      this.solutionsNetworkChart.TabIndex = 0;
+      this.solutionsNetworkChart.Text = "enhancedChart1";
       // 
       // okbTabPage
@@ -590,31 +649,31 @@
       // instanceMapChart
       // 
-      chartArea1.AxisX.MajorGrid.LineColor = System.Drawing.Color.LightGray;
-      chartArea1.AxisX.MajorGrid.LineDashStyle = System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.Dash;
-      chartArea1.AxisY.MajorGrid.LineColor = System.Drawing.Color.LightGray;
-      chartArea1.AxisY.MajorGrid.LineDashStyle = System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.Dash;
-      chartArea1.Name = "Default";
-      this.instanceMapChart.ChartAreas.Add(chartArea1);
+      chartArea2.AxisX.MajorGrid.LineColor = System.Drawing.Color.LightGray;
+      chartArea2.AxisX.MajorGrid.LineDashStyle = System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.Dash;
+      chartArea2.AxisY.MajorGrid.LineColor = System.Drawing.Color.LightGray;
+      chartArea2.AxisY.MajorGrid.LineDashStyle = System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.Dash;
+      chartArea2.Name = "Default";
+      this.instanceMapChart.ChartAreas.Add(chartArea2);
       this.instanceMapChart.Dock = System.Windows.Forms.DockStyle.Fill;
-      legend1.Docking = System.Windows.Forms.DataVisualization.Charting.Docking.Top;
-      legend1.Enabled = false;
-      legend1.Name = "Legend";
-      this.instanceMapChart.Legends.Add(legend1);
+      legend2.Docking = System.Windows.Forms.DataVisualization.Charting.Docking.Top;
+      legend2.Enabled = false;
+      legend2.Name = "Legend";
+      this.instanceMapChart.Legends.Add(legend2);
       this.instanceMapChart.Location = new System.Drawing.Point(3, 3);
       this.instanceMapChart.Name = "instanceMapChart";
-      series1.ChartArea = "Default";
-      series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Point;
-      series1.Legend = "Legend";
-      series1.MarkerSize = 10;
-      series1.Name = "InstancesSeries";
       series2.ChartArea = "Default";
       series2.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Point;
       series2.Legend = "Legend";
-      series2.MarkerColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))));
-      series2.MarkerSize = 15;
-      series2.MarkerStyle = System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Cross;
-      series2.Name = "CurrentInstanceSeries";
-      this.instanceMapChart.Series.Add(series1);
+      series2.MarkerSize = 10;
+      series2.Name = "InstancesSeries";
+      series3.ChartArea = "Default";
+      series3.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Point;
+      series3.Legend = "Legend";
+      series3.MarkerColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))));
+      series3.MarkerSize = 15;
+      series3.MarkerStyle = System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Cross;
+      series3.Name = "CurrentInstanceSeries";
       this.instanceMapChart.Series.Add(series2);
+      this.instanceMapChart.Series.Add(series3);
       this.instanceMapChart.Size = new System.Drawing.Size(661, 358);
       this.instanceMapChart.TabIndex = 0;
@@ -659,29 +718,4 @@
       this.openFileDialog.Filter = "HeuristicLab Files|*.hl|All Files|*.*";
       this.openFileDialog.Title = "Open Optimizer";
-      // 
-      // solutionsFdcTabPage
-      // 
-      this.solutionsFdcTabPage.Controls.Add(this.solutionsFdcViewHost);
-      this.solutionsFdcTabPage.Location = new System.Drawing.Point(4, 22);
-      this.solutionsFdcTabPage.Name = "solutionsFdcTabPage";
-      this.solutionsFdcTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.solutionsFdcTabPage.Size = new System.Drawing.Size(667, 366);
-      this.solutionsFdcTabPage.TabIndex = 5;
-      this.solutionsFdcTabPage.Text = "Fitness-Distance Analysis";
-      this.solutionsFdcTabPage.UseVisualStyleBackColor = true;
-      // 
-      // solutionsFdcViewHost
-      // 
-      this.solutionsFdcViewHost.Caption = "View";
-      this.solutionsFdcViewHost.Content = null;
-      this.solutionsFdcViewHost.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.solutionsFdcViewHost.Enabled = false;
-      this.solutionsFdcViewHost.Location = new System.Drawing.Point(3, 3);
-      this.solutionsFdcViewHost.Name = "solutionsFdcViewHost";
-      this.solutionsFdcViewHost.ReadOnly = false;
-      this.solutionsFdcViewHost.Size = new System.Drawing.Size(661, 360);
-      this.solutionsFdcViewHost.TabIndex = 0;
-      this.solutionsFdcViewHost.ViewsLabelVisible = true;
-      this.solutionsFdcViewHost.ViewType = null;
       // 
       // ExpertSystemView
@@ -715,6 +749,8 @@
       this.solutionsQualityTabPage.ResumeLayout(false);
       this.solutionsDiversityTabPage.ResumeLayout(false);
+      this.solutionsFdcTabPage.ResumeLayout(false);
       this.solutionsLengthScaleTabPage.ResumeLayout(false);
       this.solutionsNetworkTabPage.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.solutionsNetworkChart)).EndInit();
       this.okbTabPage.ResumeLayout(false);
       this.problemInstancesTabPage.ResumeLayout(false);
@@ -724,5 +760,4 @@
       this.mapTabPage.ResumeLayout(false);
       ((System.ComponentModel.ISupportInitialize)(this.instanceMapChart)).EndInit();
-      this.solutionsFdcTabPage.ResumeLayout(false);
       this.ResumeLayout(false);
       this.PerformLayout();
@@ -775,7 +810,8 @@
     private System.Windows.Forms.TabPage solutionsNetworkTabPage;
     private MainForm.WindowsForms.ViewHost solutionsLengthScaleViewHost;
-    private MainForm.WindowsForms.ViewHost solutionsNetworkViewHost;
     private System.Windows.Forms.TabPage solutionsFdcTabPage;
     private MainForm.WindowsForms.ViewHost solutionsFdcViewHost;
+    private Visualization.ChartControlsExtensions.EnhancedChart solutionsNetworkChart;
+    private System.Windows.Forms.Button algorithmCloneButton;
   }
 }
Index: /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/ExpertSystemView.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/ExpertSystemView.cs	(revision 13667)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/ExpertSystemView.cs	(revision 13668)
@@ -57,4 +57,6 @@
       algorithmStartButton.Text = string.Empty;
       algorithmStartButton.Image = VSImageLibrary.Play;
+      algorithmCloneButton.Text = string.Empty;
+      algorithmCloneButton.Image = VSImageLibrary.Clone;
       refreshMapButton.Text = string.Empty;
       refreshMapButton.Image = VSImageLibrary.Refresh;
@@ -134,4 +136,5 @@
       suggestedInstancesComboBox.Enabled = Content != null && !ReadOnly && !Locked && !okbDownloadInProgress;
       algorithmStartButton.Enabled = Content != null && !ReadOnly && !Locked && suggestedInstancesComboBox.SelectedIndex >= 0;
+      algorithmCloneButton.Enabled = Content != null && !ReadOnly && !Locked && suggestedInstancesComboBox.SelectedIndex >= 0;
       algorithmViewHost.Enabled = Content != null && !ReadOnly && !Locked;
       runsView.Enabled = Content != null;
@@ -238,4 +241,5 @@
         UpdateSolutionFdcAnalysis(calculator);
         UpdateSolutionLengthScaleAnalysis(calculator);
+        UpdateSolutionNetworkAnalysis(calculator);
       } else solutionsDiversityViewHost.Content = null;
     }
@@ -304,4 +308,9 @@
       if (suggestedInstancesComboBox.SelectedIndex >= 0)
         Content.StartAlgorithmAsync(suggestedInstancesComboBox.SelectedIndex);
+    }
+
+    private void AlgorithmCloneButtonOnClick(object sender, EventArgs e) {
+      if (suggestedInstancesComboBox.SelectedIndex >= 0)
+        MainFormManager.MainForm.ShowContent((IAlgorithm)Content.SuggestedInstances[suggestedInstancesComboBox.SelectedIndex].Clone());
     }
 
@@ -406,4 +415,28 @@
     }
 
+    private void UpdateSolutionNetworkAnalysis(ISolutionSimilarityCalculator calculator) {
+      try {
+        var series = solutionsNetworkChart.Series["SolutionSeries"];
+        series.Points.Clear();
+        var dissimilarities = new DoubleMatrix(Content.SolutionPool.Count, Content.SolutionPool.Count);
+        for (int i = 0; i < Content.SolutionPool.Count; i++) {
+          for (int j = 0; j < Content.SolutionPool.Count; j++) {
+            if (i == j) continue;
+            dissimilarities[i, j] = 1.0 - calculator.CalculateSolutionSimilarity(Content.SolutionPool[i], Content.SolutionPool[j]);
+          }
+        }
+        var coords = MultidimensionalScaling.KruskalShepard(dissimilarities);
+        for (var i = 0; i < coords.Rows; i++) {
+          var quality = ((DoubleValue)Content.SolutionPool[i].Variables[calculator.QualityVariableName].Value).Value;
+          series.Points.Add(new DataPoint() {
+            Name = i.ToString(),
+            XValue = coords[i, 0],
+            YValues = new[] { coords[i, 1], quality },
+            Label = i + ": " + quality
+          });
+        }
+      } catch { }
+    }
+
     private void SuggestedInstancesComboBoxOnSelectedIndexChanged(object sender, EventArgs e) {
       SetEnabledStateOfControls();
@@ -421,4 +454,5 @@
       UpdateSolutionFdcAnalysis(calculator);
       UpdateSolutionLengthScaleAnalysis(calculator);
+      UpdateSolutionNetworkAnalysis(calculator);
     }
 
@@ -429,4 +463,5 @@
       UpdateSolutionFdcAnalysis(calculator);
       UpdateSolutionLengthScaleAnalysis(calculator);
+      UpdateSolutionNetworkAnalysis(calculator);
     }
 
@@ -440,4 +475,5 @@
       UpdateSolutionFdcAnalysis(calculator);
       UpdateSolutionLengthScaleAnalysis(calculator);
+      UpdateSolutionNetworkAnalysis(calculator);
     }
   }
Index: /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/HeuristicLab.OptimizationExpertSystem-3.3.csproj.user
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/HeuristicLab.OptimizationExpertSystem-3.3.csproj.user	(revision 13667)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/HeuristicLab.OptimizationExpertSystem-3.3.csproj.user	(revision 13668)
@@ -4,5 +4,5 @@
     <StartAction>Program</StartAction>
     <StartProgram>C:\Users\P40311\Work\HL3\trunk\sources\bin\HeuristicLab 3.3.exe</StartProgram>
-    <StartArguments>/start:"Optimization Expert System" /hideStarter</StartArguments>
+    <StartArguments>/start:"Optimizer" /hideStarter</StartArguments>
   </PropertyGroup>
 </Project>
