Index: /branches/PerformanceComparison/HeuristicLab.Analysis.Views/3.3/IndexedDataTableView.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.Analysis.Views/3.3/IndexedDataTableView.cs	(revision 13744)
+++ /branches/PerformanceComparison/HeuristicLab.Analysis.Views/3.3/IndexedDataTableView.cs	(revision 13745)
@@ -20,4 +20,7 @@
 #endregion
 
+using HeuristicLab.Collections;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
 using System;
 using System.Collections.Generic;
@@ -26,7 +29,4 @@
 using System.Windows.Forms;
 using System.Windows.Forms.DataVisualization.Charting;
-using HeuristicLab.Collections;
-using HeuristicLab.Core.Views;
-using HeuristicLab.MainForm;
 
 namespace HeuristicLab.Analysis.Views {
@@ -164,5 +164,5 @@
 
       series.SmartLabelStyle.Enabled = true;
-      series.SmartLabelStyle.AllowOutsidePlotArea = LabelOutsidePlotAreaStyle.Yes;
+      series.SmartLabelStyle.AllowOutsidePlotArea = LabelOutsidePlotAreaStyle.No;
       series.SmartLabelStyle.CalloutLineAnchorCapStyle = LineAnchorCapStyle.None;
       series.SmartLabelStyle.CalloutLineColor = series.Color;
@@ -262,4 +262,7 @@
       area.AxisX2.IsMarginVisible = false;
 
+      area.AxisX.IsStartedFromZero = Content.Rows.Where(x => !x.VisualProperties.SecondXAxis).Any(x => x.VisualProperties.StartIndexZero);
+      area.AxisX2.IsStartedFromZero = Content.Rows.Where(x => x.VisualProperties.SecondXAxis).Any(x => x.VisualProperties.StartIndexZero);
+
       if (!Content.VisualProperties.XAxisMinimumAuto && !double.IsNaN(Content.VisualProperties.XAxisMinimumFixedValue)) area.AxisX.Minimum = Content.VisualProperties.XAxisMinimumFixedValue;
       if (!Content.VisualProperties.XAxisMaximumAuto && !double.IsNaN(Content.VisualProperties.XAxisMaximumFixedValue)) area.AxisX.Maximum = Content.VisualProperties.XAxisMaximumFixedValue;
Index: /branches/PerformanceComparison/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionRLDView.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionRLDView.cs	(revision 13744)
+++ /branches/PerformanceComparison/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionRLDView.cs	(revision 13745)
@@ -357,5 +357,6 @@
               LineWidth = 2,
               Color = colors[colorCount],
-              LineStyle = lineStyles[lineStyleCount]
+              LineStyle = lineStyles[lineStyleCount],
+              StartIndexZero = false
             }
           };
@@ -549,5 +550,6 @@
               LineWidth = 2,
               Color = colors[colorCount],
-              LineStyle = lineStyles[lineStyleCount]
+              LineStyle = lineStyles[lineStyleCount],
+              StartIndexZero = false
             }
           };
Index: /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/UnderstandingSolutionsView.Designer.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/UnderstandingSolutionsView.Designer.cs	(revision 13744)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/UnderstandingSolutionsView.Designer.cs	(revision 13745)
@@ -69,7 +69,11 @@
       this.solutionsFdcViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
       this.solutionsNetworkTabPage = new System.Windows.Forms.TabPage();
+      this.solutionsNetworkChart = new HeuristicLab.Visualization.ChartControlsExtensions.EnhancedChart();
+      this.linesCheckBox = new System.Windows.Forms.CheckBox();
       this.solutionNetworkProjectionLabel = new System.Windows.Forms.Label();
       this.solutionNetworkProjectionComboBox = new System.Windows.Forms.ComboBox();
-      this.solutionsNetworkChart = new HeuristicLab.Visualization.ChartControlsExtensions.EnhancedChart();
+      this.contrastTrackBar = new System.Windows.Forms.TrackBar();
+      this.minimumTrackBar = new System.Windows.Forms.TrackBar();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
       this.solutionsTabControl.SuspendLayout();
       this.solutionsQualityTabPage.SuspendLayout();
