Index: trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/MctsSymbolicRegression/MctsSymbolicRegressionAlgorithm.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/MctsSymbolicRegression/MctsSymbolicRegressionAlgorithm.cs	(revision 13666)
+++ trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/MctsSymbolicRegression/MctsSymbolicRegressionAlgorithm.cs	(revision 13669)
@@ -209,4 +209,7 @@
       Results.Add(new Result("Iterations", iterations));
 
+      var bestSolutionIteration = new IntValue(0);
+      Results.Add(new Result("Best solution iteration", bestSolutionIteration));
+
       var table = new DataTable("Qualities");
       table.Rows.Add(new DataRow("Best quality"));
@@ -261,5 +264,4 @@
       double bestQ = 0.0;
       double curBestQ = 0.0;
-      double q = 0.0;
       int n = 0;
       // Loop until iteration limit reached or canceled.
@@ -267,5 +269,5 @@
         cancellationToken.ThrowIfCancellationRequested();
 
-        q = MctsSymbolicRegressionStatic.MakeStep(state);
+        var q = MctsSymbolicRegressionStatic.MakeStep(state);
         sumQ += q; // sum of qs in the last updateinterval iterations
         curBestQ = Math.Max(q, curBestQ); // the best q in the last updateinterval iterations
@@ -274,4 +276,7 @@
         // iteration results
         if (n == updateInterval) {
+          if (bestQ > bestQuality.Value) {
+            bestSolutionIteration.Value = i;
+          }
           bestQuality.Value = bestQ;
           curQuality.Value = curBestQ;
@@ -295,4 +300,7 @@
       // final results
       if (n > 0) {
+        if (bestQ > bestQuality.Value) {
+          bestSolutionIteration.Value = iterations.Value + n;
+        }
         bestQuality.Value = bestQ;
         curQuality.Value = curBestQ;
Index: trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/MctsSymbolicRegression/MctsSymbolicRegressionStatic.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/MctsSymbolicRegression/MctsSymbolicRegressionStatic.cs	(revision 13666)
+++ trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/MctsSymbolicRegression/MctsSymbolicRegressionStatic.cs	(revision 13669)
@@ -418,7 +418,7 @@
         }
       }
-      // no final state -> select a random child
+      // no final state -> select a the first child
       if (selectedChildIdx == -1) {
-        selectedChildIdx = rand.Next(tree.children.Length);
+        selectedChildIdx = 0;
       }
       return tree.children[selectedChildIdx];
Index: trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/MctsSymbolicRegression/Policies/EpsGreedy.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/MctsSymbolicRegression/Policies/EpsGreedy.cs	(revision 13666)
+++ trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/MctsSymbolicRegression/Policies/EpsGreedy.cs	(revision 13669)
@@ -9,6 +9,8 @@
 using HeuristicLab.Data;
 using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Algorithms.DataAnalysis.MctsSymbolicRegression.Policies {
+  [StorableClass]
   [Item("EpsilonGreedy", "Epsilon greedy policy with parameter eps to balance between exploitation and exploration")]
   public class EpsilonGreedy : PolicyBase {
@@ -30,4 +32,6 @@
     }
 
+    [StorableConstructor]
+    protected EpsilonGreedy(bool deserializing) : base(deserializing) { }
     protected EpsilonGreedy(EpsilonGreedy original, Cloner cloner)
       : base(original, cloner) {
Index: trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/MctsSymbolicRegression/Policies/PolicyBase.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/MctsSymbolicRegression/Policies/PolicyBase.cs	(revision 13666)
+++ trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/MctsSymbolicRegression/Policies/PolicyBase.cs	(revision 13669)
@@ -16,5 +16,5 @@
 
     [StorableConstructor]
-    private PolicyBase(bool deserializing) : base(deserializing) { }
+    protected PolicyBase(bool deserializing) : base(deserializing) { }
     protected PolicyBase(PolicyBase original, Cloner cloner)
       : base(original, cloner) {
Index: trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/MctsSymbolicRegression/Policies/Ucb.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/MctsSymbolicRegression/Policies/Ucb.cs	(revision 13666)
+++ trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/MctsSymbolicRegression/Policies/Ucb.cs	(revision 13669)
@@ -9,6 +9,8 @@
 using HeuristicLab.Data;
 using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Algorithms.DataAnalysis.MctsSymbolicRegression.Policies {
+  [StorableClass]
   [Item("Ucb Policy", "Ucb with parameter c to balance between exploitation and exploration")]
   public class Ucb : PolicyBase {
@@ -30,4 +32,6 @@
     }
 
+    [StorableConstructor]
+    protected Ucb(bool deserializing) : base(deserializing) { }
     protected Ucb(Ucb original, Cloner cloner)
       : base(original, cloner) {
Index: trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/MctsSymbolicRegression/Policies/UcbTuned.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/MctsSymbolicRegression/Policies/UcbTuned.cs	(revision 13666)
+++ trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/MctsSymbolicRegression/Policies/UcbTuned.cs	(revision 13669)
@@ -9,6 +9,8 @@
 using HeuristicLab.Data;
 using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Algorithms.DataAnalysis.MctsSymbolicRegression.Policies {
+  [StorableClass]
   [Item("UcbTuned Policy", "UcbTuned is similar to Ucb but tracks empirical variance. Use parameter c to balance between exploitation and exploration")]
   public class UcbTuned : PolicyBase {
@@ -32,4 +34,6 @@
     }
 
+    [StorableConstructor]
+    protected UcbTuned(bool deserializing) : base(deserializing) { }
     protected UcbTuned(UcbTuned original, Cloner cloner)
       : base(original, cloner) {
