Index: branches/PerformanceComparison/HeuristicLab.Algorithms.MemPR/3.3/Binary/SolutionModel/Univariate/UnivariateSolutionModel.cs
===================================================================
--- branches/MemPRAlgorithm/HeuristicLab.Algorithms.MemPR/3.3/Binary/SolutionModel/Univariate/UnivariateSolutionModel.cs	(revision 14573)
+++ branches/PerformanceComparison/HeuristicLab.Algorithms.MemPR/3.3/Binary/SolutionModel/Univariate/UnivariateSolutionModel.cs	(revision 14666)
@@ -110,5 +110,5 @@
 
     public static ISolutionModel<BinaryVector> CreateWithFitnessBias(IRandom random, bool maximization, IEnumerable<BinaryVector> population, IEnumerable<double> qualities) {
-      var proportions = RandomEnumerable.PrepareProportional(qualities, true, !maximization);
+      var proportions = Util.Auxiliary.PrepareProportional(qualities, true, !maximization);
       var factor = 1.0 / proportions.Sum();
       double[] model = null;
Index: branches/PerformanceComparison/HeuristicLab.Algorithms.MemPR/3.3/HeuristicLab.Algorithms.MemPR-3.3.csproj
===================================================================
--- branches/MemPRAlgorithm/HeuristicLab.Algorithms.MemPR/3.3/HeuristicLab.Algorithms.MemPR-3.3.csproj	(revision 14573)
+++ branches/PerformanceComparison/HeuristicLab.Algorithms.MemPR/3.3/HeuristicLab.Algorithms.MemPR-3.3.csproj	(revision 14666)
@@ -18,5 +18,5 @@
     <DebugType>full</DebugType>
     <Optimize>false</Optimize>
-    <OutputPath>..\..\bin\</OutputPath>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
     <DefineConstants>DEBUG;TRACE</DefineConstants>
     <ErrorReport>prompt</ErrorReport>
@@ -26,5 +26,5 @@
     <DebugType>pdbonly</DebugType>
     <Optimize>true</Optimize>
-    <OutputPath>..\..\bin\</OutputPath>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
     <DefineConstants>TRACE</DefineConstants>
     <ErrorReport>prompt</ErrorReport>
@@ -39,5 +39,5 @@
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
     <DebugSymbols>true</DebugSymbols>
-    <OutputPath>..\..\bin\</OutputPath>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
     <DefineConstants>DEBUG;TRACE</DefineConstants>
     <DebugType>full</DebugType>
@@ -47,5 +47,5 @@
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
-    <OutputPath>..\..\bin\</OutputPath>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
     <DefineConstants>TRACE</DefineConstants>
     <Optimize>true</Optimize>
@@ -57,5 +57,5 @@
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
     <DebugSymbols>true</DebugSymbols>
-    <OutputPath>..\..\bin\</OutputPath>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
     <DefineConstants>DEBUG;TRACE</DefineConstants>
     <DebugType>full</DebugType>
@@ -65,5 +65,5 @@
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
-    <OutputPath>..\..\bin\</OutputPath>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
     <DefineConstants>TRACE</DefineConstants>
     <Optimize>true</Optimize>
@@ -74,7 +74,66 @@
   </PropertyGroup>
   <ItemGroup>
-    <Reference Include="ALGLIB-3.7.0, Version=3.7.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\..\bin\ALGLIB-3.7.0.dll</HintPath>
+    <Reference Include="ALGLIB-3.7.0">
+      <HintPath>..\..\..\..\trunk\sources\bin\ALGLIB-3.7.0.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Algorithms.DataAnalysis-3.4">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Algorithms.DataAnalysis-3.4.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Collections-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Collections-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Common-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Common-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Common.Resources-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Common.Resources-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Core-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Data-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Data-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Encodings.BinaryVectorEncoding-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Encodings.BinaryVectorEncoding-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Encodings.LinearLinkageEncoding-3.4">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Encodings.LinearLinkageEncoding-3.4.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Operators-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Operators-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Optimization.Operators-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Optimization.Operators-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Parameters-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Parameters-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Persistence-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Persistence-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Problems.DataAnalysis-3.4">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.DataAnalysis-3.4.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Random-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Random-3.3.dll</HintPath>
       <Private>False</Private>
     </Reference>
@@ -128,51 +187,12 @@
     <Compile Include="Plugin.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Util\Auxiliary.cs" />
     <Compile Include="Util\CkMeans1D.cs" />
     <Compile Include="Util\FitnessComparer.cs" />
   </ItemGroup>
   <ItemGroup>
-    <ProjectReference Include="..\..\HeuristicLab.Algorithms.DataAnalysis\3.4\HeuristicLab.Algorithms.DataAnalysis-3.4.csproj">
-      <Project>{2e782078-fa81-4b70-b56f-74ce38dac6c8}</Project>
-      <Name>HeuristicLab.Algorithms.DataAnalysis-3.4</Name>
-      <Private>False</Private>
-    </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Analysis\3.3\HeuristicLab.Analysis-3.3.csproj">
       <Project>{887425b4-4348-49ed-a457-b7d2c26ddbf9}</Project>
       <Name>HeuristicLab.Analysis-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.Collections\3.3\HeuristicLab.Collections-3.3.csproj">
-      <Project>{958b43bc-cc5c-4fa2-8628-2b3b01d890b6}</Project>
-      <Name>HeuristicLab.Collections-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.Common.Resources\3.3\HeuristicLab.Common.Resources-3.3.csproj">
-      <Project>{0e27a536-1c4a-4624-a65e-dc4f4f23e3e1}</Project>
-      <Name>HeuristicLab.Common.Resources-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.Common\3.3\HeuristicLab.Common-3.3.csproj">
-      <Project>{a9ad58b9-3ef9-4cc1-97e5-8d909039ff5c}</Project>
-      <Name>HeuristicLab.Common-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.Core\3.3\HeuristicLab.Core-3.3.csproj">
-      <Project>{c36bd924-a541-4a00-afa8-41701378ddc5}</Project>
-      <Name>HeuristicLab.Core-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.Data\3.3\HeuristicLab.Data-3.3.csproj">
-      <Project>{bbab9df5-5ef3-4ba8-ade9-b36e82114937}</Project>
-      <Name>HeuristicLab.Data-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.Encodings.BinaryVectorEncoding\3.3\HeuristicLab.Encodings.BinaryVectorEncoding-3.3.csproj">
-      <Project>{66d249c3-a01d-42a8-82a2-919bc8ec3d83}</Project>
-      <Name>HeuristicLab.Encodings.BinaryVectorEncoding-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.Encodings.LinearLinkageEncoding\3.4\HeuristicLab.Encodings.LinearLinkageEncoding-3.4.csproj">
-      <Project>{166507c9-ef26-4370-bb80-699742a29d4f}</Project>
-      <Name>HeuristicLab.Encodings.LinearLinkageEncoding-3.4</Name>
       <Private>False</Private>
     </ProjectReference>
@@ -182,41 +202,7 @@
       <Private>False</Private>
     </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.Operators\3.3\HeuristicLab.Operators-3.3.csproj">
-      <Project>{23da7ff4-d5b8-41b6-aa96-f0561d24f3ee}</Project>
-      <Name>HeuristicLab.Operators-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.Optimization.Operators\3.3\HeuristicLab.Optimization.Operators-3.3.csproj">
-      <Project>{25087811-F74C-4128-BC86-8324271DA13E}</Project>
-      <Name>HeuristicLab.Optimization.Operators-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Optimization\3.3\HeuristicLab.Optimization-3.3.csproj">
       <Project>{14ab8d24-25bc-400c-a846-4627aa945192}</Project>
       <Name>HeuristicLab.Optimization-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.Parameters\3.3\HeuristicLab.Parameters-3.3.csproj">
-      <Project>{56f9106a-079f-4c61-92f6-86a84c2d84b7}</Project>
-      <Name>HeuristicLab.Parameters-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.Persistence\3.3\HeuristicLab.Persistence-3.3.csproj">
-      <Project>{102bc7d3-0ef9-439c-8f6d-96ff0fdb8e1b}</Project>
-      <Name>HeuristicLab.Persistence-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\3.3\HeuristicLab.PluginInfrastructure-3.3.csproj">
-      <Project>{94186a6a-5176-4402-ae83-886557b53cca}</Project>
-      <Name>HeuristicLab.PluginInfrastructure-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.Problems.DataAnalysis\3.4\HeuristicLab.Problems.DataAnalysis-3.4.csproj">
-      <Project>{df87c13e-a889-46ff-8153-66dcaa8c5674}</Project>
-      <Name>HeuristicLab.Problems.DataAnalysis-3.4</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.Random\3.3\HeuristicLab.Random-3.3.csproj">
-      <Project>{f4539fb6-4708-40c9-be64-0a1390aea197}</Project>
-      <Name>HeuristicLab.Random-3.3</Name>
       <Private>False</Private>
     </ProjectReference>
Index: branches/PerformanceComparison/HeuristicLab.Algorithms.MemPR/3.3/MemPRAlgorithm.cs
===================================================================
--- branches/MemPRAlgorithm/HeuristicLab.Algorithms.MemPR/3.3/MemPRAlgorithm.cs	(revision 14573)
+++ branches/PerformanceComparison/HeuristicLab.Algorithms.MemPR/3.3/MemPRAlgorithm.cs	(revision 14666)
@@ -248,5 +248,5 @@
           Context.AddToPopulation(child);
           Context.BestQuality = child.Fitness;
-          Analyze(token);
+          Analyze(CancellationToken.None);
           token.ThrowIfCancellationRequested();
           if (Terminate()) return;
@@ -398,41 +398,4 @@
       } else res.Value = sp;
 
