Index: /branches/2521_ProblemRefactoring/HeuristicLab 3.3.sln
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab 3.3.sln	(revision 16531)
+++ /branches/2521_ProblemRefactoring/HeuristicLab 3.3.sln	(revision 16532)
@@ -1,6 +1,6 @@
 ﻿
 Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 14
-VisualStudioVersion = 14.0.25420.1
+# Visual Studio 2013
+VisualStudioVersion = 12.0.31101.0
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{96396439-A764-4022-A8D2-BE021449B8D1}"
@@ -451,7 +451,4 @@
 EndProject
 Global
-	GlobalSection(Performance) = preSolution
-		HasPerformanceSessions = true
-	EndGlobalSection
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
Index: anches/2521_ProblemRefactoring/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/BinaryCanonicalGeneticAlgorithm.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/BinaryCanonicalGeneticAlgorithm.cs	(revision 16531)
+++ 	(revision )
@@ -1,51 +1,0 @@
-﻿#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.Encodings.BinaryVectorEncoding;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Selection;
-using TProblem = HeuristicLab.Optimization.SingleObjectiveProblem<HeuristicLab.Encodings.BinaryVectorEncoding.BinaryVectorEncoding, HeuristicLab.Encodings.BinaryVectorEncoding.BinaryVector>;
-using TContext = HeuristicLab.Algorithms.GeneticAlgorithm.EvolutionaryAlgorithmContext<HeuristicLab.Optimization.SingleObjectiveProblem<HeuristicLab.Encodings.BinaryVectorEncoding.BinaryVectorEncoding, HeuristicLab.Encodings.BinaryVectorEncoding.BinaryVector>, HeuristicLab.Encodings.BinaryVectorEncoding.BinaryVectorEncoding, HeuristicLab.Encodings.BinaryVectorEncoding.BinaryVector>;
-
-namespace HeuristicLab.Algorithms.GeneticAlgorithm {
-  [Item("Canonical Genetic Algorithm (binary) (CGA)", "Performs a canonical genetic algorithm.")]
-  [Creatable(CreatableAttribute.Categories.PopulationBasedAlgorithms, Priority = 999)]
-  [StorableClass]
-  public sealed class BinaryCanonicalGeneticAlgorithm : CanonicalGeneticAlgorithm<TProblem, BinaryVectorEncoding, BinaryVector> {
-
-    [StorableConstructor]
-    private BinaryCanonicalGeneticAlgorithm(bool deserializing) : base(deserializing) { }
-    private BinaryCanonicalGeneticAlgorithm(BinaryCanonicalGeneticAlgorithm original, Cloner cloner)
-      : base(original, cloner) { }
-    public BinaryCanonicalGeneticAlgorithm() {
-      SelectorParameter.ValidValues.Add(new TournamentSelector<TContext, TProblem, BinaryVectorEncoding, BinaryVector>());
-      MutatorParameter.ValidValues.Add(new SingleBitflipManipulator<TContext>());
-      MutatorParameter.ValidValues.Add(new MultiBitflipManipulator<TContext>());
-      CrossoverParameter.ValidValues.Add(new NPointCrossover<TContext>());
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new BinaryCanonicalGeneticAlgorithm(this, cloner);
-    }
-  }
-}
Index: anches/2521_ProblemRefactoring/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/CanonicalGeneticAlgorithm.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/CanonicalGeneticAlgorithm.cs	(revision 16531)
+++ 	(revision )
@@ -1,206 +1,0 @@
-﻿#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 System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading;
-using System.Threading.Tasks;
-using HeuristicLab.Analysis;
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Data;
-using HeuristicLab.Optimization;
-using HeuristicLab.Optimization.Selection;
-using HeuristicLab.Optimization.Algorithms.SingleObjective;
-using HeuristicLab.Optimization.Crossover;
-using HeuristicLab.Optimization.Manipulation;
-using HeuristicLab.Parameters;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Algorithms.GeneticAlgorithm {
-  public class CanonicalGeneticAlgorithm<TProblem, TEncoding, TSolution> : HeuristicAlgorithm<EvolutionaryAlgorithmContext<TProblem, TEncoding, TSolution>, TProblem, TEncoding, TSolution>
-      where TProblem : class, ISingleObjectiveProblem<TEncoding, TSolution>, ISingleObjectiveProblemDefinition<TEncoding, TSolution>
-      where TEncoding : class, IEncoding<TSolution>
-      where TSolution : class, ISolution {
-
-    [Storable]
-    private IValueParameter<IntValue> populationSize;
-    public int PopulationSize {
-      get { return populationSize.Value.Value; }
-      set {
-        if (value < 2) throw new ArgumentException("PopulationSize cannot be smaller than 2");
-        populationSize.Value.Value = value;
-      }
-    }
-
-    [Storable]
-    private IConstrainedValueParameter<ISelector<EvolutionaryAlgorithmContext<TProblem, TEncoding, TSolution>>> selector;
-    public IConstrainedValueParameter<ISelector<EvolutionaryAlgorithmContext<TProblem, TEncoding, TSolution>>> SelectorParameter {
-      get { return selector; }
-    }
-    public ISelector<EvolutionaryAlgorithmContext<TProblem, TEncoding, TSolution>> Selector {
-      get { return selector.Value; }
-      set {
-        if (!selector.ValidValues.Contains(value))
-          selector.ValidValues.Add(value);
-        selector.Value = value;
-      }
-    }
-
-    [Storable]
-    private IConstrainedValueParameter<ICrossover<EvolutionaryAlgorithmContext<TProblem, TEncoding, TSolution>>> crossover;
-    public IConstrainedValueParameter<ICrossover<EvolutionaryAlgorithmContext<TProblem, TEncoding, TSolution>>> CrossoverParameter {
-      get { return crossover; }
-    }
-    public ICrossover<EvolutionaryAlgorithmContext<TProblem, TEncoding, TSolution>> Crossover {
-      get { return crossover.Value; }
-      set {
-        if (!crossover.ValidValues.Contains(value))
-          crossover.ValidValues.Add(value);
-        crossover.Value = value;
-      }
-    }
-
-    [Storable]
-    private IConstrainedValueParameter<IManipulator<EvolutionaryAlgorithmContext<TProblem, TEncoding, TSolution>>> mutator;
-    public IConstrainedValueParameter<IManipulator<EvolutionaryAlgorithmContext<TProblem, TEncoding, TSolution>>> MutatorParameter {
-      get { return mutator; }
-    }
-    public IManipulator<EvolutionaryAlgorithmContext<TProblem, TEncoding, TSolution>> Mutator {
-      get { return mutator.Value; }
-      set {
-        if (!mutator.ValidValues.Contains(value))
-          mutator.ValidValues.Add(value);
-        mutator.Value = value;
-      }
-    }
-
-    [Storable]
-    private IValueParameter<PercentValue> mutationProbability;
-    public double MutationProbability {
-      get { return mutationProbability.Value.Value; }
-      set { mutationProbability.Value.Value = value; }
-    }
-
-    [Storable]
-    private IValueParameter<IntValue> elitism;
-    public int Elitism {
-      get { return elitism.Value.Value; }
-      set {
-        if (value < 0) throw new ArgumentException("Elitism cannot be negative");
-        elitism.Value.Value = value;
-      }
-    }
-
-    [Storable]
-    protected BestAverageWorstQualityAnalyzer qualityAnalyzer;
-
-    [StorableConstructor]
-    protected CanonicalGeneticAlgorithm(bool deserializing) : base(deserializing) { }
-    protected CanonicalGeneticAlgorithm(CanonicalGeneticAlgorithm<TProblem, TEncoding, TSolution> original, Cloner cloner)
-      : base(original, cloner) {
-      populationSize = cloner.Clone(original.populationSize);
-      selector = cloner.Clone(original.selector);
-      crossover = cloner.Clone(original.crossover);
-      mutator = cloner.Clone(original.mutator);
-      mutationProbability = cloner.Clone(original.mutationProbability);
-      elitism = cloner.Clone(original.elitism);
-    }
-    public CanonicalGeneticAlgorithm() {
-      ProblemAnalyzer = new MultiAnalyzer();
-      AlgorithmAnalyzer = new MultiAnalyzer();
-      qualityAnalyzer = new BestAverageWorstQualityAnalyzer();
-      AlgorithmAnalyzer.Operators.Add(qualityAnalyzer, true);
-
-      Parameters.Add(populationSize = new ValueParameter<IntValue>("PopulationSize", "The number of individuals in the population", new IntValue(100)));
-      Parameters.Add(selector = new ConstrainedValueParameter<ISelector<EvolutionaryAlgorithmContext<TProblem, TEncoding, TSolution>>>("Selector", "The selection heuristic that creates the mating pool."));
-      Parameters.Add(crossover = new ConstrainedValueParameter<ICrossover<EvolutionaryAlgorithmContext<TProblem, TEncoding, TSolution>>>("Crossover", "The crossover heuristic that takes two parents and produces a child."));
-      Parameters.Add(mutator = new ConstrainedValueParameter<IManipulator<EvolutionaryAlgorithmContext<TProblem, TEncoding, TSolution>>>("Mutator", "The mutation heuristic that slightly alters an individual."));
-      Parameters.Add(mutationProbability = new ValueParameter<PercentValue>("MutationProbability", "The probability with which mutation will be applied to an individual after mating.", new PercentValue(0.05)));
-      Parameters.Add(elitism = new ValueParameter<IntValue>("Elitism", "The number of best solutions from the old population that will live in the next generation."));
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new CanonicalGeneticAlgorithm<TProblem, TEncoding, TSolution>(this, cloner);
-    }
-
-    protected override void OnProblemChanged() {
-      base.OnProblemChanged();
-      qualityAnalyzer.QualityParameter.ActualName = Problem.Evaluator.QualityParameter.ActualName;
-      qualityAnalyzer.QualityParameter.Depth = 1;
-      qualityAnalyzer.QualityParameter.Hidden = true;
-    }
-
-    protected override void PerformInitialize(CancellationToken token) {
-      for (var i = 0; i < PopulationSize; i++) {
-        var solutionScope = CreateEmptySolutionScope();
-        Context.Scope.SubScopes.Add(solutionScope);
-        RunOperator(Problem.Encoding.SolutionCreator, solutionScope, token);
-      }
-      EvaluatePopulation(Context.Scope.SubScopes.OfType<ISingleObjectiveSolutionScope<TSolution>>().ToList(), token);
-    }
-
-    protected override void PerformIterate(CancellationToken token) {
-      Selector.Select(Context, 2 * (PopulationSize - Elitism), true);
-      var pool = Context.MatingPool.ToList();
-
-      var nextGen = new List<ISingleObjectiveSolutionScope<TSolution>>(PopulationSize);
-      for (var i = 0; i < PopulationSize - Elitism; i++) {
-        Context.Parents = Tuple.Create(pool[2 * i], pool[2 * i + 1]);
-        Context.Child = CreateEmptySolutionScope();
-        Crossover.Cross(Context);
-        if (Context.Random.NextDouble() < MutationProbability)
-          Mutator.Manipulate(Context);
-        nextGen.Add(Context.Child);
-      }
-      EvaluatePopulation(nextGen, token);
-      if (Elitism > 0) {
-        nextGen.AddRange(Problem.Maximization
-          ? Context.Population.OrderByDescending(x => x.Fitness).Take(Elitism)
-          : Context.Population.OrderBy(x => x.Fitness).Take(Elitism));
-      }
-      
-      Context.Scope.SubScopes.Replace(nextGen);
-      Context.Iterations++;
-    }
-
-    private void EvaluatePopulation(ICollection<ISingleObjectiveSolutionScope<TSolution>> solutions, CancellationToken token) {
-      Parallel.ForEach(solutions, p => Evaluate(p, token));
-      Context.EvaluatedSolutions += solutions.Count;
-      var best = Problem.Maximization ? solutions.MaxItems(x => x.Fitness).First() : solutions.MinItems(x => x.Fitness).First();
-      if (IsBetter(Problem.Maximization, best.Fitness, Context.BestQuality)) {
-        Context.BestQuality = best.Fitness;
-        Context.BestSolution = (TSolution)best.Solution.Clone();
-      }
-    }
-
-    protected override void PerformAnalyze(CancellationToken token) {
-      base.PerformAnalyze(token);
-
-      IResult res;
-      if (!Results.TryGetValue("Generations", out res)) {
-        res = new Result("Generations", new IntValue(Context.Iterations));
-        Results.Add(res);
-      } else ((IntValue)res.Value).Value = Context.Iterations;
-    }
-  }
-}
Index: anches/2521_ProblemRefactoring/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/EvolutionaryAlgorithmContext.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/EvolutionaryAlgorithmContext.cs	(revision 16531)
+++ 	(revision )
@@ -1,114 +1,0 @@
-﻿#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 System;
-using System.Collections.Generic;
-using System.Linq;
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Optimization;
-using HeuristicLab.Optimization.Algorithms.SingleObjective;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Algorithms.GeneticAlgorithm {
-  [Item("Evolutionary Algorithm Context", "", ExcludeGenericTypeInfo = true)]
-  [StorableClass]
-  public class EvolutionaryAlgorithmContext<TProblem, TEncoding, TSolution> : HeuristicAlgorithmContext<TProblem, TEncoding, TSolution>,
-      ISingleObjectivePopulationContext<TSolution>, ISingleObjectiveMatingpoolContext<TSolution>, ISingleObjectiveMatingContext<TSolution>,
-      ISingleObjectiveSolutionContext<TSolution>, IIterationsContext
-      where TProblem : class, ISingleObjectiveProblem<TEncoding, TSolution>, ISingleObjectiveProblemDefinition<TEncoding, TSolution>
-      where TEncoding : class, IEncoding<TSolution>
-      where TSolution : class, ISolution {
-
-    [StorableConstructor]
-    protected EvolutionaryAlgorithmContext(bool deserializing) : base(deserializing) { }
-
-    protected EvolutionaryAlgorithmContext(EvolutionaryAlgorithmContext<TProblem, TEncoding, TSolution> original, Cloner cloner)
-      : base(original, cloner) {
-      matingPool = original.matingPool != null ? original.matingPool.Select(cloner.Clone).ToList() : null;
-      parents = original.parents != null ? Tuple.Create(cloner.Clone(original.parents.Item1), cloner.Clone(original.parents.Item2)) : null;
-      child = original.child != null ? cloner.Clone(child) : null;
-    }
-    public EvolutionaryAlgorithmContext() {
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new EvolutionaryAlgorithmContext<TProblem, TEncoding, TSolution>(this, cloner);
-    }
-
-    IEnumerable<IScope> IPopulationContext.Population {
-      get { return Scope.SubScopes; }
-    }
-
-    IEnumerable<ISolutionScope<TSolution>> IPopulationContext<TSolution>.Population {
-      get { return Scope.SubScopes.OfType<ISolutionScope<TSolution>>(); }
-    }
-    
-    public IEnumerable<ISingleObjectiveSolutionScope<TSolution>> Population {
-      get { return Scope.SubScopes.OfType<ISingleObjectiveSolutionScope<TSolution>>(); }
-    }
-
-    [Storable]
-    private IEnumerable<ISingleObjectiveSolutionScope<TSolution>> matingPool;
-    public IEnumerable<ISingleObjectiveSolutionScope<TSolution>> MatingPool {
-      get { return matingPool; }
-      set { matingPool = value; }
-    }
-    IEnumerable<ISolutionScope<TSolution>> IMatingpoolContext<TSolution>.MatingPool {
-      get { return matingPool; }
-      set { matingPool = value.OfType<ISingleObjectiveSolutionScope<TSolution>>(); }
-    }
-
-    [Storable]
-    private Tuple<ISingleObjectiveSolutionScope<TSolution>, ISingleObjectiveSolutionScope<TSolution>> parents;
-    public Tuple<ISingleObjectiveSolutionScope<TSolution>, ISingleObjectiveSolutionScope<TSolution>> Parents {
-      get { return parents; }
-      set { parents = value; }
-    }
-    Tuple<ISolutionScope<TSolution>, ISolutionScope<TSolution>> IMatingContext<TSolution>.Parents {
-      get { return Tuple.Create((ISolutionScope<TSolution>)Parents.Item1, (ISolutionScope<TSolution>)Parents.Item2); }
-    }
-
-    [Storable]
-    private ISingleObjectiveSolutionScope<TSolution> child;
-
-
-    public ISingleObjectiveSolutionScope<TSolution> Child {
-      get { return child; }
-      set { child = value; }
-    }
-    ISolutionScope<TSolution> IMatingContext<TSolution>.Child {
-      get { return Child; }
-    }
-    public ISingleObjectiveSolutionScope<TSolution> Solution {
-      get { return child; }
-    }
-    ISolutionScope<TSolution> ISolutionContext<TSolution>.Solution { get { return child; } }
-    IScope ISolutionContext.Solution { get { return child; } }
-
-    [Storable]
-    private int iterations;
-    public int Iterations {
-      get { return iterations; }
-      set { iterations = value; }
-    }
-  }
-}
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/HeuristicLab.Algorithms.GeneticAlgorithm-3.3.csproj
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/HeuristicLab.Algorithms.GeneticAlgorithm-3.3.csproj	(revision 16531)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/HeuristicLab.Algorithms.GeneticAlgorithm-3.3.csproj	(revision 16532)
@@ -115,7 +115,4 @@
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="BinaryCanonicalGeneticAlgorithm.cs" />
-    <Compile Include="CanonicalGeneticAlgorithm.cs" />
-    <Compile Include="EvolutionaryAlgorithmContext.cs" />
     <Compile Include="GeneticAlgorithm.cs" />
     <Compile Include="GeneticAlgorithmMainLoop.cs" />
