Index: /branches/PerformanceComparison/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj	(revision 13736)
+++ /branches/PerformanceComparison/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj	(revision 13737)
@@ -200,5 +200,4 @@
     <Compile Include="MultiObjective\ParetoFrontAnalyzer.cs" />
     <Compile Include="Optimizers\IteratedAlgorithm.cs" />
-    <Compile Include="Optimizers\IRRestarter.cs" />
     <Compile Include="Plugin.cs" />
     <Compile Include="PopulationSimilarityAnalysis\PopulationDiversityAnalyzer.cs" />
Index: anches/PerformanceComparison/HeuristicLab.Analysis/3.3/Optimizers/IRRestarter.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.Analysis/3.3/Optimizers/IRRestarter.cs	(revision 13736)
+++ 	(revision )
@@ -1,704 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2012 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.ComponentModel;
-using System.Drawing;
-using System.Linq;
-using HeuristicLab.Common;
-using HeuristicLab.Common.Resources;
-using HeuristicLab.Core;
-using HeuristicLab.Data;
-using HeuristicLab.Optimization;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Analysis {
-  public enum TerminationCriterium { OnlyByTime, OnlyByEvaluations, OnlyByTarget, ByTargetAndTime, ByTargetAndEvaluations, ByTimeAndEvaluations, WhicheverHitsFirst, WhicheverHitsLast }
-  /// <summary>
-  /// A run in which an algorithm is executed for a certain maximum time only.
-  /// </summary>
-  [Item("Independent Random Restarter", "An optimizer that repeats an algorithm until either a certain target value is reached or a maximum budget is exceeded.")]
-  [Creatable(CreatableAttribute.Categories.TestingAndAnalysis, Priority = 117)]
-  [StorableClass]
-  public sealed class IndepdentRandomRestarter : NamedItem, IOptimizer, IStorableContent, INotifyPropertyChanged {
-    private const string ExecutionTimeResultName = "Execution Time";
-    private const string BestQualityResultName = "BestQuality";
-    private const string RandomRestartsResultName = "RandomRestarts";
-    private const string EvaluatedSolutionsResultName = "EvaluatedSolutions";
-    private const string EvaluatedMovesResultName = "EvaluatedMoves";
-    private const string QualityPerClockResultName = "QualityPerClock";
-    private const string QualityPerEvaluationsResultName = "QualityPerEvaluations";
-
-    public string Filename { get; set; }
-
-    #region ItemImage
-    public static new Image StaticItemImage {
-      get { return VSImageLibrary.Event; }
-    }
-    public override Image ItemImage {
-      get { return (Algorithm != null) ? Algorithm.ItemImage : VSImageLibrary.ExecutableStopped; }
-    }
-    #endregion
-
-    [Storable]
-    private TerminationCriterium terminationCriterium;
-    public TerminationCriterium TerminationCriterium {
-      get { return terminationCriterium; }
-      set {
-        if (terminationCriterium == value) return;
-        terminationCriterium = value;
-        OnPropertyChanged("TerminationCriterium");
-      }
-    }
-
-    [Storable]
-    private TimeSpan maximumExecutionTime;
-    public TimeSpan MaximumExecutionTime {
-      get { return maximumExecutionTime; }
-      set {
-        if (maximumExecutionTime == value) return;
-        maximumExecutionTime = value;
-        OnPropertyChanged("MaximumExecutionTime");
-      }
-    }
-
-    [Storable]
-    private int maximumEvaluations;
-    public int MaximumEvaluations {
-      get { return maximumEvaluations; }
-      set {
-        if (maximumEvaluations == value) return;
-        maximumEvaluations = value;
-        OnPropertyChanged("MaximumEvaluations");
-      }
-    }
-
-    [Storable]
-    private double targetValue;
-    public double TargetValue {
-      get { return targetValue; }
-      set {
-        if (targetValue == value) return;
-        targetValue = value;
-        OnPropertyChanged("TargetValue");
-      }
-    }
-
-    [Storable]
-    private bool maximization;
-    public bool Maximization {
-      get { return maximization; }
-      set {
-        if (maximization == value) return;
-        maximization = value;
-        OnPropertyChanged("Maximization");
-      }
-    }
-
-    [Storable]
-    private double moveCostPerSolution;
-    public double MoveCostPerSolution {
-      get { return moveCostPerSolution; }
-      set {
-        if (moveCostPerSolution == value) return;
-        moveCostPerSolution = value;
-        perEvaluationsAnalyzer.MoveCostPerSolutionParameter.Value = new DoubleValue(moveCostPerSolution);
-        OnPropertyChanged("MoveCostPerSolution");
-      }
-    }
-
-    [Storable]
-    private bool storeSolutionInRun;
-    public bool StoreSolutionInRun {
-      get { return storeSolutionInRun; }
-      set {
-        if (storeSolutionInRun == value) return;
-        storeSolutionInRun = value;
-        OnPropertyChanged("StoreSolutionInRun");
-      }
-    }
-
-    [Storable]
-    private QualityPerClockAnalyzer perClockAnalyzer;
-    [Storable]
-    private QualityPerEvaluationsAnalyzer perEvaluationsAnalyzer;
-
-    [Storable]
-    private ExecutionState executionState;
-    public ExecutionState ExecutionState {
-      get { return executionState; }
-      private set {
-        if (executionState != value) {
-          executionState = value;
-          OnExecutionStateChanged();
-          OnItemImageChanged();
-        }
-      }
-    }
-
-    private TimeSpan lastAlgorithmExecutionTime;
-    [Storable]
-    private TimeSpan executionTime;
-    public TimeSpan ExecutionTime {
-      get { return executionTime; }
-      set {
-        if (executionTime == value) return;
-        executionTime = value;
-        OnPropertyChanged("ExecutionTime");
-        OnExecutionTimeChanged();
-      }
-    }
-
-    [Storable]
-    private double evaluations;
-    public double Evaluations {
-      get { return evaluations; }
-      set {
-        if (evaluations == value) return;
-        evaluations = value;
-        OnPropertyChanged("Evaluations");
-      }
-    }
-
-    [Storable]
-    private double bestSoFar;
-    public double BestSoFar {
-      get { return bestSoFar; }
-      set {
-        if (bestSoFar == value) return;
-        bestSoFar = value;
-        OnPropertyChanged("BestSoFar");
-      }
-    }
-
-    [Storable]
-    private IRun currentRun;
-    public IRun CurrentRun {
-      get { return currentRun; }
-      private set {
-        if (currentRun == value) return;
-        currentRun = value;
-        OnPropertyChanged("CurrentRun");
-      }
-    }
-
-    [Storable]
-    private IAlgorithm algorithm;
-    public IAlgorithm Algorithm {
-      get { return algorithm; }
-      set {
-        if (algorithm == value) return;
-        if (algorithm != null) {
-          DeregisterAlgorithmEvents();
-          RemoveAlgorithmAnalyzers();
-        }
-        algorithm = value;
-        if (algorithm != null) {
-          RegisterAlgorithmEvents();
-          AddAlgorithmAnalyzers();
-        }
-        OnPropertyChanged("Algorithm");
-        Prepare();
-      }
-    }
-
-    [Storable]
-    private RunCollection runs;
-    public RunCollection Runs {
-      get { return runs; }
-      private set {
-        if (value == null) throw new ArgumentNullException();
-        if (runs == value) return;
-        runs = value;
-        OnPropertyChanged("Runs");
-      }
-    }
-
-    public IEnumerable<IOptimizer> NestedOptimizers {
-      get {
-        if (Algorithm == null) yield break;
-        yield return Algorithm;
-        foreach (var opt in Algorithm.NestedOptimizers)
-          yield return opt;
-      }
-    }
-
-    private bool IsFinished {
-      get {
-        var timeHit = ExecutionTime >= MaximumExecutionTime;
-        var evalHit = Evaluations >= MaximumEvaluations;
-        var targetHit = (Maximization && BestSoFar >= TargetValue || !Maximization && BestSoFar <= TargetValue);
-
-        return timeHit && evalHit && targetHit
-          || timeHit && (TerminationCriterium == TerminationCriterium.OnlyByTime
-                      || TerminationCriterium == TerminationCriterium.WhicheverHitsFirst
-                      || TerminationCriterium == TerminationCriterium.ByTargetAndTime
-                      || TerminationCriterium == TerminationCriterium.ByTimeAndEvaluations)
-          || evalHit && (TerminationCriterium == TerminationCriterium.OnlyByEvaluations
-                      || TerminationCriterium == TerminationCriterium.WhicheverHitsFirst
-                      || TerminationCriterium == TerminationCriterium.ByTargetAndEvaluations
-                      || TerminationCriterium == TerminationCriterium.ByTimeAndEvaluations)
-          || targetHit && (TerminationCriterium == TerminationCriterium.OnlyByTarget
-                        || TerminationCriterium == TerminationCriterium.WhicheverHitsFirst
-                        || TerminationCriterium == TerminationCriterium.ByTargetAndTime
-                        || TerminationCriterium == TerminationCriterium.ByTargetAndEvaluations);
-      }
-    }
-
-    private ISingleObjectiveHeuristicOptimizationProblem problem;
-
-    [StorableConstructor]
-    private IndepdentRandomRestarter(bool deserializing) : base(deserializing) { }
-    private IndepdentRandomRestarter(IndepdentRandomRestarter original, Cloner cloner)
-      : base(original, cloner) {
-      terminationCriterium = original.terminationCriterium;
-      maximumExecutionTime = original.maximumExecutionTime;
-      maximumEvaluations = original.maximumEvaluations;
-      moveCostPerSolution = original.moveCostPerSolution;
-      storeSolutionInRun = original.storeSolutionInRun;
-      targetValue = original.targetValue;
-      maximization = original.maximization;
-      executionTime = original.executionTime;
-      evaluations = original.evaluations;
-      bestSoFar = original.bestSoFar;
-      lastAlgorithmExecutionTime = original.lastAlgorithmExecutionTime;
-
-      perClockAnalyzer = cloner.Clone(original.perClockAnalyzer);
-      perEvaluationsAnalyzer = cloner.Clone(original.perEvaluationsAnalyzer);
-
-      algorithm = cloner.Clone(original.algorithm);
-      runs = cloner.Clone(original.runs);
-
-      ExecutionState = original.ExecutionState;
-
-      Initialize();
-    }
-    public IndepdentRandomRestarter()
-      : base() {
-      name = ItemName;
-      description = ItemDescription;
-      terminationCriterium = TerminationCriterium.ByTargetAndEvaluations;
-      maximumExecutionTime = TimeSpan.FromMinutes(1);
-      maximumEvaluations = 10000000; // 10 mio
-      moveCostPerSolution = 1;
-      storeSolutionInRun = false;
-      targetValue = 0;
-      maximization = false;
-      executionTime = TimeSpan.Zero;
-      evaluations = 0;
-      bestSoFar = double.NaN;
-      lastAlgorithmExecutionTime = TimeSpan.Zero;
-
-      perClockAnalyzer = new QualityPerClockAnalyzer();
-      perEvaluationsAnalyzer = new QualityPerEvaluationsAnalyzer();
-
-      Runs = new RunCollection { OptimizerName = Name };
-      Initialize();
-    }
-    public IndepdentRandomRestarter(string name)
-      : base(name) {
-      description = ItemDescription;
-      terminationCriterium = TerminationCriterium.ByTargetAndEvaluations;
-      maximumExecutionTime = TimeSpan.FromMinutes(1);
-      maximumEvaluations = 10000000; // 10 mio
-      moveCostPerSolution = 1;
-      storeSolutionInRun = false;
-      targetValue = 0;
-      maximization = false;
-      executionTime = TimeSpan.Zero;
-      evaluations = 0;
-      bestSoFar = double.NaN;
-      lastAlgorithmExecutionTime = TimeSpan.Zero;
-
-      perClockAnalyzer = new QualityPerClockAnalyzer();
-      perEvaluationsAnalyzer = new QualityPerEvaluationsAnalyzer();
-
-      Runs = new RunCollection { OptimizerName = Name };
-      Initialize();
-    }
-    public IndepdentRandomRestarter(string name, string description)
-      : base(name, description) {
-      terminationCriterium = TerminationCriterium.ByTargetAndEvaluations;
-      maximumExecutionTime = TimeSpan.FromMinutes(1);
-      maximumEvaluations = 10000000; // 10 mio
-      moveCostPerSolution = 1;
-      storeSolutionInRun = false;
-      targetValue = 0;
-      maximization = false;
-      executionTime = TimeSpan.Zero;
-      evaluations = 0;
-      bestSoFar = double.NaN;
-      lastAlgorithmExecutionTime = TimeSpan.Zero;
-
-      perClockAnalyzer = new QualityPerClockAnalyzer();
-      perEvaluationsAnalyzer = new QualityPerEvaluationsAnalyzer();
-
-      Runs = new RunCollection { OptimizerName = Name };
-      Initialize();
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      if (ExecutionState == ExecutionState.Started) throw new InvalidOperationException(string.Format("Clone not allowed in execution state \"{0}\".", ExecutionState));
-      return new IndepdentRandomRestarter(this, cloner);
-    }
-
-    [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserialization() {
-      Initialize();
-    }
-
-    private void Initialize() {
-      if (algorithm != null) RegisterAlgorithmEvents();
-    }
-
-    private void Reset() {
-      ExecutionTime = TimeSpan.Zero;
-      Evaluations = 0;
-      BestSoFar = double.NaN;
-      lastAlgorithmExecutionTime = TimeSpan.Zero;
-
-      CurrentRun = null;
-    }
-
-    public void Prepare() {
-      Prepare(false);
-    }
-    public void Prepare(bool clearRuns) {
-      if ((ExecutionState != ExecutionState.Prepared) && (ExecutionState != ExecutionState.Paused) && (ExecutionState != ExecutionState.Stopped))
-        throw new InvalidOperationException(string.Format("Prepare not allowed in execution state \"{0}\".", ExecutionState));
-      Reset();
-
-      if (Algorithm != null) {
-        Algorithm.Prepare(clearRuns);
-        ExecutionState = ExecutionState.Prepared;
-        OnPrepared();
-      }
-    }
-    public void Start() {
-      if ((ExecutionState != ExecutionState.Prepared) && (ExecutionState != ExecutionState.Paused))
-        throw new InvalidOperationException(string.Format("Start not allowed in execution state \"{0}\".", ExecutionState));
-
-      if (ExecutionState == ExecutionState.Prepared) {
-        CurrentRun = new Run(Algorithm) {
-          Name = Algorithm.Name + " IRRRun" + Runs.Count
-        };
-        if (!CurrentRun.Results.ContainsKey(ExecutionTimeResultName))
-          CurrentRun.Results.Add(ExecutionTimeResultName, new TimeSpanValue(TimeSpan.Zero));
-        // use double instead of int, otherwise one might run into int.MaxValue (at least with moves)
-        CurrentRun.Results.Add(EvaluatedSolutionsResultName, new DoubleValue(0));
-        CurrentRun.Results.Add(EvaluatedMovesResultName, new DoubleValue(0));
-        CurrentRun.Results.Add(BestQualityResultName, new DoubleValue(Maximization ? double.MinValue : double.MaxValue));
-        CurrentRun.Results.Add(RandomRestartsResultName, new IntValue(0));
-      }
-      if (Algorithm.ExecutionState == ExecutionState.Stopped)
-        Algorithm.Prepare(true);
-      Algorithm.Start();
-      ExecutionState = ExecutionState.Started;
-      OnStarted();
-    }
-    public void Pause() {
-      if (ExecutionState != ExecutionState.Started)
-        throw new InvalidOperationException(string.Format("Pause not allowed in execution state \"{0}\".", ExecutionState));
-      Algorithm.Pause();
-      ExecutionState = ExecutionState.Paused;
-      OnPaused();
-    }
-
-    private bool forceStop = false;
-    public void Stop() {
-      if ((ExecutionState != ExecutionState.Started) && (ExecutionState != ExecutionState.Paused))
-        throw new InvalidOperationException(string.Format("Stop not allowed in execution state \"{0}\".", ExecutionState));
-      forceStop = true;
-      try {
-        Algorithm.Stop();
-      } catch (InvalidOperationException) {
-        // sometimes we hit the algorithm in an invalid state
-      }
-    }
-
-    private void AddAlgorithmAnalyzers() {
-      if (!Algorithm.Parameters.ContainsKey("Analyzer")) return;
-      var analyzerParam = Algorithm.Parameters["Analyzer"] as IValueParameter<MultiAnalyzer>;
-      if (analyzerParam == null) return;
-      if (!analyzerParam.Value.Operators.Contains(perClockAnalyzer))
-        analyzerParam.Value.Operators.Add(perClockAnalyzer);
-      if (!analyzerParam.Value.Operators.Contains(perEvaluationsAnalyzer))
-        analyzerParam.Value.Operators.Add(perEvaluationsAnalyzer);
-    }
-
-    private void RemoveAlgorithmAnalyzers() {
-      if (!Algorithm.Parameters.ContainsKey("Analyzer")) return;
-      var analyzerParam = Algorithm.Parameters["Analyzer"] as IValueParameter<MultiAnalyzer>;
-      if (analyzerParam == null) return;
-      analyzerParam.Value.Operators.Remove(perClockAnalyzer);
-      analyzerParam.Value.Operators.Remove(perEvaluationsAnalyzer);
-    }
-
-    #region Events
-    protected override void OnNameChanged() {
-      base.OnNameChanged();
-      runs.OptimizerName = Name;
-    }
-
-    public event PropertyChangedEventHandler PropertyChanged;
-    private void OnPropertyChanged(string property) {
-      var handler = PropertyChanged;
-      if (handler != null) handler(this, new PropertyChangedEventArgs(property));
-    }
-
-    #region IExecutable Events
-    public event EventHandler ExecutionStateChanged;
-    private void OnExecutionStateChanged() {
-      var handler = ExecutionStateChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-    public event EventHandler ExecutionTimeChanged;
-    private void OnExecutionTimeChanged() {
-      var handler = ExecutionTimeChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-    public event EventHandler Prepared;
-    private void OnPrepared() {
-      var handler = Prepared;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-    public event EventHandler Started;
-    private void OnStarted() {
-      var handler = Started;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-    public event EventHandler Paused;
-    private void OnPaused() {
-      var handler = Paused;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-    public event EventHandler Stopped;
-    private void OnStopped() {
-      var handler = Stopped;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-    public event EventHandler<EventArgs<Exception>> ExceptionOccurred;
-    private void OnExceptionOccurred(Exception exception) {
-      var handler = ExceptionOccurred;
-      if (handler != null) handler(this, new EventArgs<Exception>(exception));
-    }
-    #endregion
-
-    #region Algorithm Events
-    private void RegisterAlgorithmEvents() {
-      algorithm.ExceptionOccurred += Algorithm_ExceptionOccurred;
-      algorithm.ExecutionTimeChanged += Algorithm_ExecutionTimeChanged;
-      algorithm.Paused += Algorithm_Paused;
-      algorithm.Prepared += Algorithm_Prepared;
-      algorithm.Stopped += Algorithm_Stopped;
-      algorithm.ProblemChanged += Algorithm_ProblemChanged;
-      Algorithm_ProblemChanged(algorithm, EventArgs.Empty);
-    }
-    private void DeregisterAlgorithmEvents() {
-      algorithm.ExceptionOccurred -= Algorithm_ExceptionOccurred;
-      algorithm.ExecutionTimeChanged -= Algorithm_ExecutionTimeChanged;
-      algorithm.Paused -= Algorithm_Paused;
-      algorithm.Prepared -= Algorithm_Prepared;
-      algorithm.Stopped -= Algorithm_Stopped;
-      algorithm.ProblemChanged -= Algorithm_ProblemChanged;
-    }
-    private void Algorithm_ExceptionOccurred(object sender, EventArgs<Exception> e) {
-      OnExceptionOccurred(e.Value);
-    }
-    private void Algorithm_ExecutionTimeChanged(object sender, EventArgs e) {
-      ExecutionTime += Algorithm.ExecutionTime - lastAlgorithmExecutionTime;
-      lastAlgorithmExecutionTime = Algorithm.ExecutionTime;
-    }
-    private void Algorithm_Paused(object sender, EventArgs e) {
-      ExecutionTime += Algorithm.ExecutionTime - lastAlgorithmExecutionTime;
-      lastAlgorithmExecutionTime = Algorithm.ExecutionTime;
-      OnPaused();
-    }
-    private void Algorithm_Prepared(object sender, EventArgs e) {
-      lastAlgorithmExecutionTime = TimeSpan.Zero;
-    }
-    private void Algorithm_Stopped(object sender, EventArgs e) {
-      ExecutionTime += Algorithm.ExecutionTime - lastAlgorithmExecutionTime;
-      lastAlgorithmExecutionTime = Algorithm.ExecutionTime;
-
-      var execTime = ((TimeSpanValue)CurrentRun.Results[ExecutionTimeResultName]).Value;
-      var solEvals = ((DoubleValue)CurrentRun.Results[EvaluatedSolutionsResultName]).Value;
-      var movEvals = ((DoubleValue)CurrentRun.Results[EvaluatedMovesResultName]).Value;
-      var restarts = ((IntValue)CurrentRun.Results[RandomRestartsResultName]).Value;
-      var improvement = false;
-
-      IResult result;
-      if (Algorithm.Results.TryGetValue(perEvaluationsAnalyzer.EvaluatedSolutionsParameter.ActualName, out result)) {
-        var evals = ((IntValue)result.Value).Value;
-        Evaluations += evals;
-        CurrentRun.Results[EvaluatedSolutionsResultName] = new DoubleValue(solEvals + evals);
-      }
-      if (Algorithm.Results.TryGetValue(perEvaluationsAnalyzer.EvaluatedMovesParameter.ActualName, out result)) {
-        var evals = ((IntValue)result.Value).Value;
-        Evaluations += moveCostPerSolution * evals;
-        CurrentRun.Results[EvaluatedMovesResultName] = new DoubleValue(movEvals + evals);
-      }
-      if (Algorithm.Results.TryGetValue(perEvaluationsAnalyzer.BestQualityParameter.ActualName, out result)) {
-        var bestQuality = ((DoubleValue)result.Value).Value;
-        if (double.IsNaN(BestSoFar)
-            || Maximization && bestQuality > BestSoFar
-            || !Maximization && bestQuality < BestSoFar) {
-          BestSoFar = bestQuality;
-          CurrentRun.Results[BestQualityResultName] = new DoubleValue(bestQuality);
-          improvement = true;
-        }
-      }
-      if (Algorithm.Results.TryGetValue(perClockAnalyzer.QualityPerClockParameter.ResultName, out result)) {
-        UpdateQualityPerClockResult((IndexedDataTable<double>)result.Value, execTime, restarts);
-      }
-      if (Algorithm.Results.TryGetValue(perEvaluationsAnalyzer.QualityPerEvaluationsParameter.ResultName, out result)) {
-        UpdateQualityPerEvaluationsResult((IndexedDataTable<double>)result.Value, solEvals, movEvals, restarts);
-      }
-      if (StoreSolutionInRun) {
-        foreach (var r in Algorithm.Results) {
-          if (r.Name.ToLower().EndsWith("solution") && improvement) {
-            CurrentRun.Results[r.Name] = (IItem)r.Value.Clone();
-          }
-        }
-      }
-
-      CurrentRun.Results[ExecutionTimeResultName] = new TimeSpanValue(execTime + Algorithm.ExecutionTime);
-
-      // Algorithm sets ExecutionTime to zero before firing Prepared
-      // We will thus see ExecutionTimeChanged before Prepared
-      lastAlgorithmExecutionTime = TimeSpan.Zero;
-
-      if (!forceStop && !IsFinished) {
-        CurrentRun.Results[RandomRestartsResultName] = new IntValue(restarts + 1);
-        Algorithm.Prepare(true);
-        Algorithm.Start();
-      } else {
-        forceStop = false;
-        Runs.Add(CurrentRun);
-        Algorithm.Prepare(true);
-        ExecutionState = ExecutionState.Stopped;
-        OnStopped();
-      }
-    }
-
-    private void UpdateQualityPerClockResult(IndexedDataTable<double> perClock, TimeSpan execTime, int restarts) {
-      IndexedDataTable<double> dt;
-      if (!CurrentRun.Results.ContainsKey(QualityPerClockResultName)) {
-        dt = (IndexedDataTable<double>)perClock.Clone();
-        if (!dt.Rows.ContainsKey("Restarts"))
-          dt.Rows.Add(new IndexedDataRow<double>("Restarts") {
-            VisualProperties = {
-              ChartType = DataRowVisualProperties.DataRowChartType.StepLine,
-              SecondYAxis = true
-            }
-          });
-        foreach (var v in dt.Rows.First().Values)
-          dt.Rows["Restarts"].Values.Add(Tuple.Create(v.Item1, 0.0));
-        CurrentRun.Results.Add(QualityPerClockResultName, dt);
-      } else {
-        dt = (IndexedDataTable<double>)CurrentRun.Results[QualityPerClockResultName];
-        var best = dt.Rows.First().Values.Last().Item2;
-        foreach (var tupl in perClock.Rows.First().Values) {
-          if (Maximization && tupl.Item2 > best || !Maximization && tupl.Item2 < best) {
-            dt.Rows.First().Values.Add(Tuple.Create(execTime.TotalSeconds + tupl.Item1, tupl.Item2));
-            dt.Rows["Restarts"].Values.Add(Tuple.Create(execTime.TotalSeconds + tupl.Item1, (double)restarts));
-            best = tupl.Item2;
-          }
-        }
-      }
-      if (IsFinished) {
-        dt.Rows.First().Values.Add(Tuple.Create(ExecutionTime.TotalSeconds, BestSoFar));
-        dt.Rows["Restarts"].Values.Add(Tuple.Create(ExecutionTime.TotalSeconds, (double)restarts));
-      }
-    }
-
-    private void UpdateQualityPerEvaluationsResult(IndexedDataTable<double> perEvaluations, double solEvals, double movEvals, int restarts) {
-      IndexedDataTable<double> dt;
-      if (!CurrentRun.Results.ContainsKey(QualityPerEvaluationsResultName)) {
-        dt = (IndexedDataTable<double>)perEvaluations.Clone();
-        if (!dt.Rows.ContainsKey("Restarts"))
-          dt.Rows.Add(new IndexedDataRow<double>("Restarts") {
-            VisualProperties = {
-              ChartType = DataRowVisualProperties.DataRowChartType.StepLine,
-              SecondYAxis = true
-            }
-          });
-        foreach (var v in dt.Rows.First().Values)
-          dt.Rows["Restarts"].Values.Add(Tuple.Create(v.Item1, 0.0));
-        CurrentRun.Results.Add(QualityPerEvaluationsResultName, dt);
-      } else {
-        dt = (IndexedDataTable<double>)CurrentRun.Results[QualityPerEvaluationsResultName];
-        var best = dt.Rows.First().Values.Last().Item2;
-        foreach (var tupl in perEvaluations.Rows.First().Values) {
-          if (Maximization && tupl.Item2 > best || !Maximization && tupl.Item2 < best) {
-            dt.Rows.First().Values.Add(Tuple.Create(solEvals + moveCostPerSolution * movEvals + tupl.Item1, tupl.Item2));
-            dt.Rows["Restarts"].Values.Add(Tuple.Create(solEvals + moveCostPerSolution * movEvals + tupl.Item1, (double)restarts));
-            best = tupl.Item2;
-          }
-        }
-      }
-      if (IsFinished) {
-        dt.Rows.First().Values.Add(Tuple.Create(Evaluations, BestSoFar));
-        dt.Rows["Restarts"].Values.Add(Tuple.Create(Evaluations, (double)restarts));
-      }
-    }
-
-    private void Algorithm_ProblemChanged(object sender, EventArgs e) {
-      if (problem != null) DeregisterProblemEvents();
-
-      problem = Algorithm.Problem as ISingleObjectiveHeuristicOptimizationProblem;
-      if (problem == null) return;
-      RegisterProblemEvents();
-
-      AddAlgorithmAnalyzers();
-
-      var maxParam = problem.MaximizationParameter as IValueParameter<BoolValue>;
-      if (maxParam != null)
-        Maximization = maxParam.Value.Value;
-      var bkParam = problem.BestKnownQualityParameter as IValueParameter<DoubleValue>;
-      if (bkParam != null && bkParam.Value != null)
-        TargetValue = bkParam.Value.Value;
-
-      Reset();
-    }
-
-    private void RegisterProblemEvents() {
-      problem.Reset += ProblemOnReset;
-      problem.OperatorsChanged += ProblemOnOperatorsChanged;
-    }
-
-    private void DeregisterProblemEvents() {
-      problem.Reset -= ProblemOnReset;
-      problem.OperatorsChanged -= ProblemOnOperatorsChanged;
-    }
-
-    private void ProblemOnReset(object sender, EventArgs eventArgs) {
-      AddAlgorithmAnalyzers();
-    }
-
-    private void ProblemOnOperatorsChanged(object sender, EventArgs eventArgs) {
-      AddAlgorithmAnalyzers();
-    }
-    #endregion
-    #endregion
-  }
-}
Index: /branches/PerformanceComparison/HeuristicLab.Optimization.Views/3.3/HeuristicLab.Optimization.Views-3.3.csproj
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.Optimization.Views/3.3/HeuristicLab.Optimization.Views-3.3.csproj	(revision 13736)
+++ /branches/PerformanceComparison/HeuristicLab.Optimization.Views/3.3/HeuristicLab.Optimization.Views-3.3.csproj	(revision 13737)
@@ -234,10 +234,4 @@
       <DependentUpon>ICharacteristicCalculatorView.cs</DependentUpon>
     </Compile>
-    <Compile Include="IRRestarterView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="IRRestarterView.Designer.cs">
-      <DependentUpon>IRRestarterView.cs</DependentUpon>
-    </Compile>
     <Compile Include="ISolutionSimilarityCalculatorView.cs">
       <SubType>UserControl</SubType>
@@ -354,10 +348,4 @@
     <Compile Include="RunCollectionConstraintViews\RunCollectionEqualityConstraintView.Designer.cs">
       <DependentUpon>RunCollectionEqualityConstraintView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="RunCollectionViews\RunCollectionIteratedSamplingView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="RunCollectionViews\RunCollectionIteratedSamplingView.Designer.cs">
-      <DependentUpon>RunCollectionIteratedSamplingView.cs</DependentUpon>
     </Compile>
     <Compile Include="RunCollectionViews\RunCollectionRLDView.cs">
@@ -470,7 +458,4 @@
     <EmbeddedResource Include="CreateNewSingleEncodingDialog.resx">
       <DependentUpon>CreateNewSingleEncodingDialog.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="RunCollectionViews\RunCollectionIteratedSamplingView.resx">
-      <DependentUpon>RunCollectionIteratedSamplingView.cs</DependentUpon>
     </EmbeddedResource>
   </ItemGroup>
Index: anches/PerformanceComparison/HeuristicLab.Optimization.Views/3.3/IRRestarterView.Designer.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.Optimization.Views/3.3/IRRestarterView.Designer.cs	(revision 13736)
+++ 	(revision )
@@ -1,445 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2012 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
-
-namespace HeuristicLab.Optimization.Views {
-  partial class IndependentRandomRestarterView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.timeLimitLabel = new System.Windows.Forms.Label();
-      this.maxExecutionTimeTextBox = new System.Windows.Forms.TextBox();
-      this.evaluationsLimitabel = new System.Windows.Forms.Label();
-      this.maxEvaluationsTextBox = new System.Windows.Forms.TextBox();
-      this.tabControl = new HeuristicLab.MainForm.WindowsForms.DragOverTabControl();
-      this.algorithmTabPage = new System.Windows.Forms.TabPage();
-      this.algorithmViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
-      this.openAlgorithmButton = new System.Windows.Forms.Button();
-      this.newAlgorithmButton = new System.Windows.Forms.Button();
-      this.currentRunTabPage = new System.Windows.Forms.TabPage();
-      this.currentRunView = new HeuristicLab.Optimization.Views.RunView();
-      this.runsTabPage = new System.Windows.Forms.TabPage();
-      this.runsView = new HeuristicLab.Optimization.Views.RunCollectionView();
-      this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
-      this.targetValueTextBox = new System.Windows.Forms.TextBox();
-      this.targetValueLabel = new System.Windows.Forms.Label();
-      this.terminationComboBox = new System.Windows.Forms.ComboBox();
-      this.terminationLabel = new System.Windows.Forms.Label();
-      this.moveCostPerSolutionTextBox = new System.Windows.Forms.TextBox();
-      this.moveCostPerSolutionLabel = new System.Windows.Forms.Label();
-      this.maximizationLabel = new System.Windows.Forms.Label();
-      this.maximizationCheckBox = new System.Windows.Forms.CheckBox();
-      this.storeSolutionInRunLabel = new System.Windows.Forms.Label();
-      this.storeBestSolutionCheckBox = new System.Windows.Forms.CheckBox();
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
-      this.tabControl.SuspendLayout();
-      this.algorithmTabPage.SuspendLayout();
-      this.currentRunTabPage.SuspendLayout();
-      this.runsTabPage.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // startButton
-      // 
-      this.startButton.Location = new System.Drawing.Point(0, 440);
-      this.startButton.TabIndex = 18;
-      this.toolTip.SetToolTip(this.startButton, "Start/Resume Optimizer");
-      // 
-      // executionTimeTextBox
-      // 
-      this.executionTimeTextBox.Location = new System.Drawing.Point(412, 444);
-      this.executionTimeTextBox.TabIndex = 23;
-      // 
-      // executionTimeLabel
-      // 
-      this.executionTimeLabel.Location = new System.Drawing.Point(323, 447);
-      this.executionTimeLabel.TabIndex = 22;
-      // 
-      // pauseButton
-      // 
-      this.pauseButton.Location = new System.Drawing.Point(30, 440);
-      this.pauseButton.TabIndex = 19;
-      this.toolTip.SetToolTip(this.pauseButton, "Pause Optimizer");
-      // 
-      // stopButton
-      // 
-      this.stopButton.Location = new System.Drawing.Point(60, 440);
-      this.stopButton.TabIndex = 20;
-      this.toolTip.SetToolTip(this.stopButton, "Stop Optimizer");
-      // 
-      // resetButton
-      // 
-      this.resetButton.Location = new System.Drawing.Point(90, 440);
-      this.resetButton.TabIndex = 21;
-      this.toolTip.SetToolTip(this.resetButton, "Reset Optimizer");
-      // 
-      // nameTextBox
-      // 
-      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
-      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
-      this.nameTextBox.Location = new System.Drawing.Point(115, 0);
-      this.nameTextBox.Size = new System.Drawing.Size(409, 20);
-      // 
-      // infoLabel
-      // 
-      this.infoLabel.Location = new System.Drawing.Point(530, 3);
-      // 
-      // timeLimitLabel
-      // 
-      this.timeLimitLabel.AutoSize = true;
-      this.timeLimitLabel.Location = new System.Drawing.Point(3, 29);
-      this.timeLimitLabel.Name = "timeLimitLabel";
-      this.timeLimitLabel.Size = new System.Drawing.Size(106, 13);
-      this.timeLimitLabel.TabIndex = 3;
-      this.timeLimitLabel.Text = "Max Execution Time:";
-      // 
-      // maxExecutionTimeTextBox
-      // 
-      this.maxExecutionTimeTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.maxExecutionTimeTextBox.Location = new System.Drawing.Point(115, 26);
-      this.maxExecutionTimeTextBox.Name = "maxExecutionTimeTextBox";
-      this.maxExecutionTimeTextBox.Size = new System.Drawing.Size(409, 20);
-      this.maxExecutionTimeTextBox.TabIndex = 4;
-      this.maxExecutionTimeTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.maxExecutionTimeTextBox_Validating);
-      // 
-      // evaluationsLimitabel
-      // 
-      this.evaluationsLimitabel.AutoSize = true;
-      this.evaluationsLimitabel.Location = new System.Drawing.Point(3, 55);
-      this.evaluationsLimitabel.Name = "evaluationsLimitabel";
-      this.evaluationsLimitabel.Size = new System.Drawing.Size(88, 13);
-      this.evaluationsLimitabel.TabIndex = 5;
-      this.evaluationsLimitabel.Text = "Max Evaluations:";
-      // 
-      // maxEvaluationsTextBox
-      // 
-      this.maxEvaluationsTextBox.Location = new System.Drawing.Point(115, 52);
-      this.maxEvaluationsTextBox.Name = "maxEvaluationsTextBox";
-      this.maxEvaluationsTextBox.Size = new System.Drawing.Size(157, 20);
-      this.maxEvaluationsTextBox.TabIndex = 6;
-      this.maxEvaluationsTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.maxEvaluationsTextBox_Validating);
-      // 
-      // tabControl
-      // 
-      this.tabControl.AllowDrop = true;
-      this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-            | System.Windows.Forms.AnchorStyles.Left)
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.tabControl.Controls.Add(this.algorithmTabPage);
-      this.tabControl.Controls.Add(this.currentRunTabPage);
-      this.tabControl.Controls.Add(this.runsTabPage);
-      this.tabControl.Location = new System.Drawing.Point(0, 152);
-      this.tabControl.Name = "tabControl";
-      this.tabControl.SelectedIndex = 0;
-      this.tabControl.Size = new System.Drawing.Size(546, 282);
-      this.tabControl.TabIndex = 17;
-      // 
-      // algorithmTabPage
-      // 
-      this.algorithmTabPage.AllowDrop = true;
-      this.algorithmTabPage.Controls.Add(this.algorithmViewHost);
-      this.algorithmTabPage.Controls.Add(this.openAlgorithmButton);
-      this.algorithmTabPage.Controls.Add(this.newAlgorithmButton);
-      this.algorithmTabPage.Location = new System.Drawing.Point(4, 22);
-      this.algorithmTabPage.Name = "algorithmTabPage";
-      this.algorithmTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.algorithmTabPage.Size = new System.Drawing.Size(538, 256);
-      this.algorithmTabPage.TabIndex = 1;
-      this.algorithmTabPage.Text = "Algorithm";
-      this.algorithmTabPage.UseVisualStyleBackColor = true;
-      this.algorithmTabPage.DragDrop += new System.Windows.Forms.DragEventHandler(this.algorithmTabPage_DragDrop);
-      this.algorithmTabPage.DragEnter += new System.Windows.Forms.DragEventHandler(this.algorithmTabPage_DragEnterOver);
-      this.algorithmTabPage.DragOver += new System.Windows.Forms.DragEventHandler(this.algorithmTabPage_DragEnterOver);
-      // 
-      // algorithmViewHost
-      // 
-      this.algorithmViewHost.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-            | System.Windows.Forms.AnchorStyles.Left)
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.algorithmViewHost.Caption = "View";
-      this.algorithmViewHost.Content = null;
-      this.algorithmViewHost.Enabled = false;
-      this.algorithmViewHost.Location = new System.Drawing.Point(6, 36);
-      this.algorithmViewHost.Name = "algorithmViewHost";
-      this.algorithmViewHost.ReadOnly = false;
-      this.algorithmViewHost.Size = new System.Drawing.Size(526, 214);
-      this.algorithmViewHost.TabIndex = 2;
-      this.algorithmViewHost.ViewsLabelVisible = true;
-      this.algorithmViewHost.ViewType = null;
-      // 
-      // openAlgorithmButton
-      // 
-      this.openAlgorithmButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Open;
-      this.openAlgorithmButton.Location = new System.Drawing.Point(36, 6);
-      this.openAlgorithmButton.Name = "openAlgorithmButton";
-      this.openAlgorithmButton.Size = new System.Drawing.Size(24, 24);
-      this.openAlgorithmButton.TabIndex = 1;
-      this.toolTip.SetToolTip(this.openAlgorithmButton, "Open Optimizer");
-      this.openAlgorithmButton.UseVisualStyleBackColor = true;
-      this.openAlgorithmButton.Click += new System.EventHandler(this.openAlgorithmButton_Click);
-      // 
-      // newAlgorithmButton
-      // 
-      this.newAlgorithmButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.NewDocument;
-      this.newAlgorithmButton.Location = new System.Drawing.Point(6, 6);
-      this.newAlgorithmButton.Name = "newAlgorithmButton";
-      this.newAlgorithmButton.Size = new System.Drawing.Size(24, 24);
-      this.newAlgorithmButton.TabIndex = 0;
-      this.toolTip.SetToolTip(this.newAlgorithmButton, "New Optimizer");
-      this.newAlgorithmButton.UseVisualStyleBackColor = true;
-      this.newAlgorithmButton.Click += new System.EventHandler(this.newAlgorithmButton_Click);
-      // 
-      // currentRunTabPage
-      // 
-      this.currentRunTabPage.Controls.Add(this.currentRunView);
-      this.currentRunTabPage.Location = new System.Drawing.Point(4, 22);
-      this.currentRunTabPage.Name = "currentRunTabPage";
-      this.currentRunTabPage.Padding = new System.Windows.Forms.Padding(6);
-      this.currentRunTabPage.Size = new System.Drawing.Size(538, 256);
-      this.currentRunTabPage.TabIndex = 4;
-      this.currentRunTabPage.Text = "Current Run";
-      this.currentRunTabPage.UseVisualStyleBackColor = true;
-      // 
-      // currentRunView
-      // 
-      this.currentRunView.Caption = "Run View";
-      this.currentRunView.Content = null;
-      this.currentRunView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.currentRunView.Location = new System.Drawing.Point(6, 6);
-      this.currentRunView.Name = "currentRunView";
-      this.currentRunView.ReadOnly = false;
-      this.currentRunView.Size = new System.Drawing.Size(526, 244);
-      this.currentRunView.TabIndex = 0;
-      // 
-      // runsTabPage
-      // 
-      this.runsTabPage.Controls.Add(this.runsView);
-      this.runsTabPage.Location = new System.Drawing.Point(4, 22);
-      this.runsTabPage.Name = "runsTabPage";
-      this.runsTabPage.Padding = new System.Windows.Forms.Padding(6);
-      this.runsTabPage.Size = new System.Drawing.Size(538, 256);
-      this.runsTabPage.TabIndex = 3;
-      this.runsTabPage.Text = "Runs";
-      this.runsTabPage.UseVisualStyleBackColor = true;
-      // 
-      // runsView
-      // 
-      this.runsView.Caption = "RunCollection View";
-      this.runsView.Content = null;
-      this.runsView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.runsView.Location = new System.Drawing.Point(6, 6);
-      this.runsView.Name = "runsView";
-      this.runsView.ReadOnly = false;
-      this.runsView.Size = new System.Drawing.Size(526, 244);
-      this.runsView.TabIndex = 1;
-      // 
-      // openFileDialog
-      // 
-      this.openFileDialog.DefaultExt = "hl";
-      this.openFileDialog.FileName = "Optimizer";
-      this.openFileDialog.Filter = "HeuristicLab Files|*.hl|All Files|*.*";
-      this.openFileDialog.Title = "Open Optimizer";
-      // 
-      // targetValueTextBox
-      // 
-      this.targetValueTextBox.Location = new System.Drawing.Point(115, 78);
-      this.targetValueTextBox.Name = "targetValueTextBox";
-      this.targetValueTextBox.Size = new System.Drawing.Size(157, 20);
-      this.targetValueTextBox.TabIndex = 10;
-      this.targetValueTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.targetValueTextBox_Validating);
-      // 
-      // targetValueLabel
-      // 
-      this.targetValueLabel.AutoSize = true;
-      this.targetValueLabel.Location = new System.Drawing.Point(3, 81);
-      this.targetValueLabel.Name = "targetValueLabel";
-      this.targetValueLabel.Size = new System.Drawing.Size(71, 13);
-      this.targetValueLabel.TabIndex = 9;
-      this.targetValueLabel.Text = "Target Value:";
-      // 
-      // terminationComboBox
-      // 
-      this.terminationComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.terminationComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
-      this.terminationComboBox.FormattingEnabled = true;
-      this.terminationComboBox.Location = new System.Drawing.Point(115, 105);
-      this.terminationComboBox.Name = "terminationComboBox";
-      this.terminationComboBox.Size = new System.Drawing.Size(409, 21);
-      this.terminationComboBox.TabIndex = 14;
-      this.terminationComboBox.SelectedIndexChanged += new System.EventHandler(this.terminationComboBox_SelectedIndexChanged);
-      // 
-      // terminationLabel
-      // 
-      this.terminationLabel.AutoSize = true;
-      this.terminationLabel.Location = new System.Drawing.Point(3, 108);
-      this.terminationLabel.Name = "terminationLabel";
-      this.terminationLabel.Size = new System.Drawing.Size(65, 13);
-      this.terminationLabel.TabIndex = 13;
-      this.terminationLabel.Text = "Termination:";
-      // 
-      // moveCostPerSolutionTextBox
-      // 
-      this.moveCostPerSolutionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.moveCostPerSolutionTextBox.Location = new System.Drawing.Point(401, 52);
-      this.moveCostPerSolutionTextBox.Name = "moveCostPerSolutionTextBox";
-      this.moveCostPerSolutionTextBox.Size = new System.Drawing.Size(123, 20);
-      this.moveCostPerSolutionTextBox.TabIndex = 8;
-      this.moveCostPerSolutionTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.moveCostPerSolutionTextBox_Validating);
-      // 
-      // moveCostPerSolutionLabel
-      // 
-      this.moveCostPerSolutionLabel.AutoSize = true;
-      this.moveCostPerSolutionLabel.Location = new System.Drawing.Point(278, 55);
-      this.moveCostPerSolutionLabel.Name = "moveCostPerSolutionLabel";
-      this.moveCostPerSolutionLabel.Size = new System.Drawing.Size(117, 13);
-      this.moveCostPerSolutionLabel.TabIndex = 7;
-      this.moveCostPerSolutionLabel.Text = "Move cost per solution:";
-      // 
-      // maximizationLabel
-      // 
-      this.maximizationLabel.AutoSize = true;
-      this.maximizationLabel.Location = new System.Drawing.Point(278, 81);
-      this.maximizationLabel.Name = "maximizationLabel";
-      this.maximizationLabel.Size = new System.Drawing.Size(70, 13);
-      this.maximizationLabel.TabIndex = 11;
-      this.maximizationLabel.Text = "Maximization:";
-      // 
-      // maximizationCheckBox
-      // 
-      this.maximizationCheckBox.AutoSize = true;
-      this.maximizationCheckBox.Location = new System.Drawing.Point(401, 80);
-      this.maximizationCheckBox.Name = "maximizationCheckBox";
-      this.maximizationCheckBox.Size = new System.Drawing.Size(15, 14);
-      this.maximizationCheckBox.TabIndex = 12;
-      this.maximizationCheckBox.UseVisualStyleBackColor = true;
-      this.maximizationCheckBox.CheckedChanged += new System.EventHandler(this.maximizationCheckBox_CheckedChanged);
-      // 
-      // storeSolutionInRunLabel
-      // 
-      this.storeSolutionInRunLabel.AutoSize = true;
-      this.storeSolutionInRunLabel.Location = new System.Drawing.Point(3, 132);
-      this.storeSolutionInRunLabel.Name = "storeSolutionInRunLabel";
-      this.storeSolutionInRunLabel.Size = new System.Drawing.Size(76, 13);
-      this.storeSolutionInRunLabel.TabIndex = 15;
-      this.storeSolutionInRunLabel.Text = "Store Solution:";
-      // 
-      // storeBestSolutionCheckBox
-      // 
-      this.storeBestSolutionCheckBox.AutoSize = true;
-      this.storeBestSolutionCheckBox.Location = new System.Drawing.Point(115, 132);
-      this.storeBestSolutionCheckBox.Name = "storeBestSolutionCheckBox";
-      this.storeBestSolutionCheckBox.Size = new System.Drawing.Size(15, 14);
-      this.storeBestSolutionCheckBox.TabIndex = 16;
-      this.storeBestSolutionCheckBox.UseVisualStyleBackColor = true;
-      this.storeBestSolutionCheckBox.CheckedChanged += new System.EventHandler(this.storeBestSolutionCheckBox_CheckedChanged);
-      // 
-      // IndependentRandomRestarterView
-      // 
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
-      this.Controls.Add(this.storeBestSolutionCheckBox);
-      this.Controls.Add(this.maximizationCheckBox);
-      this.Controls.Add(this.terminationComboBox);
-      this.Controls.Add(this.tabControl);
-      this.Controls.Add(this.maxExecutionTimeTextBox);
-      this.Controls.Add(this.timeLimitLabel);
-      this.Controls.Add(this.terminationLabel);
-      this.Controls.Add(this.storeSolutionInRunLabel);
-      this.Controls.Add(this.targetValueLabel);
-      this.Controls.Add(this.maximizationLabel);
-      this.Controls.Add(this.moveCostPerSolutionLabel);
-      this.Controls.Add(this.evaluationsLimitabel);
-      this.Controls.Add(this.moveCostPerSolutionTextBox);
-      this.Controls.Add(this.targetValueTextBox);
-      this.Controls.Add(this.maxEvaluationsTextBox);
-      this.Name = "IndependentRandomRestarterView";
-      this.Size = new System.Drawing.Size(549, 464);
-      this.Controls.SetChildIndex(this.maxEvaluationsTextBox, 0);
-      this.Controls.SetChildIndex(this.targetValueTextBox, 0);
-      this.Controls.SetChildIndex(this.moveCostPerSolutionTextBox, 0);
-      this.Controls.SetChildIndex(this.evaluationsLimitabel, 0);
-      this.Controls.SetChildIndex(this.moveCostPerSolutionLabel, 0);
-      this.Controls.SetChildIndex(this.maximizationLabel, 0);
-      this.Controls.SetChildIndex(this.targetValueLabel, 0);
-      this.Controls.SetChildIndex(this.storeSolutionInRunLabel, 0);
-      this.Controls.SetChildIndex(this.terminationLabel, 0);
-      this.Controls.SetChildIndex(this.timeLimitLabel, 0);
-      this.Controls.SetChildIndex(this.maxExecutionTimeTextBox, 0);
-      this.Controls.SetChildIndex(this.tabControl, 0);
-      this.Controls.SetChildIndex(this.nameLabel, 0);
-      this.Controls.SetChildIndex(this.nameTextBox, 0);
-      this.Controls.SetChildIndex(this.infoLabel, 0);
-      this.Controls.SetChildIndex(this.resetButton, 0);
-      this.Controls.SetChildIndex(this.stopButton, 0);
-      this.Controls.SetChildIndex(this.pauseButton, 0);
-      this.Controls.SetChildIndex(this.executionTimeLabel, 0);
-      this.Controls.SetChildIndex(this.executionTimeTextBox, 0);
-      this.Controls.SetChildIndex(this.startButton, 0);
-      this.Controls.SetChildIndex(this.terminationComboBox, 0);
-      this.Controls.SetChildIndex(this.maximizationCheckBox, 0);
-      this.Controls.SetChildIndex(this.storeBestSolutionCheckBox, 0);
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
-      this.tabControl.ResumeLayout(false);
-      this.algorithmTabPage.ResumeLayout(false);
-      this.currentRunTabPage.ResumeLayout(false);
-      this.runsTabPage.ResumeLayout(false);
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.Label timeLimitLabel;
-    private System.Windows.Forms.TextBox maxExecutionTimeTextBox;
-    private System.Windows.Forms.Label evaluationsLimitabel;
-    private System.Windows.Forms.TextBox maxEvaluationsTextBox;
-    private MainForm.WindowsForms.DragOverTabControl tabControl;
-    private System.Windows.Forms.TabPage runsTabPage;
-    private RunCollectionView runsView;
-    private System.Windows.Forms.OpenFileDialog openFileDialog;
-    private System.Windows.Forms.TextBox targetValueTextBox;
-    private System.Windows.Forms.Label targetValueLabel;
-    private System.Windows.Forms.ComboBox terminationComboBox;
-    private System.Windows.Forms.Label terminationLabel;
-    private System.Windows.Forms.TextBox moveCostPerSolutionTextBox;
-    private System.Windows.Forms.Label moveCostPerSolutionLabel;
-    private System.Windows.Forms.Label maximizationLabel;
-    private System.Windows.Forms.CheckBox maximizationCheckBox;
-    private System.Windows.Forms.TabPage algorithmTabPage;
-    private MainForm.WindowsForms.ViewHost algorithmViewHost;
-    private System.Windows.Forms.Button openAlgorithmButton;
-    private System.Windows.Forms.Button newAlgorithmButton;
-    private System.Windows.Forms.TabPage currentRunTabPage;
-    private RunView currentRunView;
-    private System.Windows.Forms.Label storeSolutionInRunLabel;
-    private System.Windows.Forms.CheckBox storeBestSolutionCheckBox;
-  }
-}
Index: anches/PerformanceComparison/HeuristicLab.Optimization.Views/3.3/IRRestarterView.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.Optimization.Views/3.3/IRRestarterView.cs	(revision 13736)
+++ 	(revision )
@@ -1,315 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2012 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.ComponentModel;
-using System.Globalization;
-using System.Linq;
-using System.Windows.Forms;
-using HeuristicLab.Analysis;
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Core.Views;
-using HeuristicLab.MainForm;
-using HeuristicLab.PluginInfrastructure;
-
-namespace HeuristicLab.Optimization.Views {
-  [View("Independent Random Restarter View")]
-  [Content(typeof(IndepdentRandomRestarter), IsDefaultView = true)]
-  public partial class IndependentRandomRestarterView : IOptimizerView {
-    protected TypeSelectorDialog algorithmTypeSelectorDialog;
-    protected virtual bool SuppressEvents { get; set; }
-
-    public new IndepdentRandomRestarter Content {
-      get { return (IndepdentRandomRestarter)base.Content; }
-      set { base.Content = value; }
-    }
-
-    public IndependentRandomRestarterView() {
-      InitializeComponent();
-      terminationComboBox.Items.AddRange(Enum.GetValues(typeof(TerminationCriterium)).Cast<object>().ToArray());
-    }
-
-    protected override void Dispose(bool disposing) {
-      if (disposing) {
-        if (algorithmTypeSelectorDialog != null) algorithmTypeSelectorDialog.Dispose();
-        if (components != null) components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    protected override void DeregisterContentEvents() {
-      Content.PropertyChanged -= Content_PropertyChanged;
-      base.DeregisterContentEvents();
-    }
-    protected override void RegisterContentEvents() {
-      base.RegisterContentEvents();
-      Content.PropertyChanged += Content_PropertyChanged;
-    }
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      SuppressEvents = true;
-      try {
-        if (Content == null) {
-          maxExecutionTimeTextBox.Text = String.Empty;
-          maxEvaluationsTextBox.Text = String.Empty;
-          moveCostPerSolutionTextBox.Text = String.Empty;
-          targetValueTextBox.Text = String.Empty;
-          maximizationCheckBox.CheckState = CheckState.Indeterminate;
-          terminationComboBox.SelectedIndex = -1;
-          storeBestSolutionCheckBox.CheckState = CheckState.Indeterminate;
-
-          algorithmViewHost.Content = null;
-          currentRunView.Content = null;
-          runsView.Content = null;
-        } else {
-          maxExecutionTimeTextBox.Text = TimeSpanHelper.FormatNatural(Content.MaximumExecutionTime);
-          maxEvaluationsTextBox.Text = Content.MaximumEvaluations.ToString();
-          moveCostPerSolutionTextBox.Text = Content.MoveCostPerSolution.ToString(CultureInfo.CurrentCulture.NumberFormat);
-          targetValueTextBox.Text = Content.TargetValue.ToString(CultureInfo.CurrentCulture.NumberFormat);
-          maximizationCheckBox.Checked = Content.Maximization;
-          terminationComboBox.SelectedItem = Content.TerminationCriterium;
-          storeBestSolutionCheckBox.Checked = Content.StoreSolutionInRun;
-
-          algorithmViewHost.Content = Content.Algorithm;
-          currentRunView.Content = Content.CurrentRun;
-          runsView.Content = Content.Runs;
-        }
-      } finally { SuppressEvents = false; }
-    }
-
-    protected override void SetEnabledStateOfControls() {
-      base.SetEnabledStateOfControls();
-      maxExecutionTimeTextBox.Enabled = Content != null && !ReadOnly && !Locked;
-      maxEvaluationsTextBox.Enabled = Content != null && !ReadOnly && !Locked;
-      moveCostPerSolutionTextBox.Enabled = Content != null && !ReadOnly && !Locked;
-      targetValueTextBox.Enabled = Content != null && !ReadOnly && !Locked;
-      maximizationCheckBox.Enabled = Content != null && !ReadOnly && !Locked;
-      terminationComboBox.Enabled = Content != null && !ReadOnly && !Locked;
-      storeBestSolutionCheckBox.Enabled = Content != null && !ReadOnly && !Locked;
-      newAlgorithmButton.Enabled = Content != null && !ReadOnly;
-      openAlgorithmButton.Enabled = Content != null && !ReadOnly;
-      algorithmViewHost.Enabled = Content != null;
-      currentRunView.Enabled = Content != null;
-      runsView.Enabled = Content != null;
-    }
-
-    protected override void OnClosed(FormClosedEventArgs e) {
-      if ((Content != null) && (Content.ExecutionState == ExecutionState.Started)) {
-        //The content must be stopped if no other view showing the content is available
-        var optimizers = MainFormManager.MainForm.Views.OfType<IContentView>().Where(v => v != this).Select(v => v.Content).OfType<IAlgorithm>();
-        if (!optimizers.Contains(Content.Algorithm)) {
-          var nestedOptimizers = optimizers.SelectMany(opt => opt.NestedOptimizers);
-          if (!nestedOptimizers.Contains(Content)) Content.Stop();
-        }
-      }
-      base.OnClosed(e);
-    }
-
-    #region Event Handlers
-    #region Content events
-    private void Content_PropertyChanged(object sender, PropertyChangedEventArgs e) {
-      if (InvokeRequired) {
-        Invoke((Action<object, PropertyChangedEventArgs>)Content_PropertyChanged, sender, e);
-        return;
-      }
-      SuppressEvents = true;
-      try {
-        switch (e.PropertyName) {
-          case "TerminationCriterium": terminationComboBox.SelectedItem = Content.TerminationCriterium; break;
-          case "MaximumExecutionTime": maxExecutionTimeTextBox.Text = TimeSpanHelper.FormatNatural(Content.MaximumExecutionTime); break;
-          case "MaximumEvaluations": maxEvaluationsTextBox.Text = Content.MaximumEvaluations.ToString(); break;
-          case "TargetValue": targetValueTextBox.Text = Content.TargetValue.ToString(CultureInfo.CurrentCulture.NumberFormat); break;
-          case "Maximization": maximizationCheckBox.Checked = Content.Maximization; break;
-          case "MoveCostPerSolution": moveCostPerSolutionTextBox.Text = Content.MoveCostPerSolution.ToString(CultureInfo.CurrentCulture.NumberFormat); break;
-          case "StoreSolutionInRun": storeBestSolutionCheckBox.Checked = Content.StoreSolutionInRun; break;
-          case "Algorithm": algorithmViewHost.Content = Content.Algorithm; break;
-          case "CurrentRun": currentRunView.Content = Content.CurrentRun; break;
-          case "Runs": runsView.Content = Content.Runs; break;
-        }
-      } finally { SuppressEvents = false; }
-    }
-    #endregion
-
-    #region Control events
-    private void maxExecutionTimeTextBox_Validating(object sender, CancelEventArgs e) {
-      if (SuppressEvents) return;
-      if (InvokeRequired) {
-        Invoke((Action<object, CancelEventArgs>)maxExecutionTimeTextBox_Validating, sender, e);
-        return;
-      }
-      TimeSpan ts;
-      if (!TimeSpanHelper.TryGetFromNaturalFormat(maxExecutionTimeTextBox.Text, out ts)) {
-        e.Cancel = !maxExecutionTimeTextBox.ReadOnly && maxExecutionTimeTextBox.Enabled;
-        errorProvider.SetError(maxExecutionTimeTextBox, "Please enter a valid time span, e.g. 20 seconds ; 45s ; 4min ; 1h ; 3 hours ; 2 days ; 4d");
-      } else {
-        Content.MaximumExecutionTime = ts;
-        e.Cancel = false;
-        errorProvider.SetError(maxExecutionTimeTextBox, null);
-      }
-    }
-
-    private void maxEvaluationsTextBox_Validating(object sender, CancelEventArgs e) {
-      if (SuppressEvents) return;
-      if (InvokeRequired) {
-        Invoke((Action<object, CancelEventArgs>)maxEvaluationsTextBox_Validating, sender, e);
-        return;
-      }
-      int value;
-      if (!int.TryParse(maxEvaluationsTextBox.Text, out value)) {
-        e.Cancel = !maxEvaluationsTextBox.ReadOnly && maxEvaluationsTextBox.Enabled;
-        errorProvider.SetError(maxEvaluationsTextBox, "Please enter a valid integer number.");
-      } else {
-        Content.MaximumEvaluations = value;
-        e.Cancel = false;
-        errorProvider.SetError(maxEvaluationsTextBox, null);
-      }
-    }
-
-    private void moveCostPerSolutionTextBox_Validating(object sender, CancelEventArgs e) {
-      if (SuppressEvents) return;
-      if (InvokeRequired) {
-        Invoke((Action<object, CancelEventArgs>)moveCostPerSolutionTextBox_Validating, sender, e);
-        return;
-      }
-      double value;
-      if (!double.TryParse(moveCostPerSolutionTextBox.Text, out value)) {
-        e.Cancel = !moveCostPerSolutionTextBox.ReadOnly && moveCostPerSolutionTextBox.Enabled;
-        errorProvider.SetError(moveCostPerSolutionTextBox, "Please enter a valid integer number.");
-      } else {
-        Content.MoveCostPerSolution = value;
-        e.Cancel = false;
-        errorProvider.SetError(moveCostPerSolutionTextBox, null);
-      }
-    }
-
-    private void targetValueTextBox_Validating(object sender, CancelEventArgs e) {
-      if (SuppressEvents) return;
-      if (InvokeRequired) {
-        Invoke((Action<object, CancelEventArgs>)targetValueTextBox_Validating, sender, e);
-        return;
-      }
-      double value;
-      if (!double.TryParse(targetValueTextBox.Text, out value)) {
-        e.Cancel = !targetValueTextBox.ReadOnly && targetValueTextBox.Enabled;
-        errorProvider.SetError(targetValueTextBox, "Please enter a valid integer number.");
-      } else {
-        Content.TargetValue = value;
-        e.Cancel = false;
-        errorProvider.SetError(targetValueTextBox, null);
-      }
-    }
-
-    private void maximizationCheckBox_CheckedChanged(object sender, EventArgs e) {
-      if (SuppressEvents) return;
-      if (InvokeRequired) {
-        Invoke((Action<object, EventArgs>)maximizationCheckBox_CheckedChanged, sender, e);
-        return;
-      }
-      Content.Maximization = maximizationCheckBox.Checked;
-    }
-
-    private void terminationComboBox_SelectedIndexChanged(object sender, EventArgs e) {
-      if (SuppressEvents) return;
-      if (InvokeRequired) {
-        Invoke((Action<object, EventArgs>)terminationComboBox_SelectedIndexChanged, sender, e);
-        return;
-      }
-      Content.TerminationCriterium = (TerminationCriterium)terminationComboBox.SelectedItem;
-    }
-
-    private void storeBestSolutionCheckBox_CheckedChanged(object sender, EventArgs e) {
-      if (SuppressEvents) return;
-      if (InvokeRequired) {
-        Invoke((Action<object, EventArgs>)storeBestSolutionCheckBox_CheckedChanged, sender, e);
-        return;
-      }
-      Content.StoreSolutionInRun = storeBestSolutionCheckBox.Checked;
-    }
-
-    private void newAlgorithmButton_Click(object sender, EventArgs e) {
-      if (algorithmTypeSelectorDialog == null) {
-        algorithmTypeSelectorDialog = new TypeSelectorDialog { Caption = "Select Algorithm" };
-        algorithmTypeSelectorDialog.TypeSelector.Caption = "Available Algorithms";
-        algorithmTypeSelectorDialog.TypeSelector.Configure(typeof(IAlgorithm)
-          , showNotInstantiableTypes: false, showGenericTypes: false);
-      }
-      if (algorithmTypeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
-        try {
-          Content.Algorithm = (IAlgorithm)algorithmTypeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
-        } catch (Exception ex) {
-          ErrorHandling.ShowErrorDialog(this, ex);
-        }
-      }
-    }
-
-    private void openAlgorithmButton_Click(object sender, EventArgs e) {
-      openFileDialog.Title = "Open Algorithm";
-      if (openFileDialog.ShowDialog(this) == DialogResult.OK) {
-        newAlgorithmButton.Enabled = openAlgorithmButton.Enabled = false;
-        algorithmViewHost.Enabled = false;
-
-        ContentManager.LoadAsync(openFileDialog.FileName, delegate(IStorableContent content, Exception error) {
-          try {
-            if (error != null) throw error;
-            var algorithm = content as IAlgorithm;
-            if (algorithm == null)
-              MessageBox.Show(this, "The selected file does not contain an algorithm.", "Invalid File", MessageBoxButtons.OK, MessageBoxIcon.Error);
-            else
-              Content.Algorithm = algorithm;
-          } catch (Exception ex) {
-            ErrorHandling.ShowErrorDialog(this, ex);
-          } finally {
-            Invoke(new Action(delegate() {
-              algorithmViewHost.Enabled = true;
-              newAlgorithmButton.Enabled = openAlgorithmButton.Enabled = true;
-            }));
-          }
-        });
-      }
-    }
-
-    private void algorithmTabPage_DragEnterOver(object sender, DragEventArgs e) {
-      e.Effect = DragDropEffects.None;
-      var alg = e.Data.GetData(Constants.DragDropDataFormat) as IAlgorithm;
-      if (!ReadOnly && alg != null) {
-        if (!typeof(ISingleObjectiveHeuristicOptimizationProblem).IsAssignableFrom(alg.ProblemType))
-          return;
-        if ((e.KeyState & 32) == 32) e.Effect = DragDropEffects.Link;  // ALT key
-        else if ((e.KeyState & 4) == 4) e.Effect = DragDropEffects.Move;  // SHIFT key
-        else if (e.AllowedEffect.HasFlag(DragDropEffects.Copy)) e.Effect = DragDropEffects.Copy;
-        else if (e.AllowedEffect.HasFlag(DragDropEffects.Move)) e.Effect = DragDropEffects.Move;
-        else if (e.AllowedEffect.HasFlag(DragDropEffects.Link)) e.Effect = DragDropEffects.Link;
-      }
-    }
-
-    private void algorithmTabPage_DragDrop(object sender, DragEventArgs e) {
-      if (e.Effect != DragDropEffects.None) {
-        var algorithm = e.Data.GetData(Constants.DragDropDataFormat) as IAlgorithm;
-        if (e.Effect.HasFlag(DragDropEffects.Copy)) algorithm = (IAlgorithm)algorithm.Clone();
-        Content.Algorithm = algorithm;
-      }
-    }
-    #endregion
-    #endregion
-  }
-}
Index: anches/PerformanceComparison/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionIteratedSamplingView.Designer.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionIteratedSamplingView.Designer.cs	(revision 13736)
+++ 	(revision )
@@ -1,275 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2015 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
-
-namespace HeuristicLab.Optimization.Views.RunCollectionViews {
-  partial class RunCollectionIteratedSamplingView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing && (components != null)) {
-        components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.components = new System.ComponentModel.Container();
-      System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
-      System.Windows.Forms.DataVisualization.Charting.Legend legend1 = new System.Windows.Forms.DataVisualization.Charting.Legend();
-      System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series();
-      System.Windows.Forms.DataVisualization.Charting.Series series2 = new System.Windows.Forms.DataVisualization.Charting.Series();
-      System.Windows.Forms.DataVisualization.Charting.Series series3 = new System.Windows.Forms.DataVisualization.Charting.Series();
-      this.dataLabel = new System.Windows.Forms.Label();
-      this.dataTableComboBox = new System.Windows.Forms.ComboBox();
-      this.targetTextBox = new System.Windows.Forms.TextBox();
-      this.targetLabel = new System.Windows.Forms.Label();
-      this.enhancedChart = new HeuristicLab.Visualization.ChartControlsExtensions.EnhancedChart();
-      this.errorProvider = new System.Windows.Forms.ErrorProvider(this.components);
-      this.groupComboBox = new System.Windows.Forms.ComboBox();
-      this.groupLabel = new System.Windows.Forms.Label();
-      this.problemLabel = new System.Windows.Forms.Label();
-      this.problemComboBox = new System.Windows.Forms.ComboBox();
-      this.groupInstanceComboBox = new System.Windows.Forms.ComboBox();
-      this.optimalCutOffDescriptionLabel = new System.Windows.Forms.Label();
-      this.optimalCutOffTextBox = new System.Windows.Forms.TextBox();
-      this.label1 = new System.Windows.Forms.Label();
-      ((System.ComponentModel.ISupportInitialize)(this.enhancedChart)).BeginInit();
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
-      this.SuspendLayout();
-      // 
-      // dataLabel
-      // 
-      this.dataLabel.AutoSize = true;
-      this.dataLabel.Location = new System.Drawing.Point(9, 60);
-      this.dataLabel.Name = "dataLabel";
-      this.dataLabel.Size = new System.Drawing.Size(60, 13);
-      this.dataLabel.TabIndex = 0;
-      this.dataLabel.Text = "DataTable:";
-      // 
-      // dataTableComboBox
-      // 
-      this.dataTableComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.dataTableComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
-      this.dataTableComboBox.FormattingEnabled = true;
-      this.dataTableComboBox.Location = new System.Drawing.Point(75, 57);
-      this.dataTableComboBox.Name = "dataTableComboBox";
-      this.dataTableComboBox.Size = new System.Drawing.Size(827, 21);
-      this.dataTableComboBox.TabIndex = 1;
-      this.dataTableComboBox.SelectedIndexChanged += new System.EventHandler(this.dataTableComboBox_SelectedIndexChanged);
-      // 
-      // targetTextBox
-      // 
-      this.targetTextBox.Location = new System.Drawing.Point(75, 84);
-      this.targetTextBox.Name = "targetTextBox";
-      this.targetTextBox.Size = new System.Drawing.Size(827, 20);
-      this.targetTextBox.TabIndex = 2;
-      this.targetTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.targetTextBox_Validating);
-      // 
-      // targetLabel
-      // 
-      this.targetLabel.AutoSize = true;
-      this.targetLabel.Location = new System.Drawing.Point(9, 87);
-      this.targetLabel.Name = "targetLabel";
-      this.targetLabel.Size = new System.Drawing.Size(41, 13);
-      this.targetLabel.TabIndex = 0;
-      this.targetLabel.Text = "Target:";
-      // 
-      // enhancedChart
-      // 
-      this.enhancedChart.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-      chartArea1.AxisY.Maximum = 1D;
-      chartArea1.AxisY.Minimum = 0D;
-      chartArea1.AxisY.Title = "Probability of achieving the target";
-      chartArea1.Name = "ChartArea1";
-      this.enhancedChart.ChartAreas.Add(chartArea1);
-      legend1.Alignment = System.Drawing.StringAlignment.Center;
-      legend1.Docking = System.Windows.Forms.DataVisualization.Charting.Docking.Top;
-      legend1.Name = "Legend1";
-      this.enhancedChart.Legends.Add(legend1);
-      this.enhancedChart.Location = new System.Drawing.Point(3, 136);
-      this.enhancedChart.Name = "enhancedChart";
-      series1.BorderWidth = 2;
-      series1.ChartArea = "ChartArea1";
-      series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
-      series1.Legend = "Legend1";
-      series1.LegendText = "Observed Run-Length Distribution";
-      series1.Name = "rldSeries";
-      series1.YValuesPerPoint = 2;
-      series2.BorderWidth = 2;
-      series2.ChartArea = "ChartArea1";
-      series2.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.FastLine;
-      series2.Legend = "Legend1";
-      series2.LegendText = "Exponential Approximation";
-      series2.Name = "rldApproximationSeries";
-      series3.BorderWidth = 2;
-      series3.ChartArea = "ChartArea1";
-      series3.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.FastLine;
-      series3.Legend = "Legend1";
-      series3.LegendText = "Optimal Cut-Off Approximation";
-      series3.Name = "optimalSeries";
-      this.enhancedChart.Series.Add(series1);
-      this.enhancedChart.Series.Add(series2);
-      this.enhancedChart.Series.Add(series3);
-      this.enhancedChart.Size = new System.Drawing.Size(899, 526);
-      this.enhancedChart.TabIndex = 3;
-      // 
-      // errorProvider
-      // 
-      this.errorProvider.ContainerControl = this;
-      // 
-      // groupComboBox
-      // 
-      this.groupComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
-      this.groupComboBox.FormattingEnabled = true;
-      this.groupComboBox.Location = new System.Drawing.Point(75, 3);
-      this.groupComboBox.Name = "groupComboBox";
-      this.groupComboBox.Size = new System.Drawing.Size(379, 21);
-      this.groupComboBox.TabIndex = 5;
-      this.groupComboBox.SelectedIndexChanged += new System.EventHandler(this.groupComboBox_SelectedIndexChanged);
-      // 
-      // groupLabel
-      // 
-      this.groupLabel.AutoSize = true;
-      this.groupLabel.Location = new System.Drawing.Point(9, 6);
-      this.groupLabel.Name = "groupLabel";
-      this.groupLabel.Size = new System.Drawing.Size(39, 13);
-      this.groupLabel.TabIndex = 4;
-      this.groupLabel.Text = "Group:";
-      // 
-      // problemLabel
-      // 
-      this.problemLabel.AutoSize = true;
-      this.problemLabel.Location = new System.Drawing.Point(9, 33);
-      this.problemLabel.Name = "problemLabel";
-      this.problemLabel.Size = new System.Drawing.Size(48, 13);
-      this.problemLabel.TabIndex = 6;
-      this.problemLabel.Text = "Problem:";
-      // 
-      // problemComboBox
-      // 
-      this.problemComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.problemComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
-      this.problemComboBox.FormattingEnabled = true;
-      this.problemComboBox.Location = new System.Drawing.Point(75, 30);
-      this.problemComboBox.Name = "problemComboBox";
-      this.problemComboBox.Size = new System.Drawing.Size(827, 21);
-      this.problemComboBox.TabIndex = 7;
-      this.problemComboBox.SelectedIndexChanged += new System.EventHandler(this.problemComboBox_SelectedIndexChanged);
-      // 
-      // groupInstanceComboBox
-      // 
-      this.groupInstanceComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.groupInstanceComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
-      this.groupInstanceComboBox.FormattingEnabled = true;
-      this.groupInstanceComboBox.Location = new System.Drawing.Point(460, 3);
-      this.groupInstanceComboBox.Name = "groupInstanceComboBox";
-      this.groupInstanceComboBox.Size = new System.Drawing.Size(442, 21);
-      this.groupInstanceComboBox.TabIndex = 5;
-      this.groupInstanceComboBox.SelectedIndexChanged += new System.EventHandler(this.groupInstanceComboBox_SelectedIndexChanged);
-      // 
-      // optimalCutOffDescriptionLabel
-      // 
-      this.optimalCutOffDescriptionLabel.AutoSize = true;
-      this.optimalCutOffDescriptionLabel.Location = new System.Drawing.Point(9, 113);
-      this.optimalCutOffDescriptionLabel.Name = "optimalCutOffDescriptionLabel";
-      this.optimalCutOffDescriptionLabel.Size = new System.Drawing.Size(308, 13);
-      this.optimalCutOffDescriptionLabel.TabIndex = 8;
-      this.optimalCutOffDescriptionLabel.Text = "The optimal cut-off point for this group on this problem would be:";
-      // 
-      // optimalCutOffTextBox
-      // 
-      this.optimalCutOffTextBox.Location = new System.Drawing.Point(323, 110);
-      this.optimalCutOffTextBox.Name = "optimalCutOffTextBox";
-      this.optimalCutOffTextBox.ReadOnly = true;
-      this.optimalCutOffTextBox.Size = new System.Drawing.Size(131, 20);
-      this.optimalCutOffTextBox.TabIndex = 9;
-      // 
-      // label1
-      // 
-      this.label1.AutoSize = true;
-      this.label1.Location = new System.Drawing.Point(460, 113);
-      this.label1.Name = "label1";
-      this.label1.Size = new System.Drawing.Size(180, 13);
-      this.label1.TabIndex = 8;
-      this.label1.Text = "(assuming exponential convergence)";
-      // 
-      // RunCollectionIteratedSamplingView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.optimalCutOffTextBox);
-      this.Controls.Add(this.label1);
-      this.Controls.Add(this.optimalCutOffDescriptionLabel);
-      this.Controls.Add(this.groupInstanceComboBox);
-      this.Controls.Add(this.groupComboBox);
-      this.Controls.Add(this.groupLabel);
-      this.Controls.Add(this.problemLabel);
-      this.Controls.Add(this.problemComboBox);
-      this.Controls.Add(this.enhancedChart);
-      this.Controls.Add(this.targetTextBox);
-      this.Controls.Add(this.dataTableComboBox);
-      this.Controls.Add(this.targetLabel);
-      this.Controls.Add(this.dataLabel);
-      this.Name = "RunCollectionIteratedSamplingView";
-      this.Size = new System.Drawing.Size(905, 665);
-      ((System.ComponentModel.ISupportInitialize)(this.enhancedChart)).EndInit();
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.Label dataLabel;
-    private System.Windows.Forms.ComboBox dataTableComboBox;
-    private System.Windows.Forms.TextBox targetTextBox;
-    private System.Windows.Forms.Label targetLabel;
-    private Visualization.ChartControlsExtensions.EnhancedChart enhancedChart;
-    private System.Windows.Forms.ErrorProvider errorProvider;
-    private System.Windows.Forms.ComboBox groupComboBox;
-    private System.Windows.Forms.Label groupLabel;
-    private System.Windows.Forms.Label problemLabel;
-    private System.Windows.Forms.ComboBox problemComboBox;
-    private System.Windows.Forms.ComboBox groupInstanceComboBox;
-    private System.Windows.Forms.TextBox optimalCutOffTextBox;
-    private System.Windows.Forms.Label optimalCutOffDescriptionLabel;
-    private System.Windows.Forms.Label label1;
-  }
-}
Index: anches/PerformanceComparison/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionIteratedSamplingView.cs
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionIteratedSamplingView.cs	(revision 13736)
+++ 	(revision )
@@ -1,462 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2015 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.ComponentModel;
-using System.Globalization;
-using System.Linq;
-using System.Windows.Forms.DataVisualization.Charting;
-using HeuristicLab.Analysis;
-using HeuristicLab.Common;
-using HeuristicLab.Data;
-using HeuristicLab.MainForm;
-using HeuristicLab.MainForm.WindowsForms;
-
-namespace HeuristicLab.Optimization.Views.RunCollectionViews {
-  [View("Run-length Cut-off Estimation View")]
-  [Content(typeof(RunCollection), IsDefaultView = false)]
-  public sealed partial class RunCollectionIteratedSamplingView : AsynchronousContentView {
-    private bool suppressEvents;
-
-    public new RunCollection Content {
-      get { return (RunCollection)base.Content; }
-      set { base.Content = value; }
-    }
-
-    public RunCollectionIteratedSamplingView() {
-      InitializeComponent();
-    }
-
-    protected override void DeregisterContentEvents() {
-      base.DeregisterContentEvents();
-    }
-
-    protected override void RegisterContentEvents() {
-      base.RegisterContentEvents();
-    }
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      suppressEvents = true;
-      try {
-        UpdateGroupComboBox();
-        RecalculateTarget();
-      } finally { suppressEvents = false; }
-    }
-
-    protected override void SetEnabledStateOfControls() {
-      base.SetEnabledStateOfControls();
-      groupComboBox.Enabled = Content != null;
-      groupInstanceComboBox.Enabled = Content != null && groupInstanceComboBox.Items.Count > 1;
-      problemComboBox.Enabled = Content != null && problemComboBox.Items.Count > 1;
-      dataTableComboBox.Enabled = Content != null && dataTableComboBox.Items.Count > 1;
-    }
-
-    private void UpdateGroupComboBox() {
-      try {
-
-        var selectedGroupItem = (string)groupComboBox.SelectedItem;
-        groupComboBox.Items.Clear();
-        groupComboBox.SelectedItem = null;
-
-        var paramNames = Content.ParameterNames.OrderBy(x => x, new NaturalStringComparer());
-        foreach (var name in paramNames) {
-          groupComboBox.Items.Add(name);
-          if (selectedGroupItem == name) groupComboBox.SelectedItem = name;
-        }
-        if (groupComboBox.SelectedItem == null && groupComboBox.Items.Count > 0)
-          groupComboBox.SelectedItem = groupComboBox.Items[0];
-
-      } finally { UpdateGroupInstanceComboBox(); }
-    }
-
-    private void UpdateGroupInstanceComboBox() {
-      try {
-
-        var selectedGroupInstanceItem = (string)groupInstanceComboBox.SelectedItem;
-        groupInstanceComboBox.Items.Clear();
-        groupInstanceComboBox.SelectedItem = null;
-
-        var selectedGroupItem = (string)groupComboBox.SelectedItem;
-        if (selectedGroupItem == null) return;
-
-        var paramValues = GetRunsFiltered()
-                              .Select(x => x.Parameters[selectedGroupItem].ToString())
-                              .Distinct()
-                              .OrderBy(x => x, new NaturalStringComparer());
-        foreach (var value in paramValues) {
-          groupInstanceComboBox.Items.Add(value);
-          if (selectedGroupInstanceItem == value) groupInstanceComboBox.SelectedItem = value;
-        }
-        if (groupInstanceComboBox.SelectedItem == null && groupInstanceComboBox.Items.Count > 0)
-          groupInstanceComboBox.SelectedItem = groupInstanceComboBox.Items[0];
-
-      } finally { UpdateProblemCombobBox(); }
-    }
-
-    private void UpdateProblemCombobBox() {
-      try {
-
-        var selectedProblemItem = (ProblemDescription)problemComboBox.SelectedItem;
-        problemComboBox.Items.Clear();
-        problemComboBox.SelectedItem = null;
-
-        var problems = new HashSet<ProblemDescription>();
-        foreach (var run in GetRunsFiltered()) {
-          problems.Add(new ProblemDescription(run));
-        }
-
-        var problemTypesDifferent = problems.Select(x => x.ProblemType).Where(x => !string.IsNullOrEmpty(x)).Distinct().Count() > 1;
-        var problemNamesDifferent = problems.Select(x => x.ProblemName).Where(x => !string.IsNullOrEmpty(x)).Distinct().Count() > 1;
-        var evaluatorDifferent = problems.Select(x => x.Evaluator).Where(x => !string.IsNullOrEmpty(x)).Distinct().Count() > 1;
-        var allEqual = !problemTypesDifferent && !problemNamesDifferent && !evaluatorDifferent;
-
-        foreach (var prob in problems.OrderBy(x => x.ToString()).ToList()) {
-          prob.DisplayProblemType = problemTypesDifferent;
-          prob.DisplayProblemName = problemNamesDifferent || allEqual;
-          prob.DisplayEvaluator = evaluatorDifferent;
-          problemComboBox.Items.Add(prob);
-          if (prob.Equals(selectedProblemItem)) problemComboBox.SelectedItem = prob;
-        }
-
-        if (problemComboBox.SelectedItem == null && problemComboBox.Items.Count > 0) {
-          problemComboBox.SelectedItem = problemComboBox.Items[0];
-          RecalculateTarget();
-        }
-
-      } finally { UpdateDataTableComboBox(); }
-    }
-
-    private void UpdateDataTableComboBox() {
-      var selectedItem = (string)dataTableComboBox.SelectedItem;
-      dataTableComboBox.Items.Clear();
-      dataTableComboBox.SelectedItem = null;
-
-      var dataTables = (from run in GetRunsFiltered()
-                        from result in run.Results
-                        where result.Value is IndexedDataTable<double>
-                        select result.Key).Distinct().OrderBy(x => x, new NaturalStringComparer());
-
-      foreach (var dt in dataTables) {
-        dataTableComboBox.Items.Add(dt);
-        if (selectedItem == dt) dataTableComboBox.SelectedItem = dt;
-      }
-      if (dataTableComboBox.SelectedItem == null && dataTableComboBox.Items.Count > 0)
-        dataTableComboBox.SelectedItem = dataTableComboBox.Items[0];
-    }
-
-    private IEnumerable<IRun> GetRunsFiltered() {
-      var result = Content.Where(x => x.Visible);
-
-      var selectedGroup = (string)groupComboBox.SelectedItem;
-      if (!string.IsNullOrEmpty(selectedGroup)) {
-        result = result.Where(x => x.Parameters.ContainsKey(selectedGroup));
-
-        var selectedGroupInstance = (string)groupInstanceComboBox.SelectedItem;
-        if (!string.IsNullOrEmpty(selectedGroupInstance))
-          result = result.Where(x => x.Parameters[selectedGroup].ToString() == selectedGroupInstance);
-      }
-      var selectedProblem = (ProblemDescription)problemComboBox.SelectedItem;
-      if (selectedProblem != null)
-        result = result.Where(x => selectedProblem.Match(x));
-
-      return result;
-    }
-
-    private void groupComboBox_SelectedIndexChanged(object sender, EventArgs e) {
-      if (suppressEvents) return;
-      suppressEvents = true;
-      try {
-        UpdateGroupInstanceComboBox();
-      } finally { suppressEvents = false; }
-
-      UpdateOptimalCutoff();
-    }
-
-    private void groupInstanceComboBox_SelectedIndexChanged(object sender, EventArgs e) {
-      if (suppressEvents) return;
-      suppressEvents = true;
-      try {
-        UpdateProblemCombobBox();
-      } finally { suppressEvents = false; }
-
-      UpdateOptimalCutoff();
-    }
-
-    private void problemComboBox_SelectedIndexChanged(object sender, EventArgs e) {
-      if (suppressEvents) return;
-      suppressEvents = true;
-      try {
-        UpdateDataTableComboBox();
-        RecalculateTarget();
-      } finally { suppressEvents = false; }
-
-      UpdateOptimalCutoff();
-    }
-
-    private void dataTableComboBox_SelectedIndexChanged(object sender, EventArgs e) {
-      if (suppressEvents) return;
-
-      UpdateOptimalCutoff();
-    }
-
-    private void RecalculateTarget() {
-      var problemDesc = (ProblemDescription)problemComboBox.SelectedItem;
-      var dataTable = (string)dataTableComboBox.SelectedItem;
-      if (problemDesc == null || dataTable == null) return;
-      var target = CalculateBestTarget(problemDesc, dataTable, IsMaximization());
-      targetTextBox.Text = target.ToString(CultureInfo.CurrentCulture.NumberFormat);
-    }
-
-    private void targetTextBox_Validating(object sender, CancelEventArgs e) {
-      if (InvokeRequired)
-        if (suppressEvents) return;
-      double target;
-      if (!double.TryParse(targetTextBox.Text, out target)) {
-        e.Cancel = true;
-        errorProvider.SetError(targetTextBox, "Please enter a valid fitness value.");
-        return;
-      }
-      errorProvider.SetError(targetTextBox, null);
-
-      UpdateOptimalCutoff();
-    }
-
-    private void UpdateOptimalCutoff() {
-      double target;
-      if (!double.TryParse(targetTextBox.Text, NumberStyles.Float, CultureInfo.CurrentCulture.NumberFormat, out target)) return;
-
-      var resultName = (string)dataTableComboBox.SelectedItem;
-      if (resultName == null) return;
-
-      var pool = GetRunsFiltered()
-                  .Where(x => x.Results.ContainsKey(resultName) && x.Results[resultName] is IndexedDataTable<double>)
-                  .Select(x => (IndexedDataTable<double>)x.Results[resultName]).ToList();
-      if (pool.Count == 0) return;
-
-      var maximization = IsMaximization();
-
-      var data = pool.Select(x => x.Rows.First().Values.SkipWhile(y => !HasAchievedTarget(maximization, y, target)).FirstOrDefault() /* get the entry where the run reached the target */
-                                  ?? Tuple.Create(x.Rows.First().Values.Last().Item1, double.NaN) /* otherwise note the maximum effort */)
-                     .Where(x => !x.Equals(default(Tuple<double, double>))).OrderBy(x => x.Item1).ToList();
-      double prob;
-      var cutoff = CalculateOptimalCutoff(data, maximization, target, out prob);
-      optimalCutOffTextBox.Text = cutoff.ToString(CultureInfo.CurrentCulture.NumberFormat);
-      UpdateGraph(cutoff, prob, target, maximization);
-    }
-
-    private double CalculateOptimalCutoff(List<Tuple<double, double>> data, bool maximization, double target, out double bestProbability) {
-      bestProbability = 1.0;
-      var bestProbabilityEffort = 0.0;
-      var succ = 0;
-      foreach (var d in data) {
-        if (double.IsNaN(d.Item2)) continue;
-        if (HasAchievedTarget(maximization, d, target)) succ++;
-        // probability of having no successful run with effort d.Item1
-        var prob = (1.0 - succ / (double)data.Count);
-        // normalizing probability to effort 1 (assuming exponential convergence)
-        prob = Math.Pow(prob, 1.0 / d.Item1);
-        if (prob < bestProbability) {
-          bestProbability = prob;
-          bestProbabilityEffort = d.Item1;
-        }
-      }
-      return bestProbabilityEffort;
-    }
-
-    private bool HasAchievedTarget(bool maximization, Tuple<double, double> y, double target) {
-      return maximization ? y.Item2 >= target : y.Item2 <= target;
-    }
-
-    private void UpdateGraph(double cutoff, double bestProbability, double target, bool maximization) {
-      var table = (string)dataTableComboBox.SelectedItem;
-      var runs = GetRunsFiltered().Select(x => (IndexedDataTable<double>)x.Results[table]).ToList();
-      var evaluations = runs.SelectMany(x => x.Rows.First().Values.Select(y => y.Item1)).Distinct().OrderBy(x => x).ToList();
-      var totalRuns = evaluations.ToDictionary(x => x, x => 0);
-      var hits = evaluations.ToDictionary(x => x, x => 0.0);
-      foreach (var r in runs) {
-        var evalIter = evaluations.GetEnumerator();
-        evalIter.MoveNext();
-        var eff = evalIter.Current;
-        var evalIterAbort = false;
-        var targetFirstReached = double.MaxValue;
-        foreach (var v in r.Rows.First().Values) {
-          if (targetFirstReached == double.MaxValue && (maximization && v.Item2 >= target || !maximization && v.Item2 <= target))
-            targetFirstReached = v.Item1;
-          while (eff <= v.Item1) {
-            totalRuns[eff]++;
-            if (eff >= targetFirstReached) hits[eff]++;
-            if (evalIter.MoveNext())
-              eff = evalIter.Current;
-            else {
-              evalIterAbort = true;
-              break;
-            }
-          }
-        }
-        if (!evalIterAbort) {
-          do {
-            eff = evalIter.Current;
-            totalRuns[eff]++;
-            if (eff >= targetFirstReached) hits[eff]++;
-          } while (evalIter.MoveNext());
-        }
-      }
-
-      foreach (var e in evaluations) {
-        hits[e] /= totalRuns[e];
-      }
-
-      enhancedChart.SuspendRepaint();
-
-      var cutOffIdx = -1;
-      var series = enhancedChart.Series["rldSeries"];
-      series.Points.Clear();
-      foreach (var h in hits) {
-        series.Points.AddXY(h.Key, h.Value);
-        if (h.Key <= cutoff) cutOffIdx++;
-      }
-
-      var series2 = enhancedChart.Series["rldApproximationSeries"];
-      series2.Points.Clear();
-      var evalMax = evaluations.Max();
-      var steps = evalMax / 100.0;
-
-      var result = ExpectedRuntimeHelper.CalculateErt(GetRunsFiltered().ToList(), table, target, maximization);
-      var lambda = 1.0 / result.ExpectedRuntime;
-      foreach (var e in Enumerable.Range(0, 100)) {
-        var x = e * steps;
-        series2.Points.AddXY(x, Math.Max(0, 1.0 - Math.Exp(-lambda * x)));
-      }
-      var series3 = enhancedChart.Series["optimalSeries"];
-      series3.Points.Clear();
-      if (bestProbability <= 0) bestProbability = 1 - lambda;
-      foreach (var e in Enumerable.Range(0, 100)) {
-        var x = e * steps;
-        series3.Points.AddXY(x, Math.Max(0, 1.0 - Math.Pow(bestProbability, x)));
-      }
-
-      enhancedChart.Annotations.Clear();
-      if (cutOffIdx >= 0) {
-        var annotation = new VerticalLineAnnotation();
-        annotation.AnchorDataPoint = series.Points[cutOffIdx];
-        annotation.Height = series.Points[cutOffIdx].YValues[0] > enhancedChart.ChartAreas[series.ChartArea].AxisY.Maximum / 2.0 ? 10 : -10;
-        annotation.LineWidth = 2;
-        annotation.StartCap = LineAnchorCapStyle.Arrow;
-        enhancedChart.Annotations.Add(annotation);
-      }
-      enhancedChart.ResumeRepaint(true);
-    }
-
-    #region Helpers
-    // Determines if the RunCollection contains maximization or minimization runs
-    private bool IsMaximization() {
-      if (Content == null) return false;
-      foreach (var run in GetRunsFiltered().Where(x => x.Parameters.ContainsKey("Maximization"))) {
-        var maximization = run.Parameters["Maximization"] as BoolValue;
-        if (maximization == null) continue;
-        return maximization.Value;
-      }
-      var selectedTable = (string)dataTableComboBox.SelectedItem;
-      if (selectedTable != null) {
-        foreach (var run in GetRunsFiltered().Where(x => x.Results.ContainsKey(selectedTable))) {
-          var table = run.Results[selectedTable] as IndexedDataTable<double>;
-          if (table == null) continue;
-          var firstRowValues = table.Rows.First().Values;
-          if (firstRowValues.Count < 2) continue;
-          return firstRowValues[0].Item2 < firstRowValues[firstRowValues.Count - 1].Item2;
-        }
-      }
-      // assume minimization by default
-      return false;
-    }
-
-    private double CalculateBestTarget(ProblemDescription pd, string dataTableResult, bool maximization) {
-      var targets = (from r in Content
-                     where r.Visible && pd.Match(r)
-                     let target = r.Parameters.ContainsKey("BestKnownQuality")
-                                  && r.Parameters["BestKnownQuality"] is DoubleValue
-                       ? ((DoubleValue)r.Parameters["BestKnownQuality"]).Value
-                       : ((IndexedDataTable<double>)r.Results[dataTableResult]).Rows.First().Values.Last().Item2
-                     select target);
-      return maximization ? targets.Max() : targets.Min();
-    }
-    #endregion
-
-    private class ProblemDescription {
-
-      private ProblemDescription() {
-        ProblemType = string.Empty;
-        ProblemName = string.Empty;
-        Evaluator = string.Empty;
-        DisplayProblemType = false;
-        DisplayProblemName = false;
-        DisplayEvaluator = false;
-      }
-
-      public ProblemDescription(IRun run) {
-        ProblemType = GetStringValueOrEmpty(run, "Problem Type");
-        ProblemName = GetStringValueOrEmpty(run, "Problem Name");
-        Evaluator = GetStringValueOrEmpty(run, "Evaluator");
-        DisplayProblemType = !string.IsNullOrEmpty(ProblemType);
-        DisplayProblemName = !string.IsNullOrEmpty(ProblemName);
-        DisplayEvaluator = !string.IsNullOrEmpty(Evaluator);
-      }
-
-      public bool DisplayProblemType { get; set; }
-      public string ProblemType { get; set; }
-      public bool DisplayProblemName { get; set; }
-      public string ProblemName { get; set; }
-      public bool DisplayEvaluator { get; set; }
-      public string Evaluator { get; set; }
-
-      public bool Match(IRun run) {
-        return GetStringValueOrEmpty(run, "Problem Type") == ProblemType
-               && GetStringValueOrEmpty(run, "Problem Name") == ProblemName
-               && GetStringValueOrEmpty(run, "Evaluator") == Evaluator;
-      }
-
-      private string GetStringValueOrEmpty(IRun run, string key) {
-        return run.Parameters.ContainsKey(key) ? ((StringValue)run.Parameters[key]).Value : string.Empty;
-      }
-
-      public override bool Equals(object obj) {
-        var other = obj as RunCollectionIteratedSamplingView.ProblemDescription;
-        if (other == null) return false;
-        return ProblemType == other.ProblemType
-               && ProblemName == other.ProblemName
-               && Evaluator == other.Evaluator;
-      }
-
-      public override int GetHashCode() {
-        return ProblemType.GetHashCode() ^ ProblemName.GetHashCode() ^ Evaluator.GetHashCode();
-      }
-
-      public override string ToString() {
-        return string.Join("  --  ", new[] {
-          (DisplayProblemType ? ProblemType : string.Empty),
-          (DisplayProblemName ? ProblemName : string.Empty),
-          (DisplayEvaluator ? Evaluator : string.Empty) }.Where(x => !string.IsNullOrEmpty(x)));
-      }
-    }
-  }
-}
Index: anches/PerformanceComparison/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionIteratedSamplingView.resx
===================================================================
--- /branches/PerformanceComparison/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionIteratedSamplingView.resx	(revision 13736)
+++ 	(revision )
@@ -1,123 +1,0 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <metadata name="errorProvider.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>17, 17</value>
-  </metadata>
-</root>