-      if (Context.BreedingPerformanceModel != null) {
-        var sol = Context.GetSolution(Context.BreedingPerformanceModel, Context.BreedingStat);
-        if (!Results.TryGetValue("Breeding Performance", out res)) {
-          Results.Add(new Result("Breeding Performance", sol));
-        } else res.Value = sol;
-      }
-      if (Context.RelinkingPerformanceModel != null) {
-        var sol = Context.GetSolution(Context.RelinkingPerformanceModel, Context.RelinkingStat);
-        if (!Results.TryGetValue("Relinking Performance", out res)) {
-          Results.Add(new Result("Relinking Performance", sol));
-        } else res.Value = sol;
-      }
-      if (Context.DelinkingPerformanceModel != null) {
-        var sol = Context.GetSolution(Context.DelinkingPerformanceModel, Context.DelinkingStat);
-        if (!Results.TryGetValue("Delinking Performance", out res)) {
-          Results.Add(new Result("Delinking Performance", sol));
-        } else res.Value = sol;
-      }
-      if (Context.SamplingPerformanceModel != null) {
-        var sol = Context.GetSolution(Context.SamplingPerformanceModel, Context.SamplingStat);
-        if (!Results.TryGetValue("Sampling Performance", out res)) {
-          Results.Add(new Result("Sampling Performance", sol));
-        } else res.Value = sol;
-      }
-      if (Context.HillclimbingPerformanceModel != null) {
-        var sol = Context.GetSolution(Context.HillclimbingPerformanceModel, Context.HillclimbingStat);
-        if (!Results.TryGetValue("Hillclimbing Performance", out res)) {
-          Results.Add(new Result("Hillclimbing Performance", sol));
-        } else res.Value = sol;
-      }
-      if (Context.AdaptiveWalkPerformanceModel != null) {
-        var sol = Context.GetSolution(Context.AdaptiveWalkPerformanceModel, Context.AdaptivewalkingStat);
-        if (!Results.TryGetValue("Adaptivewalk Performance", out res)) {
-          Results.Add(new Result("Adaptivewalk Performance", sol));
-        } else res.Value = sol;
-      }
-
       Context.RunOperator(Analyzer, Context.Scope, token);
     }
