Index: /branches/PerformanceComparison/HeuristicLab.Analysis/3.3/QualityAnalysis/QualityDistributionAnalyzer.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.Analysis/3.3/QualityAnalysis/QualityDistributionAnalyzer.cs	(revision 13662)
+++ /branches/PerformanceComparison/HeuristicLab.Analysis/3.3/QualityAnalysis/QualityDistributionAnalyzer.cs	(revision 13663)
@@ -20,5 +20,4 @@
 #endregion
 
-using System.Linq;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -28,4 +27,6 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using System.Collections.Generic;
+using System.Linq;
 
 namespace HeuristicLab.Analysis.QualityAnalysis {
@@ -33,4 +34,5 @@
   [StorableClass]
   public class QualityDistributionAnalyzer : SingleSuccessorOperator, IAnalyzer, IIterationBasedOperator, ISingleObjectiveOperator {
+    private const string TableDescription = "Shows the quality distributions in the current population.";
 
     #region Parameter properties
@@ -93,40 +95,48 @@
     }
 
+    public static DataTable PrepareTable(string qualityName = "Quality") {
+      var result = new DataTable("Population Quality Distribution", TableDescription);
+      result.VisualProperties.XAxisTitle = qualityName;
+      result.VisualProperties.YAxisTitle = "Frequency";
+
+      var row = new DataRow("QualityDistribution");
+      row.VisualProperties.ChartType = DataRowVisualProperties.DataRowChartType.Histogram;
+      result.Rows.Add(row);
+
+      return result;
+    }
+
+    public static void UpdateTable(DataTable table, IEnumerable<double> qualities) {
+      var row = table.Rows["QualityDistribution"];
+      row.Values.Replace(qualities);
+    }
+
     public override IOperation Apply() {
       DataTable qualityDistribution = null;
-      ResultCollection results = ResultsParameter.ActualValue;
-      string description = "Shows the quality distributions in the current population.";
+      var results = ResultsParameter.ActualValue;
       if (results.ContainsKey(HistogramName)) {
-        qualityDistribution = results[HistogramName].Value as DataTable;
+        qualityDistribution = (DataTable)results[HistogramName].Value;
       } else {
-        qualityDistribution = new DataTable("Population Quality Distribution", description);
-        qualityDistribution.VisualProperties.XAxisTitle = QualityParameter.ActualName;
-        qualityDistribution.VisualProperties.YAxisTitle = "Frequency";
-        results.Add(new Result(HistogramName, description, qualityDistribution));
+        qualityDistribution = PrepareTable(QualityParameter.ActualName);
+        results.Add(new Result(HistogramName, TableDescription, qualityDistribution));
       }
-      DataRow row;
-      if (!qualityDistribution.Rows.TryGetValue("QualityDistribution", out row)) {
-        row = new DataRow("QualityDistribution");
-        row.VisualProperties.ChartType = DataRowVisualProperties.DataRowChartType.Histogram;
-        qualityDistribution.Rows.Add(row);
-      }
-      var qualities = QualityParameter.ActualValue;
-      row.Values.Replace(qualities.Select(x => x.Value));
+
+      UpdateTable(qualityDistribution, QualityParameter.ActualValue.Select(x => x.Value));
 
       if (StoreHistory) {
-        string historyResultName = HistogramName + " History";
+        var historyResultName = HistogramName + " History";
         DataTableHistory qdHistory = null;
         if (results.ContainsKey(historyResultName)) {
-          qdHistory = results[historyResultName].Value as DataTableHistory;
+          qdHistory = (DataTableHistory)results[historyResultName].Value;
         } else {
           qdHistory = new DataTableHistory();
           results.Add(new Result(historyResultName, qdHistory));
         }
-        DataTable table = (DataTable)qualityDistribution.Clone();
-        IntValue iteration = IterationsParameter.ActualValue;
+        var table = (DataTable)qualityDistribution.Clone();
+        var iteration = IterationsParameter.ActualValue;
         if (iteration != null) {
-          string iterationName = IterationsParameter.ActualName;
+          var iterationName = IterationsParameter.ActualName;
           if (iterationName.EndsWith("s")) iterationName = iterationName.Remove(iterationName.Length - 1);
-          string appendix = " at " + iterationName + " " + iteration.Value.ToString();
+          var appendix = " at " + iterationName + " " + iteration.Value.ToString();
           table.Name += appendix;
           table.Rows["QualityDistribution"].VisualProperties.DisplayName += appendix;
Index: /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem.Views/3.3/ExpertSystemView.Designer.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem.Views/3.3/ExpertSystemView.Designer.cs	(revision 13662)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem.Views/3.3/ExpertSystemView.Designer.cs	(revision 13663)
@@ -51,4 +51,22 @@
       this.runsTabPage = new System.Windows.Forms.TabPage();
       this.runsView = new HeuristicLab.Optimization.Views.RunCollectionView();
+      this.solutionsTabPage = new System.Windows.Forms.TabPage();
+      this.qualityNameLabel = new System.Windows.Forms.Label();
+      this.solutionDiversitySimilarityLabel = new System.Windows.Forms.Label();
+      this.solutionNameLabel = new System.Windows.Forms.Label();
+      this.similarityComboBox = new System.Windows.Forms.ComboBox();
+      this.qualityNameComboBox = new System.Windows.Forms.ComboBox();
+      this.solutionNameComboBox = new System.Windows.Forms.ComboBox();
+      this.solutionsTabControl = new System.Windows.Forms.TabControl();
+      this.solutionsListTabPage = new System.Windows.Forms.TabPage();
+      this.solutionsViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.solutionsQualityTabPage = new System.Windows.Forms.TabPage();
+      this.solutionsQualityViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.solutionsDiversityTabPage = new System.Windows.Forms.TabPage();
+      this.solutionsDiversityViewHost = 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.okbTabPage = new System.Windows.Forms.TabPage();
       this.kbViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
@@ -65,4 +83,6 @@
       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();
@@ -70,4 +90,11 @@
       this.algorithmTabPage.SuspendLayout();
       this.runsTabPage.SuspendLayout();
+      this.solutionsTabPage.SuspendLayout();
+      this.solutionsTabControl.SuspendLayout();
+      this.solutionsListTabPage.SuspendLayout();
+      this.solutionsQualityTabPage.SuspendLayout();
+      this.solutionsDiversityTabPage.SuspendLayout();
+      this.solutionsLengthScaleTabPage.SuspendLayout();
+      this.solutionsNetworkTabPage.SuspendLayout();
       this.okbTabPage.SuspendLayout();
       this.problemInstancesTabPage.SuspendLayout();
@@ -76,4 +103,5 @@
       this.mapTabPage.SuspendLayout();
       ((System.ComponentModel.ISupportInitialize)(this.instanceMapChart)).BeginInit();
+      this.solutionsFdcTabPage.SuspendLayout();
       this.SuspendLayout();
       // 
@@ -83,9 +111,9 @@
       this.errorProvider.SetIconPadding(this.nameTextBox, 2);
       this.nameTextBox.Location = new System.Drawing.Point(75, 0);
-      this.nameTextBox.Size = new System.Drawing.Size(449, 20);
+      this.nameTextBox.Size = new System.Drawing.Size(592, 20);
       // 
       // infoLabel
       // 
-      this.infoLabel.Location = new System.Drawing.Point(530, 3);
+      this.infoLabel.Location = new System.Drawing.Point(673, 3);
       // 
       // evaluationsLimitabel
@@ -104,5 +132,5 @@
       this.maxEvaluationsTextBox.Location = new System.Drawing.Point(75, 26);
       this.maxEvaluationsTextBox.Name = "maxEvaluationsTextBox";
-      this.maxEvaluationsTextBox.Size = new System.Drawing.Size(449, 20);
+      this.maxEvaluationsTextBox.Size = new System.Drawing.Size(592, 20);
       this.maxEvaluationsTextBox.TabIndex = 6;
       this.maxEvaluationsTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.MaxEvaluationsTextBoxOnValidating);
@@ -117,4 +145,5 @@
       this.tabControl.Controls.Add(this.algorithmTabPage);
       this.tabControl.Controls.Add(this.runsTabPage);
+      this.tabControl.Controls.Add(this.solutionsTabPage);
       this.tabControl.Controls.Add(this.okbTabPage);
       this.tabControl.Controls.Add(this.problemInstancesTabPage);
@@ -122,5 +151,5 @@
       this.tabControl.Name = "tabControl";
       this.tabControl.SelectedIndex = 0;
-      this.tabControl.Size = new System.Drawing.Size(546, 332);
+      this.tabControl.Size = new System.Drawing.Size(689, 454);
       this.tabControl.TabIndex = 17;
       // 
@@ -132,5 +161,5 @@
       this.problemTabPage.Name = "problemTabPage";
       this.problemTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.problemTabPage.Size = new System.Drawing.Size(538, 306);
+      this.problemTabPage.Size = new System.Drawing.Size(681, 428);
       this.problemTabPage.TabIndex = 1;
       this.problemTabPage.Text = "Problem";
@@ -146,5 +175,5 @@
       this.problemViewHost.Name = "problemViewHost";
       this.problemViewHost.ReadOnly = false;
-      this.problemViewHost.Size = new System.Drawing.Size(532, 300);
+      this.problemViewHost.Size = new System.Drawing.Size(675, 422);
       this.problemViewHost.TabIndex = 2;
       this.problemViewHost.ViewsLabelVisible = false;
@@ -160,5 +189,5 @@
       this.algorithmTabPage.Name = "algorithmTabPage";
       this.algorithmTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.algorithmTabPage.Size = new System.Drawing.Size(538, 306);
+      this.algorithmTabPage.Size = new System.Drawing.Size(681, 428);
       this.algorithmTabPage.TabIndex = 4;
       this.algorithmTabPage.Text = "Algorithm";
@@ -168,5 +197,5 @@
       // 
       this.algorithmStartButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
-      this.algorithmStartButton.Location = new System.Drawing.Point(506, 5);
+      this.algorithmStartButton.Location = new System.Drawing.Point(649, 5);
       this.algorithmStartButton.Name = "algorithmStartButton";
       this.algorithmStartButton.Size = new System.Drawing.Size(26, 23);
@@ -187,5 +216,5 @@
       this.algorithmViewHost.Name = "algorithmViewHost";
       this.algorithmViewHost.ReadOnly = false;
-      this.algorithmViewHost.Size = new System.Drawing.Size(526, 264);
+      this.algorithmViewHost.Size = new System.Drawing.Size(669, 386);
       this.algorithmViewHost.TabIndex = 2;
       this.algorithmViewHost.ViewsLabelVisible = true;
@@ -209,5 +238,5 @@
       this.suggestedInstancesComboBox.Location = new System.Drawing.Point(178, 6);
       this.suggestedInstancesComboBox.Name = "suggestedInstancesComboBox";
-      this.suggestedInstancesComboBox.Size = new System.Drawing.Size(322, 21);
+      this.suggestedInstancesComboBox.Size = new System.Drawing.Size(465, 21);
       this.suggestedInstancesComboBox.TabIndex = 0;
       this.suggestedInstancesComboBox.SelectedIndexChanged += new System.EventHandler(this.SuggestedInstancesComboBoxOnSelectedIndexChanged);
@@ -219,5 +248,5 @@
       this.runsTabPage.Name = "runsTabPage";
       this.runsTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.runsTabPage.Size = new System.Drawing.Size(538, 306);
+      this.runsTabPage.Size = new System.Drawing.Size(681, 428);
       this.runsTabPage.TabIndex = 3;
       this.runsTabPage.Text = "Runs";
@@ -232,6 +261,223 @@
       this.runsView.Name = "runsView";
       this.runsView.ReadOnly = false;
-      this.runsView.Size = new System.Drawing.Size(532, 300);
+      this.runsView.Size = new System.Drawing.Size(675, 422);
       this.runsView.TabIndex = 1;
+      // 
+      // solutionsTabPage
+      // 
+      this.solutionsTabPage.Controls.Add(this.qualityNameLabel);
+      this.solutionsTabPage.Controls.Add(this.solutionDiversitySimilarityLabel);
+      this.solutionsTabPage.Controls.Add(this.solutionNameLabel);
+      this.solutionsTabPage.Controls.Add(this.similarityComboBox);
+      this.solutionsTabPage.Controls.Add(this.qualityNameComboBox);
+      this.solutionsTabPage.Controls.Add(this.solutionNameComboBox);
+      this.solutionsTabPage.Controls.Add(this.solutionsTabControl);
+      this.solutionsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.solutionsTabPage.Name = "solutionsTabPage";
+      this.solutionsTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.solutionsTabPage.Size = new System.Drawing.Size(681, 428);
+      this.solutionsTabPage.TabIndex = 7;
+      this.solutionsTabPage.Text = "Solutions";
+      this.solutionsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // qualityNameLabel
+      // 
+      this.qualityNameLabel.AutoSize = true;
+      this.qualityNameLabel.Location = new System.Drawing.Point(227, 9);
+      this.qualityNameLabel.Name = "qualityNameLabel";
+      this.qualityNameLabel.Size = new System.Drawing.Size(42, 13);
+      this.qualityNameLabel.TabIndex = 2;
+      this.qualityNameLabel.Text = "Quality:";
+      // 
+      // solutionDiversitySimilarityLabel
+      // 
+      this.solutionDiversitySimilarityLabel.AutoSize = true;
+      this.solutionDiversitySimilarityLabel.Location = new System.Drawing.Point(449, 9);
+      this.solutionDiversitySimilarityLabel.Name = "solutionDiversitySimilarityLabel";
+      this.solutionDiversitySimilarityLabel.Size = new System.Drawing.Size(50, 13);
+      this.solutionDiversitySimilarityLabel.TabIndex = 2;
+      this.solutionDiversitySimilarityLabel.Text = "Similarity:";
+      // 
+      // solutionNameLabel
+      // 
+      this.solutionNameLabel.AutoSize = true;
+      this.solutionNameLabel.Location = new System.Drawing.Point(6, 9);
+      this.solutionNameLabel.Name = "solutionNameLabel";
+      this.solutionNameLabel.Size = new System.Drawing.Size(48, 13);
+      this.solutionNameLabel.TabIndex = 2;
+      this.solutionNameLabel.Text = "Solution:";
+      // 
+      // similarityComboBox
+      // 
+      this.similarityComboBox.DisplayMember = "ItemName";
+      this.similarityComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.similarityComboBox.FormattingEnabled = true;
+      this.similarityComboBox.Location = new System.Drawing.Point(505, 6);
+      this.similarityComboBox.Name = "similarityComboBox";
+      this.similarityComboBox.Size = new System.Drawing.Size(150, 21);
+      this.similarityComboBox.TabIndex = 1;
+      this.similarityComboBox.SelectedIndexChanged += new System.EventHandler(this.similarityComboBox_SelectedIndexChanged);
+      // 
+      // qualityNameComboBox
+      // 
+      this.qualityNameComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.qualityNameComboBox.FormattingEnabled = true;
+      this.qualityNameComboBox.Location = new System.Drawing.Point(281, 6);
+      this.qualityNameComboBox.Name = "qualityNameComboBox";
+      this.qualityNameComboBox.Size = new System.Drawing.Size(150, 21);
+      this.qualityNameComboBox.TabIndex = 1;
+      this.qualityNameComboBox.SelectedIndexChanged += new System.EventHandler(this.qualityNameComboBox_SelectedIndexChanged);
+      // 
+      // solutionNameComboBox
+      // 
+      this.solutionNameComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.solutionNameComboBox.FormattingEnabled = true;
+      this.solutionNameComboBox.Location = new System.Drawing.Point(60, 6);
+      this.solutionNameComboBox.Name = "solutionNameComboBox";
+      this.solutionNameComboBox.Size = new System.Drawing.Size(150, 21);
+      this.solutionNameComboBox.TabIndex = 1;
+      this.solutionNameComboBox.SelectedIndexChanged += new System.EventHandler(this.solutionNameComboBox_SelectedIndexChanged);
+      // 
+      // solutionsTabControl
+      // 
+      this.solutionsTabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.solutionsTabControl.Controls.Add(this.solutionsListTabPage);
+      this.solutionsTabControl.Controls.Add(this.solutionsQualityTabPage);
+      this.solutionsTabControl.Controls.Add(this.solutionsDiversityTabPage);
+      this.solutionsTabControl.Controls.Add(this.solutionsFdcTabPage);
+      this.solutionsTabControl.Controls.Add(this.solutionsLengthScaleTabPage);
+      this.solutionsTabControl.Controls.Add(this.solutionsNetworkTabPage);
+      this.solutionsTabControl.Location = new System.Drawing.Point(3, 33);
+      this.solutionsTabControl.Name = "solutionsTabControl";
+      this.solutionsTabControl.SelectedIndex = 0;
+      this.solutionsTabControl.Size = new System.Drawing.Size(675, 392);
+      this.solutionsTabControl.TabIndex = 0;
+      // 
+      // solutionsListTabPage
+      // 
+      this.solutionsListTabPage.Controls.Add(this.solutionsViewHost);
+      this.solutionsListTabPage.Location = new System.Drawing.Point(4, 22);
+      this.solutionsListTabPage.Name = "solutionsListTabPage";
+      this.solutionsListTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.solutionsListTabPage.Size = new System.Drawing.Size(667, 366);
+      this.solutionsListTabPage.TabIndex = 0;
+      this.solutionsListTabPage.Text = "List";
+      this.solutionsListTabPage.UseVisualStyleBackColor = true;
+      // 
+      // solutionsViewHost
+      // 
+      this.solutionsViewHost.Caption = "View";
+      this.solutionsViewHost.Content = null;
+      this.solutionsViewHost.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.solutionsViewHost.Enabled = false;
+      this.solutionsViewHost.Location = new System.Drawing.Point(3, 3);
+      this.solutionsViewHost.Name = "solutionsViewHost";
+      this.solutionsViewHost.ReadOnly = false;
+      this.solutionsViewHost.Size = new System.Drawing.Size(661, 360);
+      this.solutionsViewHost.TabIndex = 0;
+      this.solutionsViewHost.ViewsLabelVisible = true;
+      this.solutionsViewHost.ViewType = null;
+      // 
+      // solutionsQualityTabPage
+      // 
+      this.solutionsQualityTabPage.Controls.Add(this.solutionsQualityViewHost);
+      this.solutionsQualityTabPage.Location = new System.Drawing.Point(4, 22);
+      this.solutionsQualityTabPage.Name = "solutionsQualityTabPage";
+      this.solutionsQualityTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.solutionsQualityTabPage.Size = new System.Drawing.Size(667, 366);
+      this.solutionsQualityTabPage.TabIndex = 1;
+      this.solutionsQualityTabPage.Text = "Quality Analysis";
+      this.solutionsQualityTabPage.UseVisualStyleBackColor = true;
+      // 
+      // solutionsQualityViewHost
+      // 
+      this.solutionsQualityViewHost.Caption = "View";
+      this.solutionsQualityViewHost.Content = null;
+      this.solutionsQualityViewHost.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.solutionsQualityViewHost.Enabled = false;
+      this.solutionsQualityViewHost.Location = new System.Drawing.Point(3, 3);
+      this.solutionsQualityViewHost.Name = "solutionsQualityViewHost";
+      this.solutionsQualityViewHost.ReadOnly = false;
+      this.solutionsQualityViewHost.Size = new System.Drawing.Size(661, 360);
+      this.solutionsQualityViewHost.TabIndex = 0;
+      this.solutionsQualityViewHost.ViewsLabelVisible = true;
+      this.solutionsQualityViewHost.ViewType = null;
+      // 
+      // solutionsDiversityTabPage
+      // 
+      this.solutionsDiversityTabPage.Controls.Add(this.solutionsDiversityViewHost);
+      this.solutionsDiversityTabPage.Location = new System.Drawing.Point(4, 22);
+      this.solutionsDiversityTabPage.Name = "solutionsDiversityTabPage";
+      this.solutionsDiversityTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.solutionsDiversityTabPage.Size = new System.Drawing.Size(667, 366);
+      this.solutionsDiversityTabPage.TabIndex = 2;
+      this.solutionsDiversityTabPage.Text = "Diversity Analysis";
+      this.solutionsDiversityTabPage.UseVisualStyleBackColor = true;
+      // 
+      // solutionsDiversityViewHost
+      // 
+      this.solutionsDiversityViewHost.Caption = "View";
+      this.solutionsDiversityViewHost.Content = null;
+      this.solutionsDiversityViewHost.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.solutionsDiversityViewHost.Enabled = false;
+      this.solutionsDiversityViewHost.Location = new System.Drawing.Point(3, 3);
+      this.solutionsDiversityViewHost.Name = "solutionsDiversityViewHost";
+      this.solutionsDiversityViewHost.ReadOnly = false;
+      this.solutionsDiversityViewHost.Size = new System.Drawing.Size(661, 360);
+      this.solutionsDiversityViewHost.TabIndex = 1;
+      this.solutionsDiversityViewHost.ViewsLabelVisible = true;
+      this.solutionsDiversityViewHost.ViewType = null;
+      // 
+      // solutionsLengthScaleTabPage
+      // 
+      this.solutionsLengthScaleTabPage.Controls.Add(this.solutionsLengthScaleViewHost);
+      this.solutionsLengthScaleTabPage.Location = new System.Drawing.Point(4, 22);
+      this.solutionsLengthScaleTabPage.Name = "solutionsLengthScaleTabPage";
+      this.solutionsLengthScaleTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.solutionsLengthScaleTabPage.Size = new System.Drawing.Size(667, 366);
+      this.solutionsLengthScaleTabPage.TabIndex = 3;
+      this.solutionsLengthScaleTabPage.Text = "Length-Scale Analysis";
+      this.solutionsLengthScaleTabPage.UseVisualStyleBackColor = true;
+      // 
+      // solutionsLengthScaleViewHost
+      // 
+      this.solutionsLengthScaleViewHost.Caption = "View";
+      this.solutionsLengthScaleViewHost.Content = null;
+      this.solutionsLengthScaleViewHost.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.solutionsLengthScaleViewHost.Enabled = false;
+      this.solutionsLengthScaleViewHost.Location = new System.Drawing.Point(3, 3);
+      this.solutionsLengthScaleViewHost.Name = "solutionsLengthScaleViewHost";
+      this.solutionsLengthScaleViewHost.ReadOnly = false;
+      this.solutionsLengthScaleViewHost.Size = new System.Drawing.Size(661, 360);
+      this.solutionsLengthScaleViewHost.TabIndex = 0;
+      this.solutionsLengthScaleViewHost.ViewsLabelVisible = true;
+      this.solutionsLengthScaleViewHost.ViewType = null;
+      // 
+      // solutionsNetworkTabPage
+      // 
+      this.solutionsNetworkTabPage.Controls.Add(this.solutionsNetworkViewHost);
+      this.solutionsNetworkTabPage.Location = new System.Drawing.Point(4, 22);
+      this.solutionsNetworkTabPage.Name = "solutionsNetworkTabPage";
+      this.solutionsNetworkTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.solutionsNetworkTabPage.Size = new System.Drawing.Size(667, 366);
+      this.solutionsNetworkTabPage.TabIndex = 4;
+      this.solutionsNetworkTabPage.Text = "Network Analysis";
+      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;
       // 
       // okbTabPage
@@ -241,5 +487,5 @@
       this.okbTabPage.Name = "okbTabPage";
       this.okbTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.okbTabPage.Size = new System.Drawing.Size(538, 306);
+      this.okbTabPage.Size = new System.Drawing.Size(681, 428);
       this.okbTabPage.TabIndex = 5;
       this.okbTabPage.Text = "Knowledge Base";
@@ -255,5 +501,5 @@
       this.kbViewHost.Name = "kbViewHost";
       this.kbViewHost.ReadOnly = true;
-      this.kbViewHost.Size = new System.Drawing.Size(532, 300);
+      this.kbViewHost.Size = new System.Drawing.Size(675, 422);
       this.kbViewHost.TabIndex = 3;
       this.kbViewHost.ViewsLabelVisible = true;
@@ -269,5 +515,5 @@
       this.problemInstancesTabPage.Name = "problemInstancesTabPage";
       this.problemInstancesTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.problemInstancesTabPage.Size = new System.Drawing.Size(538, 306);
+      this.problemInstancesTabPage.Size = new System.Drawing.Size(681, 428);
       this.problemInstancesTabPage.TabIndex = 6;
       this.problemInstancesTabPage.Text = "Problem Instances";
@@ -303,5 +549,5 @@
       this.problemInstancesTabControl.Name = "problemInstancesTabControl";
       this.problemInstancesTabControl.SelectedIndex = 0;
-      this.problemInstancesTabControl.Size = new System.Drawing.Size(532, 268);
+      this.problemInstancesTabControl.Size = new System.Drawing.Size(675, 390);
       this.problemInstancesTabControl.TabIndex = 4;
       // 
@@ -312,5 +558,5 @@
       this.instancesTabPage.Name = "instancesTabPage";
       this.instancesTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.instancesTabPage.Size = new System.Drawing.Size(524, 242);
+      this.instancesTabPage.Size = new System.Drawing.Size(667, 364);
       this.instancesTabPage.TabIndex = 0;
       this.instancesTabPage.Text = "Instances";
@@ -326,5 +572,5 @@
       this.problemInstancesView.Name = "problemInstancesView";
       this.problemInstancesView.ReadOnly = false;
-      this.problemInstancesView.Size = new System.Drawing.Size(518, 236);
+      this.problemInstancesView.Size = new System.Drawing.Size(661, 358);
       this.problemInstancesView.TabIndex = 0;
       this.problemInstancesView.ViewsLabelVisible = true;
@@ -337,5 +583,5 @@
       this.mapTabPage.Name = "mapTabPage";
       this.mapTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.mapTabPage.Size = new System.Drawing.Size(524, 242);
+      this.mapTabPage.Size = new System.Drawing.Size(667, 364);
       this.mapTabPage.TabIndex = 1;
       this.mapTabPage.Text = "Map";
@@ -371,5 +617,5 @@
       this.instanceMapChart.Series.Add(series1);
       this.instanceMapChart.Series.Add(series2);
-      this.instanceMapChart.Size = new System.Drawing.Size(518, 236);
+      this.instanceMapChart.Size = new System.Drawing.Size(661, 358);
       this.instanceMapChart.TabIndex = 0;
       // 
@@ -391,5 +637,5 @@
       this.progressPanel.Location = new System.Drawing.Point(0, 81);
       this.progressPanel.Name = "progressPanel";
-      this.progressPanel.Size = new System.Drawing.Size(549, 332);
+      this.progressPanel.Size = new System.Drawing.Size(692, 454);
       this.progressPanel.TabIndex = 2;
       this.progressPanel.Visible = false;
@@ -401,5 +647,5 @@
       this.okbDownloadButton.Location = new System.Drawing.Point(6, 52);
       this.okbDownloadButton.Name = "okbDownloadButton";
-      this.okbDownloadButton.Size = new System.Drawing.Size(518, 23);
+      this.okbDownloadButton.Size = new System.Drawing.Size(661, 23);
       this.okbDownloadButton.TabIndex = 1;
       this.okbDownloadButton.Text = "Download from OKB";
@@ -413,4 +659,29 @@
       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
@@ -423,5 +694,5 @@
       this.Controls.Add(this.progressPanel);
       this.Name = "ExpertSystemView";
-      this.Size = new System.Drawing.Size(549, 413);
+      this.Size = new System.Drawing.Size(692, 535);
       this.Controls.SetChildIndex(this.progressPanel, 0);
       this.Controls.SetChildIndex(this.maxEvaluationsTextBox, 0);
@@ -438,4 +709,12 @@
       this.algorithmTabPage.PerformLayout();
       this.runsTabPage.ResumeLayout(false);
+      this.solutionsTabPage.ResumeLayout(false);
+      this.solutionsTabPage.PerformLayout();
+      this.solutionsTabControl.ResumeLayout(false);
+      this.solutionsListTabPage.ResumeLayout(false);
+      this.solutionsQualityTabPage.ResumeLayout(false);
+      this.solutionsDiversityTabPage.ResumeLayout(false);
+      this.solutionsLengthScaleTabPage.ResumeLayout(false);
+      this.solutionsNetworkTabPage.ResumeLayout(false);
       this.okbTabPage.ResumeLayout(false);
       this.problemInstancesTabPage.ResumeLayout(false);
@@ -445,4 +724,5 @@
       this.mapTabPage.ResumeLayout(false);
       ((System.ComponentModel.ISupportInitialize)(this.instanceMapChart)).EndInit();
+      this.solutionsFdcTabPage.ResumeLayout(false);
       this.ResumeLayout(false);
       this.PerformLayout();
@@ -478,4 +758,24 @@
     private System.Windows.Forms.Label label1;
     private System.Windows.Forms.ComboBox projectionComboBox;
+    private System.Windows.Forms.TabPage solutionsTabPage;
+    private System.Windows.Forms.TabControl solutionsTabControl;
+    private System.Windows.Forms.TabPage solutionsListTabPage;
+    private System.Windows.Forms.TabPage solutionsQualityTabPage;
+    private System.Windows.Forms.TabPage solutionsDiversityTabPage;
+    private System.Windows.Forms.Label qualityNameLabel;
+    private System.Windows.Forms.Label solutionNameLabel;
+    private System.Windows.Forms.ComboBox qualityNameComboBox;
+    private System.Windows.Forms.ComboBox solutionNameComboBox;
+    private MainForm.WindowsForms.ViewHost solutionsQualityViewHost;
+    private MainForm.WindowsForms.ViewHost solutionsViewHost;
+    private MainForm.WindowsForms.ViewHost solutionsDiversityViewHost;
+    private System.Windows.Forms.Label solutionDiversitySimilarityLabel;
+    private System.Windows.Forms.ComboBox similarityComboBox;
+    private System.Windows.Forms.TabPage solutionsLengthScaleTabPage;
+    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;
   }
 }
Index: /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem.Views/3.3/ExpertSystemView.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem.Views/3.3/ExpertSystemView.cs	(revision 13662)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem.Views/3.3/ExpertSystemView.cs	(revision 13663)
@@ -20,10 +20,15 @@
 #endregion
 
+using HeuristicLab.Analysis;
+using HeuristicLab.Analysis.QualityAnalysis;
+using HeuristicLab.Common;
 using HeuristicLab.Common.Resources;
 using HeuristicLab.Core.Views;
+using HeuristicLab.Data;
 using HeuristicLab.MainForm;
 using HeuristicLab.Optimization;
 using HeuristicLab.Optimization.Views;
 using System;
+using System.Collections.Generic;
 using System.ComponentModel;
 using System.Linq;
@@ -70,4 +75,8 @@
       Content.SuggestedInstances.ItemsRemoved -= SuggestedInstancesOnChanged;
       Content.SuggestedInstances.ItemsReplaced -= SuggestedInstancesOnChanged;
+      Content.SolutionPool.ItemsAdded -= SolutionPoolOnChanged;
+      Content.SolutionPool.ItemsRemoved -= SolutionPoolOnChanged;
+      Content.SolutionPool.ItemsReplaced -= SolutionPoolOnChanged;
+      Content.SolutionPool.CollectionReset -= SolutionPoolOnChanged;
       if (Content.Problem != null) Content.Problem.ProblemChanged -= ContentOnProblemChanged;
       base.DeregisterContentEvents();
@@ -81,4 +90,8 @@
       Content.SuggestedInstances.ItemsRemoved += SuggestedInstancesOnChanged;
       Content.SuggestedInstances.ItemsReplaced += SuggestedInstancesOnChanged;
+      Content.SolutionPool.ItemsAdded += SolutionPoolOnChanged;
+      Content.SolutionPool.ItemsRemoved += SolutionPoolOnChanged;
+      Content.SolutionPool.ItemsReplaced += SolutionPoolOnChanged;
+      Content.SolutionPool.CollectionReset += SolutionPoolOnChanged;
       if (Content.Problem != null) Content.Problem.ProblemChanged += ContentOnProblemChanged;
     }
