Index: trunk/sources/HeuristicLab.ES/ES.cs
===================================================================
--- trunk/sources/HeuristicLab.ES/ES.cs	(revision 1090)
+++ trunk/sources/HeuristicLab.ES/ES.cs	(revision 1091)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2009 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -48,5 +48,5 @@
 
       CombinedOperator co = CreateES();
-      co.Name = "ES";
+      co.Name = "σSA-ES";
       engine.OperatorGraph.AddOperator(co);
       engine.OperatorGraph.InitialOperator = co;
@@ -134,10 +134,6 @@
       vi.AddVariable(new Variable("Generations", new IntData()));
       vi.AddVariable(new Variable("MaximumGenerations", new IntData(1000)));
+      vi.AddVariable(new Variable("GeneralLearningRate", new DoubleData(0.1)));
       vi.AddVariable(new Variable("LearningRate", new DoubleData(0.1)));
-      vi.AddVariable(new Variable("DampeningFactor", new DoubleData(10.0)));
-      vi.AddVariable(new Variable("ShakingFactor", new DoubleData(5.0)));
-      vi.AddVariable(new Variable("TargetSuccessProbability", new DoubleData(0.2)));
-      vi.AddVariable(new Variable("SuccessProbability", new DoubleData(0.2)));
-      vi.AddVariable(new Variable("UseSuccessRule", new BoolData(true)));
       op.OperatorGraph.AddOperator(vi);
       sp.AddSubOperator(vi);
@@ -180,4 +176,9 @@
       op.OperatorGraph.AddOperator(c);
       sp2.AddSubOperator(c);
+
+      VariableInjector vi = new VariableInjector();
+      vi.AddVariable(new Variable("ShakingFactors", new DoubleArrayData(new double[] { 5.0 })));
+      op.OperatorGraph.AddOperator(vi);
+      sp2.AddSubOperator(vi);
 
       Sorter s = new Sorter();
@@ -285,38 +286,17 @@
       op.OperatorGraph.InitialOperator = sp1;
 
-      ConditionalBranch cb = new ConditionalBranch();
-      cb.GetVariableInfo("Condition").ActualName = "UseSuccessRule";
-      op.OperatorGraph.AddOperator(cb);
-      sp1.AddSubOperator(cb);
-
-      SequentialProcessor sp2 = new SequentialProcessor();
-      op.OperatorGraph.AddOperator(sp2);
-      cb.AddSubOperator(sp2);
-
-      OffspringAnalyzer oa = new OffspringAnalyzer();
-      oa.Name = "Offspring Analyzer";
-      oa.GetVariable("ParentsCount").Value = new IntData(1);
-      oa.GetVariable("ComparisonFactor").Value = new DoubleData(0.0);
-      op.OperatorGraph.AddOperator(oa);
-      sp2.AddSubOperator(oa);
-
-      SequentialProcessor sp3 = new SequentialProcessor();
-      op.OperatorGraph.AddOperator(sp3);
-      oa.AddSubOperator(sp3);
-      cb.AddSubOperator(sp3);
-
       OperatorExtractor oe1 = new OperatorExtractor();
       oe1.Name = "Recombinator";
       oe1.GetVariableInfo("Operator").ActualName = "Recombinator";
       op.OperatorGraph.AddOperator(oe1);
-      sp3.AddSubOperator(oe1);
+      sp1.AddSubOperator(oe1);
 
       UniformSequentialSubScopesProcessor ussp = new UniformSequentialSubScopesProcessor();
       op.OperatorGraph.AddOperator(ussp);
-      sp3.AddSubOperator(ussp);
-
-      SequentialProcessor sp4 = new SequentialProcessor();
-      op.OperatorGraph.AddOperator(sp4);
-      ussp.AddSubOperator(sp4);
+      sp1.AddSubOperator(ussp);
+
+      SequentialProcessor sp2 = new SequentialProcessor();
+      op.OperatorGraph.AddOperator(sp2);
+      ussp.AddSubOperator(sp2);
 
       OperatorExtractor oe2 = new OperatorExtractor();
@@ -324,5 +304,5 @@
       oe2.GetVariableInfo("Operator").ActualName = "Mutator";
       op.OperatorGraph.AddOperator(oe2);
-      sp4.AddSubOperator(oe2);
+      sp2.AddSubOperator(oe2);
 
       OperatorExtractor oe3 = new OperatorExtractor();
@@ -330,15 +310,10 @@
       oe3.GetVariableInfo("Operator").ActualName = "Evaluator";
       op.OperatorGraph.AddOperator(oe3);
-      sp4.AddSubOperator(oe3);
+      sp2.AddSubOperator(oe3);
 
       Counter c = new Counter();
       c.GetVariableInfo("Value").ActualName = "EvaluatedSolutions";
       op.OperatorGraph.AddOperator(c);
-      sp4.AddSubOperator(c);
-
-      SuccessRuleMutationStrengthAdjuster srmsa = new SuccessRuleMutationStrengthAdjuster();
-      srmsa.Name = "SuccessRuleMutationStrengthAdjuster";
-      op.OperatorGraph.AddOperator(srmsa);
-      sp2.AddSubOperator(srmsa);
+      sp2.AddSubOperator(c);
 
       Sorter s = new Sorter();
@@ -411,5 +386,5 @@
     /// Gets or sets the µ value of the current instance.
     /// </summary>