@@ -79,4 +83,6 @@
       this.solutionsNetworkTabPage.SuspendLayout();
       ((System.ComponentModel.ISupportInitialize)(this.solutionsNetworkChart)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.contrastTrackBar)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.minimumTrackBar)).BeginInit();
       this.SuspendLayout();
       // 
@@ -294,7 +300,10 @@
       // solutionsNetworkTabPage
       // 
+      this.solutionsNetworkTabPage.Controls.Add(this.solutionsNetworkChart);
+      this.solutionsNetworkTabPage.Controls.Add(this.linesCheckBox);
       this.solutionsNetworkTabPage.Controls.Add(this.solutionNetworkProjectionLabel);
       this.solutionsNetworkTabPage.Controls.Add(this.solutionNetworkProjectionComboBox);
-      this.solutionsNetworkTabPage.Controls.Add(this.solutionsNetworkChart);
+      this.solutionsNetworkTabPage.Controls.Add(this.contrastTrackBar);
+      this.solutionsNetworkTabPage.Controls.Add(this.minimumTrackBar);
       this.solutionsNetworkTabPage.Location = new System.Drawing.Point(4, 22);
       this.solutionsNetworkTabPage.Name = "solutionsNetworkTabPage";
@@ -304,26 +313,4 @@
       this.solutionsNetworkTabPage.Text = "Network Analysis";
       this.solutionsNetworkTabPage.UseVisualStyleBackColor = true;
-      // 
-      // solutionNetworkProjectionLabel
-      // 
-      this.solutionNetworkProjectionLabel.AutoSize = true;
-      this.solutionNetworkProjectionLabel.Location = new System.Drawing.Point(6, 9);
-      this.solutionNetworkProjectionLabel.Name = "solutionNetworkProjectionLabel";
-      this.solutionNetworkProjectionLabel.Size = new System.Drawing.Size(57, 13);
-      this.solutionNetworkProjectionLabel.TabIndex = 4;
-      this.solutionNetworkProjectionLabel.Text = "Projection:";
-      // 
-      // solutionNetworkProjectionComboBox
-      // 
-      this.solutionNetworkProjectionComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
-      this.solutionNetworkProjectionComboBox.FormattingEnabled = true;
-      this.solutionNetworkProjectionComboBox.Items.AddRange(new object[] {
-            "SOM",
-            "MDS"});
-      this.solutionNetworkProjectionComboBox.Location = new System.Drawing.Point(69, 6);
-      this.solutionNetworkProjectionComboBox.Name = "solutionNetworkProjectionComboBox";
-      this.solutionNetworkProjectionComboBox.Size = new System.Drawing.Size(180, 21);
-      this.solutionNetworkProjectionComboBox.TabIndex = 3;
-      this.solutionNetworkProjectionComboBox.SelectedIndexChanged += new System.EventHandler(this.SolutionNetworkProjectionComboBoxOnSelectedIndexChanged);
       // 
       // solutionsNetworkChart
@@ -373,4 +360,65 @@
       this.solutionsNetworkChart.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.SolutionsNetworkChartOnMouseDoubleClick);
       // 