@@ -95,4 +108,5 @@
           algorithmViewHost.Content = null;
           runsView.Content = null;
+          solutionsViewHost.Content = null;
           kbViewHost.Content = null;
           problemInstancesView.Content = null;
@@ -101,4 +115,5 @@
           problemViewHost.Content = Content.Problem;
           runsView.Content = Content.Runs;
+          solutionsViewHost.Content = Content.SolutionPool;
           kbViewHost.ViewType = typeof(RunCollectionRLDView);
           kbViewHost.Content = Content.KnowledgeBase;
@@ -108,4 +123,6 @@
       } finally { SuppressEvents = false; }
       UpdateSuggestedInstancesCombobox();
+      UpdateNamesComboboxes();
+      UpdateSimilarityCalculators();
     }
 
@@ -140,8 +157,45 @@
     }
 
+    private void UpdateNamesComboboxes() {
+      var selectedSolutionName = solutionNameComboBox.SelectedIndex >= 0 ? (string)solutionNameComboBox.SelectedItem : string.Empty;
+      var selectedQualityName = qualityNameComboBox.SelectedIndex >= 0 ? (string)qualityNameComboBox.SelectedItem : string.Empty;
+
+      solutionNameComboBox.Items.Clear();
+      qualityNameComboBox.Items.Clear();
+      if (Content == null) return;
+      var qualityNames = new HashSet<string>(Content.SolutionPool.SelectMany(x => x.Variables).Where(x => x.Value is DoubleValue).Select(x => x.Name));
+      var solutionNames = Content.SolutionPool.SelectMany(x => x.Variables).Where(x => !qualityNames.Contains(x.Name));
+
+      foreach (var sn in solutionNames.GroupBy(x => x.Name).OrderBy(x => x.Key)) {
+        solutionNameComboBox.Items.Add(sn.Key);
+        // either it was previously selected, or the variable value is defined in the HeuristicLab.Encodings sub-namespace
+        if (sn.Key == selectedSolutionName || (string.IsNullOrEmpty(selectedSolutionName) && sn.All(x => x.Value != null && x.Value.GetType().FullName.StartsWith("HeuristicLab.Encodings."))))
+          solutionNameComboBox.SelectedItem = sn.Key;
+      }
+      foreach (var qn in qualityNames.OrderBy(x => x)) {
+        qualityNameComboBox.Items.Add(qn);
+        if (qn == selectedQualityName || string.IsNullOrEmpty(selectedQualityName)) qualityNameComboBox.SelectedItem = qn;
+      }
+    }
+
+    private void UpdateSimilarityCalculators() {
+      var selected = (ISolutionSimilarityCalculator)(similarityComboBox.SelectedIndex >= 0 ? similarityComboBox.SelectedItem : null);
+      similarityComboBox.Items.Clear();
+      
+      if (Content == null || Content.Problem == null) return;
+
+      foreach (var calc in Content.Problem.Operators.OfType<ISolutionSimilarityCalculator>()) {
+        similarityComboBox.Items.Add(calc);
+        if (selected != null && calc.ItemName == selected.ItemName) similarityComboBox.SelectedItem = calc;
+      }
+      if (selected == null && similarityComboBox.Items.Count > 0)
+        similarityComboBox.SelectedIndex = 0;
+    }
+
     #region Event Handlers
     #region Content events
     private void ContentOnProblemChanged(object sender, EventArgs eventArgs) {
       UpdateSuggestedInstancesCombobox();
+      UpdateSimilarityCalculators();
       SetEnabledStateOfControls();
     }
