Index: /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding.Views/3.3/CreateExperimentDialogV2.Designer.cs
===================================================================
--- /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding.Views/3.3/CreateExperimentDialogV2.Designer.cs	(revision 8523)
+++ /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding.Views/3.3/CreateExperimentDialogV2.Designer.cs	(revision 8524)
@@ -1,3 +1,24 @@
-﻿namespace HeuristicLab.Encodings.ParameterConfigurationEncoding.Views {
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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
+
+namespace HeuristicLab.Encodings.ParameterConfigurationEncoding.Views {
   partial class CreateExperimentDialogV2 {
     /// <summary>
@@ -39,8 +60,18 @@
       this.combinationsLabel = new System.Windows.Forms.Label();
       this.combinationsTextBox = new System.Windows.Forms.TextBox();
+      this.configurationTabControl = new System.Windows.Forms.TabControl();
+      this.parameterConfigurationTabPage = new System.Windows.Forms.TabPage();
+      this.problemInstancesTabPage = new System.Windows.Forms.TabPage();
+      this.instanceTreeView = new System.Windows.Forms.TreeView();
+      this.libraryLabel = new System.Windows.Forms.Label();
+      this.libraryComboBox = new System.Windows.Forms.ComboBox();
+      this.instanceDiscoveryBackgroundWorker = new System.ComponentModel.BackgroundWorker();
       this.parameterConfigurationTreeView = new HeuristicLab.Encodings.ParameterConfigurationEncoding.Views.ParameterConfigurationTreeView();
       ((System.ComponentModel.ISupportInitialize)(this.repetitionsNumericUpDown)).BeginInit();
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
       ((System.ComponentModel.ISupportInitialize)(this.warningProvider)).BeginInit();
+      this.configurationTabControl.SuspendLayout();
+      this.parameterConfigurationTabPage.SuspendLayout();
+      this.problemInstancesTabPage.SuspendLayout();
       this.SuspendLayout();
       // 
@@ -188,4 +219,80 @@
       this.combinationsTextBox.TabIndex = 11;
       // 
+      // configurationTabControl
+      // 
+      this.configurationTabControl.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.configurationTabControl.Controls.Add(this.parameterConfigurationTabPage);
+      this.configurationTabControl.Controls.Add(this.problemInstancesTabPage);
+      this.configurationTabControl.Location = new System.Drawing.Point(12, 81);
+      this.configurationTabControl.Name = "configurationTabControl";
+      this.configurationTabControl.SelectedIndex = 0;
+      this.configurationTabControl.Size = new System.Drawing.Size(960, 470);
+      this.configurationTabControl.TabIndex = 12;
+      this.configurationTabControl.SelectedIndexChanged += new System.EventHandler(this.configurationTabControl_SelectedIndexChanged);
+      // 
+      // parameterConfigurationTabPage
+      // 
+      this.parameterConfigurationTabPage.Controls.Add(this.parameterConfigurationTreeView);
+      this.parameterConfigurationTabPage.Location = new System.Drawing.Point(4, 22);
+      this.parameterConfigurationTabPage.Name = "parameterConfigurationTabPage";
+      this.parameterConfigurationTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.parameterConfigurationTabPage.Size = new System.Drawing.Size(952, 444);
+      this.parameterConfigurationTabPage.TabIndex = 0;
+      this.parameterConfigurationTabPage.Text = "Parameter Configuration";
+      this.parameterConfigurationTabPage.UseVisualStyleBackColor = true;
+      // 
+      // problemInstancesTabPage
+      // 
+      this.problemInstancesTabPage.Controls.Add(this.instanceTreeView);
+      this.problemInstancesTabPage.Controls.Add(this.libraryLabel);
+      this.problemInstancesTabPage.Controls.Add(this.libraryComboBox);
+      this.problemInstancesTabPage.Location = new System.Drawing.Point(4, 22);
+      this.problemInstancesTabPage.Name = "problemInstancesTabPage";
+      this.problemInstancesTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.problemInstancesTabPage.Size = new System.Drawing.Size(952, 444);
+      this.problemInstancesTabPage.TabIndex = 1;
+      this.problemInstancesTabPage.Text = "Problem Instances";
+      this.problemInstancesTabPage.UseVisualStyleBackColor = true;
+      // 
+      // instanceTreeView
+      // 
+      this.instanceTreeView.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.instanceTreeView.CheckBoxes = true;
+      this.instanceTreeView.Location = new System.Drawing.Point(6, 33);
+      this.instanceTreeView.Name = "instanceTreeView";
+      this.instanceTreeView.Size = new System.Drawing.Size(940, 405);
+      this.instanceTreeView.TabIndex = 2;
+      this.instanceTreeView.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.instanceTreeView_AfterCheck);
+      // 
+      // libraryLabel
+      // 
+      this.libraryLabel.AutoSize = true;
+      this.libraryLabel.Location = new System.Drawing.Point(6, 9);
+      this.libraryLabel.Name = "libraryLabel";
+      this.libraryLabel.Size = new System.Drawing.Size(41, 13);
+      this.libraryLabel.TabIndex = 1;
+      this.libraryLabel.Text = "Library:";
+      // 
+      // libraryComboBox
+      // 
+      this.libraryComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.libraryComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.libraryComboBox.FormattingEnabled = true;
+      this.libraryComboBox.Location = new System.Drawing.Point(53, 6);
+      this.libraryComboBox.Name = "libraryComboBox";
+      this.libraryComboBox.Size = new System.Drawing.Size(893, 21);
+      this.libraryComboBox.TabIndex = 0;
+      this.libraryComboBox.SelectedIndexChanged += new System.EventHandler(this.libraryComboBox_SelectedIndexChanged);
+      // 
+      // instanceDiscoveryBackgroundWorker
+      // 
+      this.instanceDiscoveryBackgroundWorker.DoWork += new System.ComponentModel.DoWorkEventHandler(this.instanceDiscoveryBackgroundWorker_DoWork);
+      this.instanceDiscoveryBackgroundWorker.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.instanceDiscoveryBackgroundWorker_RunWorkerCompleted);
+      // 
       // parameterConfigurationTreeView
       // 
@@ -195,8 +302,8 @@
       this.parameterConfigurationTreeView.Caption = "ParameterConfiguration View";
       this.parameterConfigurationTreeView.Content = null;
-      this.parameterConfigurationTreeView.Location = new System.Drawing.Point(12, 81);
+      this.parameterConfigurationTreeView.Location = new System.Drawing.Point(6, 6);
       this.parameterConfigurationTreeView.Name = "parameterConfigurationTreeView";
       this.parameterConfigurationTreeView.ReadOnly = false;
-      this.parameterConfigurationTreeView.Size = new System.Drawing.Size(960, 470);
+      this.parameterConfigurationTreeView.Size = new System.Drawing.Size(940, 432);
       this.parameterConfigurationTreeView.TabIndex = 6;
       // 
@@ -205,4 +312,5 @@
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
       this.ClientSize = new System.Drawing.Size(984, 592);
+      this.Controls.Add(this.configurationTabControl);
       this.Controls.Add(this.combinationsTextBox);
       this.Controls.Add(this.combinationsLabel);
@@ -210,5 +318,4 @@
       this.Controls.Add(this.cancelButton);
       this.Controls.Add(this.okButton);
-      this.Controls.Add(this.parameterConfigurationTreeView);
       this.Controls.Add(this.engineLabel);
       this.Controls.Add(this.engineComboBox);
@@ -229,4 +336,8 @@
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
       ((System.ComponentModel.ISupportInitialize)(this.warningProvider)).EndInit();
+      this.configurationTabControl.ResumeLayout(false);
+      this.parameterConfigurationTabPage.ResumeLayout(false);
+      this.problemInstancesTabPage.ResumeLayout(false);
+      this.problemInstancesTabPage.PerformLayout();
       this.ResumeLayout(false);
       this.PerformLayout();
@@ -251,4 +362,11 @@
     private System.Windows.Forms.Label combinationsLabel;
     private System.Windows.Forms.Button calculateCombinationsButton;
+    private System.Windows.Forms.TabControl configurationTabControl;
+    private System.Windows.Forms.TabPage parameterConfigurationTabPage;
+    private System.Windows.Forms.TabPage problemInstancesTabPage;
+    private System.Windows.Forms.TreeView instanceTreeView;
+    private System.Windows.Forms.Label libraryLabel;
+    private System.Windows.Forms.ComboBox libraryComboBox;
+    private System.ComponentModel.BackgroundWorker instanceDiscoveryBackgroundWorker;
   }
 }
