Index: /branches/PerformanceComparison/HeuristicLab.Encodings.PermutationEncoding/3.3/Creators/PreexistingPermutationCreator.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.Encodings.PermutationEncoding/3.3/Creators/PreexistingPermutationCreator.cs	(revision 13706)
+++ /branches/PerformanceComparison/HeuristicLab.Encodings.PermutationEncoding/3.3/Creators/PreexistingPermutationCreator.cs	(revision 13706)
@@ -0,0 +1,97 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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 HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Random;
+
+namespace HeuristicLab.Encodings.PermutationEncoding {
+  /// <summary>
+  /// An operator which creates a new random permutation of integer values.
+  /// </summary>
+  [Item("PreexistingPermutationCreator", "An operator which creates a new permutation of integer values from a set of given permutations.")]
+  [StorableClass]
+  public sealed class PreexistingPermutationCreator : InstrumentedOperator, IPermutationCreator, IPreexistingSolutionCreator, IStochasticOperator {
+    public override bool CanChangeName {
+      get { return false; }
+    }
+
+    public ILookupParameter<IRandom> RandomParameter {
+      get { return (LookupParameter<IRandom>)Parameters["Random"]; }
+    }
+    public IValueLookupParameter<IntValue> LengthParameter {
+      get { return (IValueLookupParameter<IntValue>)Parameters["Length"]; }
+    }
+    public ILookupParameter<Permutation> PermutationParameter {
+      get { return (ILookupParameter<Permutation>)Parameters["Permutation"]; }
+    }
+    public IValueParameter<PermutationType> PermutationTypeParameter {
+      get { return (IValueParameter<PermutationType>)Parameters["PermutationType"]; }
+    }
+    public IValueLookupParameter<ScopeList> PreexistingSolutionsParameter {
+      get { return (IValueLookupParameter<ScopeList>)Parameters["PreexistingSolutions"]; }
+    }
+    public IValueLookupParameter<BoolValue> SampleFromPreexistingParameter {
+      get { return (IValueLookupParameter<BoolValue>)Parameters["SampleFromPreexisting"]; }
+    }
+
+    public PermutationTypes PermutationType {
+      get { return PermutationTypeParameter.Value.Value; }
+      set { PermutationTypeParameter.Value.Value = value; }
+    }
+
+    [StorableConstructor]
+    private PreexistingPermutationCreator(bool deserializing) : base(deserializing) { }
+    private PreexistingPermutationCreator(PreexistingPermutationCreator original, Cloner cloner) : base(original, cloner) { }
+    public PreexistingPermutationCreator()
+      : base() {
+      Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used to sample from the existing permutations."));
+      Parameters.Add(new ValueLookupParameter<IntValue>("Length", "The length of the new random permutation."));
+      Parameters.Add(new LookupParameter<Permutation>("Permutation", "The new random permutation."));
+      Parameters.Add(new ValueParameter<PermutationType>("PermutationType", "The type of the permutation.", new PermutationType(PermutationTypes.RelativeUndirected)));
+      Parameters.Add(new ValueLookupParameter<ScopeList>("PreexistingSolutions", "The list of solutions that should be used to create a new solution.")); 
+      Parameters.Add(new ValueLookupParameter<BoolValue>("SampleFromPreexisting", "Whether the preexisting solutions should be used as a basis to sample from or whether they should be cloned."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PreexistingPermutationCreator(this, cloner);
+    }
+
+    public override IOperation InstrumentedApply() {
+      var random = RandomParameter.ActualValue;
+      var preexisting = (Permutation)PreexistingSolutionsParameter.ActualValue.SampleRandom(random).Variables[PermutationParameter.ActualName].Value;
+      var sample = SampleFromPreexistingParameter.ActualValue.Value;
+      if (sample) {
+        var perm = new Permutation(PermutationTypeParameter.Value.Value, LengthParameter.Value.Value, random);
+        PermutationParameter.ActualValue = perm.PermutationType == PermutationTypes.Absolute ? PartiallyMatchedCrossover.Apply(random, preexisting, perm)
+                                                                                             : OrderCrossover.Apply(random, preexisting, perm);
+      } else {
+        PermutationParameter.ActualValue = (Permutation)preexisting.Clone();
+      }
+      return base.InstrumentedApply();
+    }
+  }
+}
Index: /branches/PerformanceComparison/HeuristicLab.Encodings.PermutationEncoding/3.3/HeuristicLab.Encodings.PermutationEncoding-3.3.csproj
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.Encodings.PermutationEncoding/3.3/HeuristicLab.Encodings.PermutationEncoding-3.3.csproj	(revision 13705)
+++ /branches/PerformanceComparison/HeuristicLab.Encodings.PermutationEncoding/3.3/HeuristicLab.Encodings.PermutationEncoding-3.3.csproj	(revision 13706)
@@ -146,4 +146,9 @@
       <Private>False</Private>
     </Reference>
+    <Reference Include="HeuristicLab.Random-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Random-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
     <Reference Include="System" />
     <Reference Include="System.Core">
@@ -155,4 +160,5 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="Creators\PreexistingPermutationCreator.cs" />
     <Compile Include="Creators\RandomPermutationCreator.cs" />
     <Compile Include="Crossovers\CosaCrossover.cs" />
Index: /branches/PerformanceComparison/HeuristicLab.Encodings.PermutationEncoding/3.3/Plugin.cs.frame
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.Encodings.PermutationEncoding/3.3/Plugin.cs.frame	(revision 13705)
+++ /branches/PerformanceComparison/HeuristicLab.Encodings.PermutationEncoding/3.3/Plugin.cs.frame	(revision 13706)
@@ -38,4 +38,5 @@
   [PluginDependency("HeuristicLab.Parameters", "3.3")]
   [PluginDependency("HeuristicLab.Persistence", "3.3")]
+  [PluginDependency("HeuristicLab.Random", "3.3")]
   public class HeuristicLabEncodingsPermutationEncodingPlugin : PluginBase {
   }
Index: /branches/PerformanceComparison/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj	(revision 13705)
+++ /branches/PerformanceComparison/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj	(revision 13706)
@@ -201,4 +201,5 @@
     <Compile Include="Interfaces\ILocalImprovementAlgorithmOperator.cs" />
     <Compile Include="Interfaces\IMultiObjectiveOperator.cs" />
+    <Compile Include="Interfaces\IPreexistingSolutionCreator.cs" />
     <Compile Include="Results\IResultParameter.cs" />
     <Compile Include="Interfaces\ISingleObjectiveOperator.cs" />
Index: /branches/PerformanceComparison/HeuristicLab.Optimization/3.3/Interfaces/IPreexistingSolutionCreator.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.Optimization/3.3/Interfaces/IPreexistingSolutionCreator.cs	(revision 13706)
+++ /branches/PerformanceComparison/HeuristicLab.Optimization/3.3/Interfaces/IPreexistingSolutionCreator.cs	(revision 13706)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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 HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Optimization {
+  public interface IPreexistingSolutionCreator : ISolutionCreator {
+    IValueLookupParameter<ScopeList> PreexistingSolutionsParameter { get; }
+    IValueLookupParameter<BoolValue> SampleFromPreexistingParameter { get; }
+  }
+}
Index: /branches/PerformanceComparison/PerformanceComparison.sln
===================================================================
--- /branches/PerformanceComparison/PerformanceComparison.sln	(revision 13705)
+++ /branches/PerformanceComparison/PerformanceComparison.sln	(revision 13706)
@@ -12,9 +12,11 @@
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Optimization.Views-3.3", "HeuristicLab.Optimization.Views\3.3\HeuristicLab.Optimization.Views-3.3.csproj", "{662B4B15-8F4D-4AE5-B3EB-D91C215F5AF2}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.OptimizationExpertSystem-3.3", "HeuristicLab.OptimizationExpertSystem.Common\3.3\HeuristicLab.OptimizationExpertSystem.Common-3.3.csproj", "{492CC257-E27C-4497-B2C1-09C45310C91C}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.OptimizationExpertSystem.Common-3.3", "HeuristicLab.OptimizationExpertSystem.Common\3.3\HeuristicLab.OptimizationExpertSystem.Common-3.3.csproj", "{492CC257-E27C-4497-B2C1-09C45310C91C}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.OptimizationExpertSystem.Views-3.3", "HeuristicLab.OptimizationExpertSystem.\3.3\HeuristicLab.OptimizationExpertSystem-3.3.csproj", "{6240A044-BD4B-4DDB-9E67-A6CFA5E0C7BE}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.OptimizationExpertSystem-3.3", "HeuristicLab.OptimizationExpertSystem\3.3\HeuristicLab.OptimizationExpertSystem-3.3.csproj", "{6240A044-BD4B-4DDB-9E67-A6CFA5E0C7BE}"
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Analysis.FitnessLandscape-3.3", "HeuristicLab.Analysis.FitnessLandscape\3.3\HeuristicLab.Analysis.FitnessLandscape-3.3.csproj", "{5FBDCD4A-3C2A-4EC6-83CE-34B29F43621A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Encodings.PermutationEncoding-3.3", "HeuristicLab.Encodings.PermutationEncoding\3.3\HeuristicLab.Encodings.PermutationEncoding-3.3.csproj", "{DBECB8B0-B166-4133-BAF1-ED67C3FD7FCA}"
 EndProject
 Global
@@ -112,4 +114,16 @@
 		{5FBDCD4A-3C2A-4EC6-83CE-34B29F43621A}.Release|x86.ActiveCfg = Release|x86
 		{5FBDCD4A-3C2A-4EC6-83CE-34B29F43621A}.Release|x86.Build.0 = Release|x86
+		{DBECB8B0-B166-4133-BAF1-ED67C3FD7FCA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{DBECB8B0-B166-4133-BAF1-ED67C3FD7FCA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{DBECB8B0-B166-4133-BAF1-ED67C3FD7FCA}.Debug|x64.ActiveCfg = Debug|x64
+		{DBECB8B0-B166-4133-BAF1-ED67C3FD7FCA}.Debug|x64.Build.0 = Debug|x64
+		{DBECB8B0-B166-4133-BAF1-ED67C3FD7FCA}.Debug|x86.ActiveCfg = Debug|x86
+		{DBECB8B0-B166-4133-BAF1-ED67C3FD7FCA}.Debug|x86.Build.0 = Debug|x86
+		{DBECB8B0-B166-4133-BAF1-ED67C3FD7FCA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{DBECB8B0-B166-4133-BAF1-ED67C3FD7FCA}.Release|Any CPU.Build.0 = Release|Any CPU
+		{DBECB8B0-B166-4133-BAF1-ED67C3FD7FCA}.Release|x64.ActiveCfg = Release|x64
+		{DBECB8B0-B166-4133-BAF1-ED67C3FD7FCA}.Release|x64.Build.0 = Release|x64
+		{DBECB8B0-B166-4133-BAF1-ED67C3FD7FCA}.Release|x86.ActiveCfg = Release|x86
+		{DBECB8B0-B166-4133-BAF1-ED67C3FD7FCA}.Release|x86.Build.0 = Release|x86
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