@@ -171,4 +225,18 @@
       UpdateSuggestedInstancesCombobox();
     }
+
+    private void SolutionPoolOnChanged(object sender, EventArgs e) {
+      UpdateNamesComboboxes();
+      if (qualityNameComboBox.SelectedIndex >= 0) {
+        var qualityName = (string)qualityNameComboBox.SelectedItem;
+        UpdateSolutionQualityAnalysis(qualityName);
+      }
+      if (similarityComboBox.SelectedIndex >= 0) {
+        var calculator = (ISolutionSimilarityCalculator)similarityComboBox.SelectedItem;
+        UpdateSolutionDiversityAnalysis(calculator);
+        UpdateSolutionFdcAnalysis(calculator);
+        UpdateSolutionLengthScaleAnalysis(calculator);
+      } else solutionsDiversityViewHost.Content = null;
+    }
     #endregion
 
@@ -217,5 +285,5 @@
       progress.ProgressStateChanged += OkbDownloadProgressOnStateChanged;
       Content.UpdateKnowledgeBaseAsync(progress);
-      MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>().AddOperationProgressToView(progressPanel, progress);
+      MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().AddOperationProgressToView(progressPanel, progress);
       progressPanel.Visible = true;
       SetEnabledStateOfControls();
@@ -268,7 +336,108 @@
     }
 