Index: branches/PerformanceComparison/HeuristicLab.Algorithms.MemPR/3.3/MemPRContext.cs
===================================================================
--- branches/MemPRAlgorithm/HeuristicLab.Algorithms.MemPR/3.3/MemPRContext.cs	(revision 14573)
+++ branches/PerformanceComparison/HeuristicLab.Algorithms.MemPR/3.3/MemPRContext.cs	(revision 14666)
@@ -191,10 +191,5 @@
       get { return scope.SubScopes.Count; }
     }
-
-    [Storable]
-    private IConfidenceRegressionModel breedingPerformanceModel;
-    public IConfidenceRegressionModel BreedingPerformanceModel {
-      get { return breedingPerformanceModel; }
-    }
+    
     [Storable]
     private List<Tuple<double, double, double, double>> breedingStat;
@@ -203,9 +198,4 @@
     }
     [Storable]
-    private IConfidenceRegressionModel relinkingPerformanceModel;
-    public IConfidenceRegressionModel RelinkingPerformanceModel {
-      get { return relinkingPerformanceModel; }
-    }
-    [Storable]
     private List<Tuple<double, double, double, double>> relinkingStat;
     public IEnumerable<Tuple<double, double, double, double>> RelinkingStat {
@@ -213,9 +203,4 @@
     }
     [Storable]
-    private IConfidenceRegressionModel delinkingPerformanceModel;
-    public IConfidenceRegressionModel DelinkingPerformanceModel {
-      get { return delinkingPerformanceModel; }
-    }
-    [Storable]
     private List<Tuple<double, double, double, double>> delinkingStat;
     public IEnumerable<Tuple<double, double, double, double>> DelinkingStat {
@@ -223,9 +208,4 @@
     }
     [Storable]
-    private IConfidenceRegressionModel samplingPerformanceModel;
-    public IConfidenceRegressionModel SamplingPerformanceModel {
-      get { return samplingPerformanceModel; }
-    }
-    [Storable]
     private List<Tuple<double, double>> samplingStat;
     public IEnumerable<Tuple<double, double>> SamplingStat {
@@ -233,17 +213,7 @@
     }
     [Storable]
