Index: /trunk/sources/HeuristicLab.Optimizer/3.3/CreateExperimentDialog.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimizer/3.3/CreateExperimentDialog.Designer.cs	(revision 8094)
+++ /trunk/sources/HeuristicLab.Optimizer/3.3/CreateExperimentDialog.Designer.cs	(revision 8095)
@@ -183,7 +183,7 @@
       // 
       this.instanceDiscoveryProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
-      this.instanceDiscoveryProgressBar.Location = new System.Drawing.Point(6, 132);
+      this.instanceDiscoveryProgressBar.Location = new System.Drawing.Point(6, 141);
       this.instanceDiscoveryProgressBar.Name = "instanceDiscoveryProgressBar";
-      this.instanceDiscoveryProgressBar.Size = new System.Drawing.Size(308, 23);
+      this.instanceDiscoveryProgressBar.Size = new System.Drawing.Size(367, 23);
       this.instanceDiscoveryProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Continuous;
       this.instanceDiscoveryProgressBar.TabIndex = 4;
@@ -194,7 +194,7 @@
       this.instanceDiscoveryProgressLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
       this.instanceDiscoveryProgressLabel.BackColor = System.Drawing.SystemColors.Control;
-      this.instanceDiscoveryProgressLabel.Location = new System.Drawing.Point(6, 158);
+      this.instanceDiscoveryProgressLabel.Location = new System.Drawing.Point(6, 167);
       this.instanceDiscoveryProgressLabel.Name = "instanceDiscoveryProgressLabel";
-      this.instanceDiscoveryProgressLabel.Size = new System.Drawing.Size(308, 23);
+      this.instanceDiscoveryProgressLabel.Size = new System.Drawing.Size(367, 23);
       this.instanceDiscoveryProgressLabel.TabIndex = 5;
       this.instanceDiscoveryProgressLabel.Text = "label1";
@@ -362,5 +362,5 @@
       this.instancesTabPage.Name = "instancesTabPage";
       this.instancesTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.instancesTabPage.Size = new System.Drawing.Size(320, 273);
+      this.instancesTabPage.Size = new System.Drawing.Size(379, 291);
       this.instancesTabPage.TabIndex = 0;
       this.instancesTabPage.Text = "Problem Instances";
@@ -384,5 +384,5 @@
       this.instancesTreeView.Location = new System.Drawing.Point(6, 35);
       this.instancesTreeView.Name = "instancesTreeView";
-      this.instancesTreeView.Size = new System.Drawing.Size(308, 232);
+      this.instancesTreeView.Size = new System.Drawing.Size(367, 250);
       this.instancesTreeView.TabIndex = 6;
       this.instancesTreeView.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.instancesTreeView_AfterCheck);
@@ -453,5 +453,4 @@
       this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
       this.Text = "Create Experiment";
-      this.TopMost = true;
       this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.CreateExperimentDialog_FormClosing);
       this.Load += new System.EventHandler(this.CreateExperimentDialog_Load);
Index: /trunk/sources/HeuristicLab.Optimizer/3.3/CreateExperimentDialog.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimizer/3.3/CreateExperimentDialog.cs	(revision 8094)
+++ /trunk/sources/HeuristicLab.Optimizer/3.3/CreateExperimentDialog.cs	(revision 8095)
@@ -126,5 +126,15 @@
       if (intValue != null) {
         if (e.Item.Checked) {
-          intParameters.Add(parameter, new IntArray());
+          IntArray initialValues;
+          if (intValue.Value == int.MinValue)
+            initialValues = new IntArray(new int[] { -100, -50, 5 });
+          else if (intValue.Value == int.MaxValue)
+            initialValues = new IntArray(new int[] { 5, 50, 100 });
+          else if (intValue.Value == 0)
+            initialValues = new IntArray(new int[] { 0, 1, 2 });
+          else if (Math.Abs(intValue.Value) < 10)
+            initialValues = new IntArray(new int[] { intValue.Value - 1, intValue.Value, intValue.Value + 1 });
+          else initialValues = new IntArray(new int[] { intValue.Value / 2, intValue.Value, intValue.Value * 2 });
+          intParameters.Add(parameter, initialValues);
           intParameters[parameter].Reset += new EventHandler(ValuesArray_Reset);
         } else intParameters.Remove(parameter);
@@ -134,5 +144,19 @@
       if (doubleValue != null) {
         if (e.Item.Checked) {
-          doubleParameters.Add(parameter, new DoubleArray());
+          DoubleArray initialValues;
+          if (doubleValue.Value == double.MinValue)
+            initialValues = new DoubleArray(new double[] { -1, -0.5, 0 });
+          else if (doubleValue.Value == double.MaxValue)
+            initialValues = new DoubleArray(new double[] { 0, 0.5, 1 });
+          else if (doubleValue.Value == 0.0)
+            initialValues = new DoubleArray(new double[] { 0, 0.1, 0.2 });
+          else if (Math.Abs(doubleValue.Value) <= 1.0) {
+            if (doubleValue.Value > 0.9 || (doubleValue.Value < 0.0 && doubleValue.Value > -0.1))
+              initialValues = new DoubleArray(new double[] { doubleValue.Value - 0.2, doubleValue.Value - 0.1, doubleValue.Value });
+            else if (doubleValue.Value < -0.9 || (doubleValue.Value > 0 && doubleValue.Value < 0.1))
+              initialValues = new DoubleArray(new double[] { doubleValue.Value, doubleValue.Value + 0.1, doubleValue.Value + 0.2 });
+            else initialValues = new DoubleArray(new double[] { doubleValue.Value - 0.1, doubleValue.Value, doubleValue.Value + 0.1 });
+          } else initialValues = new DoubleArray(new double[] { doubleValue.Value / 2.0, doubleValue.Value, doubleValue.Value * 2.0 });
+          doubleParameters.Add(parameter, initialValues);
           doubleParameters[parameter].Reset += new EventHandler(ValuesArray_Reset);
         } else doubleParameters.Remove(parameter);
@@ -355,4 +379,5 @@
           finally { suppressTreeViewEventHandling = false; }
         }
+        UpdateVariationsLabel();
       }
     }