+    private void UpdateSolutionQualityAnalysis(string qualityName) {
+      var dt = solutionsQualityViewHost.Content as DataTable;
+      if (dt == null) {
+        dt = QualityDistributionAnalyzer.PrepareTable(qualityName);
+        solutionsQualityViewHost.Content = dt;
+      }
+      QualityDistributionAnalyzer.UpdateTable(dt, Content.SolutionPool.Where(x => x.Variables.ContainsKey(qualityName)).Select(x => x.Variables[qualityName].Value).OfType<DoubleValue>().Select(x => x.Value));
+    }
+
+    private void UpdateSolutionDiversityAnalysis(ISolutionSimilarityCalculator calculator) {
+      try {
+        solutionsDiversityViewHost.Content = null;
+        if (Content.SolutionPool == null) return;
+        var similarities = new double[Content.SolutionPool.Count, Content.SolutionPool.Count];
+        for (int i = 0; i < Content.SolutionPool.Count; i++) {
+          for (int j = 0; j < Content.SolutionPool.Count; j++)
+            similarities[i, j] = calculator.CalculateSolutionSimilarity(Content.SolutionPool[i], Content.SolutionPool[j]);
+        }
+        var hm = new HeatMap(similarities, "Solution Similarities", 0.0, 1.0);
+        solutionsDiversityViewHost.Content = hm;
+      } catch { }
+    }
+
+    private void UpdateSolutionFdcAnalysis(ISolutionSimilarityCalculator calculator) {
+      try {
+        solutionsFdcViewHost.Content = null;
+        if (Content.SolutionPool == null) return;
+        var points = new List<Point2D<double>>();
+        for (int i = 0; i < Content.SolutionPool.Count; i++) {
+          for (int j = 0; j < Content.SolutionPool.Count; j++) {
+            if (i == j) continue;
+            var qDiff = Math.Abs(((DoubleValue)Content.SolutionPool[i].Variables[calculator.QualityVariableName].Value).Value - ((DoubleValue)Content.SolutionPool[j].Variables[calculator.QualityVariableName].Value).Value);
+            points.Add(new Point2D<double>(qDiff, 1.0 - calculator.CalculateSolutionSimilarity(Content.SolutionPool[i], Content.SolutionPool[j])));
+          }
+        }
+        var splot = new ScatterPlot("Fitness-Distance", "");
+        var row = new ScatterPlotDataRow("Fdc", "", points);
+        row.VisualProperties.PointSize = 7;
+        splot.Rows.Add(row);
+        solutionsFdcViewHost.Content = splot;
+      } catch { }
+    }
+
+    private void UpdateSolutionLengthScaleAnalysis(ISolutionSimilarityCalculator calculator) {
+      try {
+        solutionsLengthScaleViewHost.Content = null;
+        if (Content.SolutionPool == null) return;
+        var dt = solutionsLengthScaleViewHost.Content as DataTable;
+        if (dt == null) {
+          dt = QualityDistributionAnalyzer.PrepareTable("Length Scale");
+          solutionsLengthScaleViewHost.Content = dt;
+        }
+
+        QualityDistributionAnalyzer.UpdateTable(dt, CalculateLengthScale(calculator));
+      } catch { }
+    }
+
+    private IEnumerable<double> CalculateLengthScale(ISolutionSimilarityCalculator calculator) {
+      for (int i = 0; i < Content.SolutionPool.Count; i++) {
+        for (int j = 0; j < Content.SolutionPool.Count; j++) {
+          if (i == j) continue;
+          var sim = calculator.CalculateSolutionSimilarity(Content.SolutionPool[i], Content.SolutionPool[j]);
+          if (sim.IsAlmost(0)) continue;
+          var qDiff = Math.Abs(((DoubleValue)Content.SolutionPool[i].Variables[calculator.QualityVariableName].Value).Value - ((DoubleValue)Content.SolutionPool[j].Variables[calculator.QualityVariableName].Value).Value);
+          yield return qDiff / sim;
+        }
+      }
+    }
+
     private void SuggestedInstancesComboBoxOnSelectedIndexChanged(object sender, EventArgs e) {
       SetEnabledStateOfControls();
     }