Index: /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding.Views/3.3/CreateExperimentDialogV2.cs
===================================================================
--- /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding.Views/3.3/CreateExperimentDialogV2.cs	(revision 8523)
+++ /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding.Views/3.3/CreateExperimentDialogV2.cs	(revision 8524)
@@ -22,4 +22,6 @@
 using System;
 using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
 using System.Threading;
 using System.Threading.Tasks;
@@ -30,4 +32,5 @@
 using HeuristicLab.Optimization;
 using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Problems.Instances;
 
 namespace HeuristicLab.Encodings.ParameterConfigurationEncoding.Views {
@@ -41,4 +44,6 @@
     private Task generation;
     private CancellationTokenSource cts;
+    private Dictionary<IProblemInstanceProvider, HashSet<IDataDescriptor>> problemInstanceProviders;
+    private Dictionary<IProblemInstanceProvider, HashSet<IDataDescriptor>> selectedProblemInstanceProviders;
 
     public Experiment Experiment { get; private set; }
@@ -57,4 +62,5 @@
       createBatchRun = createBatchRunCheckBox.Checked;
       repetitions = (int)repetitionsNumericUpDown.Value;
+      selectedProblemInstanceProviders = new Dictionary<IProblemInstanceProvider, HashSet<IDataDescriptor>>();
       progress = new Progress {
         CanBeCanceled = true,
@@ -66,48 +72,21 @@
     }
 
-    private void SetEnabledStateOfControls(bool state) {
-      createBatchRunCheckBox.Enabled = state;
-      repetitionsNumericUpDown.Enabled = state;
-      engineComboBox.Enabled = state;
-      okButton.Enabled = state;
-      cancelButton.Enabled = state;
-    }
-
-    private void StartProgressView() {
-      if (InvokeRequired) {
-        Invoke(new Action(StartProgressView));
-      } else {
-        SetEnabledStateOfControls(false);
-        progress.ProgressValue = 0;
-        progress.ProgressState = ProgressState.Started;
-      }
-    }
-
-    private void FinishProgressView() {
-      if (InvokeRequired) {
-        Invoke(new Action(FinishProgressView));
-      } else {
-        progress.Finish();
-        SetEnabledStateOfControls(true);
-      }
-    }
-
-    private void CloseDialog() {
-      if (InvokeRequired) {
-        Invoke(new Action(CloseDialog));
-      } else {
-        this.DialogResult = DialogResult.OK;
-        this.Close();
-      }
-    }
-
-    private void ReportError(Exception e) {
-      if (InvokeRequired) {
-        Invoke(new Action<Exception>(ReportError), e);
-      } else {
-        ErrorHandling.ShowErrorDialog(this, "An error occurred generating the experiment.", e);
-      }
-    }
-
+    #region Background worker
+    private void instanceDiscoveryBackgroundWorker_DoWork(object sender, DoWorkEventArgs e) {
+      var instanceProviders = new Dictionary<IProblemInstanceProvider, HashSet<IDataDescriptor>>();
+      foreach (var provider in ProblemInstanceManager.GetProviders(algorithm.Problem))
+        instanceProviders[provider] = new HashSet<IDataDescriptor>(ProblemInstanceManager.GetDataDescriptors(provider));
+      e.Result = instanceProviders;
+    }
+
+    private void instanceDiscoveryBackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
+      problemInstanceProviders = (Dictionary<IProblemInstanceProvider, HashSet<IDataDescriptor>>)e.Result;
+      libraryComboBox.DisplayMember = "Name";
+      libraryComboBox.DataSource = problemInstanceProviders.Keys.ToList();
+      libraryComboBox.Enabled = true;
+    }
+    #endregion
+
+    #region Events
     private void CreateExperimentDialogV2_Load(object sender, System.EventArgs e) {
       if (algorithm.Problem != null) {
@@ -115,4 +94,7 @@
         parameterConfigurationTree.ExperimentGenerationProgressChanged += (o, args) => progress.ProgressValue = parameterConfigurationTree.ExperimentGenerationProgress;
         new ProgressView(parameterConfigurationTreeView, progress) { CancelTimeoutMs = 10000 };
+      } else {
+        configurationTabControl.TabPages.Remove(problemInstancesTabPage);
+        SetEnabledStateOfControls(false);
       }
     }