-    private IConfidenceRegressionModel hillclimbingPerformanceModel;
-    public IConfidenceRegressionModel HillclimbingPerformanceModel {
-      get { return hillclimbingPerformanceModel; }
-    }
-    [Storable]
     private List<Tuple<double, double>> hillclimbingStat;
     public IEnumerable<Tuple<double, double>> HillclimbingStat {
       get { return hillclimbingStat; }
-    }
-    [Storable]
-    private IConfidenceRegressionModel adaptiveWalkPerformanceModel;
-    public IConfidenceRegressionModel AdaptiveWalkPerformanceModel {
-      get { return adaptiveWalkPerformanceModel; }
     }
     [Storable]
@@ -276,15 +246,9 @@
       byAdaptivewalking = cloner.Clone(original.byAdaptivewalking);
       random = cloner.Clone(original.random);
-      breedingPerformanceModel = cloner.Clone(original.breedingPerformanceModel);
       breedingStat = original.breedingStat.Select(x => Tuple.Create(x.Item1, x.Item2, x.Item3, x.Item4)).ToList();
-      relinkingPerformanceModel = cloner.Clone(original.relinkingPerformanceModel);
       relinkingStat = original.relinkingStat.Select(x => Tuple.Create(x.Item1, x.Item2, x.Item3, x.Item4)).ToList();
-      delinkingPerformanceModel = cloner.Clone(original.delinkingPerformanceModel);
       delinkingStat = original.delinkingStat.Select(x => Tuple.Create(x.Item1, x.Item2, x.Item3, x.Item4)).ToList();
-      samplingPerformanceModel = cloner.Clone(original.samplingPerformanceModel);
       samplingStat = original.samplingStat.Select(x => Tuple.Create(x.Item1, x.Item2)).ToList();
-      hillclimbingPerformanceModel = cloner.Clone(original.hillclimbingPerformanceModel);
       hillclimbingStat = original.hillclimbingStat.Select(x => Tuple.Create(x.Item1, x.Item2)).ToList();
-      adaptiveWalkPerformanceModel = cloner.Clone(original.adaptiveWalkPerformanceModel);
       adaptivewalkingStat = original.adaptivewalkingStat.Select(x => Tuple.Create(x.Item1, x.Item2)).ToList();
       
@@ -349,22 +313,7 @@
         breedingStat.Add(Tuple.Create(a.Fitness, b.Fitness, parentDist, child.Fitness));
       else breedingStat.Add(Tuple.Create(b.Fitness, a.Fitness, parentDist, child.Fitness));
-      if (breedingStat.Count % 10 == 0) RelearnBreedingPerformanceModel();
-    }
-    public void RelearnBreedingPerformanceModel() {
-      breedingPerformanceModel = RunRegression(PrepareRegression(ToListRow(breedingStat)), breedingPerformanceModel).Model;
     }
     public bool BreedingSuited(ISingleObjectiveSolutionScope<TSolution> p1, ISingleObjectiveSolutionScope<TSolution> p2, double dist) {
-      if (breedingPerformanceModel == null) return true;
-      double minI1 = double.MaxValue, minI2 = double.MaxValue, maxI1 = double.MinValue, maxI2 = double.MinValue;
-      foreach (var d in BreedingStat) {
-        if (d.Item1 < minI1) minI1 = d.Item1;
-        if (d.Item1 > maxI1) maxI1 = d.Item1;
-        if (d.Item2 < minI2) minI2 = d.Item2;
-        if (d.Item2 > maxI2) maxI2 = d.Item2;
-      }
-      if (p1.Fitness < minI1 || p1.Fitness > maxI1 || p2.Fitness < minI2 || p2.Fitness > maxI2)
-        return true;
-      
-      return Random.NextDouble() < ProbabilityAcceptAbsolutePerformanceModel(new List<double> { p1.Fitness, p2.Fitness, dist }, breedingPerformanceModel);
+      return true;
     }
     #endregion
@@ -375,25 +324,7 @@
         relinkingStat.Add(Tuple.Create(a.Fitness, b.Fitness, parentDist, Maximization ? child.Fitness - a.Fitness : a.Fitness - child.Fitness));
       else relinkingStat.Add(Tuple.Create(a.Fitness, b.Fitness, parentDist, Maximization ? child.Fitness - b.Fitness : b.Fitness - child.Fitness));