@@ -150,8 +147,4 @@
       <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>
     </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Operators\3.3\HeuristicLab.Operators-3.3.csproj">
Index: anches/2521_ProblemRefactoring/HeuristicLab.Algorithms.LocalSearch/3.3/BinaryIteratedLocalSearch.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Algorithms.LocalSearch/3.3/BinaryIteratedLocalSearch.cs	(revision 16531)
+++ 	(revision )
@@ -1,54 +1,0 @@
-﻿#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.Encodings.BinaryVectorEncoding;
-using HeuristicLab.Encodings.BinaryVectorEncoding.LocalSearch;
-using HeuristicLab.Optimization;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Algorithms.LocalSearch {
-  [Item("Iterated Local Search (ILS)", "Performs a repeated local search by applying a kick to each previous local optimum.")]
-  [Creatable(CreatableAttribute.Categories.SingleSolutionAlgorithms, Priority = 999)]
-  [StorableClass]
-  public sealed class BinaryIteratedLocalSearch : IteratedLocalSearch<SingleObjectiveProblem<BinaryVectorEncoding, BinaryVector>, BinaryVectorEncoding, BinaryVector> {
-
-    [StorableConstructor]
-    private BinaryIteratedLocalSearch(bool deserializing) : base(deserializing) { }
-    private BinaryIteratedLocalSearch(BinaryIteratedLocalSearch original, Cloner cloner)
-      : base(original, cloner) { }
-    public BinaryIteratedLocalSearch() {
-      var ls = new ExhaustiveBitflip<SingleObjectiveProblem<BinaryVectorEncoding, BinaryVector>, LocalSearchContext<SingleObjectiveProblem<BinaryVectorEncoding, BinaryVector>, BinaryVectorEncoding, BinaryVector>>();
-      LocalSearchParameter.ValidValues.Add(ls);
-      //foreach (var ls in ApplicationManager.Manager.GetInstances<IBinaryLocalSearch<LocalSearchContext<SingleObjectiveProblem<BinaryVectorEncoding, BinaryVector>, BinaryVectorEncoding, BinaryVector>>>())
-        //LocalSearchParameter.ValidValues.Add(ls);
-      KickerParameter.ValidValues.Add(new SingleBitflipManipulator<LocalSearchContext<SingleObjectiveProblem<BinaryVectorEncoding, BinaryVector>, BinaryVectorEncoding, BinaryVector>>());
-      KickerParameter.ValidValues.Add(new MultiBitflipManipulator<LocalSearchContext<SingleObjectiveProblem<BinaryVectorEncoding, BinaryVector>, BinaryVectorEncoding, BinaryVector>>());
-      //foreach (var ls in ApplicationManager.Manager.GetInstances<IManipulator<LocalSearchContext<SingleObjectiveProblem<BinaryVectorEncoding, BinaryVector>, BinaryVectorEncoding, BinaryVector>>>())
-      //KickerParameter.ValidValues.Add(ls);
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new BinaryIteratedLocalSearch(this, cloner);
-    }
-  }
-}
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Algorithms.LocalSearch/3.3/HeuristicLab.Algorithms.LocalSearch-3.3.csproj
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Algorithms.LocalSearch/3.3/HeuristicLab.Algorithms.LocalSearch-3.3.csproj	(revision 16531)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Algorithms.LocalSearch/3.3/HeuristicLab.Algorithms.LocalSearch-3.3.csproj	(revision 16532)
@@ -114,7 +114,4 @@
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="BinaryIteratedLocalSearch.cs" />
-    <Compile Include="IteratedLocalSearch.cs" />
-    <Compile Include="LocalSearchContext.cs" />
     <Compile Include="LocalSearchImprovementOperator.cs" />
     <Compile Include="LocalSearchMainLoop.cs" />