@@ -136,9 +118,57 @@
     }
 
+    private void configurationTabControl_SelectedIndexChanged(object sender, EventArgs e) {
+      if (configurationTabControl.SelectedTab == problemInstancesTabPage && problemInstanceProviders == null) {
+        libraryComboBox.Enabled = false;
+        instanceDiscoveryBackgroundWorker.RunWorkerAsync();
+      }
+    }
+
+    private void libraryComboBox_SelectedIndexChanged(object sender, EventArgs e) {
+      UpdateTreeView((IProblemInstanceProvider)libraryComboBox.SelectedItem);
+    }
+
+    private void instanceTreeView_AfterCheck(object sender, TreeViewEventArgs e) {
+      if (e.Action != TreeViewAction.Unknown) {
+        var provider = e.Node.Tag as IProblemInstanceProvider;
+        if (provider != null) {
+          if (e.Node.Checked) {
+            if (!selectedProblemInstanceProviders.ContainsKey(provider))
+              selectedProblemInstanceProviders[provider] = new HashSet<IDataDescriptor>();
+            foreach (TreeNode node in e.Node.Nodes) {
+              selectedProblemInstanceProviders[provider].Add((IDataDescriptor)node.Tag);
+              node.Checked = e.Node.Checked;
+            }
+          } else {
+            selectedProblemInstanceProviders[provider].Clear();
+            foreach (TreeNode node in e.Node.Nodes) {
+              node.Checked = e.Node.Checked;
+            }
+          }
+        } else {
+          provider = (IProblemInstanceProvider)e.Node.Parent.Tag;
+          if (!selectedProblemInstanceProviders.ContainsKey(provider))
+            selectedProblemInstanceProviders[provider] = new HashSet<IDataDescriptor>();
+          if (e.Node.Checked) {
+            selectedProblemInstanceProviders[provider].Add((IDataDescriptor)e.Node.Tag);
+            var instances = new TreeNode[e.Node.Parent.Nodes.Count];
+            e.Node.Parent.Nodes.CopyTo(instances, 0);
+            e.Node.Parent.Checked = instances.All(x => x.Checked);
+          } else {
+            selectedProblemInstanceProviders[provider].Remove((IDataDescriptor)e.Node.Tag);
+            e.Node.Parent.Checked = e.Node.Checked;
+          }
+        }
+      }
+    }
+
     private void calculateCombinationsButton_Click(object sender, EventArgs e) {
-      combinationsTextBox.Text = parameterConfigurationTree.GetCombinationCount(0).ToString();
+      long parameterConfigurationsCnt = parameterConfigurationTree.GetCombinationCount(0);
+      int problemInstanceCnt = 1 + selectedProblemInstanceProviders.Values.Sum(x => x.Count);
+      combinationsTextBox.Text = (parameterConfigurationsCnt * problemInstanceCnt).ToString();
     }
 
     private void okButton_Click(object sender, System.EventArgs e) {
+      configurationTabControl.SelectedTab = parameterConfigurationTabPage;
       generation = Task.Factory.StartNew(() => {
         StartProgressView();
@@ -146,6 +176,6 @@
         if (engineAlgorithm != null) engineAlgorithm.Engine = engine;
         try {
-          Experiment = createBatchRun ? parameterConfigurationTree.GenerateExperiment(engineAlgorithm, true, repetitions, cts.Token)
-                                      : parameterConfigurationTree.GenerateExperiment(engineAlgorithm, false, 0, cts.Token);
+          Experiment = createBatchRun ? parameterConfigurationTree.GenerateExperiment(engineAlgorithm, true, repetitions, selectedProblemInstanceProviders, cts.Token)
+                                      : parameterConfigurationTree.GenerateExperiment(engineAlgorithm, false, 0, selectedProblemInstanceProviders, cts.Token);
         }
         finally { FinishProgressView(); }
@@ -164,4 +194,70 @@
       }, TaskContinuationOptions.NotOnRanToCompletion);
     }