-      if (relinkingStat.Count % 10 == 0) RelearnRelinkingPerformanceModel();
-    }
-    public void RelearnRelinkingPerformanceModel() {
-      relinkingPerformanceModel = RunRegression(PrepareRegression(ToListRow(relinkingStat)), relinkingPerformanceModel).Model;
     }
     public bool RelinkSuited(ISingleObjectiveSolutionScope<TSolution> p1, ISingleObjectiveSolutionScope<TSolution> p2, double dist) {
-      if (relinkingPerformanceModel == null) return true;
-      double minI1 = double.MaxValue, minI2 = double.MaxValue, maxI1 = double.MinValue, maxI2 = double.MinValue;
-      foreach (var d in RelinkingStat) {
-        if (d.Item1 < minI1) minI1 = d.Item1;
-        if (d.Item1 > maxI1) maxI1 = d.Item1;
-        if (d.Item2 < minI2) minI2 = d.Item2;
-        if (d.Item2 > maxI2) maxI2 = d.Item2;
-      }
-      if (p1.Fitness < minI1 || p1.Fitness > maxI1 || p2.Fitness < minI2 || p2.Fitness > maxI2)
-        return true;
-
-      if (IsBetter(p1, p2)) {
-        return Random.NextDouble() < ProbabilityAcceptRelativePerformanceModel(p1.Fitness, new List<double> { p1.Fitness, p2.Fitness, dist }, relinkingPerformanceModel);
-      }
-      return Random.NextDouble() < ProbabilityAcceptRelativePerformanceModel(p2.Fitness, new List<double> { p1.Fitness, p2.Fitness, dist }, relinkingPerformanceModel);
+      return true;
     }
     #endregion
@@ -404,24 +335,7 @@
         delinkingStat.Add(Tuple.Create(a.Fitness, b.Fitness, parentDist, Maximization ? child.Fitness - a.Fitness : a.Fitness - child.Fitness));
       else delinkingStat.Add(Tuple.Create(a.Fitness, b.Fitness, parentDist, Maximization ? child.Fitness - b.Fitness : b.Fitness - child.Fitness));
-      if (delinkingStat.Count % 10 == 0) RelearnDelinkingPerformanceModel();
-    }
-    public void RelearnDelinkingPerformanceModel() {
-      delinkingPerformanceModel = RunRegression(PrepareRegression(ToListRow(delinkingStat)), delinkingPerformanceModel).Model;
     }
     public bool DelinkSuited(ISingleObjectiveSolutionScope<TSolution> p1, ISingleObjectiveSolutionScope<TSolution> p2, double dist) {
-      if (delinkingPerformanceModel == null) return true;
-      double minI1 = double.MaxValue, minI2 = double.MaxValue, maxI1 = double.MinValue, maxI2 = double.MinValue;
-      foreach (var d in DelinkingStat) {
-        if (d.Item1 < minI1) minI1 = d.Item1;
-        if (d.Item1 > maxI1) maxI1 = d.Item1;
-        if (d.Item2 < minI2) minI2 = d.Item2;
-        if (d.Item2 > maxI2) maxI2 = d.Item2;
-      }
-      if (p1.Fitness < minI1 || p1.Fitness > maxI1 || p2.Fitness < minI2 || p2.Fitness > maxI2)
-        return true;
-      if (IsBetter(p1, p2)) {
-        return Random.NextDouble() < ProbabilityAcceptRelativePerformanceModel(p1.Fitness, new List<double> { p1.Fitness, p2.Fitness, dist }, delinkingPerformanceModel);
-      }
-      return Random.NextDouble() < ProbabilityAcceptRelativePerformanceModel(p2.Fitness, new List<double> { p1.Fitness, p2.Fitness, dist }, delinkingPerformanceModel);
+      return true;
     }
     #endregion
@@ -430,13 +344,7 @@
     public void AddSamplingResult(ISingleObjectiveSolutionScope<TSolution> sample, double avgDist) {
       samplingStat.Add(Tuple.Create(avgDist, sample.Fitness));
-      if (samplingStat.Count % 10 == 0) RelearnSamplingPerformanceModel();
-    }
-    public void RelearnSamplingPerformanceModel() {
-      samplingPerformanceModel = RunRegression(PrepareRegression(ToListRow(samplingStat)), samplingPerformanceModel).Model;
     }
     public bool SamplingSuited(double avgDist) {
-      if (samplingPerformanceModel == null) return true;
-      if (avgDist < samplingStat.Min(x => x.Item1) || avgDist > samplingStat.Max(x => x.Item1)) return true;
-      return Random.NextDouble() < ProbabilityAcceptAbsolutePerformanceModel(new List<double> { avgDist }, samplingPerformanceModel);
+      return true;
     }
     #endregion