@@ -153,8 +150,4 @@
       <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>
     </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Operators\3.3\HeuristicLab.Operators-3.3.csproj">
Index: anches/2521_ProblemRefactoring/HeuristicLab.Algorithms.LocalSearch/3.3/IteratedLocalSearch.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Algorithms.LocalSearch/3.3/IteratedLocalSearch.cs	(revision 16531)
+++ 	(revision )
@@ -1,107 +1,0 @@
-﻿#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 System.Threading;
-using HeuristicLab.Analysis;
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Data;
-using HeuristicLab.Optimization;
-using HeuristicLab.Optimization.Algorithms.SingleObjective;
-using HeuristicLab.Optimization.LocalSearch;
-using HeuristicLab.Optimization.Manipulation;
-using HeuristicLab.Parameters;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Algorithms.LocalSearch {
-  [Item("Iterated Local Search (ILS)", "Performs a repeated local search by applying a kick to each previous local optimum.")]
-  [Creatable(CreatableAttribute.Categories.SingleSolutionAlgorithms, Priority = 999)]
-  [StorableClass]
-  public class IteratedLocalSearch<TProblem, TEncoding, TSolution> : HeuristicAlgorithm<LocalSearchContext<TProblem, TEncoding, TSolution>, TProblem, TEncoding, TSolution>
-      where TProblem : class, ISingleObjectiveProblem<TEncoding, TSolution>, ISingleObjectiveProblemDefinition<TEncoding, TSolution>
-      where TEncoding : class, IEncoding<TSolution>
-      where TSolution : class, ISolution {
-
-    public IConstrainedValueParameter<ILocalSearch<LocalSearchContext<TProblem, TEncoding, TSolution>>> LocalSearchParameter {
-      get { return (IConstrainedValueParameter<ILocalSearch<LocalSearchContext<TProblem, TEncoding, TSolution>>>)Parameters["LocalSearch"]; }
-    }
-    public IConstrainedValueParameter<IManipulator<LocalSearchContext<TProblem, TEncoding, TSolution>>> KickerParameter {
-      get { return (IConstrainedValueParameter<IManipulator<LocalSearchContext<TProblem, TEncoding, TSolution>>>)Parameters["Kicker"]; }
-    }
-
-    [Storable]
-    private BestAverageWorstQualityAnalyzer qualityAnalyzer;
-
-    [StorableConstructor]
-    protected IteratedLocalSearch(bool deserializing) : base(deserializing) { }
-    protected IteratedLocalSearch(IteratedLocalSearch<TProblem, TEncoding, TSolution> original, Cloner cloner)
-      : base(original, cloner) {
-      qualityAnalyzer = cloner.Clone(original.qualityAnalyzer);
-    }
-    public IteratedLocalSearch() {
-      ProblemAnalyzer = new MultiAnalyzer();
-      AlgorithmAnalyzer = new MultiAnalyzer();
-      qualityAnalyzer = new BestAverageWorstQualityAnalyzer();
-      AlgorithmAnalyzer.Operators.Add(qualityAnalyzer, true);
-
-      Parameters.Add(new ConstrainedValueParameter<ILocalSearch<LocalSearchContext<TProblem, TEncoding, TSolution>>>("LocalSearch", "The local search operator to use."));
-      Parameters.Add(new ConstrainedValueParameter<IManipulator<LocalSearchContext<TProblem, TEncoding, TSolution>>>("Kicker", "The manipulator operator that performs the kick."));
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new IteratedLocalSearch<TProblem, TEncoding, TSolution>(this, cloner);
-    }
-
-    protected override void OnProblemChanged() {
-      base.OnProblemChanged();
-      qualityAnalyzer.QualityParameter.ActualName = Problem.Evaluator.QualityParameter.ActualName;
-      qualityAnalyzer.QualityParameter.Depth = 1;
-      qualityAnalyzer.QualityParameter.Hidden = true;
-    }
-
-    protected override void PerformInitialize(CancellationToken token) {
-      Context.Solution = CreateEmptySolutionScope();
-      RunOperator(Problem.Encoding.SolutionCreator, Context.Solution, token);
-      Evaluate(Context.Solution, token);
-      DoLocalSearch();
-    }
-
-    protected override void PerformIterate(CancellationToken token) {
-      Context.Iterations++;
-      KickerParameter.Value.Manipulate(Context);
-      DoLocalSearch();
-    }
-
-    private void DoLocalSearch() {
-      LocalSearchParameter.Value.Optimize(Context);
-    }
-
-    protected override void PerformAnalyze(CancellationToken token) {
-      base.PerformAnalyze(token);
-      IResult res;
-      if (!Results.TryGetValue("Iterations", out res)) {
-        res = new Result("Iterations", new IntValue(Context.Iterations));
-        Results.Add(res);
-      }
-      ((IntValue)res.Value).Value = Context.Iterations;
-    }
-  }
-}
Index: anches/2521_ProblemRefactoring/HeuristicLab.Algorithms.LocalSearch/3.3/LocalSearchContext.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Algorithms.LocalSearch/3.3/LocalSearchContext.cs	(revision 16531)
+++ 	(revision )
@@ -1,76 +1,0 @@
-﻿#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.Optimization;
-using HeuristicLab.Optimization.Algorithms.SingleObjective;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Algorithms.LocalSearch {
-  [Item("LocalSearchContext", "")]
-  [StorableClass]
-  public class LocalSearchContext<TProblem, TEncoding, TSolution> : HeuristicAlgorithmContext<TProblem, TEncoding, TSolution>,
-      ISingleObjectiveSolutionContext<TSolution>, IImprovementStepsContext, IIterationsContext
-      where TProblem : class, ISingleObjectiveProblem<TEncoding, TSolution>, ISingleObjectiveProblemDefinition<TEncoding, TSolution> // need both !?
-      where TEncoding : class, IEncoding<TSolution>
-      where TSolution: class, ISolution {
-
-    [Storable]
-    private ISingleObjectiveSolutionScope<TSolution> solution;
-    public ISingleObjectiveSolutionScope<TSolution> Solution {
-      get { return solution; }
-      set {
-        solution = value;
-        if (Scope.SubScopes.Count == 0)
-          Scope.SubScopes.Add(solution);
-        else Scope.SubScopes[0] = solution;
-      }
-    }
-
-    [Storable]
-    private int iterations;
-    public int Iterations {
-      get { return iterations; }
-      set { iterations = value; }
-    }
-
-    [Storable]
-    private int improvementSteps;
-    public int ImprovementSteps {
-      get { return improvementSteps; }
-      set { improvementSteps = value; }
-    }
-
-    [StorableConstructor]
-    private LocalSearchContext(bool deserializing) : base(deserializing) { }
-    private LocalSearchContext(LocalSearchContext<TProblem, TEncoding, TSolution> original, Cloner cloner)
-      : base(original, cloner) { }
-    public LocalSearchContext() { }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new LocalSearchContext<TProblem, TEncoding, TSolution>(this, cloner);
-    }
-
-    IScope ISolutionContext.Solution { get { return solution; } }
-    ISolutionScope<TSolution> ISolutionContext<TSolution>.Solution { get { return solution; } }
-  }
-}
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Core/3.3/Attributes/ItemAttribute.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Core/3.3/Attributes/ItemAttribute.cs	(revision 16531)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Core/3.3/Attributes/ItemAttribute.cs	(revision 16532)
@@ -39,12 +39,12 @@
       set { description = value == null ? string.Empty : value; }
     }