+    #endregion
+
+    #region Helpers
+    private void SetEnabledStateOfControls(bool state) {
+      createBatchRunCheckBox.Enabled = state;
+      repetitionsNumericUpDown.Enabled = state;
+      engineComboBox.Enabled = state;
+      calculateCombinationsButton.Enabled = state;
+      okButton.Enabled = state;
+      cancelButton.Enabled = state;
+    }
+
+    private void UpdateTreeView(IProblemInstanceProvider provider) {
+      instanceTreeView.Nodes.Clear();
+      var rootNode = new TreeNode("All") { Tag = provider };
+      TreeNode[] instances = problemInstanceProviders[provider]
+                              .Select(x => new TreeNode(x.Name) {
+                                Tag = x,
+                                Checked = selectedProblemInstanceProviders.ContainsKey(provider)
+                                          && selectedProblemInstanceProviders[provider].Contains(x)
+                              })
+                              .ToArray();
+      rootNode.Checked = instances.All(x => x.Checked);
+      rootNode.Nodes.AddRange(instances);
+      rootNode.ExpandAll();
+      instanceTreeView.Nodes.Add(rootNode);
+    }
+
+    private void StartProgressView() {
+      if (InvokeRequired) {
+        Invoke(new Action(StartProgressView));
+      } else {
+        SetEnabledStateOfControls(false);
+        problemInstancesTabPage.Enabled = false;
+        progress.ProgressValue = 0;
+        progress.ProgressState = ProgressState.Started;
+      }
+    }
+
+    private void FinishProgressView() {
+      if (InvokeRequired) {
+        Invoke(new Action(FinishProgressView));
+      } else {
+        progress.Finish();
+        problemInstancesTabPage.Enabled = true;
+        SetEnabledStateOfControls(true);
+      }
+    }
+
+    private void ReportError(Exception e) {
+      if (InvokeRequired) {
+        Invoke(new Action<Exception>(ReportError), e);
+      } else {
+        ErrorHandling.ShowErrorDialog(this, "An error occurred generating the experiment.", e);
+      }
+    }
+
+    private void CloseDialog() {
+      if (InvokeRequired) {
+        Invoke(new Action(CloseDialog));
+      } else {
+        this.DialogResult = DialogResult.OK;
+        this.Close();
+      }
+    }
+    #endregion
   }
 }