+      // linesCheckBox
+      // 
+      this.linesCheckBox.AutoSize = true;
+      this.linesCheckBox.Location = new System.Drawing.Point(263, 8);
+      this.linesCheckBox.Name = "linesCheckBox";
+      this.linesCheckBox.Size = new System.Drawing.Size(54, 17);
+      this.linesCheckBox.TabIndex = 6;
+      this.linesCheckBox.Text = "Lines:";
+      this.linesCheckBox.UseVisualStyleBackColor = true;
+      this.linesCheckBox.CheckedChanged += new System.EventHandler(this.LinesCheckBoxOnCheckedChanged);
+      // 
+      // solutionNetworkProjectionLabel
+      // 
+      this.solutionNetworkProjectionLabel.AutoSize = true;
+      this.solutionNetworkProjectionLabel.Location = new System.Drawing.Point(6, 9);
+      this.solutionNetworkProjectionLabel.Name = "solutionNetworkProjectionLabel";
+      this.solutionNetworkProjectionLabel.Size = new System.Drawing.Size(57, 13);
+      this.solutionNetworkProjectionLabel.TabIndex = 4;
+      this.solutionNetworkProjectionLabel.Text = "Projection:";
+      // 
+      // solutionNetworkProjectionComboBox
+      // 
+      this.solutionNetworkProjectionComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.solutionNetworkProjectionComboBox.FormattingEnabled = true;
+      this.solutionNetworkProjectionComboBox.Items.AddRange(new object[] {
+            "SOM",
+            "MDS"});
+      this.solutionNetworkProjectionComboBox.Location = new System.Drawing.Point(69, 6);
+      this.solutionNetworkProjectionComboBox.Name = "solutionNetworkProjectionComboBox";
+      this.solutionNetworkProjectionComboBox.Size = new System.Drawing.Size(180, 21);
+      this.solutionNetworkProjectionComboBox.TabIndex = 3;
+      this.solutionNetworkProjectionComboBox.SelectedIndexChanged += new System.EventHandler(this.SolutionNetworkProjectionComboBoxOnSelectedIndexChanged);
+      // 
+      // contrastTrackBar
+      // 
+      this.contrastTrackBar.LargeChange = 3;
+      this.contrastTrackBar.Location = new System.Drawing.Point(323, 6);
+      this.contrastTrackBar.Maximum = 17;
+      this.contrastTrackBar.Minimum = 3;
+      this.contrastTrackBar.Name = "contrastTrackBar";
+      this.contrastTrackBar.Size = new System.Drawing.Size(148, 45);
+      this.contrastTrackBar.TabIndex = 5;
+      this.contrastTrackBar.TickStyle = System.Windows.Forms.TickStyle.None;
+      this.toolTip.SetToolTip(this.contrastTrackBar, "Adjusts the contrast of the lines");
+      this.contrastTrackBar.Value = 10;
+      this.contrastTrackBar.Scroll += new System.EventHandler(this.ContrastTrackBarOnScroll);
+      // 
+      // minimumTrackBar
+      // 
+      this.minimumTrackBar.LargeChange = 10;
+      this.minimumTrackBar.Location = new System.Drawing.Point(477, 6);
+      this.minimumTrackBar.Maximum = 100;
+      this.minimumTrackBar.Minimum = 1;
+      this.minimumTrackBar.Name = "minimumTrackBar";
+      this.minimumTrackBar.Size = new System.Drawing.Size(148, 45);
+      this.minimumTrackBar.TabIndex = 5;
+      this.minimumTrackBar.TickStyle = System.Windows.Forms.TickStyle.None;
+      this.toolTip.SetToolTip(this.minimumTrackBar, "Adjusts the minimum");
+      this.minimumTrackBar.Value = 50;
+      this.minimumTrackBar.Scroll += new System.EventHandler(this.MinimumTrackBarOnScroll);
+      // 
       // UnderstandingSolutionsView
       // 
@@ -393,4 +441,6 @@
       this.solutionsNetworkTabPage.PerformLayout();
       ((System.ComponentModel.ISupportInitialize)(this.solutionsNetworkChart)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.contrastTrackBar)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.minimumTrackBar)).EndInit();
       this.ResumeLayout(false);
       this.PerformLayout();
@@ -422,4 +472,8 @@
     private System.Windows.Forms.Label solutionNetworkProjectionLabel;
     private System.Windows.Forms.ComboBox solutionNetworkProjectionComboBox;
+    private System.Windows.Forms.TrackBar contrastTrackBar;
+    private System.Windows.Forms.CheckBox linesCheckBox;
+    private System.Windows.Forms.TrackBar minimumTrackBar;
+    private System.Windows.Forms.ToolTip toolTip;
   }
 }
Index: /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/UnderstandingSolutionsView.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/UnderstandingSolutionsView.cs	(revision 13744)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/UnderstandingSolutionsView.cs	(revision 13745)
@@ -31,4 +31,5 @@
 using System;
 using System.Collections.Generic;