-    public bool ExcludeGenericTypeInfo { get; set; }
 
-    public ItemAttribute() : this(string.Empty, string.Empty, false) { }
-    public ItemAttribute(string name, string description) : this(name, description, false) { }
-    public ItemAttribute(string name, string description, bool excludeGenericTypeInfo) {
+    public ItemAttribute() {
+      Name = string.Empty;
+      Description = string.Empty;
+    }
+    public ItemAttribute(string name, string description) {
       Name = name;
       Description = description;
-      ExcludeGenericTypeInfo = excludeGenericTypeInfo;
     }
 
@@ -52,7 +52,6 @@
       object[] attribs = type.GetCustomAttributes(typeof(ItemAttribute), false);
       if (attribs.Length > 0) {
-        var attribute = (ItemAttribute)attribs[0];
-        string name = attribute.Name;
-        if (!attribute.ExcludeGenericTypeInfo && type.IsGenericType) {
+        string name = ((ItemAttribute)attribs[0]).Name;
+        if (type.IsGenericType) {
           name += "<";
           Type[] typeParams = type.GetGenericArguments();
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Crossovers/NPointCrossover.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Crossovers/NPointCrossover.cs	(revision 16531)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Crossovers/NPointCrossover.cs	(revision 16532)
@@ -25,5 +25,4 @@
 using HeuristicLab.Core;
 using HeuristicLab.Data;
-using HeuristicLab.Optimization;
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
@@ -71,17 +70,17 @@
     /// <param name="n">Number of crossover points.</param>
     /// <returns>The newly created binary vector, resulting from the N point crossover.</returns>
-    public static BinaryVector Apply(IRandom random, BinaryVector parent1, BinaryVector parent2, int n) {
+    public static BinaryVector Apply(IRandom random, BinaryVector parent1, BinaryVector parent2, IntValue n) {
       if (parent1.Length != parent2.Length)
         throw new ArgumentException("NPointCrossover: The parents are of different length.");
 
-      if (n > parent1.Length)
+      if (n.Value > parent1.Length)
         throw new ArgumentException("NPointCrossover: There cannot be more breakpoints than the size of the parents.");
 
-      if (n < 1)
+      if (n.Value < 1)
         throw new ArgumentException("NPointCrossover: N cannot be < 1.");
 
       int length = parent1.Length;
       bool[] result = new bool[length];
-      int[] breakpoints = new int[n];
+      int[] breakpoints = new int[n.Value];
 
       //choose break points
@@ -91,5 +90,5 @@
         breakpointPool.Add(i);
 
-      for (int i = 0; i < n; i++) {
+      for (int i = 0; i < n.Value; i++) {
         int index = random.Next(breakpointPool.Count);
         breakpoints[i] = breakpointPool[index];
@@ -138,40 +137,5 @@
       if (NParameter.ActualValue == null) throw new InvalidOperationException("NPointCrossover: Parameter " + NParameter.ActualName + " could not be found.");
 
-      return Apply(random, parents[0], parents[1], NParameter.ActualValue.Value);
-    }
-  }
-
-  [Item("N-point Crossover", "", ExcludeGenericTypeInfo = true)]
-  [StorableClass]
-  public sealed class NPointCrossover<TContext> : ParameterizedNamedItem, IBinaryCrossover<TContext>
-    where TContext : IMatingContext<BinaryVector>, IStochasticContext {
-
-    [Storable]
-    private IValueParameter<IntValue> nparameter;
-    public int N {
-      get { return nparameter.Value.Value; }
-      set {
-        if (value < 1) throw new ArgumentException("Cannot set N to less than 1.");
-        nparameter.Value.Value = value;
-      }
-    }
-
-    [StorableConstructor]
-    private NPointCrossover(bool deserializing) : base(deserializing) { }
-    private NPointCrossover(NPointCrossover<TContext> original, Cloner cloner)
-      : base(original, cloner) {
-      nparameter = cloner.Clone(original.nparameter);
-    }
-    public NPointCrossover() {
-      Parameters.Add(nparameter = new ValueParameter<IntValue>("N", "The number of crossover points.", new IntValue(1)));
-    }
-
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new NPointCrossover<TContext>(this, cloner);
-    }
-
-    public void Cross(TContext context) {
-      context.Child.Solution = NPointCrossover.Apply(context.Random, context.Parents.Item1.Solution, context.Parents.Item2.Solution, N);
+      return Apply(random, parents[0], parents[1], NParameter.ActualValue);
     }
   }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Crossovers/SinglePointCrossover.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Crossovers/SinglePointCrossover.cs	(revision 16531)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Crossovers/SinglePointCrossover.cs	(revision 16532)
@@ -57,5 +57,5 @@
       if (parents.Length != 2) throw new ArgumentException("ERROR in SinglePointCrossover: The number of parents is not equal to 2");
 
-      return NPointCrossover.Apply(random, parents[0], parents[1], 1);
+      return NPointCrossover.Apply(random, parents[0], parents[1], new IntValue(1));
     }
   }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/HeuristicLab.Encodings.BinaryVectorEncoding-3.3.csproj
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/HeuristicLab.Encodings.BinaryVectorEncoding-3.3.csproj	(revision 16531)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/HeuristicLab.Encodings.BinaryVectorEncoding-3.3.csproj	(revision 16532)
@@ -126,5 +126,4 @@
     <Compile Include="Crossovers\NPointCrossover.cs" />
     <Compile Include="BinaryVector.cs" />
-    <Compile Include="Interfaces\IBinaryLocalSearch.cs" />
     <Compile Include="Interfaces\IBinaryVectorMultiNeighborhoodShakingOperator.cs" />
     <Compile Include="Interfaces\IBinaryVectorSolutionsOperator.cs" />
@@ -140,8 +139,4 @@
     <Compile Include="BinaryVectorManipulator.cs" />
     <Compile Include="Interfaces\IBinaryVectorMoveOperator.cs" />
-    <Compile Include="LocalSearch\ExhaustiveBitflip.cs" />
-    <Compile Include="Manipulators\MultiBitflipManipulator.cs" />
-    <Compile Include="Manipulators\SingleBitflipManipulator.cs" />
-    <Compile Include="Manipulators\BitflipManipulator.cs" />
     <Compile Include="Manipulators\SomePositionsBitflipManipulator.cs" />
     <Compile Include="Manipulators\SinglePositionBitflipManipulator.cs" />
@@ -210,8 +205,4 @@
       <Name>HeuristicLab.PluginInfrastructure-3.3</Name>
       <Private>False</Private>
-    </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>
     </ProjectReference>
   </ItemGroup>
Index: anches/2521_ProblemRefactoring/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Interfaces/IBinaryLocalSearch.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Interfaces/IBinaryLocalSearch.cs	(revision 16531)
+++ 	(revision )
@@ -1,27 +1,0 @@
-﻿#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.Optimization.LocalSearch;
-
-namespace HeuristicLab.Encodings.BinaryVectorEncoding {
-  public interface IBinaryLocalSearch<TContext> : ILocalSearch<TContext> {
-  }
-}
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Interfaces/IBinaryVectorCrossover.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Interfaces/IBinaryVectorCrossover.cs	(revision 16531)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Interfaces/IBinaryVectorCrossover.cs	(revision 16532)
@@ -22,5 +22,4 @@
 using HeuristicLab.Core;
 using HeuristicLab.Optimization;
-using HeuristicLab.Optimization.Crossover;
 
 namespace HeuristicLab.Encodings.BinaryVectorEncoding {
@@ -32,6 +31,3 @@
     ILookupParameter<BinaryVector> ChildParameter { get; }
   }
-
-  // TODO: probably unecessary
-  public interface IBinaryCrossover<TContext> : ICrossover<TContext> { }
 }
Index: anches/2521_ProblemRefactoring/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Manipulators/BitflipManipulator.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Manipulators/BitflipManipulator.cs	(revision 16531)
+++ 	(revision )
@@ -1,42 +1,0 @@
-﻿#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.Optimization;
-using HeuristicLab.Optimization.Manipulation;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Encodings.BinaryVectorEncoding {
-  [Item("Bitflip Manipulator", "")]
-  [StorableClass]
-  public abstract class BitflipManipulator<TContext> : ParameterizedNamedItem, IManipulator<TContext>
-      where TContext : ISingleObjectiveSolutionContext<BinaryVector>, IStochasticContext {
-
-    [StorableConstructor]
-    protected BitflipManipulator(bool deserializing) : base(deserializing) { }
-    protected BitflipManipulator(BitflipManipulator<TContext> original, Cloner cloner)
-      : base(original, cloner) { }
-    public BitflipManipulator() { }
-
-    public abstract void Manipulate(TContext context);
-  }
-}
Index: anches/2521_ProblemRefactoring/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Manipulators/MultiBitflipManipulator.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Manipulators/MultiBitflipManipulator.cs	(revision 16531)
+++ 	(revision )
@@ -1,65 +1,0 @@
-﻿#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.Optimization;
-using HeuristicLab.Parameters;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Encodings.BinaryVectorEncoding {
-  [Item("Multi Bitflip Manipulator", "", ExcludeGenericTypeInfo = true)]
-  [StorableClass]
-  public sealed class MultiBitflipManipulator<TContext> : BitflipManipulator<TContext>
-      where TContext : ISingleObjectiveSolutionContext<BinaryVector>, IStochasticContext {
-
-    private IValueParameter<PercentValue> RatePerBitParameter {
-      get { return (IValueParameter<PercentValue>)Parameters["RatePerBit"]; }
-    }
-
-    public double RatePerBit {
-      get { return RatePerBitParameter.Value.Value; }
-      set { RatePerBitParameter.Value.Value = value; }
-    }
-
-    [StorableConstructor]
-    private MultiBitflipManipulator(bool deserializing) : base(deserializing) { }
-    private MultiBitflipManipulator(MultiBitflipManipulator<TContext> original, Cloner cloner)
-      : base(original, cloner) { }
-    public MultiBitflipManipulator() {
-      Parameters.Add(new ValueParameter<PercentValue>("RatePerBit", "The probability of mutating each bit (independent of each other).", new PercentValue(0.05)));
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new MultiBitflipManipulator<TContext>(this, cloner);
-    }
-
-    public override void Manipulate(TContext context) {
-      var len = context.Solution.Solution.Length;
-      var rate = RatePerBit;
-
-      for (var idx = 0; idx < len; idx++)
-        if (context.Random.NextDouble() < rate)
-          context.Solution.Solution[idx] = !context.Solution.Solution[idx];
-    }
-  }
-}
Index: anches/2521_ProblemRefactoring/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Manipulators/SingleBitflipManipulator.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Manipulators/SingleBitflipManipulator.cs	(revision 16531)
+++ 	(revision )
@@ -1,49 +1,0 @@
-﻿#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.Optimization;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Encodings.BinaryVectorEncoding {
-  [Item("Single Bitflip Manipulator", "", ExcludeGenericTypeInfo = true)]
-  [StorableClass]
-  public sealed class SingleBitflipManipulator<TContext> : BitflipManipulator<TContext>
-      where TContext : ISingleObjectiveSolutionContext<BinaryVector>, IStochasticContext {
-
-    [StorableConstructor]
-    private SingleBitflipManipulator(bool deserializing) : base(deserializing) { }
-    private SingleBitflipManipulator(SingleBitflipManipulator<TContext> original, Cloner cloner)
-      : base(original, cloner) { }
-    public SingleBitflipManipulator() { }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new SingleBitflipManipulator<TContext>(this, cloner);
-    }
-
-    public override void Manipulate(TContext context) {
-      var len = context.Solution.Solution.Length;
-      var idx = context.Random.Next(len);
-      context.Solution.Solution[idx] = !context.Solution.Solution[idx];
-    }
-  }
-}
Index: anches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/Algorithms/AlgorithmContext.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/Algorithms/AlgorithmContext.cs	(revision 16531)
+++ 	(revision )
@@ -1,73 +1,0 @@
-﻿#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.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Optimization.Algorithms {
-  [Item("AlgorithmContext", "")]
-  [StorableClass]
-  public abstract class AlgorithmContext : ParameterizedNamedItem, IExecutionContext {
-
-    private IExecutionContext parent;
-    public IExecutionContext Parent {
-      get { return parent; }
-      set { parent = value; }
-    }
-
-    IKeyedItemCollection<string, IParameter> IExecutionContext.Parameters {
-      get { return Parameters; }
-    }
-
-    [Storable]
-    private IScope scope;
-    public IScope Scope {
-      get { return scope; }
-    }
-
-    [StorableConstructor]
-    protected AlgorithmContext(bool deserializing) : base(deserializing) { }
-    protected AlgorithmContext(AlgorithmContext original, Cloner cloner)
-      : base(original, cloner) { }
-    protected AlgorithmContext() : this(new Scope("Scope")) { }
-    protected AlgorithmContext(IScope s) {
-      scope = s;
-    }
-
-
-    public IAtomicOperation CreateOperation(IOperator op) {
-      return new ExecutionContext(parent, op, scope);
-    }
-
-    public IAtomicOperation CreateOperation(IOperator op, IScope s) {
-      return new ExecutionContext(parent, op, s);
-    }
-
-    public IAtomicOperation CreateChildOperation(IOperator op) {
-      return new ExecutionContext(this, op, scope);
-    }
-
-    public IAtomicOperation CreateChildOperation(IOperator op, IScope s) {
-      return new ExecutionContext(this, op, s);
-    }
-  }
-}
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Problem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Problem.cs	(revision 16531)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Problem.cs	(revision 16532)
@@ -81,5 +81,5 @@
     }
 