Index: /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding.Views/3.3/HeuristicLab.Encodings.ParameterConfigurationEncoding.Views-3.3.csproj
===================================================================
--- /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding.Views/3.3/HeuristicLab.Encodings.ParameterConfigurationEncoding.Views-3.3.csproj	(revision 8523)
+++ /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding.Views/3.3/HeuristicLab.Encodings.ParameterConfigurationEncoding.Views-3.3.csproj	(revision 8524)
@@ -84,4 +84,7 @@
       <Private>False</Private>
     </Reference>
+    <Reference Include="HeuristicLab.Problems.Instances-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <Private>False</Private>
+    </Reference>
     <Reference Include="System" />
     <Reference Include="System.Core" />
@@ -106,5 +109,5 @@
       <SubType>Form</SubType>
     </Compile>
-    <Compile Include="ObjectSelectorDialog.designer.cs">
+    <Compile Include="ObjectSelectorDialog.Designer.cs">
       <DependentUpon>ObjectSelectorDialog.cs</DependentUpon>
     </Compile>
@@ -112,5 +115,5 @@
       <SubType>UserControl</SubType>
     </Compile>
-    <Compile Include="OptimizableView.designer.cs">
+    <Compile Include="OptimizableView.Designer.cs">
       <DependentUpon>OptimizableView.cs</DependentUpon>
     </Compile>
@@ -118,5 +121,5 @@
       <SubType>UserControl</SubType>
     </Compile>
-    <Compile Include="ParameterConfigurationTreeView.designer.cs">
+    <Compile Include="ParameterConfigurationTreeView.Designer.cs">
       <DependentUpon>ParameterConfigurationTreeView.cs</DependentUpon>
     </Compile>
@@ -127,5 +130,5 @@
       <SubType>UserControl</SubType>
     </Compile>
-    <Compile Include="ValueConfigurationViews\RangeView.designer.cs">
+    <Compile Include="ValueConfigurationViews\RangeView.Designer.cs">
       <DependentUpon>RangeView.cs</DependentUpon>
     </Compile>
@@ -133,5 +136,5 @@
       <SubType>UserControl</SubType>
     </Compile>
-    <Compile Include="ValueConfigurationViews\ValueView.designer.cs">
+    <Compile Include="ValueConfigurationViews\ValueView.Designer.cs">
       <DependentUpon>ValueView.cs</DependentUpon>
     </Compile>