-    /// <remarks>Sets also the lambda and the rho value. Calls <see cref="ItemBase.OnChanged"/> of
+    /// <remarks>Sets also the λ and the ρ value if necessary. Using the comma notation it must hold that λ >= µ and generally µ >= ρ must hold as well. Calls <see cref="ItemBase.OnChanged"/> of
     /// base class <see cref="ItemBase"/>.</remarks>
     public int Mu {
@@ -426,7 +401,7 @@
     private IntData myRho;
     /// <summary>
-    /// Gets or sets the rho value of the current instance.
-    /// </summary>
-    /// <remarks>Sets also the µ value. Calls <see cref="ItemBase.OnChanged"/> of
+    /// Gets or sets the ρ value of the current instance.
+    /// </summary>
+    /// <remarks>Sets also the µ value to be as large as the new ρ value if it was smaller before. Calls <see cref="ItemBase.OnChanged"/> of
     /// base class <see cref="ItemBase"/>.</remarks>
     public int Rho {
@@ -442,7 +417,7 @@
     private IntData myLambda;
     /// <summary>
-    /// Gets or sets the lambda value of the current instance.
-    /// </summary>
-    /// <remarks>May also change the µ value under certain circumstances. 
+    /// Gets or sets the λ value of the current instance.
+    /// </summary>
+    /// <remarks>If the comma notation is used, it also changes the µ value to be as large as the new λ value if it was larger before. Note that in general for good optimization results it needs to be fairly larger than mu.
     /// Calls <see cref="ItemBase.OnChanged"/> of base class <see cref="ItemBase"/>.</remarks>
     public int Lambda {
@@ -452,10 +427,7 @@
           if (PlusNotation) myLambda.Data = value;
           else {
-            if (value > 1 && value < Mu) {
+            if (value >= 1 && value < Mu) {
               myLambda.Data = value;
-              myMu.Data = value - 1;
-            } else if (value == 1) {
-              myMu.Data = 1;
-              myLambda.Data = 2;
+              myMu.Data = value;
             } else if (value > Mu) {
               myLambda.Data = value;
@@ -468,7 +440,7 @@
     private BoolData myPlusNotation;
     /// <summary>
-    /// Gets or sets the boolean flag whether it is a plus notation or not.
-    /// </summary>
-    /// <remarks>May also set the lambda value under certain circumstances. 
+    /// Gets or sets the boolean flag whether the plus notation is used (true) or the comma notation (false).
+    /// </summary>
+    /// <remarks>If set to false (comma notation) it sets λ to be as large as µ if is lower. Note that in general for good optimization results it needs to be fairly larger than µ. 
     /// Calls <see cref="ItemBase.OnChanged"/> of base class <see cref="ItemBase"/>.</remarks>
     public bool PlusNotation {
@@ -476,6 +448,6 @@
       set {
         if (!value && myPlusNotation.Data) { // from plus to point
-          if (Lambda <= Mu) {
-            myLambda.Data = Mu + 1;
+          if (Lambda < Mu) {
+            myLambda.Data = Mu;
           }
         }
@@ -484,29 +456,32 @@
       }
     }
-    private DoubleData myShakingFactor;
-    /// <summary>
-    /// Gets or sets the shaking factor of the current instance.
-    /// </summary>
-    public double ShakingFactor {
-      get { return myShakingFactor.Data; }
-      set { myShakingFactor.Data = value; }
-    }
-    private DoubleData mySuccessProbability;
-    
-    private DoubleData myTargetSuccessProbability;
-    /// <summary>
-    /// Gets or sets the success probability.
-    /// </summary>
-    /// <remarks>Gets the target success probability and sets also the target success probability.</remarks>
-    public double SuccessProbability {
-      get { return myTargetSuccessProbability.Data; }
-      set {
-        myTargetSuccessProbability.Data = value;
-        mySuccessProbability.Data = value;
+    private DoubleArrayData myShakingFactors;
+    /// <summary>
+    /// Gets or sets the initial strategy vector s(0).
+    /// </summary>
+    /// <remarks>Calls <see cref="ItemBase.OnChanged"/> of base class <see cref="ItemBase"/> 
+    /// in the setter.</remarks>
+    public double[] ShakingFactors {
+      get { return myShakingFactors.Data; }
+      set { myShakingFactors.Data = value; }
+    }
+    private DoubleData myGeneralLearningRate;
+    /// <summary>
+    /// Gets or sets the general learning rate (tau0).
+    /// </summary>
+    /// <remarks>Calls <see cref="ItemBase.OnChanged"/> of base class <see cref="ItemBase"/> 
+    /// in the setter.</remarks>
+    public double GeneralLearningRate {
+      get { return myGeneralLearningRate.Data; }
+      set {
+        if (value > 0.0 && value <= 1.0) {
+          myGeneralLearningRate.Data = value;
+          OnChanged();
+        }
       }
     }
     private DoubleData myLearningRate;
     /// <summary>
-    /// Gets or sets the learning rate.
+    /// Gets or sets the learning rate (tau).
     /// </summary>
     /// <remarks>Calls <see cref="ItemBase.OnChanged"/> of base class <see cref="ItemBase"/> 
@@ -521,19 +496,4 @@
       }
     }
-    private DoubleData myDampeningFactor;
-    /// <summary>
-    /// Gets or sets the dampening factor.
-    /// </summary>
-    /// <remarks>Calls <see cref="ItemBase.OnChanged"/> of base class <see cref="ItemBase"/> 
-    /// in the setter.</remarks>
-    public double DampeningFactor {
-      get { return myDampeningFactor.Data; }
-      set {
-        if (value >= 1.0) {
-          myDampeningFactor.Data = value;
-          OnChanged();
-        }
-      }
-    }
     private IntData myMaximumGenerations;
     /// <summary>
@@ -543,12 +503,4 @@
       get { return myMaximumGenerations.Data; }
       set { myMaximumGenerations.Data = value; }
-    }
-    private BoolData myUseSuccessRule;
-    /// <summary>
-    /// Gets or sets the boolean flag whether to use the success rule or not.
-    /// </summary>
-    public bool UseSuccessRule {
-      get { return myUseSuccessRule.Data; }
-      set { myUseSuccessRule.Data = value; }
     }
     private CombinedOperator myES;
@@ -681,13 +633,12 @@
       myMaximumGenerations = vi.GetVariable("MaximumGenerations").GetValue<IntData>();
       myPlusNotation = vi.GetVariable("PlusNotation").GetValue<BoolData>();
-      myShakingFactor = vi.GetVariable("ShakingFactor").GetValue<DoubleData>();
-      myTargetSuccessProbability = vi.GetVariable("TargetSuccessProbability").GetValue<DoubleData>();
-      mySuccessProbability = vi.GetVariable("SuccessProbability").GetValue<DoubleData>();
+      myGeneralLearningRate = vi.GetVariable("GeneralLearningRate").GetValue<DoubleData>();
       myLearningRate = vi.GetVariable("LearningRate").GetValue<DoubleData>();
-      myDampeningFactor = vi.GetVariable("DampeningFactor").GetValue<DoubleData>();
-      myUseSuccessRule = vi.GetVariable("UseSuccessRule").GetValue<BoolData>();
       // Population Initialization
       CombinedOperator co3 = (CombinedOperator)sp1.SubOperators[1];
       myPopulationInitialization = co3;
+      // Variable Injector
+      VariableInjector vi2 = (VariableInjector)co3.OperatorGraph.InitialOperator.SubOperators[1].SubOperators[0].SubOperators[3];
+      myShakingFactors = vi2.GetVariable("ShakingFactors").GetValue<DoubleArrayData>();
       // ES Main
       CombinedOperator co4 = (CombinedOperator)sp1.SubOperators[2];
Index: trunk/sources/HeuristicLab.ES/ESEditor.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.ES/ESEditor.Designer.cs	(revision 1090)
+++ trunk/sources/HeuristicLab.ES/ESEditor.Designer.cs	(revision 1091)
@@ -1,3 +1,3 @@
-#region License Information
+﻿#region License Information
 /* HeuristicLab
  * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
@@ -46,14 +46,16 @@
     /// </summary>
     private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ESEditor));
       this.executeButton = new System.Windows.Forms.Button();
       this.tabControl = new System.Windows.Forms.TabControl();
       this.parametersTabPage = new System.Windows.Forms.TabPage();
       this.successRuleGroupBox = new System.Windows.Forms.GroupBox();
-      this.dampeningFactorTextBox = new System.Windows.Forms.TextBox();
-      this.dampeningFactorLabel = new System.Windows.Forms.Label();
       this.learningRateTextBox = new System.Windows.Forms.TextBox();
       this.label1 = new System.Windows.Forms.Label();
-      this.targetSuccessRateTextBox = new System.Windows.Forms.TextBox();
+      this.generalLearningRateTextBox = new System.Windows.Forms.TextBox();
       this.targetSuccessRateLabel = new System.Windows.Forms.Label();
+      this.label8 = new System.Windows.Forms.Label();
+      this.label7 = new System.Windows.Forms.Label();
       this.parentSelectionGroupBox = new System.Windows.Forms.GroupBox();
       this.commaRadioButton = new System.Windows.Forms.RadioButton();
@@ -65,5 +67,4 @@
       this.rhoTextBox = new System.Windows.Forms.TextBox();
       this.rhoLabel = new System.Windows.Forms.Label();
-      this.useSuccessRuleCheckBox = new System.Windows.Forms.CheckBox();
       this.setEvaluationButton = new System.Windows.Forms.Button();
       this.setMutationButton = new System.Windows.Forms.Button();
@@ -79,5 +80,5 @@
       this.problemInitializationTextBox = new System.Windows.Forms.TextBox();
       this.setRandomSeedRandomlyCheckBox = new System.Windows.Forms.CheckBox();
-      this.initialMutationStrengthTextBox = new System.Windows.Forms.TextBox();
+      this.initialMutationStrengthVectorTextBox = new System.Windows.Forms.TextBox();
       this.evaluationLabel = new System.Windows.Forms.Label();
       this.mutationLabel = new System.Windows.Forms.Label();
@@ -92,4 +93,9 @@
       this.setRandomSeedRandomlyLabel = new System.Windows.Forms.Label();
       this.randomSeedLabel = new System.Windows.Forms.Label();
+      this.label6 = new System.Windows.Forms.Label();
+      this.label5 = new System.Windows.Forms.Label();
+      this.label4 = new System.Windows.Forms.Label();
+      this.label3 = new System.Windows.Forms.Label();
+      this.label2 = new System.Windows.Forms.Label();
       this.populationSizeLabel = new System.Windows.Forms.Label();
       this.lambdaTextBox = new System.Windows.Forms.TextBox();
@@ -99,4 +105,7 @@
       this.resetButton = new System.Windows.Forms.Button();
       this.cloneEngineButton = new System.Windows.Forms.Button();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.problemDimensionLabel = new System.Windows.Forms.Label();
+      this.problemDimensionTextBox = new System.Windows.Forms.TextBox();
       this.tabControl.SuspendLayout();
       this.parametersTabPage.SuspendLayout();
@@ -109,5 +118,5 @@
       // 
       this.executeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.executeButton.Location = new System.Drawing.Point(0, 529);
+      this.executeButton.Location = new System.Drawing.Point(0, 527);
       this.executeButton.Name = "executeButton";
       this.executeButton.Size = new System.Drawing.Size(75, 23);
@@ -127,5 +136,5 @@
       this.tabControl.Name = "tabControl";
       this.tabControl.SelectedIndex = 0;
-      this.tabControl.Size = new System.Drawing.Size(526, 523);
+      this.tabControl.Size = new System.Drawing.Size(501, 521);
       this.tabControl.TabIndex = 0;
       // 
@@ -140,5 +149,4 @@
       this.parametersTabPage.Controls.Add(this.rhoTextBox);
       this.parametersTabPage.Controls.Add(this.rhoLabel);
-      this.parametersTabPage.Controls.Add(this.useSuccessRuleCheckBox);
       this.parametersTabPage.Controls.Add(this.setEvaluationButton);
       this.parametersTabPage.Controls.Add(this.setMutationButton);
@@ -154,9 +162,11 @@
       this.parametersTabPage.Controls.Add(this.problemInitializationTextBox);
       this.parametersTabPage.Controls.Add(this.setRandomSeedRandomlyCheckBox);
-      this.parametersTabPage.Controls.Add(this.initialMutationStrengthTextBox);
+      this.parametersTabPage.Controls.Add(this.problemDimensionTextBox);
+      this.parametersTabPage.Controls.Add(this.initialMutationStrengthVectorTextBox);
       this.parametersTabPage.Controls.Add(this.evaluationLabel);
       this.parametersTabPage.Controls.Add(this.mutationLabel);
       this.parametersTabPage.Controls.Add(this.solutionGenerationLabel);
       this.parametersTabPage.Controls.Add(this.problemInitializationLabel);
+      this.parametersTabPage.Controls.Add(this.problemDimensionLabel);
       this.parametersTabPage.Controls.Add(this.initialMutationStrengthLabel);
       this.parametersTabPage.Controls.Add(this.mutationRateLabel);
@@ -167,4 +177,9 @@
       this.parametersTabPage.Controls.Add(this.setRandomSeedRandomlyLabel);
       this.parametersTabPage.Controls.Add(this.randomSeedLabel);
+      this.parametersTabPage.Controls.Add(this.label6);
+      this.parametersTabPage.Controls.Add(this.label5);
+      this.parametersTabPage.Controls.Add(this.label4);
+      this.parametersTabPage.Controls.Add(this.label3);
+      this.parametersTabPage.Controls.Add(this.label2);
       this.parametersTabPage.Controls.Add(this.populationSizeLabel);
       this.parametersTabPage.Controls.Add(this.lambdaTextBox);
@@ -172,5 +187,5 @@
       this.parametersTabPage.Name = "parametersTabPage";
       this.parametersTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.parametersTabPage.Size = new System.Drawing.Size(518, 497);
+      this.parametersTabPage.Size = new System.Drawing.Size(493, 495);
       this.parametersTabPage.TabIndex = 0;
       this.parametersTabPage.Text = "Parameters";
@@ -180,41 +195,23 @@
       // 
       this.successRuleGroupBox.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.successRuleGroupBox.Controls.Add(this.dampeningFactorTextBox);
-      this.successRuleGroupBox.Controls.Add(this.dampeningFactorLabel);
       this.successRuleGroupBox.Controls.Add(this.learningRateTextBox);
       this.successRuleGroupBox.Controls.Add(this.label1);
-      this.successRuleGroupBox.Controls.Add(this.targetSuccessRateTextBox);
+      this.successRuleGroupBox.Controls.Add(this.generalLearningRateTextBox);
       this.successRuleGroupBox.Controls.Add(this.targetSuccessRateLabel);
-      this.successRuleGroupBox.Location = new System.Drawing.Point(68, 201);
+      this.successRuleGroupBox.Controls.Add(this.label8);
+      this.successRuleGroupBox.Controls.Add(this.label7);
+      this.successRuleGroupBox.Location = new System.Drawing.Point(9, 230);
       this.successRuleGroupBox.Name = "successRuleGroupBox";
-      this.successRuleGroupBox.Size = new System.Drawing.Size(336, 100);
+      this.successRuleGroupBox.Size = new System.Drawing.Size(476, 74);
       this.successRuleGroupBox.TabIndex = 40;
       this.successRuleGroupBox.TabStop = false;
-      this.successRuleGroupBox.Text = "Success Rule Mutation Strength Adjustment";
-      // 
-      // dampeningFactorTextBox
-      // 
-      this.dampeningFactorTextBox.Anchor = System.Windows.Forms.AnchorStyles.Top;
-      this.dampeningFactorTextBox.Location = new System.Drawing.Point(150, 71);
-      this.dampeningFactorTextBox.Name = "dampeningFactorTextBox";
-      this.dampeningFactorTextBox.Size = new System.Drawing.Size(180, 20);
-      this.dampeningFactorTextBox.TabIndex = 19;
-      // 
-      // dampeningFactorLabel
-      // 
-      this.dampeningFactorLabel.Anchor = System.Windows.Forms.AnchorStyles.Top;
-      this.dampeningFactorLabel.AutoSize = true;
-      this.dampeningFactorLabel.Location = new System.Drawing.Point(7, 74);
-      this.dampeningFactorLabel.Name = "dampeningFactorLabel";
-      this.dampeningFactorLabel.Size = new System.Drawing.Size(97, 13);
-      this.dampeningFactorLabel.TabIndex = 18;
-      this.dampeningFactorLabel.Text = "Dampening Factor:";
+      this.successRuleGroupBox.Text = "Mutation Strength Adjustment";
       // 
       // learningRateTextBox
       // 
       this.learningRateTextBox.Anchor = System.Windows.Forms.AnchorStyles.Top;
-      this.learningRateTextBox.Location = new System.Drawing.Point(150, 45);
+      this.learningRateTextBox.Location = new System.Drawing.Point(159, 45);
       this.learningRateTextBox.Name = "learningRateTextBox";
-      this.learningRateTextBox.Size = new System.Drawing.Size(180, 20);
+      this.learningRateTextBox.Size = new System.Drawing.Size(186, 20);
       this.learningRateTextBox.TabIndex = 17;
       // 
@@ -225,15 +222,15 @@
       this.label1.Location = new System.Drawing.Point(7, 48);
       this.label1.Name = "label1";
-      this.label1.Size = new System.Drawing.Size(77, 13);
+      this.label1.Size = new System.Drawing.Size(92, 13);
       this.label1.TabIndex = 16;
-      this.label1.Text = "Learning Rate:";
-      // 
-      // targetSuccessRateTextBox
-      // 
-      this.targetSuccessRateTextBox.Anchor = System.Windows.Forms.AnchorStyles.Top;
-      this.targetSuccessRateTextBox.Location = new System.Drawing.Point(150, 19);
-      this.targetSuccessRateTextBox.Name = "targetSuccessRateTextBox";
-      this.targetSuccessRateTextBox.Size = new System.Drawing.Size(180, 20);
-      this.targetSuccessRateTextBox.TabIndex = 15;
+      this.label1.Text = "Learning Rate (τ):";
+      // 
+      // generalLearningRateTextBox
+      // 
+      this.generalLearningRateTextBox.Anchor = System.Windows.Forms.AnchorStyles.Top;
+      this.generalLearningRateTextBox.Location = new System.Drawing.Point(159, 19);
+      this.generalLearningRateTextBox.Name = "generalLearningRateTextBox";
+      this.generalLearningRateTextBox.Size = new System.Drawing.Size(186, 20);
+      this.generalLearningRateTextBox.TabIndex = 15;
       // 
       // targetSuccessRateLabel
@@ -243,7 +240,27 @@
       this.targetSuccessRateLabel.Location = new System.Drawing.Point(7, 22);
       this.targetSuccessRateLabel.Name = "targetSuccessRateLabel";
-      this.targetSuccessRateLabel.Size = new System.Drawing.Size(111, 13);
+      this.targetSuccessRateLabel.Size = new System.Drawing.Size(138, 13);
       this.targetSuccessRateLabel.TabIndex = 14;
-      this.targetSuccessRateLabel.Text = "Target Success Rate:";
+      this.targetSuccessRateLabel.Text = "General Learning Rate (τ0):";
+      // 
+      // label8
+      // 
+      this.label8.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.label8.AutoSize = true;
+      this.label8.Location = new System.Drawing.Point(348, 48);
+      this.label8.Name = "label8";
+      this.label8.Size = new System.Drawing.Size(77, 13);
+      this.label8.TabIndex = 4;
+      this.label8.Text = "(LearningRate)";
+      // 
+      // label7
+      // 
+      this.label7.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.label7.AutoSize = true;
+      this.label7.Location = new System.Drawing.Point(348, 22);
+      this.label7.Name = "label7";
+      this.label7.Size = new System.Drawing.Size(114, 13);
+      this.label7.TabIndex = 4;
+      this.label7.Text = "(GeneralLearningRate)";
       // 
       // parentSelectionGroupBox
@@ -252,5 +269,5 @@
       this.parentSelectionGroupBox.Controls.Add(this.commaRadioButton);
       this.parentSelectionGroupBox.Controls.Add(this.plusRadioButton);
-      this.parentSelectionGroupBox.Location = new System.Drawing.Point(218, 307);
+      this.parentSelectionGroupBox.Location = new System.Drawing.Point(168, 310);
       this.parentSelectionGroupBox.Name = "parentSelectionGroupBox";
       this.parentSelectionGroupBox.Size = new System.Drawing.Size(186, 38);
@@ -286,5 +303,5 @@
       // 
       this.setRecombinationButton.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.setRecombinationButton.Location = new System.Drawing.Point(469, 465);
+      this.setRecombinationButton.Location = new System.Drawing.Point(419, 458);
       this.setRecombinationButton.Name = "setRecombinationButton";
       this.setRecombinationButton.Size = new System.Drawing.Size(43, 20);
@@ -297,5 +314,5 @@
       // 
       this.viewRecombinationButton.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.viewRecombinationButton.Location = new System.Drawing.Point(410, 465);
+      this.viewRecombinationButton.Location = new System.Drawing.Point(360, 458);
       this.viewRecombinationButton.Name = "viewRecombinationButton";
       this.viewRecombinationButton.Size = new System.Drawing.Size(53, 20);
@@ -308,5 +325,5 @@
       // 
       this.recombinationTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.recombinationTextBox.Location = new System.Drawing.Point(218, 465);
+      this.recombinationTextBox.Location = new System.Drawing.Point(168, 458);
       this.recombinationTextBox.Name = "recombinationTextBox";
       this.recombinationTextBox.ReadOnly = true;
@@ -318,5 +335,5 @@
       this.recombinationLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
       this.recombinationLabel.AutoSize = true;
-      this.recombinationLabel.Location = new System.Drawing.Point(65, 468);
+      this.recombinationLabel.Location = new System.Drawing.Point(6, 461);
       this.recombinationLabel.Name = "recombinationLabel";
       this.recombinationLabel.Size = new System.Drawing.Size(81, 13);
@@ -327,5 +344,5 @@
       // 
       this.rhoTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.rhoTextBox.Location = new System.Drawing.Point(218, 94);
+      this.rhoTextBox.Location = new System.Drawing.Point(168, 94);
       this.rhoTextBox.Name = "rhoTextBox";
       this.rhoTextBox.Size = new System.Drawing.Size(186, 20);
@@ -336,28 +353,15 @@
       this.rhoLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
       this.rhoLabel.AutoSize = true;
-      this.rhoLabel.Location = new System.Drawing.Point(65, 97);
+      this.rhoLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.rhoLabel.Location = new System.Drawing.Point(6, 97);
       this.rhoLabel.Name = "rhoLabel";
-      this.rhoLabel.Size = new System.Drawing.Size(30, 13);
+      this.rhoLabel.Size = new System.Drawing.Size(45, 13);
       this.rhoLabel.TabIndex = 6;
-      this.rhoLabel.Text = "Rho:";
-      // 
-      // useSuccessRuleCheckBox
-      // 
-      this.useSuccessRuleCheckBox.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.useSuccessRuleCheckBox.AutoSize = true;
-      this.useSuccessRuleCheckBox.Checked = true;
-      this.useSuccessRuleCheckBox.CheckState = System.Windows.Forms.CheckState.Checked;
-      this.useSuccessRuleCheckBox.Location = new System.Drawing.Point(410, 248);
-      this.useSuccessRuleCheckBox.Name = "useSuccessRuleCheckBox";
-      this.useSuccessRuleCheckBox.Size = new System.Drawing.Size(51, 17);
-      this.useSuccessRuleCheckBox.TabIndex = 16;
-      this.useSuccessRuleCheckBox.Text = "Use?";
-      this.useSuccessRuleCheckBox.UseVisualStyleBackColor = true;
-      this.useSuccessRuleCheckBox.CheckedChanged += new System.EventHandler(this.useSuccessRuleCheckBox_CheckedChanged);
+      this.rhoLabel.Text = "Rho (ρ):";
       // 
       // setEvaluationButton
       // 
       this.setEvaluationButton.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.setEvaluationButton.Location = new System.Drawing.Point(469, 439);
+      this.setEvaluationButton.Location = new System.Drawing.Point(419, 432);
       this.setEvaluationButton.Name = "setEvaluationButton";
       this.setEvaluationButton.Size = new System.Drawing.Size(43, 20);
@@ -370,5 +374,5 @@
       // 
       this.setMutationButton.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.setMutationButton.Location = new System.Drawing.Point(469, 413);
+      this.setMutationButton.Location = new System.Drawing.Point(419, 406);
       this.setMutationButton.Name = "setMutationButton";
       this.setMutationButton.Size = new System.Drawing.Size(43, 20);
@@ -381,5 +385,5 @@
       // 
       this.setSolutionGenerationButton.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.setSolutionGenerationButton.Location = new System.Drawing.Point(469, 387);
+      this.setSolutionGenerationButton.Location = new System.Drawing.Point(419, 380);
       this.setSolutionGenerationButton.Name = "setSolutionGenerationButton";
       this.setSolutionGenerationButton.Size = new System.Drawing.Size(43, 20);
@@ -392,5 +396,5 @@
       // 
       this.viewEvaluationButton.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.viewEvaluationButton.Location = new System.Drawing.Point(410, 439);
+      this.viewEvaluationButton.Location = new System.Drawing.Point(360, 432);
       this.viewEvaluationButton.Name = "viewEvaluationButton";
       this.viewEvaluationButton.Size = new System.Drawing.Size(53, 20);
@@ -403,5 +407,5 @@
       // 
       this.viewMutationButton.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.viewMutationButton.Location = new System.Drawing.Point(410, 413);
+      this.viewMutationButton.Location = new System.Drawing.Point(360, 406);
       this.viewMutationButton.Name = "viewMutationButton";
       this.viewMutationButton.Size = new System.Drawing.Size(53, 20);
@@ -414,5 +418,5 @@
       // 
       this.viewSolutionGenerationButton.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.viewSolutionGenerationButton.Location = new System.Drawing.Point(410, 387);
+      this.viewSolutionGenerationButton.Location = new System.Drawing.Point(360, 380);
       this.viewSolutionGenerationButton.Name = "viewSolutionGenerationButton";
       this.viewSolutionGenerationButton.Size = new System.Drawing.Size(53, 20);
@@ -425,5 +429,5 @@
       // 
       this.viewProblemInitializationButton.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.viewProblemInitializationButton.Location = new System.Drawing.Point(410, 361);
+      this.viewProblemInitializationButton.Location = new System.Drawing.Point(360, 354);
       this.viewProblemInitializationButton.Name = "viewProblemInitializationButton";
       this.viewProblemInitializationButton.Size = new System.Drawing.Size(53, 20);
@@ -436,5 +440,5 @@
       // 
       this.setProblemInitializationButton.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.setProblemInitializationButton.Location = new System.Drawing.Point(469, 361);
+      this.setProblemInitializationButton.Location = new System.Drawing.Point(419, 354);
       this.setProblemInitializationButton.Name = "setProblemInitializationButton";
       this.setProblemInitializationButton.Size = new System.Drawing.Size(43, 20);
@@ -447,5 +451,5 @@
       // 
       this.evaluationTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.evaluationTextBox.Location = new System.Drawing.Point(218, 439);
+      this.evaluationTextBox.Location = new System.Drawing.Point(168, 432);
       this.evaluationTextBox.Name = "evaluationTextBox";
       this.evaluationTextBox.ReadOnly = true;
@@ -456,5 +460,5 @@
       // 
       this.mutationTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.mutationTextBox.Location = new System.Drawing.Point(218, 413);
+      this.mutationTextBox.Location = new System.Drawing.Point(168, 406);
       this.mutationTextBox.Name = "mutationTextBox";
       this.mutationTextBox.ReadOnly = true;
@@ -465,5 +469,5 @@
       // 
       this.solutionGenerationTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.solutionGenerationTextBox.Location = new System.Drawing.Point(218, 387);
+      this.solutionGenerationTextBox.Location = new System.Drawing.Point(168, 380);
       this.solutionGenerationTextBox.Name = "solutionGenerationTextBox";
       this.solutionGenerationTextBox.ReadOnly = true;
@@ -474,5 +478,5 @@
       // 
       this.problemInitializationTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.problemInitializationTextBox.Location = new System.Drawing.Point(218, 361);
+      this.problemInitializationTextBox.Location = new System.Drawing.Point(168, 354);
       this.problemInitializationTextBox.Name = "problemInitializationTextBox";
       this.problemInitializationTextBox.ReadOnly = true;
@@ -484,5 +488,5 @@
       this.setRandomSeedRandomlyCheckBox.Anchor = System.Windows.Forms.AnchorStyles.None;
       this.setRandomSeedRandomlyCheckBox.AutoSize = true;
-      this.setRandomSeedRandomlyCheckBox.Location = new System.Drawing.Point(218, 12);
+      this.setRandomSeedRandomlyCheckBox.Location = new System.Drawing.Point(168, 12);
       this.setRandomSeedRandomlyCheckBox.Name = "setRandomSeedRandomlyCheckBox";
       this.setRandomSeedRandomlyCheckBox.Size = new System.Drawing.Size(15, 14);
@@ -490,11 +494,13 @@
       this.setRandomSeedRandomlyCheckBox.UseVisualStyleBackColor = true;
       // 
-      // initialMutationStrengthTextBox
-      // 
-      this.initialMutationStrengthTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.initialMutationStrengthTextBox.Location = new System.Drawing.Point(218, 172);
-      this.initialMutationStrengthTextBox.Name = "initialMutationStrengthTextBox";
-      this.initialMutationStrengthTextBox.Size = new System.Drawing.Size(186, 20);
-      this.initialMutationStrengthTextBox.TabIndex = 13;
+      // initialMutationStrengthVectorTextBox
+      // 
+      this.initialMutationStrengthVectorTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.initialMutationStrengthVectorTextBox.Location = new System.Drawing.Point(168, 198);
+      this.initialMutationStrengthVectorTextBox.Name = "initialMutationStrengthVectorTextBox";
+      this.initialMutationStrengthVectorTextBox.Size = new System.Drawing.Size(186, 20);
+      this.initialMutationStrengthVectorTextBox.TabIndex = 13;
+      this.toolTip.SetToolTip(this.initialMutationStrengthVectorTextBox, resources.GetString("initialMutationStrengthVectorTextBox.ToolTip"));
+      this.initialMutationStrengthVectorTextBox.Validated += new System.EventHandler(this.initialMutationStrengthVectorTextBox_Validated);
       // 
       // evaluationLabel
@@ -502,5 +508,5 @@
       this.evaluationLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
       this.evaluationLabel.AutoSize = true;
-      this.evaluationLabel.Location = new System.Drawing.Point(65, 442);
+      this.evaluationLabel.Location = new System.Drawing.Point(6, 435);
       this.evaluationLabel.Name = "evaluationLabel";
       this.evaluationLabel.Size = new System.Drawing.Size(60, 13);
@@ -512,5 +518,5 @@
       this.mutationLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
       this.mutationLabel.AutoSize = true;
-      this.mutationLabel.Location = new System.Drawing.Point(65, 416);
+      this.mutationLabel.Location = new System.Drawing.Point(6, 409);
       this.mutationLabel.Name = "mutationLabel";
       this.mutationLabel.Size = new System.Drawing.Size(51, 13);
@@ -522,5 +528,5 @@
       this.solutionGenerationLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
       this.solutionGenerationLabel.AutoSize = true;
-      this.solutionGenerationLabel.Location = new System.Drawing.Point(65, 390);
+      this.solutionGenerationLabel.Location = new System.Drawing.Point(6, 383);
       this.solutionGenerationLabel.Name = "solutionGenerationLabel";
       this.solutionGenerationLabel.Size = new System.Drawing.Size(103, 13);
@@ -532,5 +538,5 @@
       this.problemInitializationLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
       this.problemInitializationLabel.AutoSize = true;
-      this.problemInitializationLabel.Location = new System.Drawing.Point(65, 364);
+      this.problemInitializationLabel.Location = new System.Drawing.Point(6, 357);
       this.problemInitializationLabel.Name = "problemInitializationLabel";
       this.problemInitializationLabel.Size = new System.Drawing.Size(105, 13);
@@ -542,9 +548,9 @@
       this.initialMutationStrengthLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
       this.initialMutationStrengthLabel.AutoSize = true;
-      this.initialMutationStrengthLabel.Location = new System.Drawing.Point(65, 175);
+      this.initialMutationStrengthLabel.Location = new System.Drawing.Point(6, 201);
       this.initialMutationStrengthLabel.Name = "initialMutationStrengthLabel";
-      this.initialMutationStrengthLabel.Size = new System.Drawing.Size(121, 13);
+      this.initialMutationStrengthLabel.Size = new System.Drawing.Size(155, 13);
       this.initialMutationStrengthLabel.TabIndex = 12;
-      this.initialMutationStrengthLabel.Text = "Initial Mutation Strength:";
+      this.initialMutationStrengthLabel.Text = "Initial Mutation Strength Vector:";
       // 
       // mutationRateLabel
@@ -552,14 +558,15 @@
       this.mutationRateLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
       this.mutationRateLabel.AutoSize = true;
-      this.mutationRateLabel.Location = new System.Drawing.Point(65, 123);
+      this.mutationRateLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.mutationRateLabel.Location = new System.Drawing.Point(6, 123);
       this.mutationRateLabel.Name = "mutationRateLabel";
-      this.mutationRateLabel.Size = new System.Drawing.Size(48, 13);
+      this.mutationRateLabel.Size = new System.Drawing.Size(62, 13);
       this.mutationRateLabel.TabIndex = 8;
-      this.mutationRateLabel.Text = "Lambda:";
+      this.mutationRateLabel.Text = "Lambda (λ):";
       // 
       // maximumGenerationsTextBox
       // 
       this.maximumGenerationsTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.maximumGenerationsTextBox.Location = new System.Drawing.Point(218, 146);
+      this.maximumGenerationsTextBox.Location = new System.Drawing.Point(168, 146);
       this.maximumGenerationsTextBox.Name = "maximumGenerationsTextBox";
       this.maximumGenerationsTextBox.Size = new System.Drawing.Size(186, 20);
@@ -570,5 +577,5 @@
       this.maximumGenerationsLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
       this.maximumGenerationsLabel.AutoSize = true;
-      this.maximumGenerationsLabel.Location = new System.Drawing.Point(65, 149);
+      this.maximumGenerationsLabel.Location = new System.Drawing.Point(6, 149);
       this.maximumGenerationsLabel.Name = "maximumGenerationsLabel";
       this.maximumGenerationsLabel.Size = new System.Drawing.Size(114, 13);
@@ -579,5 +586,5 @@
       // 
       this.randomSeedTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.randomSeedTextBox.Location = new System.Drawing.Point(218, 32);
+      this.randomSeedTextBox.Location = new System.Drawing.Point(168, 32);
       this.randomSeedTextBox.Name = "randomSeedTextBox";
       this.randomSeedTextBox.Size = new System.Drawing.Size(186, 20);
@@ -587,5 +594,5 @@
       // 
       this.muTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.muTextBox.Location = new System.Drawing.Point(218, 68);
+      this.muTextBox.Location = new System.Drawing.Point(168, 68);
       this.muTextBox.Name = "muTextBox";
       this.muTextBox.Size = new System.Drawing.Size(186, 20);
@@ -596,5 +603,5 @@
       this.setRandomSeedRandomlyLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
       this.setRandomSeedRandomlyLabel.AutoSize = true;
-      this.setRandomSeedRandomlyLabel.Location = new System.Drawing.Point(65, 12);
+      this.setRandomSeedRandomlyLabel.Location = new System.Drawing.Point(6, 12);
       this.setRandomSeedRandomlyLabel.Name = "setRandomSeedRandomlyLabel";
       this.setRandomSeedRandomlyLabel.Size = new System.Drawing.Size(147, 13);
@@ -606,5 +613,5 @@
       this.randomSeedLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
       this.randomSeedLabel.AutoSize = true;
-      this.randomSeedLabel.Location = new System.Drawing.Point(65, 35);
+      this.randomSeedLabel.Location = new System.Drawing.Point(6, 35);
       this.randomSeedLabel.Name = "randomSeedLabel";
       this.randomSeedLabel.Size = new System.Drawing.Size(78, 13);
@@ -612,18 +619,69 @@
       this.randomSeedLabel.Text = "&Random Seed:";
       // 
+      // label6
+      // 
+      this.label6.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.label6.AutoSize = true;
+      this.label6.Location = new System.Drawing.Point(357, 201);
+      this.label6.Name = "label6";
+      this.label6.Size = new System.Drawing.Size(87, 13);
+      this.label6.TabIndex = 4;
+      this.label6.Text = "(ShakingFactors)";
+      // 
+      // label5
+      // 
+      this.label5.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.label5.AutoSize = true;
+      this.label5.Location = new System.Drawing.Point(357, 149);
+      this.label5.Name = "label5";
+      this.label5.Size = new System.Drawing.Size(114, 13);
+      this.label5.TabIndex = 4;
+      this.label5.Text = "(MaximumGenerations)";
+      // 
+      // label4
+      // 
+      this.label4.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.label4.AutoSize = true;
+      this.label4.Location = new System.Drawing.Point(356, 123);
+      this.label4.Name = "label4";
+      this.label4.Size = new System.Drawing.Size(61, 13);
+      this.label4.TabIndex = 4;
+      this.label4.Text = "(ESlambda)";
+      // 
+      // label3
+      // 
+      this.label3.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.label3.AutoSize = true;
+      this.label3.Location = new System.Drawing.Point(357, 97);
+      this.label3.Name = "label3";
+      this.label3.Size = new System.Drawing.Size(42, 13);
+      this.label3.TabIndex = 4;
+      this.label3.Text = "(ESrho)";
+      // 
+      // label2
+      // 
+      this.label2.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.label2.AutoSize = true;
+      this.label2.Location = new System.Drawing.Point(357, 71);
+      this.label2.Name = "label2";
+      this.label2.Size = new System.Drawing.Size(41, 13);
+      this.label2.TabIndex = 4;
+      this.label2.Text = "(ESmu)";
+      // 
       // populationSizeLabel
       // 
       this.populationSizeLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
       this.populationSizeLabel.AutoSize = true;
-      this.populationSizeLabel.Location = new System.Drawing.Point(65, 71);
+      this.populationSizeLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.populationSizeLabel.Location = new System.Drawing.Point(6, 71);
       this.populationSizeLabel.Name = "populationSizeLabel";
-      this.populationSizeLabel.Size = new System.Drawing.Size(25, 13);
+      this.populationSizeLabel.Size = new System.Drawing.Size(40, 13);
       this.populationSizeLabel.TabIndex = 4;
-      this.populationSizeLabel.Text = "Mu:";
+      this.populationSizeLabel.Text = "Mu (µ):";
       // 
       // lambdaTextBox
       // 
       this.lambdaTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.lambdaTextBox.Location = new System.Drawing.Point(218, 120);
+      this.lambdaTextBox.Location = new System.Drawing.Point(168, 120);
       this.lambdaTextBox.Name = "lambdaTextBox";
       this.lambdaTextBox.Size = new System.Drawing.Size(186, 20);
@@ -636,5 +694,5 @@
       this.scopesTabPage.Name = "scopesTabPage";
       this.scopesTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.scopesTabPage.Size = new System.Drawing.Size(518, 497);
+      this.scopesTabPage.Size = new System.Drawing.Size(493, 461);
       this.scopesTabPage.TabIndex = 2;
       this.scopesTabPage.Text = "Scopes";
@@ -648,5 +706,5 @@
       this.scopeView.Name = "scopeView";
       this.scopeView.Scope = null;
-      this.scopeView.Size = new System.Drawing.Size(512, 491);
+      this.scopeView.Size = new System.Drawing.Size(487, 455);
       this.scopeView.TabIndex = 0;
       // 
@@ -655,5 +713,5 @@
       this.abortButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
       this.abortButton.Enabled = false;
-      this.abortButton.Location = new System.Drawing.Point(81, 529);
+      this.abortButton.Location = new System.Drawing.Point(81, 527);
       this.abortButton.Name = "abortButton";
       this.abortButton.Size = new System.Drawing.Size(75, 23);
@@ -666,5 +724,5 @@
       // 
       this.resetButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.resetButton.Location = new System.Drawing.Point(162, 529);
+      this.resetButton.Location = new System.Drawing.Point(162, 527);
       this.resetButton.Name = "resetButton";
       this.resetButton.Size = new System.Drawing.Size(75, 23);
@@ -677,5 +735,5 @@
       // 
       this.cloneEngineButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
-      this.cloneEngineButton.Location = new System.Drawing.Point(420, 529);
+      this.cloneEngineButton.Location = new System.Drawing.Point(395, 527);
       this.cloneEngineButton.Name = "cloneEngineButton";
       this.cloneEngineButton.Size = new System.Drawing.Size(106, 23);
@@ -684,4 +742,30 @@
       this.cloneEngineButton.UseVisualStyleBackColor = true;
       this.cloneEngineButton.Click += new System.EventHandler(this.cloneEngineButton_Click);
+      // 
+      // toolTip
+      // 
+      this.toolTip.AutomaticDelay = 200;
+      this.toolTip.AutoPopDelay = 10000;
+      this.toolTip.InitialDelay = 200;
+      this.toolTip.ReshowDelay = 40;
+      // 
+      // problemDimensionLabel
+      // 
+      this.problemDimensionLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.problemDimensionLabel.AutoSize = true;
+      this.problemDimensionLabel.Location = new System.Drawing.Point(7, 175);
+      this.problemDimensionLabel.Name = "problemDimensionLabel";
+      this.problemDimensionLabel.Size = new System.Drawing.Size(100, 13);
+      this.problemDimensionLabel.TabIndex = 12;
+      this.problemDimensionLabel.Text = "Problem Dimension:";
+      // 
+      // problemDimensionTextBox
+      // 
+      this.problemDimensionTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.problemDimensionTextBox.Location = new System.Drawing.Point(168, 172);
+      this.problemDimensionTextBox.Name = "problemDimensionTextBox";
+      this.problemDimensionTextBox.Size = new System.Drawing.Size(186, 20);
+      this.problemDimensionTextBox.TabIndex = 13;
+      this.problemDimensionTextBox.Validated += new System.EventHandler(this.problemDimensionTextBox_Validated);
       // 
       // ESEditor
@@ -695,5 +779,5 @@
       this.Controls.Add(this.executeButton);
       this.Name = "ESEditor";
-      this.Size = new System.Drawing.Size(526, 552);
+      this.Size = new System.Drawing.Size(501, 550);
       this.tabControl.ResumeLayout(false);
       this.parametersTabPage.ResumeLayout(false);
@@ -722,5 +806,5 @@
     private System.Windows.Forms.TextBox maximumGenerationsTextBox;
     private System.Windows.Forms.Label maximumGenerationsLabel;
-    private System.Windows.Forms.TextBox initialMutationStrengthTextBox;
+    private System.Windows.Forms.TextBox initialMutationStrengthVectorTextBox;
     private System.Windows.Forms.Label initialMutationStrengthLabel;
     private System.Windows.Forms.TextBox randomSeedTextBox;
@@ -746,7 +830,6 @@
     private System.Windows.Forms.Button viewSolutionGenerationButton;
     private System.Windows.Forms.Button viewProblemInitializationButton;
-    private System.Windows.Forms.TextBox targetSuccessRateTextBox;
+    private System.Windows.Forms.TextBox generalLearningRateTextBox;
     private System.Windows.Forms.Label targetSuccessRateLabel;
-    private System.Windows.Forms.CheckBox useSuccessRuleCheckBox;
     private System.Windows.Forms.Button setRecombinationButton;
     private System.Windows.Forms.Button viewRecombinationButton;
@@ -761,6 +844,14 @@
     private System.Windows.Forms.TextBox learningRateTextBox;
     private System.Windows.Forms.Label label1;
-    private System.Windows.Forms.TextBox dampeningFactorTextBox;
-    private System.Windows.Forms.Label dampeningFactorLabel;
+    private System.Windows.Forms.Label label5;
+    private System.Windows.Forms.Label label4;
+    private System.Windows.Forms.Label label3;
+    private System.Windows.Forms.Label label2;
+    private System.Windows.Forms.Label label6;
+    private System.Windows.Forms.Label label8;
+    private System.Windows.Forms.Label label7;
+    private System.Windows.Forms.ToolTip toolTip;
+    private System.Windows.Forms.TextBox problemDimensionTextBox;
+    private System.Windows.Forms.Label problemDimensionLabel;
   }
 }
Index: trunk/sources/HeuristicLab.ES/ESEditor.cs
===================================================================
--- trunk/sources/HeuristicLab.ES/ESEditor.cs	(revision 1090)
+++ trunk/sources/HeuristicLab.ES/ESEditor.cs	(revision 1091)
@@ -52,4 +52,5 @@
     public ESEditor() {
       InitializeComponent();
+      problemDimensionTextBox.Text = "1";
     }
     /// <summary>
@@ -93,4 +94,5 @@
       lambdaTextBox.Text = ES.Lambda.ToString();
       learningRateTextBox.Text = ES.LearningRate.ToString();
+      generalLearningRateTextBox.Text = ES.GeneralLearningRate.ToString();
     }
 
@@ -110,4 +112,5 @@
         evaluationTextBox.Text = ES.Evaluator.GetType().Name;
         recombinationTextBox.Text = ES.Recombinator.GetType().Name;
+        initialMutationStrengthVectorTextBox.Text = ArrayToString<double>(ES.ShakingFactors);
       }
     }
@@ -120,9 +123,6 @@
       lambdaTextBox.DataBindings.Add("Text", ES, "Lambda");
       maximumGenerationsTextBox.DataBindings.Add("Text", ES, "MaximumGenerations");
-      initialMutationStrengthTextBox.DataBindings.Add("Text", ES, "ShakingFactor");
-      targetSuccessRateTextBox.DataBindings.Add("Text", ES, "SuccessProbability");
+      generalLearningRateTextBox.DataBindings.Add("Text", ES, "GeneralLearningRate");
       learningRateTextBox.DataBindings.Add("Text", ES, "LearningRate");
-      dampeningFactorTextBox.DataBindings.Add("Text", ES, "DampeningFactor");
-      useSuccessRuleCheckBox.DataBindings.Add("Checked", ES, "UseSuccessRule");
     }
 
@@ -229,12 +229,4 @@
     #endregion
 
-    #region CheckBox Events
-    private void useSuccessRuleCheckBox_CheckedChanged(object sender, EventArgs e) {
-      targetSuccessRateTextBox.Enabled = useSuccessRuleCheckBox.Checked;
-      learningRateTextBox.Enabled = useSuccessRuleCheckBox.Checked;
-      dampeningFactorTextBox.Enabled = useSuccessRuleCheckBox.Checked;
-    }
-    #endregion
-
     #region RadioButton Events
     private void plusRadioButton_CheckedChanged(object sender, EventArgs e) {
@@ -246,4 +238,56 @@
     }
     #endregion
+
+    private string ArrayToString<T>(T[] array) {
+      StringBuilder s = new StringBuilder();
+      foreach (T element in array)
+        s.Append(element + "; ");
+      s.Remove(s.Length - 2, 2);
+      return s.ToString();
+    }
+
+    private double[] StringToDoubleArray(string str) {
+      
+      string[] s = str.Split(new char[] { ';' });
+      double[] tmp = new double[s.Length];
+      try {
+        for (int i = 0; i < s.Length; i++) {
+          tmp[i] = double.Parse(s[i]);
+        }
+      } catch (FormatException) {        
+        return null;
+      }
+      return tmp;
+    }
+
+    private void initialMutationStrengthVectorTextBox_Validated(object sender, EventArgs e) {
+      double[] tmp = StringToDoubleArray(initialMutationStrengthVectorTextBox.Text);
+      if (tmp != null) ES.ShakingFactors = tmp;
+      else MessageBox.Show("Please use colons \";\" (without the quotes) to delimite the items like this: " + (1.2).ToString() + ";" + (1.1).ToString() + ";" + (3.453).ToString());
+      int dim = int.Parse(problemDimensionTextBox.Text);
+      if (ES.ShakingFactors.Length != dim) {
+        problemDimensionTextBox.Text = ES.ShakingFactors.Length.ToString();
+      }
+      Refresh();
+    }
+
+    private void problemDimensionTextBox_Validated(object sender, EventArgs e) {
+      double[] tmp = StringToDoubleArray(initialMutationStrengthVectorTextBox.Text);
+      if (tmp != null) {
+        int dim = 0;
+        try {
+          dim = int.Parse(problemDimensionTextBox.Text);
+          if (dim < 1) throw new FormatException();
+        } catch (FormatException) {
+          MessageBox.Show("Problem Dimension must contain an integer > 0");
+        }
+        double[] shakingFactors = new double[dim];
+        for (int i = 0; i < dim; i++) {
+          shakingFactors[i] = tmp[i % tmp.Length];
+        }
+        ES.ShakingFactors = shakingFactors;
+        Refresh();
+      }
+    }
   }
 }
Index: trunk/sources/HeuristicLab.ES/ESEditor.resx
===================================================================
--- trunk/sources/HeuristicLab.ES/ESEditor.resx	(revision 1090)
+++ trunk/sources/HeuristicLab.ES/ESEditor.resx	(revision 1091)
@@ -118,3 +118,14 @@
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
+  <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>7, 3</value>
+  </metadata>
+  <data name="initialMutationStrengthVectorTextBox.ToolTip" xml:space="preserve">
+    <value>Enter a pattern that is used to generate the initial strategy vector.
+This can be a single number, or a pattern of numbers which is used until the dimension is reached.
+Use the colon ; to separate two numbers.</value>
+  </data>
+  <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>26</value>
+  </metadata>
 </root>