-    // TODO: There is no way to access the Operators collection other than through OperatorParameter.Value
+
     protected override IEnumerable<IItem> GetOperators() {
       if (Encoding == null) return base.GetOperators();
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj	(revision 16531)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj	(revision 16532)
@@ -120,9 +120,5 @@
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="Algorithms\SingleObjective\HeuristicAlgorithmContext.cs" />
     <Compile Include="Algorithms\BasicAlgorithm.cs" />
-    <Compile Include="Algorithms\SingleObjective\HeuristicAlgorithm.cs" />
-    <Compile Include="Algorithms\AlgorithmContext.cs" />
-    <Compile Include="Algorithms\SingleObjective\SingleObjectiveSolutionScope.cs" />
     <Compile Include="BasicProblems\CombinedSolution.cs" />
     <Compile Include="BasicProblems\Interfaces\IMultiEncodingOperator.cs" />
@@ -174,5 +170,4 @@
     <Compile Include="MetaOptimizers\Experiment.cs" />
     <Compile Include="MetaOptimizers\TimeLimitRun.cs" />
-    <Compile Include="NewInfrastructure\Interfaces.cs" />
     <Compile Include="RunCollectionModification\RunCollectionRunRemover.cs" />
     <Compile Include="Plugin.cs" />
@@ -317,8 +312,4 @@
       <Private>False</Private>
     </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>
-    </ProjectReference>
   </ItemGroup>
   <ItemGroup>
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Knapsack/3.3/Analyzers/BestKnapsackSolutionAnalyzer.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Knapsack/3.3/Analyzers/BestKnapsackSolutionAnalyzer.cs	(revision 16531)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Knapsack/3.3/Analyzers/BestKnapsackSolutionAnalyzer.cs	(revision 16532)
@@ -60,5 +60,5 @@
     }
     public ILookupParameter<KnapsackSolution> BestSolutionParameter {
-      get { return (ILookupParameter<KnapsackSolution>)Parameters["BestKnapsackSolution"]; }
+      get { return (ILookupParameter<KnapsackSolution>)Parameters["BestSolution"]; }
     }
     public IValueLookupParameter<ResultCollection> ResultsParameter {
@@ -84,5 +84,5 @@
 
       Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The qualities of the Knapsack solutions which should be visualized."));
-      Parameters.Add(new LookupParameter<KnapsackSolution>("BestKnapsackSolution", "The best Knapsack solution."));
+      Parameters.Add(new LookupParameter<KnapsackSolution>("BestSolution", "The best Knapsack solution."));
       Parameters.Add(new ValueLookupParameter<ResultCollection>("Results", "The result collection where the knapsack solution should be stored."));
       Parameters.Add(new LookupParameter<DoubleValue>("BestKnownQuality", "The quality of the best known solution."));
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Knapsack/3.3/KnapsackProblem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Knapsack/3.3/KnapsackProblem.cs	(revision 16531)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Knapsack/3.3/KnapsackProblem.cs	(revision 16532)
@@ -91,5 +91,4 @@
 
       InitializeRandomKnapsackInstance();
-      Encoding.Length = Weights.Length;
 
       InitializeOperators();
@@ -98,12 +97,10 @@
 
     public override double Evaluate(BinaryVector solution, IRandom random) {
-      var weights = Weights;
-      var values = Values;
       var totalWeight = 0.0;
       var totalValue = 0.0;
       for (var i = 0; i < solution.Length; i++) {
         if (!solution[i]) continue;
-        totalWeight += weights[i];
-        totalValue += values[i];
+        totalWeight += Weights[i];
+        totalValue += Values[i];
       }
       return totalWeight > KnapsackCapacity ? KnapsackCapacity - totalWeight : totalValue;
@@ -256,6 +253,5 @@
       var sysrand = new System.Random();
 
-      var power = sysrand.Next(5, 11);
-      var itemCount = (int)Math.Pow(2, power);
+      var itemCount = sysrand.Next(10, 100);
       Weights = new IntArray(itemCount);
       Values = new IntArray(itemCount);
@@ -264,6 +260,6 @@
 
       for (int i = 0; i < itemCount; i++) {
-        var value = sysrand.Next(1, 30);
-        var weight = sysrand.Next(1, 30);
+        var value = sysrand.Next(1, 10);
+        var weight = sysrand.Next(1, 10);
 
         Values[i] = value;
@@ -272,5 +268,5 @@
       }
 
-      KnapsackCapacity = (int)Math.Round(0.5 * totalWeight);
+      KnapsackCapacity = (int)Math.Round(0.7 * totalWeight);
     }
   }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Selection/3.3/TournamentSelector.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Selection/3.3/TournamentSelector.cs	(revision 16531)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Selection/3.3/TournamentSelector.cs	(revision 16532)