@@ -445,14 +353,7 @@
     public void AddHillclimbingResult(ISingleObjectiveSolutionScope<TSolution> input, ISingleObjectiveSolutionScope<TSolution> outcome) {
       hillclimbingStat.Add(Tuple.Create(input.Fitness, Maximization ? outcome.Fitness - input.Fitness : input.Fitness - outcome.Fitness));
-      if (hillclimbingStat.Count % 10 == 0) RelearnHillclimbingPerformanceModel();
-    }
-    public void RelearnHillclimbingPerformanceModel() {
-      hillclimbingPerformanceModel = RunRegression(PrepareRegression(ToListRow(hillclimbingStat)), hillclimbingPerformanceModel).Model;
     }
     public bool HillclimbingSuited(double startingFitness) {
-      if (hillclimbingPerformanceModel == null) return true;
-      if (startingFitness < HillclimbingStat.Min(x => x.Item1) || startingFitness > HillclimbingStat.Max(x => x.Item1))
-        return true;
-      return Random.NextDouble() < ProbabilityAcceptRelativePerformanceModel(startingFitness, new List<double> { startingFitness }, hillclimbingPerformanceModel);
+      return true;
     }
     #endregion
@@ -461,137 +362,9 @@
     public void AddAdaptivewalkingResult(ISingleObjectiveSolutionScope<TSolution> input, ISingleObjectiveSolutionScope<TSolution> outcome) {
       adaptivewalkingStat.Add(Tuple.Create(input.Fitness, Maximization ? outcome.Fitness - input.Fitness : input.Fitness - outcome.Fitness));
-      if (adaptivewalkingStat.Count % 10 == 0) RelearnAdaptiveWalkPerformanceModel();
-    }
-    public void RelearnAdaptiveWalkPerformanceModel() {
-      adaptiveWalkPerformanceModel = RunRegression(PrepareRegression(ToListRow(adaptivewalkingStat)), adaptiveWalkPerformanceModel).Model;
     }
     public bool AdaptivewalkingSuited(double startingFitness) {
-      if (adaptiveWalkPerformanceModel == null) return true;
-      if (startingFitness < AdaptivewalkingStat.Min(x => x.Item1) || startingFitness > AdaptivewalkingStat.Max(x => x.Item1))
-        return true;
-      return Random.NextDouble() < ProbabilityAcceptRelativePerformanceModel(startingFitness, new List<double> { startingFitness }, adaptiveWalkPerformanceModel);
-    }
-    #endregion
-
-    public IConfidenceRegressionSolution GetSolution(IConfidenceRegressionModel model, IEnumerable<Tuple<double, double>> data) {
-      return new ConfidenceRegressionSolution(model, PrepareRegression(ToListRow(data.ToList())));
-    }
-    public IConfidenceRegressionSolution GetSolution(IConfidenceRegressionModel model, IEnumerable<Tuple<double, double, double>> data) {
-      return new ConfidenceRegressionSolution(model, PrepareRegression(ToListRow(data.ToList())));
-    }
-    public IConfidenceRegressionSolution GetSolution(IConfidenceRegressionModel model, IEnumerable<Tuple<double, double, double, double>> data) {
-      return new ConfidenceRegressionSolution(model, PrepareRegression(ToListRow(data.ToList())));
-    }
-
-    protected RegressionProblemData PrepareRegression(List<List<double>> data) {
-      var columns = data.First().Select(y => new List<double>()).ToList();
-      foreach (var next in data.Shuffle(Random)) {
-        for (var i = 0; i < next.Count; i++) {
-          columns[i].Add(next[i]);
-        }
-      }
-      var ds = new Dataset(columns.Select((v, i) => i < columns.Count - 1 ? "in" + i : "out").ToList(), columns);
-      var regPrb = new RegressionProblemData(ds, Enumerable.Range(0, columns.Count - 1).Select(x => "in" + x), "out") {
-        TrainingPartition = { Start = 0, End = Math.Min(50, data.Count) },
-        TestPartition = { Start = Math.Min(50, data.Count), End = data.Count }
-      };
-      return regPrb;
-    }
-
-    protected static IConfidenceRegressionSolution RunRegression(RegressionProblemData trainingData, IConfidenceRegressionModel baseLineModel = null) {
-      var targetValues = trainingData.Dataset.GetDoubleValues(trainingData.TargetVariable, trainingData.TrainingIndices).ToList();
-      var baseline = baseLineModel != null ? new ConfidenceRegressionSolution(baseLineModel, trainingData) : null;
-      var constantSolution = new ConfidenceRegressionSolution(new ConfidenceConstantModel(targetValues.Average(), targetValues.Variance(), trainingData.TargetVariable), trainingData);
-      var gpr = new GaussianProcessRegression { Problem = { ProblemData = trainingData } };
-      if (trainingData.InputVariables.CheckedItems.Any(x => alglib.pearsoncorr2(trainingData.Dataset.GetDoubleValues(x.Value.Value).ToArray(), trainingData.TargetVariableValues.ToArray()) > 0.8)) {
-        gpr.MeanFunction = new MeanZero();
-        var cov1 = new CovarianceSum();
-        cov1.Terms.Add(new CovarianceLinearArd());
-        cov1.Terms.Add(new CovarianceConst());
-        gpr.CovarianceFunction = cov1;
-      }
-      IConfidenceRegressionSolution solution = null;
-      var cnt = 0;
-      do {
-        ExecuteAlgorithm(gpr);
-        solution = (IConfidenceRegressionSolution)gpr.Results["Solution"].Value;
-        cnt++;
-      } while (cnt < 10 && (solution == null || solution.TrainingRSquared.IsAlmost(0)));
-
-      return GetBestRegressionSolution(constantSolution, baseline, solution);
-    }
-
-    private static IConfidenceRegressionSolution GetBestRegressionSolution(IConfidenceRegressionSolution constant, IConfidenceRegressionSolution baseline, IConfidenceRegressionSolution solution) {
-      if (baseline == null)
-        return constant.TrainingMeanAbsoluteError < solution.TrainingMeanAbsoluteError ? constant : solution;
-
-      double a, b, c;
-      if (constant.ProblemData.Dataset.Rows < 60) {
-        c = constant.TrainingMeanAbsoluteError;
-        b = baseline.TrainingMeanAbsoluteError;
-        a = solution.TrainingMeanAbsoluteError;
-      } else {
-        c = constant.TestMeanAbsoluteError;
-        b = baseline.TestMeanAbsoluteError;
-        a = solution.TestMeanAbsoluteError;
-      }
-      if (c < b && (c < a || b < a)) return constant;
-      if (b < c && (b < a || c < a)) return baseline;
-      return solution;
-    }
-
-    protected static void ExecuteAlgorithm(IAlgorithm algorithm) {
-      using (var evt = new AutoResetEvent(false)) {
-        EventHandler exeStateChanged = (o, args) => {
-          if (algorithm.ExecutionState != ExecutionState.Started)
-            evt.Set();
-        };
-        algorithm.ExecutionStateChanged += exeStateChanged;
-        if (algorithm.ExecutionState != ExecutionState.Prepared) {
-          algorithm.Prepare(true);
-          evt.WaitOne();
-        }
-        algorithm.Start();
-        evt.WaitOne();
-        algorithm.ExecutionStateChanged -= exeStateChanged;
-      }
-    }
-
-    private double ProbabilityAcceptAbsolutePerformanceModel(List<double> inputs, IConfidenceRegressionModel model) {
-      var inputVariables = inputs.Select((v, i) => "in" + i);
-      var ds = new Dataset(inputVariables.Concat( new [] { "out" }), inputs.Select(x => new List<double> { x }).Concat(new [] { new List<double> { double.NaN } }));
-      var mean = model.GetEstimatedValues(ds, new[] { 0 }).Single();
-      var sdev = Math.Sqrt(model.GetEstimatedVariances(ds, new[] { 0 }).Single());
-
-      // calculate the fitness goal
-      var goal = Maximization ? Population.Min(x => x.Fitness) : Population.Max(x => x.Fitness);
-      var z = (goal - mean) / sdev;
-      // return the probability of achieving or surpassing that goal
-      var y = alglib.invnormaldistribution(z);
-      return Maximization ? 1.0 - y /* P(X >= z) */ : y; // P(X <= z)
-    }
-
-    private double ProbabilityAcceptRelativePerformanceModel(double basePerformance, List<double> inputs, IConfidenceRegressionModel model) {
-      var inputVariables = inputs.Select((v, i) => "in" + i);
-      var ds = new Dataset(inputVariables.Concat(new[] { "out" }), inputs.Select(x => new List<double> { x }).Concat(new[] { new List<double> { double.NaN } }));
-      var mean = model.GetEstimatedValues(ds, new[] { 0 }).Single();
-      var sdev = Math.Sqrt(model.GetEstimatedVariances(ds, new[] { 0 }).Single());
-
-      // calculate the improvement goal
-      var goal = Maximization ? Population.Min(x => x.Fitness) - basePerformance : basePerformance - Population.Max(x => x.Fitness);
-      var z = (goal - mean) / sdev;
-      // return the probability of achieving or surpassing that goal
-      return 1.0 - alglib.invnormaldistribution(z); /* P(X >= z) */
-    }
-
-    private static List<List<double>> ToListRow(List<Tuple<double, double>> rows) {
-      return rows.Select(x => new List<double> { x.Item1, x.Item2 }).ToList();
-    }
-    private static List<List<double>> ToListRow(List<Tuple<double, double, double>> rows) {
-      return rows.Select(x => new List<double> { x.Item1, x.Item2, x.Item3 }).ToList();
-    }
-    private static List<List<double>> ToListRow(List<Tuple<double, double, double, double>> rows) {
-      return rows.Select(x => new List<double> { x.Item1, x.Item2, x.Item3, x.Item4 }).ToList();
-    }
+      return true;
+    }
+    #endregion
 
     [MethodImpl(MethodImplOptions.AggressiveInlining)]