+using System.Drawing;
 using System.Linq;
 using System.Windows.Forms;
@@ -68,5 +69,5 @@
     protected override void OnSolutionSeedingPoolChanged() {
       base.OnSolutionSeedingPoolChanged();
-      UpdateSolutionNetworkAnalysis(similarityComboBox.SelectedItem as ISolutionSimilarityCalculator, (string)solutionNetworkProjectionComboBox.SelectedItem);
+      UpdateSolutionNetworkAnalysis(similarityComboBox.SelectedItem as ISolutionSimilarityCalculator, (string)solutionNetworkProjectionComboBox.SelectedItem, linesCheckBox.Checked, contrastTrackBar.Value, minimumTrackBar.Value);
     }
 
@@ -109,5 +110,5 @@
         UpdateSolutionFdcAnalysis(calculator, fdcBetweenBestCheckBox.Checked);
         UpdateSolutionLengthScaleAnalysis(calculator);
-        UpdateSolutionNetworkAnalysis(calculator, (string)solutionNetworkProjectionComboBox.SelectedItem);
+        UpdateSolutionNetworkAnalysis(calculator, (string)solutionNetworkProjectionComboBox.SelectedItem, linesCheckBox.Checked, contrastTrackBar.Value, minimumTrackBar.Value);
       } else {
         solutionsDiversityViewHost.Content = null;
@@ -223,8 +224,9 @@
     }
 
-    private void UpdateSolutionNetworkAnalysis(ISolutionSimilarityCalculator calculator, string projection) {
+    private void UpdateSolutionNetworkAnalysis(ISolutionSimilarityCalculator calculator, string projection, bool lines, double contrast, double minimum) {
       var series = solutionsNetworkChart.Series["SolutionSeries"];
       var seedingSeries = solutionsNetworkChart.Series["SeedingSolutionSeries"];
       try {
+        solutionsNetworkChart.Annotations.Clear();
         series.Points.Clear();
         seedingSeries.Points.Clear();
@@ -241,4 +243,5 @@
           coords = Som(dissimilarities, new MersenneTwister(42), jittering: true);
         else coords = MultidimensionalScaling.KruskalShepard(dissimilarities);
+        var dataPoints = new List<DataPoint>();
         for (var i = 0; i < coords.Rows; i++) {
           var quality = GetQuality(solutionScopes[i], calculator.QualityVariableName) ?? double.NaN;
@@ -250,7 +253,23 @@
             Tag = solutionScopes[i]
           };
+          dataPoints.Add(dataPoint);
           if (Content.SolutionSeedingPool.Contains(solutionScopes[i]) && Content.SolutionSeedingPool.ItemChecked(solutionScopes[i]))
             seedingSeries.Points.Add(dataPoint);
           else series.Points.Add(dataPoint);
+        }
+        if (lines) {
+          for (var i = 0; i < dataPoints.Count - 1; i++) {
+            for (var j = i + 1; j < dataPoints.Count; j++) {
+              if (dissimilarities[i, j].IsAlmost(1.0)) continue;
+              // s-shaped curve for mapping dissimilarities to alpha values
+              var alpha = (int)Math.Round(255.0 / (1.0 + Math.Exp(-contrast * ((1.0 - dissimilarities[i, j]) - (minimum / 100.0)))));
+              var lw = (int)Math.Round((1 - dissimilarities[i, j]) * 3.0 + 1.0); // linewidth of 1 to 4
+              var an = new LineAnnotation();
+              an.SetAnchor(dataPoints[i], dataPoints[j]);
+              an.LineColor = Color.FromArgb(alpha, Color.DarkGray);
+              an.LineWidth = lw;
+              solutionsNetworkChart.Annotations.Add(an);
+            }
+          }
         }
       } catch {
@@ -271,5 +290,5 @@
       UpdateSolutionFdcAnalysis(calculator, fdcBetweenBestCheckBox.Checked);
       UpdateSolutionLengthScaleAnalysis(calculator);
-      UpdateSolutionNetworkAnalysis(calculator, (string)solutionNetworkProjectionComboBox.SelectedItem);
+      UpdateSolutionNetworkAnalysis(calculator, (string)solutionNetworkProjectionComboBox.SelectedItem, linesCheckBox.Checked, contrastTrackBar.Value, minimumTrackBar.Value);
     }
 
@@ -284,5 +303,5 @@
       UpdateSolutionFdcAnalysis(calculator, fdcBetweenBestCheckBox.Checked);
       UpdateSolutionLengthScaleAnalysis(calculator);
-      UpdateSolutionNetworkAnalysis(calculator, (string)solutionNetworkProjectionComboBox.SelectedItem);
+      UpdateSolutionNetworkAnalysis(calculator, (string)solutionNetworkProjectionComboBox.SelectedItem, linesCheckBox.Checked, contrastTrackBar.Value, minimumTrackBar.Value);
     }
 