@@ -27,5 +27,4 @@
 using HeuristicLab.Data;
 using HeuristicLab.Optimization;
-using HeuristicLab.Optimization.Selection;
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
@@ -91,62 +90,3 @@
     }
   }
-
-  [Item("Tournament Selector", "", ExcludeGenericTypeInfo = true)]
-  [StorableClass]
-  public sealed class TournamentSelector<TContext, TProblem, TEncoding, TSolution> : ParameterizedNamedItem, ISelector<TContext>
-      where TContext : ISingleObjectivePopulationContext<TSolution>, IMatingpoolContext<TSolution>, IStochasticContext,
-                       IProblemContext<TProblem, TEncoding, TSolution>
-      where TProblem : class, ISingleObjectiveProblem<TEncoding, TSolution>, ISingleObjectiveProblemDefinition<TEncoding, TSolution>
-      where TEncoding : class, IEncoding<TSolution>
-      where TSolution : class, ISolution {
-
-    [Storable]
-    private IValueParameter<IntValue> groupSizeParameter;
-    public int GroupSize {
-      get { return groupSizeParameter.Value.Value; }
-      set {
-        if (value < 1) throw new ArgumentException("Cannot use a group size less than 1 in tournament selection.");
-        groupSizeParameter.Value.Value = value;
-      }
-    }
-    
-    [StorableConstructor]
-    private TournamentSelector(bool deserializing) : base(deserializing) { }
-    private TournamentSelector(TournamentSelector<TContext, TProblem, TEncoding, TSolution> original, Cloner cloner)
-      : base(original, cloner) {
-      groupSizeParameter = cloner.Clone(groupSizeParameter);
-    }
-    public TournamentSelector() {
-      Parameters.Add(groupSizeParameter = new ValueParameter<IntValue>("GroupSize", "The group size that competes in the tournament.", new IntValue(2)));
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new TournamentSelector<TContext, TProblem, TEncoding, TSolution>(this, cloner);
-    }
-
-    public void Select(TContext context, int n, bool withRepetition) {
-      context.MatingPool = Select(context.Random, context.Problem.IsBetter, context.Population, GroupSize, n, withRepetition);
-    }
-
-    public static IEnumerable<ISingleObjectiveSolutionScope<TSolution>> Select(IRandom random, Func<double, double, bool> isBetterFunc, IEnumerable<ISingleObjectiveSolutionScope<TSolution>> population, int groupSize, int n, bool withRepetition) {
-      var pop = population.Where(x => !double.IsNaN(x.Fitness)).ToList();
-
-      var i = n;
-      while (i > 0 && pop.Count > 0) {
-        var best = random.Next(pop.Count);
-        for (var j = 1; j < groupSize; j++) {
-          var index = random.Next(pop.Count);
-          if (isBetterFunc(pop[index].Fitness, pop[best].Fitness)) {
-            best = index;
-          }
-        }
-
-        yield return pop[best];
-        i--;
-        if (!withRepetition) {
-          pop.RemoveAt(i);
-        }
-      }
-    }
-  }
 }
