Index: branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProgrammableProblem.cs
===================================================================
--- branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProgrammableProblem.cs	(revision 11393)
+++ branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProgrammableProblem.cs	(revision 11395)
@@ -147,5 +147,5 @@
 
       if (solutionCreators.Count == 1) {
-        UpdateSingleVectorEncodingOperators(solutionCreators);
+        UpdateSingleVectorEncodingOperators(solutionCreators, configuration);
       } else {
         UpdateMultiVectorEncodingOperators(solutionCreators, configuration);
@@ -229,5 +229,5 @@
     }
 
-    protected virtual void UpdateSingleVectorEncodingOperators(List<ISolutionCreator> solutionCreators) {
+    protected virtual void UpdateSingleVectorEncodingOperators(List<ISolutionCreator> solutionCreators, Configuration configuration) {
       var newCreator = solutionCreators.Single();
       var binCreator = newCreator as IBinaryVectorCreator;
@@ -265,12 +265,22 @@
         Operators.RemoveAll(x => x is ICrossover && !(x is IIntegerVectorCrossover) || x is IIntegerVectorCrossover && ((IIntegerVectorCrossover)x).ChildParameter.ActualName != paramName);
         Operators.RemoveAll(x => x is IManipulator && !(x is IIntegerVectorManipulator) || x is IIntegerVectorManipulator && ((IIntegerVectorManipulator)x).IntegerVectorParameter.ActualName != paramName);
+        Operators.RemoveAll(x => x is IStrategyParameterCreator && !(x is IIntegerVectorStdDevStrategyParameterCreator) || x is IIntegerVectorStdDevStrategyParameterCreator && ((IIntegerVectorStdDevStrategyParameterCreator)x).StrategyParameterParameter.ActualName != paramName + "Strategy");
+        Operators.RemoveAll(x => x is IStrategyParameterManipulator && !(x is IIntegerVectorStdDevStrategyParameterManipulator) || x is IIntegerVectorStdDevStrategyParameterManipulator && ((IIntegerVectorStdDevStrategyParameterManipulator)x).StrategyParameterParameter.ActualName != paramName + "Strategy");
+        Operators.RemoveAll(x => x is IStrategyParameterCrossover && !(x is IIntegerVectorStdDevStrategyParameterCrossover) || x is IIntegerVectorStdDevStrategyParameterCrossover && ((IIntegerVectorStdDevStrategyParameterCrossover)x).StrategyParameterParameter.ActualName != paramName + "Strategy");
         var crossovers = ApplicationManager.Manager.GetInstances<IIntegerVectorCrossover>().ToList();
         var manipulators = ApplicationManager.Manager.GetInstances<IIntegerVectorManipulator>().ToList();
+        var strategyOperators = ApplicationManager.Manager.GetInstances<IIntegerVectorStdDevStrategyParameterOperator>().ToList();
         foreach (var xo in crossovers) {
           xo.ChildParameter.ActualName = intCreator.IntegerVectorParameter.ActualName;
           xo.ParentsParameter.ActualName = intCreator.IntegerVectorParameter.ActualName;
         }
-        foreach (var m in manipulators)
+        foreach (var m in manipulators) {
           m.IntegerVectorParameter.ActualName = intCreator.IntegerVectorParameter.ActualName;
+          var sm = m as ISelfAdaptiveManipulator;
+          if (sm != null) {
+            var p = sm.StrategyParameterParameter as ILookupParameter;
+            if (p != null) p.ActualName = paramName + "Strategy";
+          }
+        }
         foreach (var bo in crossovers.OfType<IBoundedIntegerVectorOperator>()
               .Concat(manipulators.OfType<IBoundedIntegerVectorOperator>())
@@ -278,6 +288,39 @@
           bo.BoundsParameter.ActualName = intCreator.BoundsParameter.ActualName;
         }
+        if (!(configuration.Parameters.First().Value is IntegerParameterConfiguration)) throw new InvalidOperationException("Single-encoded problem with integervector creator that is not an integer-coded problem.");
+        var problemSize = ((IntegerParameterConfiguration)configuration.Parameters.First().Value).Length.Value;
+        var b = ((IntegerParameterConfiguration)configuration.Parameters.First().Value).Bounds;
+        var bounds = new DoubleMatrix(b.Rows, b.Columns);
+        for (var i = 0; i < bounds.Rows; i++) {
+          bounds[i, 1] = (int)Math.Ceiling(0.33 * (b[i, 1] - b[i, 0]));
+          bounds[i, 0] = 0;
+          if (bounds.Columns > 2) bounds[i, 2] = b[i, 2];
+        }
+        foreach (var s in strategyOperators) {
+          var c = s as IIntegerVectorStdDevStrategyParameterCreator;
+          if (c != null) {
+            c.BoundsParameter.Value = (DoubleMatrix)bounds.Clone();
+            c.LengthParameter.ActualName = intCreator.LengthParameter.ActualName;
+            c.StrategyParameterParameter.ActualName = paramName + "Strategy";
+          }
+          var m = s as IIntegerVectorStdDevStrategyParameterManipulator;
+          if (m != null) {
+            m.BoundsParameter.Value = (DoubleMatrix)bounds.Clone();
+            m.StrategyParameterParameter.ActualName = paramName + "Strategy";
+          }
+          var mm = s as Encodings.IntegerVectorEncoding.StdDevStrategyVectorManipulator;
+          if (mm != null) {
+            mm.GeneralLearningRateParameter.Value = new DoubleValue(1.0 / Math.Sqrt(2 * problemSize));
+            mm.LearningRateParameter.Value = new DoubleValue(1.0 / Math.Sqrt(2 * Math.Sqrt(problemSize)));
+          }
+          var x = s as IIntegerVectorStdDevStrategyParameterCrossover;
+          if (x != null) {
+            x.ParentsParameter.ActualName = paramName + "Strategy";
+            x.StrategyParameterParameter.ActualName = paramName + "Strategy";
+          }
+        }
         Operators.AddRange(crossovers.Where(x => Operators.All(y => x.GetType() != y.GetType())));
         Operators.AddRange(manipulators.Where(x => Operators.All(y => x.GetType() != y.GetType())));
+        Operators.AddRange(strategyOperators.Where(x => Operators.All(y => x.GetType() != y.GetType())));
       }
       var realCreator = newCreator as IRealVectorCreator;
@@ -293,17 +336,57 @@
         Operators.RemoveAll(x => x is ICrossover && !(x is IRealVectorCrossover) || x is IRealVectorCrossover && ((IRealVectorCrossover)x).ChildParameter.ActualName != paramName);
         Operators.RemoveAll(x => x is IManipulator && !(x is IRealVectorManipulator) || x is IRealVectorManipulator && ((IRealVectorManipulator)x).RealVectorParameter.ActualName != paramName);
+        Operators.RemoveAll(x => x is IStrategyParameterCreator && !(x is IRealVectorStdDevStrategyParameterCreator) || x is IRealVectorStdDevStrategyParameterCreator && ((IRealVectorStdDevStrategyParameterCreator)x).StrategyParameterParameter.ActualName != paramName + "Strategy");
+        Operators.RemoveAll(x => x is IStrategyParameterManipulator && !(x is IRealVectorStdDevStrategyParameterManipulator) || x is IRealVectorStdDevStrategyParameterManipulator && ((IRealVectorStdDevStrategyParameterManipulator)x).StrategyParameterParameter.ActualName != paramName + "Strategy");
+        Operators.RemoveAll(x => x is IStrategyParameterCrossover && !(x is IRealVectorStdDevStrategyParameterCrossover) || x is IRealVectorStdDevStrategyParameterCrossover && ((IRealVectorStdDevStrategyParameterCrossover)x).StrategyParameterParameter.ActualName != paramName + "Strategy");
         var crossovers = ApplicationManager.Manager.GetInstances<IRealVectorCrossover>().ToList();
         var manipulators = ApplicationManager.Manager.GetInstances<IRealVectorManipulator>().ToList();
+        var strategyOperators = ApplicationManager.Manager.GetInstances<IRealVectorStdDevStrategyParameterOperator>().ToList();
         foreach (var xo in crossovers) {
-          xo.ChildParameter.ActualName = realCreator.RealVectorParameter.ActualName;
-          xo.ParentsParameter.ActualName = realCreator.RealVectorParameter.ActualName;
+          xo.ChildParameter.ActualName = paramName;
+          xo.ParentsParameter.ActualName = paramName;
           xo.BoundsParameter.ActualName = realCreator.BoundsParameter.ActualName;
         }
         foreach (var m in manipulators) {
-          m.RealVectorParameter.ActualName = realCreator.RealVectorParameter.ActualName;
+          m.RealVectorParameter.ActualName = paramName;
           m.BoundsParameter.ActualName = realCreator.BoundsParameter.ActualName;
+          var sm = m as ISelfAdaptiveManipulator;
+          if (sm != null) {
+            var p = sm.StrategyParameterParameter as ILookupParameter;
+            if (p != null) p.ActualName = paramName + "Strategy";
+          }
+        }
+        if (!(configuration.Parameters.First().Value is RealParameterConfiguration)) throw new InvalidOperationException("Single-encoded problem with realvector creator that is not a real-coded problem.");
+        var problemSize = ((RealParameterConfiguration)configuration.Parameters.First().Value).Length.Value;
+        var bounds = (DoubleMatrix)((RealParameterConfiguration)configuration.Parameters.First().Value).Bounds.Clone();
+        for (var i = 0; i < bounds.Rows; i++) {
+          bounds[i, 1] = 0.1 * (bounds[i, 1] - bounds[i, 0]);
+          bounds[i, 0] = 0;
+        }
+        foreach (var s in strategyOperators) {
+          var c = s as IRealVectorStdDevStrategyParameterCreator;
+          if (c != null) {
+            c.BoundsParameter.Value = (DoubleMatrix)bounds.Clone();
+            c.LengthParameter.ActualName = realCreator.LengthParameter.ActualName;
+            c.StrategyParameterParameter.ActualName = paramName + "Strategy";
+          }
+          var m = s as IRealVectorStdDevStrategyParameterManipulator;
+          if (m != null) {
+            m.BoundsParameter.Value = (DoubleMatrix)bounds.Clone();
+            m.StrategyParameterParameter.ActualName = paramName + "Strategy";
+          }
+          var mm = s as Encodings.RealVectorEncoding.StdDevStrategyVectorManipulator;
+          if (mm != null) {
+            mm.GeneralLearningRateParameter.Value = new DoubleValue(1.0 / Math.Sqrt(2 * problemSize));
+            mm.LearningRateParameter.Value = new DoubleValue(1.0 / Math.Sqrt(2 * Math.Sqrt(problemSize)));
+          }
+          var x = s as IRealVectorStdDevStrategyParameterCrossover;
+          if (x != null) {
+            x.ParentsParameter.ActualName = paramName + "Strategy";
+            x.StrategyParameterParameter.ActualName = paramName + "Strategy";
+          }
         }
         Operators.AddRange(crossovers.Where(x => Operators.All(y => x.GetType() != y.GetType())));
         Operators.AddRange(manipulators.Where(x => Operators.All(y => x.GetType() != y.GetType())));
+        Operators.AddRange(strategyOperators.Where(x => Operators.All(y => x.GetType() != y.GetType())));
       }
       var permCreator = newCreator as IPermutationCreator;