@@ -299,5 +318,35 @@
         calculator.QualityVariableName = Content.Problem.Problem.Evaluator.QualityParameter.ActualName;
       }
-      UpdateSolutionNetworkAnalysis(calculator, (string)solutionNetworkProjectionComboBox.SelectedItem);
+      UpdateSolutionNetworkAnalysis(calculator, (string)solutionNetworkProjectionComboBox.SelectedItem, linesCheckBox.Checked, contrastTrackBar.Value, minimumTrackBar.Value);
+    }
+
+    private void LinesCheckBoxOnCheckedChanged(object sender, EventArgs e) {
+      if (InvokeRequired) { Invoke((Action<object, EventArgs>)LinesCheckBoxOnCheckedChanged, sender, e); return; }
+      var calculator = (ISolutionSimilarityCalculator)similarityComboBox.SelectedItem;
+      if (calculator != null) {
+        calculator.SolutionVariableName = (string)solutionNameComboBox.SelectedItem;
+        calculator.QualityVariableName = Content.Problem.Problem.Evaluator.QualityParameter.ActualName;
+      }
+      UpdateSolutionNetworkAnalysis(calculator, (string)solutionNetworkProjectionComboBox.SelectedItem, linesCheckBox.Checked, contrastTrackBar.Value, minimumTrackBar.Value);
+    }
+
+    private void ContrastTrackBarOnScroll(object sender, EventArgs e) {
+      if (InvokeRequired) { Invoke((Action<object, EventArgs>)ContrastTrackBarOnScroll, sender, e); return; }
+      var calculator = (ISolutionSimilarityCalculator)similarityComboBox.SelectedItem;
+      if (calculator != null) {
+        calculator.SolutionVariableName = (string)solutionNameComboBox.SelectedItem;
+        calculator.QualityVariableName = Content.Problem.Problem.Evaluator.QualityParameter.ActualName;
+      }
+      UpdateSolutionNetworkAnalysis(calculator, (string)solutionNetworkProjectionComboBox.SelectedItem, linesCheckBox.Checked, contrastTrackBar.Value, minimumTrackBar.Value);
+    }
+
+    private void MinimumTrackBarOnScroll(object sender, EventArgs e) {
+      if (InvokeRequired) { Invoke((Action<object, EventArgs>)MinimumTrackBarOnScroll, sender, e); return; }
+      var calculator = (ISolutionSimilarityCalculator)similarityComboBox.SelectedItem;
+      if (calculator != null) {
+        calculator.SolutionVariableName = (string)solutionNameComboBox.SelectedItem;
+        calculator.QualityVariableName = Content.Problem.Problem.Evaluator.QualityParameter.ActualName;
+      }
+      UpdateSolutionNetworkAnalysis(calculator, (string)solutionNetworkProjectionComboBox.SelectedItem, linesCheckBox.Checked, contrastTrackBar.Value, minimumTrackBar.Value);
     }
 
Index: /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/UnderstandingSolutionsView.resx
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/UnderstandingSolutionsView.resx	(revision 13744)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Views/UnderstandingSolutionsView.resx	(revision 13745)
@@ -118,3 +118,6 @@
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
+  <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
 </root>