+
+    private void qualityNameComboBox_SelectedIndexChanged(object sender, EventArgs e) {
+      if (qualityNameComboBox.SelectedIndex < 0) return;
+      solutionsQualityViewHost.Content = null;
+      solutionsDiversityViewHost.Content = null;
+      var qualityName = (string)qualityNameComboBox.SelectedItem;
+      UpdateSolutionQualityAnalysis(qualityName);
+      var calculator = (ISolutionSimilarityCalculator)similarityComboBox.SelectedItem;
+      if (calculator != null) calculator.QualityVariableName = qualityName;
+      UpdateSolutionDiversityAnalysis(calculator);
+      UpdateSolutionFdcAnalysis(calculator);
+      UpdateSolutionLengthScaleAnalysis(calculator);
+    }
+
+    private void solutionNameComboBox_SelectedIndexChanged(object sender, EventArgs e) {
+      var calculator = (ISolutionSimilarityCalculator)similarityComboBox.SelectedItem;
+      if (calculator != null) calculator.SolutionVariableName = (string)solutionNameComboBox.SelectedItem;
+      UpdateSolutionDiversityAnalysis(calculator);
+      UpdateSolutionFdcAnalysis(calculator);
+      UpdateSolutionLengthScaleAnalysis(calculator);
+    }
+
+    private void similarityComboBox_SelectedIndexChanged(object sender, EventArgs e) {
+      var calculator = (ISolutionSimilarityCalculator)similarityComboBox.SelectedItem;
+      if (calculator != null) {
+        calculator.SolutionVariableName = (string)solutionNameComboBox.SelectedItem;
+        calculator.QualityVariableName = (string)qualityNameComboBox.SelectedItem;
+      }
+      UpdateSolutionDiversityAnalysis(calculator);
+      UpdateSolutionFdcAnalysis(calculator);
+      UpdateSolutionLengthScaleAnalysis(calculator);
+    }
   }
 }