@@ -375,4 +400,5 @@
           finally { suppressTreeViewEventHandling = false; }
         }
+        UpdateVariationsLabel();
       }
     }
@@ -633,28 +659,28 @@
     #region Instance discovery
     private void instanceDiscoveryBackgroundWorker_DoWork(object sender, DoWorkEventArgs e) {
+      instanceDiscoveryBackgroundWorker.ReportProgress(0, "Finding instance providers...");
       var instanceProviders = ProblemInstanceManager.GetProviders(((IAlgorithm)Optimizer).Problem).ToArray();
-      var nodes = new TreeNode[instanceProviders.Length];
+      var nodes = new List<TreeNode>(instanceProviders.Length);
       for (int i = 0; i < instanceProviders.Length; i++) {
         var provider = instanceProviders[i];
-        nodes[i] = new TreeNode(provider.Name) { Tag = provider };
-      }
-      e.Result = nodes;
-      for (int i = 0; i < nodes.Length; i++) {
-        var providerNode = nodes[i];
-        var provider = providerNode.Tag as IProblemInstanceProvider;
-        double progress = i / (double)nodes.Length;
-        instanceDiscoveryBackgroundWorker.ReportProgress((int)(100 * progress), provider.Name);
-        var descriptors = ProblemInstanceManager.GetDataDescriptors(provider).ToArray();
-        for (int j = 0; j < descriptors.Length; j++) {
+        var providerNode = new TreeNode(provider.Name) { Tag = provider };
+        var descriptors = ProblemInstanceManager.GetDataDescriptors(provider);
+        foreach (var desc in descriptors) {
           #region Check cancellation request
           if (instanceDiscoveryBackgroundWorker.CancellationPending) {
             e.Cancel = true;
+            e.Result = nodes.ToArray();
             return;
           }
           #endregion
-          var node = new TreeNode(descriptors[j].Name) { Tag = descriptors[j] };
+          var node = new TreeNode(desc.Name) { Tag = desc };
           providerNode.Nodes.Add(node);
-        }
-      }
+          if (providerNode.Nodes.Count == 1)
+            nodes.Add(providerNode);
+        }
+        double progress = nodes.Count > 0 ? i / (double)nodes.Count : 0.0;
+        instanceDiscoveryBackgroundWorker.ReportProgress((int)(100 * progress), provider.Name);
+      }
+      e.Result = nodes.ToArray();
       instanceDiscoveryBackgroundWorker.ReportProgress(100, string.Empty);
     }
@@ -669,15 +695,15 @@
     private void instanceDiscoveryBackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
       try {
-        instancesTreeView.Nodes.AddRange((TreeNode[])e.Result);
-        foreach (TreeNode node in instancesTreeView.Nodes)
-          node.Collapse();
+        if (((TreeNode[])e.Result).Length > 0) {
+          instancesTreeView.Nodes.AddRange((TreeNode[])e.Result);
+          foreach (TreeNode node in instancesTreeView.Nodes)
+            node.Collapse();
+        }
         selectNoneCheckBox.Checked = true;
-      }
-      catch { }
+      } catch { }
       try {
         SetMode(DialogMode.Normal);
         if (e.Error != null) MessageBox.Show(e.Error.Message, "Error occurred", MessageBoxButtons.OK, MessageBoxIcon.Error);
-      }
-      catch { }
+      } catch { }
     }
     #endregion