@@ -157,5 +160,5 @@
 </PreBuildEvent>
   </PropertyGroup>
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+  <!-- 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">
Index: /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding.Views/3.3/ObjectSelectorDialog.Designer.cs
===================================================================
--- /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding.Views/3.3/ObjectSelectorDialog.Designer.cs	(revision 8523)
+++ /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding.Views/3.3/ObjectSelectorDialog.Designer.cs	(revision 8524)
@@ -1,3 +1,24 @@
-﻿namespace HeuristicLab.Encodings.ParameterConfigurationEncoding.Views {
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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
+
+namespace HeuristicLab.Encodings.ParameterConfigurationEncoding.Views {
   partial class ObjectSelectorDialog<T> {
     /// <summary>
Index: /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding.Views/3.3/OptimizableView.Designer.cs
===================================================================
--- /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding.Views/3.3/OptimizableView.Designer.cs	(revision 8523)
+++ /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding.Views/3.3/OptimizableView.Designer.cs	(revision 8524)
@@ -1,3 +1,24 @@
-﻿namespace HeuristicLab.Encodings.ParameterConfigurationEncoding.Views {
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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
+
+namespace HeuristicLab.Encodings.ParameterConfigurationEncoding.Views {
   partial class OptimizableView {
     /// <summary> 
Index: /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding.Views/3.3/ParameterConfigurationTreeView.Designer.cs
===================================================================
--- /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding.Views/3.3/ParameterConfigurationTreeView.Designer.cs	(revision 8523)
+++ /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding.Views/3.3/ParameterConfigurationTreeView.Designer.cs	(revision 8524)
@@ -1,3 +1,24 @@
-﻿using HeuristicLab.Core.Views;
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Core.Views;
 namespace HeuristicLab.Encodings.ParameterConfigurationEncoding.Views {
   partial class ParameterConfigurationTreeView {
Index: /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding.Views/3.3/Plugin.cs.frame
===================================================================
--- /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding.Views/3.3/Plugin.cs.frame	(revision 8523)
+++ /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding.Views/3.3/Plugin.cs.frame	(revision 8524)
@@ -43,4 +43,5 @@
   [PluginDependency("HeuristicLab.Parameters", "3.3")]
   [PluginDependency("HeuristicLab.Parameters.Views", "3.3")]
+  [PluginDependency("HeuristicLab.Problems.Instances", "3.3")]
   public class HeuristicLabEncodingsParameterConfigurationEncodingViewsPlugin : PluginBase {
   }
Index: /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding.Views/3.3/ValueConfigurationViews/RangeView.Designer.cs
===================================================================
--- /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding.Views/3.3/ValueConfigurationViews/RangeView.Designer.cs	(revision 8523)
+++ /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding.Views/3.3/ValueConfigurationViews/RangeView.Designer.cs	(revision 8524)
@@ -1,3 +1,24 @@
-﻿namespace HeuristicLab.Encodings.ParameterConfigurationEncoding.Views {
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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
+
+namespace HeuristicLab.Encodings.ParameterConfigurationEncoding.Views {
   partial class RangeView {
     /// <summary> 
Index: /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding.Views/3.3/ValueConfigurationViews/ValueView.Designer.cs
===================================================================
--- /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding.Views/3.3/ValueConfigurationViews/ValueView.Designer.cs	(revision 8523)
+++ /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding.Views/3.3/ValueConfigurationViews/ValueView.Designer.cs	(revision 8524)
@@ -1,3 +1,24 @@
-﻿namespace HeuristicLab.Encodings.ParameterConfigurationEncoding.Views {
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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
+
+namespace HeuristicLab.Encodings.ParameterConfigurationEncoding.Views {
   partial class ValueView {
     /// <summary> 
Index: /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/HeuristicLab.Encodings.ParameterConfigurationEncoding-3.3.csproj
===================================================================
--- /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/HeuristicLab.Encodings.ParameterConfigurationEncoding-3.3.csproj	(revision 8523)
+++ /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/HeuristicLab.Encodings.ParameterConfigurationEncoding-3.3.csproj	(revision 8524)
@@ -82,4 +82,7 @@
       <Private>False</Private>
     </Reference>
+    <Reference Include="HeuristicLab.Problems.Instances-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <Private>False</Private>
+    </Reference>
     <Reference Include="System" />
     <Reference Include="System.Core" />
Index: /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/ParameterConfigurationTree.cs
===================================================================
--- /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/ParameterConfigurationTree.cs	(revision 8523)
+++ /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/ParameterConfigurationTree.cs	(revision 8524)
@@ -31,10 +31,10 @@
 using HeuristicLab.Optimization;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Problems.Instances;
 
 namespace HeuristicLab.Encodings.ParameterConfigurationEncoding {
-  // todo: storable, name, descr, ...
+  [Item("ParameterConfigurationTree", "Represents a parameter configuration.")]
   [StorableClass]
   public class ParameterConfigurationTree : ParameterizedValueConfiguration, IEnumerable {
-
     [Storable]
     private DoubleValue quality;
@@ -180,25 +180,5 @@
     }
 
-    #region constructors and cloning
-    public ParameterConfigurationTree(IAlgorithm algorithm, IProblem problem)
-      : base(null, algorithm.GetType(), false) {
-      this.Optimize = false;
-      this.IsOptimizable = false;
-      this.parameters = new Dictionary<string, IItem>();
-      this.Name = algorithm.ItemName;
-
-      var algproblemitem = new AlgorithmProblemItem();
-      algproblemitem.AlgorithmParameter.Value = algorithm;
-      algproblemitem.ProblemParameter.Value = problem;
-      this.discoverValidValues = false;
-
-      this.parameterConfigurations.Add(new SingleValuedParameterConfiguration("Algorithm", algproblemitem.AlgorithmParameter));
-      this.parameterConfigurations.Add(new SingleValuedParameterConfiguration("Problem", algproblemitem.ProblemParameter));
-
-      // problems can be modified in the list of problem instances, so the parameters which are not Optimize=true, 
-      // must not be modifiable in the parameter configuration tree. otherwise the parameter values would be ambiguous
-      ProblemConfiguration.ValuesReadOnly = true;
-    }
-    public ParameterConfigurationTree() { }
+    #region Constructors and Cloning
     [StorableConstructor]
     protected ParameterConfigurationTree(bool deserializing) : base(deserializing) { }
@@ -225,7 +205,29 @@
       }
     }
+    public ParameterConfigurationTree() : base() { }
+    public ParameterConfigurationTree(IAlgorithm algorithm, IProblem problem)
+      : base(null, algorithm.GetType(), false) {
+      this.Optimize = false;
+      this.IsOptimizable = false;
+      this.parameters = new Dictionary<string, IItem>();
+      this.Name = algorithm.ItemName;
+
+      var algproblemitem = new AlgorithmProblemItem();
+      algproblemitem.AlgorithmParameter.Value = algorithm;
+      algproblemitem.ProblemParameter.Value = problem;
+      this.discoverValidValues = false;
+
+      this.parameterConfigurations.Add(new SingleValuedParameterConfiguration("Algorithm", algproblemitem.AlgorithmParameter));
+      this.parameterConfigurations.Add(new SingleValuedParameterConfiguration("Problem", algproblemitem.ProblemParameter));
+
+      // problems can be modified in the list of problem instances, so the parameters which are not Optimize=true, 
+      // must not be modifiable in the parameter configuration tree. otherwise the parameter values would be ambiguous
+      ProblemConfiguration.ValuesReadOnly = true;
+    }
+
     public override IDeepCloneable Clone(Cloner cloner) {
       return new ParameterConfigurationTree(this, cloner);
     }
+
     [StorableHook(HookType.AfterDeserialization)]
     private void AfterDeserialization() {
@@ -274,5 +276,5 @@
     public override void Parameterize(IParameterizedItem item) {
       this.parameters.Clear();
-      var algorithm = item as IAlgorithm;
+      var algorithm = (IAlgorithm)item;
       var problem = algorithm.Problem;
 
@@ -283,22 +285,32 @@
     }
 
-    public Experiment GenerateExperiment(IAlgorithm algorithm, bool createBatchRuns, int repetitions, CancellationToken ct) {
+    public Experiment GenerateExperiment(IAlgorithm algorithm, bool createBatchRuns, int repetitions, Dictionary<IProblemInstanceProvider, HashSet<IDataDescriptor>> problemInstances, CancellationToken ct) {
       Experiment experiment = new Experiment();
+      var algorithms = new List<IAlgorithm>(1 + problemInstances.Values.Count) { (IAlgorithm)algorithm.Clone() };
+      foreach (var provider in problemInstances) {
+        foreach (var descriptor in provider.Value) {
+          var alg = (IAlgorithm)algorithm.Clone();
+          ProblemInstanceManager.LoadData(provider.Key, descriptor, (IProblemInstanceConsumer)alg.Problem);
+          algorithms.Add(alg);
+        }
+      }
       ExperimentGenerationProgress = 0;
-      foreach (ParameterizedValueConfiguration combination in this) {
-        ct.ThrowIfCancellationRequested();
-        IAlgorithm clonedAlg = (IAlgorithm)algorithm.Clone();
-        clonedAlg.Name = combination.ParameterInfoString;
-        combination.Parameterize(clonedAlg);
-        clonedAlg.StoreAlgorithmInEachRun = false;
-        if (createBatchRuns) {
-          BatchRun batchRun = new BatchRun(string.Format("BatchRun: {0}", combination.ParameterInfoString));
-          batchRun.Optimizer = clonedAlg;
-          batchRun.Repetitions = repetitions;
-          experiment.Optimizers.Add(batchRun);
-        } else {
-          experiment.Optimizers.Add(clonedAlg);
-        }
-        ExperimentGenerationProgress = (double)experiment.Optimizers.Count / this.GetCombinationCount(0);
+      foreach (var alg in algorithms) {
+        foreach (ParameterizedValueConfiguration combination in this) {
+          ct.ThrowIfCancellationRequested();
+          var clonedAlg = (IAlgorithm)alg.Clone();
+          clonedAlg.Name = combination.ParameterInfoString;
+          combination.Parameterize(clonedAlg);
+          clonedAlg.StoreAlgorithmInEachRun = false;
+          if (createBatchRuns) {
+            BatchRun batchRun = new BatchRun(string.Format("BatchRun: {0}", combination.ParameterInfoString));
+            batchRun.Optimizer = clonedAlg;
+            batchRun.Repetitions = repetitions;
+            experiment.Optimizers.Add(batchRun);
+          } else {
+            experiment.Optimizers.Add(clonedAlg);
+          }
+          ExperimentGenerationProgress = (double)experiment.Optimizers.Count / (this.GetCombinationCount(0) * algorithms.Count);
+        }
       }
       return experiment;
@@ -306,9 +318,9 @@
 
     public Experiment GenerateExperiment(IAlgorithm algorithm) {
-      return GenerateExperiment(algorithm, false, 0, CancellationToken.None);
+      return GenerateExperiment(algorithm, false, 0, null, CancellationToken.None);
     }
 
     public Experiment GenerateExperiment(IAlgorithm algorithm, bool createBatchRuns, int repetitions) {
-      return GenerateExperiment(algorithm, createBatchRuns, repetitions, CancellationToken.None);
+      return GenerateExperiment(algorithm, createBatchRuns, repetitions, null, CancellationToken.None);
     }
 
Index: /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/Plugin.cs.frame
===================================================================
--- /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/Plugin.cs.frame	(revision 8523)
+++ /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/Plugin.cs.frame	(revision 8524)
@@ -38,4 +38,5 @@
   [PluginDependency("HeuristicLab.Persistence", "3.3")]
   [PluginDependency("HeuristicLab.Problems.DataAnalysis.Symbolic", "3.4")]
+  [PluginDependency("HeuristicLab.Problems.Instances", "3.3")]
   public class HeuristicLabEncodingsParameterConfigurationEncodingPlugin : PluginBase {
   }
Index: /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/ValueConfigurations/ValueConfiguration.cs
===================================================================
--- /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/ValueConfigurations/ValueConfiguration.cs	(revision 8523)
+++ /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/ValueConfigurations/ValueConfiguration.cs	(revision 8524)
@@ -28,5 +28,5 @@
 
 namespace HeuristicLab.Encodings.ParameterConfigurationEncoding {
-  // TODO: ItemName/Descr, storability
+  [Item("ValueConfiguration", "Represents a value configuration.")]
   [StorableClass]
   public abstract class ValueConfiguration : NamedItem, IValueConfiguration {
@@ -59,5 +59,4 @@
           if (value == true && !this.IsOptimizable)
             throw new NotSupportedException("This value is not optimizable.");
-
           optimize = value;
           OnOptimizeChanged();
@@ -106,12 +105,6 @@
 
     #region Constructors and Cloning
-    public ValueConfiguration(IItem value, Type valueDataType) {
-      this.ActualValue = new ConstrainedValue(value, valueDataType, new ItemSet<IItem> { value }, false);
-      this.IsOptimizable = true;
-    }
-
-    public ValueConfiguration() { }
     [StorableConstructor]
-    protected ValueConfiguration(bool deserializing) { }
+    protected ValueConfiguration(bool deserializing) : base(deserializing) { }
     protected ValueConfiguration(ValueConfiguration original, Cloner cloner)
       : base(original, cloner) {
@@ -122,4 +115,9 @@
       this.valuesReadOnly = original.valuesReadOnly;
       RegisterActualValueEvents();
+    }
+    protected ValueConfiguration() : base() { }
+    protected ValueConfiguration(IItem value, Type valueDataType) {
+      this.ActualValue = new ConstrainedValue(value, valueDataType, new ItemSet<IItem> { value }, false);
+      this.IsOptimizable = true;
     }
     #endregion