Index: /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem.Views/3.3/HeuristicLab.OptimizationExpertSystem.Views-3.3.csproj
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem.Views/3.3/HeuristicLab.OptimizationExpertSystem.Views-3.3.csproj	(revision 13662)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem.Views/3.3/HeuristicLab.OptimizationExpertSystem.Views-3.3.csproj	(revision 13663)
@@ -126,4 +126,9 @@
       <SpecificVersion>False</SpecificVersion>
       <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.MainForm.WindowsForms-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Operators-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Operators-3.3.dll</HintPath>
       <Private>False</Private>
     </Reference>
Index: /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/ExpertSystem.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/ExpertSystem.cs	(revision 13662)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/ExpertSystem.cs	(revision 13663)
@@ -41,5 +41,5 @@
 using SingleObjectiveOKBProblem = HeuristicLab.Clients.OKB.RunCreation.SingleObjectiveOKBProblem;
 
-namespace HeuristicLab.OptimizationExpertSystem {
+namespace HeuristicLab.OptimizationExpertSystem.Common {
   [Item("Expert-System", "Currently in experimental phase, an expert system that makes algorithm suggestions based on fitness landscape analysis features and an optimization knowledge base.")]
   [StorableClass]
@@ -123,4 +123,17 @@
     }
 
+    [Storable(Name = "solutionPool")]
+    private ItemList<IScope> oldBackwardsCompatible;
+    [Storable(Name = "newSolutionPool")]
+    private CheckedItemList<IScope> solutionPool;
+    public CheckedItemList<IScope> SolutionPool {
+      get { return solutionPool; }
+      set {
+        if (solutionPool == value) return;
+        solutionPool = value;
+        OnPropertyChanged("SolutionPool");
+      }
+    }
+    
     [Storable]
     private BidirectionalLookup<long, IRun> algorithmId2RunMapping;
@@ -155,4 +168,6 @@
         algorithmId2AlgorithmInstanceMapping.Add(kvp.Key, cloner.Clone(kvp.Value));
       }
