Index: /branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.DataAnalysis.Symbolic/3.3/ConsecutiveSamplesEvaluator.cs
===================================================================
--- /branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.DataAnalysis.Symbolic/3.3/ConsecutiveSamplesEvaluator.cs	(revision 10352)
+++ /branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.DataAnalysis.Symbolic/3.3/ConsecutiveSamplesEvaluator.cs	(revision 10353)
@@ -63,9 +63,9 @@
       get { return (ILookupParameter<IntRange>)Parameters[FixedSamplesPartitionParameterName]; }
     }
-    public IFixedValueParameter<IntValue> ConsecutiveSamplesParameter {
-      get { return (IFixedValueParameter<IntValue>)Parameters[ConsecutiveSamplesParameterName]; }
+    public IFixedValueParameter<PercentValue> ConsecutiveSamplesParameter {
+      get { return (IFixedValueParameter<PercentValue>)Parameters[ConsecutiveSamplesParameterName]; }
     }
-    public IFixedValueParameter<IntValue> OverlapParameter {
-      get { return (IFixedValueParameter<IntValue>)Parameters[OverlapParameterName]; }
+    public IFixedValueParameter<PercentValue> OverlapParameter {
+      get { return (IFixedValueParameter<PercentValue>)Parameters[OverlapParameterName]; }
     }
     public IValueLookupParameter<IntValue> DataMigrationIntervalParameter {
@@ -86,10 +86,10 @@
     #region properties
 
-    public int ConsecutiveSamples {
+    public double ConsecutiveSamples {
       get { return ConsecutiveSamplesParameter.Value.Value; }
       set { ConsecutiveSamplesParameter.Value.Value = value; }
     }
 
-    public int Overlap {
+    public double Overlap {
       get { return OverlapParameter.Value.Value; }
       set { OverlapParameter.Value.Value = value; }
@@ -113,6 +113,6 @@
       Parameters.Add(new LookupParameter<IntRange>(FitnessCalculationPartitionParameterName, "The data partition used to calculate the fitness"));
       Parameters.Add(new LookupParameter<IntRange>(FixedSamplesPartitionParameterName, "The data partition which is used to calculate the fitness on the fixed samples."));
-      Parameters.Add(new FixedValueParameter<IntValue>(ConsecutiveSamplesParameterName, "The number of consecutive samples used for fitness calculation in each island.", new IntValue()));
-      Parameters.Add(new FixedValueParameter<IntValue>(OverlapParameterName, "The overlap for the consecutive samples used for every island.", new IntValue()));
+      Parameters.Add(new FixedValueParameter<PercentValue>(ConsecutiveSamplesParameterName, "The relative number of consecutive samples used for fitness calculation in each island.", new PercentValue()));
+      Parameters.Add(new FixedValueParameter<PercentValue>(OverlapParameterName, "The relative overlap for the consecutive samples used for every island.", new PercentValue()));
       Parameters.Add(new ValueLookupParameter<IntValue>(DataMigrationIntervalParameterName, "The number of generations that should pass between data migration phases."));
       Parameters.Add(new LookupParameter<IntValue>(IslandIndexParameterName, "The index of the current island."));
@@ -139,5 +139,7 @@
           var islandIndex = IslandIndexParameter.ActualValue.Value;
           var iteration = islandIndex + (generation / dataMigrationInterval);
-          var consecutiveRows = GenerateRows(samples, fixedSamples, ConsecutiveSamples, Overlap, iteration);
+          var consecutiveSamples = (int)ConsecutiveSamples * samples.Size;
+          var overlap = (int)Overlap * consecutiveSamples;
+          var consecutiveRows = GenerateRows(samples, fixedSamples, consecutiveSamples, overlap, iteration);
           rows = rows.Concat(consecutiveRows);
         }
Index: /branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.DataAnalysis.Symbolic/3.3/RandomSamplesEvaluator .cs
===================================================================
--- /branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.DataAnalysis.Symbolic/3.3/RandomSamplesEvaluator .cs	(revision 10352)
+++ /branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.DataAnalysis.Symbolic/3.3/RandomSamplesEvaluator .cs	(revision 10353)
@@ -68,6 +68,6 @@
       get { return (IValueLookupParameter<IntValue>)Parameters[DataMigrationIntervalParameterName]; }
     }
-    public IFixedValueParameter<IntValue> RandomSamplesParameter {
-      get { return (IFixedValueParameter<IntValue>)Parameters[RandomSamplesParameterName]; }
+    public IFixedValueParameter<PercentValue> RandomSamplesParameter {
+      get { return (IFixedValueParameter<PercentValue>)Parameters[RandomSamplesParameterName]; }
     }
     public ILookupParameter<IntValue> IterationsParameter {
@@ -81,5 +81,5 @@
     #region properties
 
-    public int RandomSamples {
+    public double RandomSamples {
       get { return RandomSamplesParameter.Value.Value; }
       set { RandomSamplesParameter.Value.Value = value; }
@@ -104,5 +104,5 @@
       Parameters.Add(new LookupParameter<IntRange>(FitnessCalculationPartitionParameterName, "The data partition used to calculate the fitness"));
       Parameters.Add(new LookupParameter<IntRange>(FixedSamplesPartitionParameterName, "The data partition which is used to calculate the fitness on the fixed samples."));
-      Parameters.Add(new FixedValueParameter<IntValue>(RandomSamplesParameterName, "The number of random samples used for fitness calculation in each island.", new IntValue()));
+      Parameters.Add(new FixedValueParameter<PercentValue>(RandomSamplesParameterName, "The number of random samples used for fitness calculation in each island.", new PercentValue()));
       Parameters.Add(new ValueLookupParameter<IntValue>(DataMigrationIntervalParameterName, "The number of generations that should pass between data migration phases."));
       Parameters.Add(new LookupParameter<IntValue>(IterationsParameterName, "The number of performed iterations."));
@@ -116,5 +116,5 @@
       var samples = FitnessCalculationPartitionParameter.ActualValue;
       var fixedSamples = FixedSamplesPartitionParameter.ActualValue;
-      var randomSamples = RandomSamples;
+      var randomSamples = (int)RandomSamples * samples.Size;
 
       var dataMigrationInterval = DataMigrationIntervalParameter.ActualValue.Value;
Index: /branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.DataAnalysis.Symbolic/3.3/SymbolicDataAnalysisIslandGeneticAlgorithm.cs
===================================================================
--- /branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.DataAnalysis.Symbolic/3.3/SymbolicDataAnalysisIslandGeneticAlgorithm.cs	(revision 10352)
+++ /branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.DataAnalysis.Symbolic/3.3/SymbolicDataAnalysisIslandGeneticAlgorithm.cs	(revision 10353)
@@ -56,6 +56,6 @@
 
     #region parameters
-    public IFixedValueParameter<IntValue> FixedSamplesParameter {
-      get { return (IFixedValueParameter<IntValue>)Parameters[FixedSamplesParameterName]; }
+    public IFixedValueParameter<PercentValue> FixedSamplesParameter {
+      get { return (IFixedValueParameter<PercentValue>)Parameters[FixedSamplesParameterName]; }
     }
     public IValueParameter<ItemArray<IntRange>> FixedSamplesPartitionsParameter {
@@ -71,5 +71,5 @@
 
     #region properties
-    public int FixedSamples {
+    public double FixedSamples {
       get { return FixedSamplesParameter.Value.Value; }
       set { FixedSamplesParameter.Value.Value = value; }
@@ -97,5 +97,5 @@
     public SymbolicDataAnalysisIslandGeneticAlgorithm()
       : base() {
-      Parameters.Add(new FixedValueParameter<IntValue>(FixedSamplesParameterName, "The number of fixed samples used for fitness calculation in each island.", new IntValue(0)));
+      Parameters.Add(new FixedValueParameter<PercentValue>(FixedSamplesParameterName, "The number of fixed samples used for fitness calculation in each island.", new PercentValue(0.2)));
       Parameters.Add(new ValueParameter<ItemArray<IntRange>>(FixedSamplesPartitionsParameterName, "The fixed samples partitions used for fitness calculation for every island."));
       Parameters.Add(new OptionalValueParameter<ISymbolicDataAnalysisIslandGeneticAlgorithmEvaluator>(EvaluatorParameterName, "The evaluator of the algorithm."));
@@ -174,12 +174,6 @@
     }
 
-    protected override void Problem_Reset(object sender, EventArgs e) {
-      FixedSamples = Problem.FitnessCalculationPartition.Size / NumberOfIslands.Value;
-      base.Problem_Reset(sender, e);
-    }
-
     protected override void OnProblemChanged() {
       Problem.FitnessCalculationPartition.ValueChanged += Problem_Reset;
-      FixedSamples = Problem.FitnessCalculationPartition.Size / NumberOfIslands.Value;
 
       if (Problem != null && EvaluatorParameter.Value == null) {
@@ -201,16 +195,18 @@
       var samplesEnd = Problem.FitnessCalculationPartition.End;
       var totalSamples = Problem.FitnessCalculationPartition.Size;
-      var fixedSamples = FixedSamples;
+      var fixedSamples = (int)(FixedSamples * totalSamples);
       var islands = NumberOfIslands.Value;
 
-      int offset = (int)Math.Ceiling(((double)(totalSamples - fixedSamples)) / (islands - 1));
+      double shift = (double)((totalSamples - fixedSamples)) / (islands - 1);
+      int offset = (int)Math.Floor(shift);
+      double remainder = shift - offset;
+
       List<IntRange> partitions = new List<IntRange>();
       for (int i = 0; i < islands; i++) {
-        var partitionStart = samplesStart + offset * i;
+        var partitionStart = samplesStart + offset * i + (int)(remainder * i);
         partitions.Add(new IntRange(partitionStart, partitionStart + fixedSamples));
       }
 
-      //it can be the case that the last partitions exceeds the allowed samples
-      //move the last partition forward.
+      //if the last partitions exceeds the allowed samples move the last partition forward.
       int exceedsSamples = partitions[partitions.Count - 1].End - samplesEnd;
       if (exceedsSamples > 0) {
Index: /branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.DataAnalysis.Symbolic/3.3/SymbolicDataAnalysisIslandOffspringSelectionGeneticAlgorithm.cs
===================================================================
--- /branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.DataAnalysis.Symbolic/3.3/SymbolicDataAnalysisIslandOffspringSelectionGeneticAlgorithm.cs	(revision 10352)
+++ /branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.DataAnalysis.Symbolic/3.3/SymbolicDataAnalysisIslandOffspringSelectionGeneticAlgorithm.cs	(revision 10353)
@@ -56,6 +56,6 @@
 
     #region parameters
-    public IFixedValueParameter<IntValue> FixedSamplesParameter {
-      get { return (IFixedValueParameter<IntValue>)Parameters[FixedSamplesParameterName]; }
+    public IFixedValueParameter<PercentValue> FixedSamplesParameter {
+      get { return (IFixedValueParameter<PercentValue>)Parameters[FixedSamplesParameterName]; }
     }
     public IValueParameter<ItemArray<IntRange>> FixedSamplesPartitionsParameter {
@@ -71,5 +71,5 @@
 
     #region properties
-    public int FixedSamples {
+    public double FixedSamples {
       get { return FixedSamplesParameter.Value.Value; }
       set { FixedSamplesParameter.Value.Value = value; }
@@ -97,5 +97,5 @@
     public SymbolicDataAnalysisIslandOffspringSelectionGeneticAlgorithm()
       : base() {
-      Parameters.Add(new FixedValueParameter<IntValue>(FixedSamplesParameterName, "The number of fixed samples used for fitness calculation in each island.", new IntValue(0)));
+      Parameters.Add(new FixedValueParameter<PercentValue>(FixedSamplesParameterName, "The number of fixed samples used for fitness calculation in each island.", new PercentValue(0.2)));
       Parameters.Add(new ValueParameter<ItemArray<IntRange>>(FixedSamplesPartitionsParameterName, "The fixed samples partitions used for fitness calculation for every island."));
       Parameters.Add(new OptionalValueParameter<ISymbolicDataAnalysisIslandGeneticAlgorithmEvaluator>(EvaluatorParameterName, "The evaluator of the algorithm."));
@@ -170,12 +170,6 @@
     }
 
-    protected override void Problem_Reset(object sender, EventArgs e) {
-      FixedSamples = Problem.FitnessCalculationPartition.Size / NumberOfIslands.Value;
-      base.Problem_Reset(sender, e);
-    }
-
     protected override void OnProblemChanged() {
       Problem.FitnessCalculationPartition.ValueChanged += Problem_Reset;
-      FixedSamples = Problem.FitnessCalculationPartition.Size / NumberOfIslands.Value;
 
       if (Problem != null && EvaluatorParameter.Value == null) {
@@ -197,11 +191,14 @@
       var samplesEnd = Problem.FitnessCalculationPartition.End;
       var totalSamples = Problem.FitnessCalculationPartition.Size;
-      var fixedSamples = FixedSamples;
+      var fixedSamples = (int)(FixedSamples * totalSamples);
       var islands = NumberOfIslands.Value;
 
-      int offset = (int)Math.Ceiling(((double)(totalSamples - fixedSamples)) / (islands - 1));
+      double shift = (double)((totalSamples - fixedSamples)) / (islands - 1);
+      int offset = (int)Math.Floor(shift);
+      double remainder = shift - offset;
+
       List<IntRange> partitions = new List<IntRange>();
       for (int i = 0; i < islands; i++) {
-        var partitionStart = samplesStart + offset * i;
+        var partitionStart = samplesStart + offset * i + (int)(remainder * i);
         partitions.Add(new IntRange(partitionStart, partitionStart + fixedSamples));
       }