Index: branches/PerformanceComparison/HeuristicLab.Algorithms.MemPR/3.3/Permutation/SolutionModel/Univariate/UnivariateAbsoluteModel.cs
===================================================================
--- branches/MemPRAlgorithm/HeuristicLab.Algorithms.MemPR/3.3/Permutation/SolutionModel/Univariate/UnivariateAbsoluteModel.cs	(revision 14573)
+++ branches/PerformanceComparison/HeuristicLab.Algorithms.MemPR/3.3/Permutation/SolutionModel/Univariate/UnivariateAbsoluteModel.cs	(revision 14666)
@@ -121,5 +121,5 @@
 
     public static UnivariateAbsoluteModel CreateWithFitnessBias(IRandom random, bool maximization, IList<Encodings.PermutationEncoding.Permutation> population, IEnumerable<double> qualities, int N) {
-      var proportions = RandomEnumerable.PrepareProportional(qualities, true, !maximization);
+      var proportions = Util.Auxiliary.PrepareProportional(qualities, true, !maximization);
       var factor = 1.0 / proportions.Sum();
       var model = new double[N, N];
Index: branches/PerformanceComparison/HeuristicLab.Algorithms.MemPR/3.3/Permutation/SolutionModel/Univariate/UnivariateRelativeModel.cs
===================================================================
--- branches/MemPRAlgorithm/HeuristicLab.Algorithms.MemPR/3.3/Permutation/SolutionModel/Univariate/UnivariateRelativeModel.cs	(revision 14573)
+++ branches/PerformanceComparison/HeuristicLab.Algorithms.MemPR/3.3/Permutation/SolutionModel/Univariate/UnivariateRelativeModel.cs	(revision 14666)
@@ -126,5 +126,5 @@
 
     public static UnivariateRelativeModel CreateDirectedWithFitnessBias(IRandom random, bool maximization, IList<Encodings.PermutationEncoding.Permutation> population, IEnumerable<double> qualities, int N) {
-      var proportions = RandomEnumerable.PrepareProportional(qualities, true, !maximization);
+      var proportions = Util.Auxiliary.PrepareProportional(qualities, true, !maximization);
       var factor = 1.0 / proportions.Sum();
       var model = new double[N, N];
@@ -180,5 +180,5 @@
 
     public static UnivariateRelativeModel CreateUndirectedWithFitnessBias(IRandom random, bool maximization, IList<Encodings.PermutationEncoding.Permutation> population, IEnumerable<double> qualities, int N) {
-      var proportions = RandomEnumerable.PrepareProportional(qualities, true, !maximization);
+      var proportions = Util.Auxiliary.PrepareProportional(qualities, true, !maximization);
       var factor = 1.0 / proportions.Sum();
       var model = new double[N, N];
Index: branches/PerformanceComparison/HeuristicLab.Algorithms.MemPR/3.3/Util/Auxiliary.cs
===================================================================
--- branches/PerformanceComparison/HeuristicLab.Algorithms.MemPR/3.3/Util/Auxiliary.cs	(revision 14666)
+++ branches/PerformanceComparison/HeuristicLab.Algorithms.MemPR/3.3/Util/Auxiliary.cs	(revision 14666)
@@ -0,0 +1,62 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2017 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace HeuristicLab.Algorithms.MemPR.Util {
+  public static class Auxiliary {
+    public static double[] PrepareProportional(IEnumerable<double> weights, bool windowing, bool inverseProportional) {
+      double maxValue = double.MinValue, minValue = double.MaxValue;
+      double[] valueArray = weights.ToArray();
+
+      for (int i = 0; i < valueArray.Length; i++) {
+        if (valueArray[i] > maxValue) maxValue = valueArray[i];
+        if (valueArray[i] < minValue) minValue = valueArray[i];
+      }
+      if (minValue == maxValue) {  // all values are equal
+        for (int i = 0; i < valueArray.Length; i++) {
+          valueArray[i] = 1.0;
+        }
+      } else {
+        if (windowing) {
+          if (inverseProportional) InverseProportionalScale(valueArray, maxValue);
+          else ProportionalScale(valueArray, minValue);
+        } else {
+          if (minValue < 0.0) throw new InvalidOperationException("Proportional selection without windowing does not work with values < 0.");
+          if (inverseProportional) InverseProportionalScale(valueArray, 2 * maxValue);
+        }
+      }
+      return valueArray;
+    }
+    private static void ProportionalScale(double[] values, double minValue) {
+      for (int i = 0; i < values.Length; i++) {
+        values[i] = values[i] - minValue;
+      }
+    }
+    private static void InverseProportionalScale(double[] values, double maxValue) {
+      for (int i = 0; i < values.Length; i++) {
+        values[i] = maxValue - values[i];
+      }
+    }
+  }
+}