+      currentResult = cloner.Clone(original.currentResult);
+      solutionPool = cloner.Clone(original.solutionPool);
       currentInstance = cloner.Clone(original.currentInstance);
       RegisterEventHandlers();
@@ -167,4 +182,5 @@
       problemInstances = new RunCollection();
       problem = new SingleObjectiveOKBProblem();
+      solutionPool = new CheckedItemList<IScope>();
       algorithmId2RunMapping = new BidirectionalLookup<long, IRun>();
       algorithmId2AlgorithmInstanceMapping = new BidirectionalDictionary<long, IAlgorithm>();
@@ -183,4 +199,9 @@
     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();
     }
@@ -395,4 +416,8 @@
         alg.ExceptionOccurred -= AlgorithmOnExceptionOccurred;
         alg.ExecutionTimeChanged -= AlgorithmOnExecutionTimeChanged;
+        foreach (var solution in alg.Results.Where(x => x.Name.ToLower().Contains("solution")).Select(x => x.Value).OfType<IScope>()) {
+          solutionPool.Add(solution);
+        }
+        Runs.Add(alg.Runs.Last());
         if (algWh != null) algWh.Set();
       }
Index: anches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/HeuristicLab.OptimizationExpertSystem-3.3.csproj
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/HeuristicLab.OptimizationExpertSystem-3.3.csproj	(revision 13662)
+++ 	(revision )
@@ -1,180 +1,0 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{492CC257-E27C-4497-B2C1-09C45310C91C}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>HeuristicLab.OptimizationExpertSystem</RootNamespace>
-    <AssemblyName>HeuristicLab.OptimizationExpertSystem-3.3</AssemblyName>
-    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
-    <FileAlignment>512</FileAlignment>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <DebugType>pdbonly</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-  </PropertyGroup>
-  <PropertyGroup>
-    <SignAssembly>true</SignAssembly>
-  </PropertyGroup>
-  <PropertyGroup>
-    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
-    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x86</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
-    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x86</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="ALGLIB-3.7.0, Version=3.7.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\..\..\..\trunk\sources\bin\ALGLIB-3.7.0.dll</HintPath>
-      <Private>False</Private>
-    </Reference>
-    <Reference Include="HeuristicLab.Clients.OKB-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Clients.OKB-3.3.dll</HintPath>
-      <Private>False</Private>
-    </Reference>
-    <Reference Include="HeuristicLab.Collections-3.3">
-      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Collections-3.3.dll</HintPath>
-      <Private>False</Private>
-    </Reference>
-    <Reference Include="HeuristicLab.Common-3.3">
-      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Common-3.3.dll</HintPath>
-      <Private>False</Private>
-    </Reference>
-    <Reference Include="HeuristicLab.Common.Resources-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Common.Resources-3.3.dll</HintPath>
-      <Private>False</Private>
-    </Reference>
-    <Reference Include="HeuristicLab.Core-3.3">
-      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Core-3.3.dll</HintPath>
-      <Private>False</Private>
-    </Reference>
-    <Reference Include="HeuristicLab.Data-3.3">
-      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Data-3.3.dll</HintPath>
-      <Private>False</Private>
-    </Reference>
-    <Reference Include="HeuristicLab.MainForm-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.MainForm-3.3.dll</HintPath>
-      <Private>False</Private>
-    </Reference>
-    <Reference Include="HeuristicLab.Persistence-3.3">
-      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Persistence-3.3.dll</HintPath>
-      <Private>False</Private>
-    </Reference>
-    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
-      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
-      <Private>False</Private>
-    </Reference>
-    <Reference Include="HeuristicLab.Problems.Instances-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Instances-3.3.dll</HintPath>
-      <Private>False</Private>
-    </Reference>
-    <Reference Include="HeuristicLab.Problems.QuadraticAssignment-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.QuadraticAssignment-3.3.dll</HintPath>
-      <Private>False</Private>
-    </Reference>
-    <Reference Include="System" />
-    <Reference Include="System.Core" />
-    <Reference Include="System.Drawing" />
-    <Reference Include="System.Runtime.Serialization" />
-    <Reference Include="System.Xml.Linq" />
-    <Reference Include="System.Data.DataSetExtensions" />
-    <Reference Include="Microsoft.CSharp" />
-    <Reference Include="System.Data" />
-    <Reference Include="System.Xml" />
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="ExpertSystem.cs" />
-    <Compile Include="Plugin.cs" />
-    <None Include="Properties\AssemblyInfo.cs.frame" />
-    <Compile Include="ProblemCharacteristicAnalysis\CharacteristicCalculator.cs" />
-    <Compile Include="ProblemCharacteristicAnalysis\DoubleMatrixCharacteristicCalculator.cs" />
-    <Compile Include="ProblemCharacteristicAnalysis\QAP\QAPCharacteristicCalculator.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="HeuristicLab.snk" />
-    <None Include="Plugin.cs.frame" />
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="..\..\HeuristicLab.Analysis\3.3\HeuristicLab.Analysis-3.3.csproj">
-      <Project>{887425b4-4348-49ed-a457-b7d2c26ddbf9}</Project>
-      <Name>HeuristicLab.Analysis-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.Optimization\3.3\HeuristicLab.Optimization-3.3.csproj">
-      <Project>{14ab8d24-25bc-400c-a846-4627aa945192}</Project>
-      <Name>HeuristicLab.Optimization-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
-  <PropertyGroup>
-    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
-set ProjectDir=$(ProjectDir)
-set SolutionDir=$(SolutionDir)
-set Outdir=$(Outdir)
-
-call PreBuildEvent.cmd</PreBuildEvent>
-  </PropertyGroup>
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
-       Other similar extension points exist, see Microsoft.Common.targets.
-  <Target Name="BeforeBuild">
-  </Target>
-  <Target Name="AfterBuild">
-  </Target>
-  -->
-</Project>
Index: /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/HeuristicLab.OptimizationExpertSystem.Common-3.3.csproj
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/HeuristicLab.OptimizationExpertSystem.Common-3.3.csproj	(revision 13663)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/HeuristicLab.OptimizationExpertSystem.Common-3.3.csproj	(revision 13663)
@@ -0,0 +1,180 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{492CC257-E27C-4497-B2C1-09C45310C91C}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.OptimizationExpertSystem.Common</RootNamespace>
+    <AssemblyName>HeuristicLab.OptimizationExpertSystem.Common-3.3</AssemblyName>
+    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="ALGLIB-3.7.0, Version=3.7.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\ALGLIB-3.7.0.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Clients.OKB-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Clients.OKB-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Collections-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Collections-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Common-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Common-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Common.Resources-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Common.Resources-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Core-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Data-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Data-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.MainForm-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.MainForm-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Persistence-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Persistence-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Problems.Instances-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Instances-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Problems.QuadraticAssignment-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.QuadraticAssignment-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Runtime.Serialization" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="ExpertSystem.cs" />
+    <Compile Include="Plugin.cs" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+    <Compile Include="ProblemCharacteristicAnalysis\CharacteristicCalculator.cs" />
+    <Compile Include="ProblemCharacteristicAnalysis\DoubleMatrixCharacteristicCalculator.cs" />
+    <Compile Include="ProblemCharacteristicAnalysis\QAP\QAPCharacteristicCalculator.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Plugin.cs.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Analysis\3.3\HeuristicLab.Analysis-3.3.csproj">
+      <Project>{887425b4-4348-49ed-a457-b7d2c26ddbf9}</Project>
+      <Name>HeuristicLab.Analysis-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Optimization\3.3\HeuristicLab.Optimization-3.3.csproj">
+      <Project>{14ab8d24-25bc-400c-a846-4627aa945192}</Project>
+      <Name>HeuristicLab.Optimization-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Plugin.cs.frame
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Plugin.cs.frame	(revision 13662)
+++ /branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/Plugin.cs.frame	(revision 13663)
@@ -1,5 +1,5 @@
 #region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -22,10 +22,10 @@
 using HeuristicLab.PluginInfrastructure;
 
-namespace HeuristicLab.OptimizationExpertSystem {
+namespace HeuristicLab.OptimizationExpertSystem.Common {
   /// <summary>
   /// Plugin class for HeuristicLab.OptimizationExpertSystem plugin.
   /// </summary>
-  [Plugin("HeuristicLab.OptimizationExpertSystem", "3.3.12.$WCREV$")]
-  [PluginFile("HeuristicLab.OptimizationExpertSystem-3.3.dll", PluginFileType.Assembly)]
+  [Plugin("HeuristicLab.OptimizationExpertSystem.Common", "3.3.12.$WCREV$")]
+  [PluginFile("HeuristicLab.OptimizationExpertSystem.Common-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Analysis", "3.3")]
   [PluginDependency("HeuristicLab.Collections", "3.3")]
