Index: branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/HeuristicLab.Problems.MultiObjectiveTestFunctions-3.3.csproj
===================================================================
--- branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/HeuristicLab.Problems.MultiObjectiveTestFunctions-3.3.csproj	(revision 13451)
+++ branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/HeuristicLab.Problems.MultiObjectiveTestFunctions-3.3.csproj	(revision 13515)
@@ -95,6 +95,13 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="Comparators\Spacing.cs" />
+    <Compile Include="Comparators\HyperVolume.cs" />
+    <Compile Include="Comparators\InvertedGenerationalDistance.cs" />
+    <Compile Include="Comparators\GenerationalDistance.cs" />
+    <Compile Include="NonDominatedSelect.cs" />
     <Compile Include="Interfaces\IMultiObjectiveTestFunction.cs" />
+    <Compile Include="Interfaces\IMultiObjectiveDistance.cs" />
     <Compile Include="MultiObjectiveTestFunctionProblem.cs" />
+    <Compile Include="PFReader.cs" />
     <Compile Include="Plugin.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
Index: branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Interfaces/IMultiObjectiveTestFunction.cs
===================================================================
--- branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Interfaces/IMultiObjectiveTestFunction.cs	(revision 13451)
+++ branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Interfaces/IMultiObjectiveTestFunction.cs	(revision 13515)
@@ -24,5 +24,5 @@
 using HeuristicLab.Encodings.RealVectorEncoding;
 
-namespace HeuristicLab.Problems.TestFunctions {
+namespace HeuristicLab.Problems.MultiObjectiveTestFunctions {
   /// <summary>
   /// An interface which represents an evaluation operator for multi objective test functions.
@@ -31,5 +31,4 @@
     bool[] Maximization { get; }
     DoubleMatrix Bounds { get; }
-    //double BestKnownQuality { get; }
     int MinimumProblemSize { get; }
     int MaximumProblemSize { get; }
@@ -38,7 +37,11 @@
     int ActualSolutionSize { get; set; }
 
-    //double Evaluate2D(double x, double y);
+
+    RealVector[] OptimalParetoFront { get; }
+    RealVector ReferencePoint { get; }
+    double BestKnownHypervolume { get; }
+
+
     double[] Evaluate(RealVector point);
-    //RealVector GetBestKnownSolution(int dimension);
   }
 }
Index: branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/MultiObjectiveTestFunctionProblem.cs
===================================================================
--- branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/MultiObjectiveTestFunctionProblem.cs	(revision 13451)
+++ branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/MultiObjectiveTestFunctionProblem.cs	(revision 13515)
@@ -1,7 +1,3 @@
 ﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -11,6 +7,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Problems.MultiObjectiveTestFunctions.Testfunctions;
-using HeuristicLab.Problems.TestFunctions;
+using HeuristicLab.Problems.MultiObjectiveTestFunctions;
 
 namespace HeuristicLab.Problems.MultiObjectiveTestFunction {
@@ -18,4 +13,6 @@
   public class MultiObjectiveTestFunctionProblem : MultiObjectiveBasicProblem<RealVectorEncoding> {
 
+
+    //TODO update of Maximisatzion when SolutionSize or TestFunction changes
     public override bool[] Maximization {
       get {
@@ -26,17 +23,28 @@
     #region Parameter Properties
 
-
+    /// <summary>
+    /// The dimensionality of the solution candidates
+    /// </summary>
     private IFixedValueParameter<IntValue> ProblemSizeParameter {
       get { return (IFixedValueParameter<IntValue>)Parameters["ProblemSize"]; }
     }
+
+    /// <summary>
+    /// The number of objectives that are to be optimized
+    /// </summary>
     private IFixedValueParameter<IntValue> SolutionSizeParameter {
       get { return (IFixedValueParameter<IntValue>)Parameters["SolutionSize"]; }
     }
+
+    /// <summary>
+    /// The bounds for the entries of the solution candidate
+    /// </summary>
     private IValueParameter<DoubleMatrix> BoundsParameter {
       get { return (IValueParameter<DoubleMatrix>)Parameters["Bounds"]; }
     }
-    public OptionalValueParameter<RealVector> BestKnownSolutionParameter {
-      get { return (OptionalValueParameter<RealVector>)Parameters["BestKnownSolution"]; }
-    }
+
+    /// <summary>
+    /// The testfunction 
+    /// </summary>
     public IValueParameter<IMultiObjectiveTestFunction> TestFunctionParameter {
       get { return (IValueParameter<IMultiObjectiveTestFunction>)Parameters["TestFunction"]; }
@@ -63,5 +71,25 @@
     #endregion
 
-
+    public override void Analyze(Individual[] individuals, double[][] qualities, ResultCollection results, IRandom random) {
+      base.Analyze(individuals, qualities, results, random);
+      if (qualities[0].Length != 2) { throw new Exception(); }
+      if (!results.ContainsKey("Hypervolume")) {
+        results.Add(new Result("Hypervolume", typeof(DoubleValue)));
+      }
+      if (!results.ContainsKey("BestKnownHypervolume")) {
+        results.Add(new Result("BestKnownHypervolume", typeof(DoubleValue)));
+      }
+      if (!results.ContainsKey("Absolute Distance to BestKnownHypervolume")) {
+        results.Add(new Result("Absolute Distance to BestKnownHypervolume", typeof(DoubleValue)));
+      }
+      Hypervolume comp = new Hypervolume(TestFunction.ReferencePoint, Maximization);
+      RealVector[] front = NonDominatedSelect.selectNonDominatedRows(qualities, Maximization, true);
+
+      double hv = comp.GetHypervolume(front);
+      double best = TestFunction.BestKnownHypervolume;
+      results["Hypervolume"].Value = new DoubleValue(hv);
+      results["BestKnownHypervolume"].Value = new DoubleValue(best);
+      results["Absolute Distance to BestKnownHypervolume"].Value = new DoubleValue(best - hv);
+    }
 
     [StorableConstructor]
@@ -72,5 +100,5 @@
     }
     public MultiObjectiveTestFunctionProblem()
-      : base() { //former: base(new RealVectorEncoding("Point"))
+      : base() {
       Parameters.Add(new FixedValueParameter<IntValue>("ProblemSize", "The dimensionality of the problem instance (number of variables in the function).", new IntValue(2)));
       Parameters.Add(new FixedValueParameter<IntValue>("SolutionSize", "The dimensionality of the solution vector (number of objectives).", new IntValue(2)));
@@ -80,9 +108,10 @@
       Encoding.LengthParameter = ProblemSizeParameter;
       Encoding.BoundsParameter = BoundsParameter;
-      //BestKnownQuality = TestFunction.BestKnownQuality;
 
       InitializeOperators();
       RegisterEventHandlers();
     }
+
+
 
     public override IDeepCloneable Clone(Cloner cloner) {
@@ -96,5 +125,4 @@
 
     private void RegisterEventHandlers() {
-      //Evaluator.QualityParameter.ActualNameChanged += Evaluator_QualityParameter_ActualNameChanged;
       TestFunctionParameter.ValueChanged += TestFunctionParameterOnValueChanged;
       ProblemSizeParameter.Value.ValueChanged += ProblemSizeOnValueChanged;
@@ -119,12 +147,6 @@
     protected override void OnEvaluatorChanged() {
       base.OnEvaluatorChanged();
-      // Evaluator.QualityParameter.ActualNameChanged += Evaluator_QualityParameter_ActualNameChanged;
-      Parameterize();
-    }
-
-    //private void Evaluator_QualityParameter_ActualNameChanged(object sender, EventArgs e) {
-    //  Parameterize();
-    //}
-
+      Parameterize();
+    }
 
     private void TestFunctionParameterOnValueChanged(object sender, EventArgs eventArgs) {
@@ -176,6 +198,6 @@
 
     private void Parameterize() {
-    }
-
+      //empty for now
+    }
 
     #endregion
Index: branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/DTLZ1.cs
===================================================================
--- branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/DTLZ1.cs	(revision 13451)
+++ branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/DTLZ1.cs	(revision 13515)
@@ -1,17 +1,11 @@
 ﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
 using HeuristicLab.Encodings.RealVectorEncoding;
-using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Problems.MultiObjectiveTestFunction;
 
-namespace HeuristicLab.Problems.TestFunctions {
-  [Item("DTLZ1", " http://repository.ias.ac.in/81671/ [30.11.15]")]
+namespace HeuristicLab.Problems.MultiObjectiveTestFunctions {
+  [Item("DTLZ1", "Testfunction as defined as DTLZ1 in http://repository.ias.ac.in/81671/ [30.11.15]")]
   [StorableClass]
   public class DTLZ1 : MultiObjectiveTestFunction {
@@ -65,4 +59,18 @@
     }
 
+    public override RealVector[] OptimalParetoFront {
+      get {
+        throw new NotImplementedException();
+      }
+    }
+
+    public override RealVector ReferencePoint {
+      get { return new RealVector(new double[] { 11.0, 11.0 }); }
+    }
+
+    public override double BestKnownHypervolume {
+      get { return 120 + 7.0 / 8; }
+    }
+
     [StorableConstructor]
     protected DTLZ1(bool deserializing) : base(deserializing) { }
Index: branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/DTLZ2.cs
===================================================================
--- branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/DTLZ2.cs	(revision 13451)
+++ branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/DTLZ2.cs	(revision 13515)
@@ -1,17 +1,11 @@
 ﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
 using HeuristicLab.Encodings.RealVectorEncoding;
-using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Problems.MultiObjectiveTestFunction;
 
-namespace HeuristicLab.Problems.TestFunctions {
-  [Item("DTLZ2", " http://repository.ias.ac.in/81671/ [30.11.15]")]
+namespace HeuristicLab.Problems.MultiObjectiveTestFunctions {
+  [Item("DTLZ2", "Testfunction as defined as DTLZ2 in http://repository.ias.ac.in/81671/ [30.11.15]")]
   [StorableClass]
   public class DTLZ2 : MultiObjectiveTestFunction {
@@ -65,4 +59,18 @@
     }
 
+    public override RealVector[] OptimalParetoFront {
+      get {
+        throw new NotImplementedException();
+      }
+    }
+
+    public override RealVector ReferencePoint {
+      get { return new RealVector(new double[] { 11.0, 11.0 }); }
+    }
+
+    public override double BestKnownHypervolume {
+      get { return 121.0 - 1.0 / 4.0 *Math.PI; }
+    }
+
     [StorableConstructor]
     protected DTLZ2(bool deserializing) : base(deserializing) { }
Index: branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/DTLZ3.cs
===================================================================
--- branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/DTLZ3.cs	(revision 13451)
+++ branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/DTLZ3.cs	(revision 13515)
@@ -1,17 +1,11 @@
 ﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
 using HeuristicLab.Encodings.RealVectorEncoding;
-using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Problems.MultiObjectiveTestFunction;
 
-namespace HeuristicLab.Problems.TestFunctions {
-  [Item("DTLZ3", " http://repository.ias.ac.in/81671/ [30.11.15]")]
+namespace HeuristicLab.Problems.MultiObjectiveTestFunctions {
+  [Item("DTLZ3", "Testfunction as defined as DTLZ3 in http://repository.ias.ac.in/81671/ [30.11.15]")]
   [StorableClass]
   public class DTLZ3 : MultiObjectiveTestFunction {
@@ -65,4 +59,18 @@
     }
 
+    public override RealVector[] OptimalParetoFront {
+      get {
+        throw new NotImplementedException();
+      }
+    }
+
+    public override RealVector ReferencePoint {
+      get { return new RealVector(new double[] { 11.0, 11.0 }); }
+    }
+
+    public override double BestKnownHypervolume {
+      get { return 121.0 - 1.0 / 4.0 * Math.PI; }
+    }
+
     [StorableConstructor]
     protected DTLZ3(bool deserializing) : base(deserializing) { }
Index: branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/DTLZ4.cs
===================================================================
--- branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/DTLZ4.cs	(revision 13451)
+++ branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/DTLZ4.cs	(revision 13515)
@@ -1,17 +1,11 @@
 ﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
 using HeuristicLab.Encodings.RealVectorEncoding;
-using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Problems.MultiObjectiveTestFunction;
 
-namespace HeuristicLab.Problems.TestFunctions {
-  [Item("DTLZ4", " http://repository.ias.ac.in/81671/ [30.11.15]")]
+namespace HeuristicLab.Problems.MultiObjectiveTestFunctions {
+  [Item("DTLZ4", "Testfunction as defined as DTLZ4 in http://repository.ias.ac.in/81671/ [30.11.15]")]
   [StorableClass]
   public class DTLZ4 : MultiObjectiveTestFunction {
@@ -65,4 +59,18 @@
     }
 
+    public override RealVector[] OptimalParetoFront {
+      get {
+        throw new NotImplementedException();
+      }
+    }
+
+    public override RealVector ReferencePoint {
+      get { return new RealVector(new double[] { 11.0, 11.0 }); }
+    }
+
+    public override double BestKnownHypervolume {
+      get { return 121.0 - 1.0 / 4.0 * Math.PI; }
+    }
+
     [StorableConstructor]
     protected DTLZ4(bool deserializing) : base(deserializing) { }
Index: branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/DTLZ5.cs
===================================================================
--- branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/DTLZ5.cs	(revision 13451)
+++ branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/DTLZ5.cs	(revision 13515)
@@ -1,17 +1,11 @@
 ﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
 using HeuristicLab.Encodings.RealVectorEncoding;
-using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Problems.MultiObjectiveTestFunction;
 
-namespace HeuristicLab.Problems.TestFunctions {
-  [Item("DTLZ5", " http://repository.ias.ac.in/81671/ [30.11.15]")]
+namespace HeuristicLab.Problems.MultiObjectiveTestFunctions {
+  [Item("DTLZ5", "Testfunction as defined as DTLZ5 in http://repository.ias.ac.in/81671/ [30.11.15]")]
   [StorableClass]
   public class DTLZ5 : MultiObjectiveTestFunction {
@@ -65,4 +59,10 @@
     }
 
+    public override RealVector[] OptimalParetoFront {
+      get {
+        throw new NotImplementedException();
+      }
+    }
+
     [StorableConstructor]
     protected DTLZ5(bool deserializing) : base(deserializing) { }
@@ -94,5 +94,5 @@
       //phi definition
       Func<double, double> phi;
-      phi = (double x) => { return Math.PI / (4 * 1 + g) * (1 + 2 * g * x); };
+      phi = (double x) => { return Math.PI / (4 * (1 + g)) * (1 + 2 * g * x); };
 
       //calculating f0...fM-1
Index: branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/DTLZ6.cs
===================================================================
--- branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/DTLZ6.cs	(revision 13451)
+++ branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/DTLZ6.cs	(revision 13515)
@@ -1,17 +1,11 @@
 ﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
 using HeuristicLab.Encodings.RealVectorEncoding;
-using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Problems.MultiObjectiveTestFunction;
 
-namespace HeuristicLab.Problems.TestFunctions {
-  [Item("DTLZ6", " http://repository.ias.ac.in/81671/ [30.11.15]")]
+namespace HeuristicLab.Problems.MultiObjectiveTestFunctions {
+  [Item("DTLZ6", "Testfunction as defined as DTLZ6 in http://repository.ias.ac.in/81671/ [30.11.15] NOTE: The website http://people.ee.ethz.ch/~sop/download/supplementary/testproblems/dtlz7/index.php [16.12.2015] lables this function as DTLZ7")]
   [StorableClass]
   public class DTLZ6 : MultiObjectiveTestFunction {
@@ -65,4 +59,18 @@
     }
 
+    public override RealVector[] OptimalParetoFront {
+      get {
+        throw new NotImplementedException();
+      }
+    }
+    public override RealVector ReferencePoint {
+      get { return new RealVector(new double[] { 11.0, 11.0 }); }
+    }
+
+    public override double BestKnownHypervolume {
+      get { return 116.1138716447221; }
+    }
+
+
     [StorableConstructor]
     protected DTLZ6(bool deserializing) : base(deserializing) { }
Index: branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/DTLZ7.cs
===================================================================
--- branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/DTLZ7.cs	(revision 13451)
+++ branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/DTLZ7.cs	(revision 13515)
@@ -1,17 +1,11 @@
 ﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
 using HeuristicLab.Encodings.RealVectorEncoding;
-using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Problems.MultiObjectiveTestFunction;
 
-namespace HeuristicLab.Problems.TestFunctions {
-  [Item("DTLZ7", " http://repository.ias.ac.in/81671/ [30.11.15]")]
+namespace HeuristicLab.Problems.MultiObjectiveTestFunctions {
+  [Item("DTLZ7", "Testfunction as defined as DTLZ7 in http://repository.ias.ac.in/81671/ [30.11.15]")]
   [StorableClass]
   public class DTLZ7 : MultiObjectiveTestFunction {
@@ -65,4 +59,15 @@
     }
 
+    public override RealVector[] OptimalParetoFront {
+      get {
+        throw new NotImplementedException();
+      }
+    }
+
+    public override RealVector ReferencePoint {
+      get { return new RealVector(new double[] { 11.0, 11.0 }); }
+    }
+
+
     [StorableConstructor]
     protected DTLZ7(bool deserializing) : base(deserializing) { }
Index: branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/Evaluators.cs
===================================================================
--- branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/Evaluators.cs	(revision 13451)
+++ branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/Evaluators.cs	(revision 13515)
@@ -7,4 +7,8 @@
 
 namespace HeuristicLab.Problems.MultiObjectiveTestFunctions.Testfunctions {
+
+  /// <summary>
+  /// unused class
+  /// </summary>
   class Evaluators {
 
Index: branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/Fonseca.cs
===================================================================
--- branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/Fonseca.cs	(revision 13451)
+++ branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/Fonseca.cs	(revision 13515)
@@ -1,7 +1,3 @@
 ﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -9,8 +5,7 @@
 using HeuristicLab.Encodings.RealVectorEncoding;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Problems.MultiObjectiveTestFunction;
 
-namespace HeuristicLab.Problems.TestFunctions {
-  [Item("Fonseca", "from // https://en.wikipedia.org/wiki/Test_functions_for_optimization [30.11.2015]")]
+namespace HeuristicLab.Problems.MultiObjectiveTestFunctions {
+  [Item("Fonseca", "Fonseca and Flemming function from // https://en.wikipedia.org/wiki/Test_functions_for_optimization [30.11.2015]")]
   [StorableClass]
   public class Fonseca : MultiObjectiveTestFunction {
@@ -61,4 +56,15 @@
     }
 
+    public override RealVector[] OptimalParetoFront {
+      get {
+        return PFReader.getFromFile("Fonseca");
+      }
+    }
+    public override double BestKnownHypervolume {
+      get {
+        return new Hypervolume(base.ReferencePoint,Maximization).GetHypervolume(OptimalParetoFront) ;
+      }
+    }
+
     [StorableConstructor]
     protected Fonseca(bool deserializing) : base(deserializing) { }
Index: branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/Kursawe.cs
===================================================================
--- branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/Kursawe.cs	(revision 13451)
+++ branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/Kursawe.cs	(revision 13515)
@@ -1,7 +1,3 @@
 ﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -9,8 +5,7 @@
 using HeuristicLab.Encodings.RealVectorEncoding;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Problems.MultiObjectiveTestFunction;
 
-namespace HeuristicLab.Problems.TestFunctions {
-  [Item("Kursawe", "from // http://darwin.di.uminho.pt/jecoli/index.php/Multiobjective_example [30.11.2015]")]
+namespace HeuristicLab.Problems.MultiObjectiveTestFunctions {
+  [Item("Kursawe", "Kursawe function from // http://darwin.di.uminho.pt/jecoli/index.php/Multiobjective_example [30.11.2015]")]
   [StorableClass]
   public class Kursawe : MultiObjectiveTestFunction {
@@ -61,4 +56,15 @@
     }
 
+    public override RealVector[] OptimalParetoFront {
+      get {
+        return PFReader.getFromFile("Kursawe");
+      }
+    }
+    public override double BestKnownHypervolume {
+      get {
+        return new Hypervolume(base.ReferencePoint, Maximization).GetHypervolume(OptimalParetoFront);
+      }
+    }
+
     [StorableConstructor]
     protected Kursawe(bool deserializing) : base(deserializing) { }
@@ -75,10 +81,10 @@
       //objective 1
       double f0 = 0.0;
-      for (int i = 0; i < 2; i++) {
+      for (int i = 0; i < r.Length-1; i++) {
         f0 += -10 * Math.Exp(-0.2 * Math.Sqrt(r[i] * r[i] + r[i + 1] * r[i + 1]));
       }
       //objective2
       double f1 = 0.0;
-      for (int i = 0; i < 3; i++) {
+      for (int i = 0; i < r.Length; i++) {
         f1 += Math.Pow(Math.Abs(r[i]), 0.8) + 5 * Math.Sin(Math.Pow(r[i], 3));
       }
Index: branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/MultiObjectiveTestFunction.cs
===================================================================
--- branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/MultiObjectiveTestFunction.cs	(revision 13451)
+++ branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/MultiObjectiveTestFunction.cs	(revision 13515)
@@ -27,5 +27,5 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
-namespace HeuristicLab.Problems.TestFunctions {
+namespace HeuristicLab.Problems.MultiObjectiveTestFunctions {
   /// <summary>
   /// Base class for a test function evaluator.
@@ -77,4 +77,21 @@
     public abstract int MaximumSolutionSize { get; }
 
+    /// <summary>
+    /// retrieves the optimal pareto front (if known from a file)
+    /// </summary>
+    public abstract RealVector[] OptimalParetoFront { get; }
+
+    public virtual RealVector ReferencePoint {
+      get {
+        return new RealVector(new double[]{ 11,11});
+      }
+    }
+
+    public virtual double BestKnownHypervolume {
+      get {
+        return 0;
+      }
+    }
+
     [StorableConstructor]
     protected MultiObjectiveTestFunction(bool deserializing) : base(deserializing) { }
Index: branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/SchafferN1.cs
===================================================================
--- branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/SchafferN1.cs	(revision 13451)
+++ branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/SchafferN1.cs	(revision 13515)
@@ -1,16 +1,10 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using HeuristicLab.Common;
+﻿using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
 using HeuristicLab.Encodings.RealVectorEncoding;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Problems.MultiObjectiveTestFunction;
 
-namespace HeuristicLab.Problems.TestFunctions {
-  [Item("SchafferN1", "from // https://en.wikipedia.org/wiki/Test_functions_for_optimization [30.11.2015]")]
+namespace HeuristicLab.Problems.MultiObjectiveTestFunctions {
+  [Item("SchafferN1", "Schaffer function N.1 for mulitobjective optimization from // https://en.wikipedia.org/wiki/Test_functions_for_optimization [30.11.2015]")]
   [StorableClass]
   public class SchafferN1 : MultiObjectiveTestFunction {
@@ -61,4 +55,15 @@
     }
 
+    public override RealVector[] OptimalParetoFront {
+      get {
+        return PFReader.getFromFile("SchafferN1");
+      }
+    }
+    public override double BestKnownHypervolume {
+      get {
+        return new Hypervolume(base.ReferencePoint, Maximization).GetHypervolume(OptimalParetoFront);
+      }
+    }
+
     [StorableConstructor]
     protected SchafferN1(bool deserializing) : base(deserializing) { }
Index: branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/SchafferN2.cs
===================================================================
--- branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/SchafferN2.cs	(revision 13451)
+++ branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/SchafferN2.cs	(revision 13515)
@@ -1,7 +1,3 @@
 ﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -9,8 +5,7 @@
 using HeuristicLab.Encodings.RealVectorEncoding;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Problems.MultiObjectiveTestFunction;
 
-namespace HeuristicLab.Problems.TestFunctions {
-  [Item("SchafferN2", "from // https://en.wikipedia.org/wiki/Test_functions_for_optimization [30.11.2015]")]
+namespace HeuristicLab.Problems.MultiObjectiveTestFunctions {
+  [Item("SchafferN2", "Schaffer function N.2 for mulitobjective optimization from // https://en.wikipedia.org/wiki/Test_functions_for_optimization [30.11.2015]")]
   [StorableClass]
   public class SchafferN2 : MultiObjectiveTestFunction {
@@ -61,4 +56,10 @@
     }
 
+    public override RealVector[] OptimalParetoFront {
+      get {
+        throw new NotImplementedException();
+      }
+    }
+
     [StorableConstructor]
     protected SchafferN2(bool deserializing) : base(deserializing) { }
Index: branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/ZDT1.cs
===================================================================
--- branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/ZDT1.cs	(revision 13451)
+++ branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/ZDT1.cs	(revision 13515)
@@ -1,7 +1,3 @@
 ﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -9,8 +5,7 @@
 using HeuristicLab.Encodings.RealVectorEncoding;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Problems.MultiObjectiveTestFunction;
 
-namespace HeuristicLab.Problems.TestFunctions {
-  [Item("ZDT1", "//http://www.tik.ee.ethz.ch/sop/download/supplementary/testproblems/ [30.11.2015]")]
+namespace HeuristicLab.Problems.MultiObjectiveTestFunctions {
+  [Item("ZDT1", "ZDT1 function as defined in http://www.tik.ee.ethz.ch/sop/download/supplementary/testproblems/ [30.11.2015]")]
   [StorableClass]
   public class ZDT1 : MultiObjectiveTestFunction {
@@ -61,4 +56,18 @@
     }
 
+    public override RealVector[] OptimalParetoFront {
+      get {
+        throw new NotImplementedException();
+      }
+    }
+
+    public override RealVector ReferencePoint {
+      get { return new RealVector(new double[]{ 11.0, 11.0}); }
+    }
+
+    public override double BestKnownHypervolume {
+      get { return 120 + 2.0 / 3; }
+    }
+
     [StorableConstructor]
     protected ZDT1(bool deserializing) : base(deserializing) { }
Index: branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/ZDT2.cs
===================================================================
--- branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/ZDT2.cs	(revision 13451)
+++ branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/ZDT2.cs	(revision 13515)
@@ -1,7 +1,3 @@
 ﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -9,8 +5,7 @@
 using HeuristicLab.Encodings.RealVectorEncoding;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Problems.MultiObjectiveTestFunction;
 
-namespace HeuristicLab.Problems.TestFunctions {
-  [Item("ZDT2", "//http://www.tik.ee.ethz.ch/sop/download/supplementary/testproblems/ [30.11.2015]")]
+namespace HeuristicLab.Problems.MultiObjectiveTestFunctions {
+  [Item("ZDT2", "ZDT2 function as defined in http://www.tik.ee.ethz.ch/sop/download/supplementary/testproblems/ [30.11.2015]")]
   [StorableClass]
   public class ZDT2 : MultiObjectiveTestFunction {
@@ -60,4 +55,17 @@
     }
 
+    public override RealVector[] OptimalParetoFront {
+      get {
+        throw new NotImplementedException();
+      }
+    }
+    public override RealVector ReferencePoint {
+      get { return new RealVector(new double[] { 11.0, 11.0 }); }
+    }
+
+    public override double BestKnownHypervolume {
+      get { return 120+1.0/3; }
+    }
+
     [StorableConstructor]
     protected ZDT2(bool deserializing) : base(deserializing) { }
Index: branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/ZDT3.cs
===================================================================
--- branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/ZDT3.cs	(revision 13451)
+++ branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/ZDT3.cs	(revision 13515)
@@ -1,7 +1,3 @@
 ﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -9,8 +5,7 @@
 using HeuristicLab.Encodings.RealVectorEncoding;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Problems.MultiObjectiveTestFunction;
 
-namespace HeuristicLab.Problems.TestFunctions {
-  [Item("ZDT3", "//http://www.tik.ee.ethz.ch/sop/download/supplementary/testproblems/ [30.11.2015]")]
+namespace HeuristicLab.Problems.MultiObjectiveTestFunctions {
+  [Item("ZDT3", "ZDT3 function as defined in http://www.tik.ee.ethz.ch/sop/download/supplementary/testproblems/ [30.11.2015]")]
   [StorableClass]
   public class ZDT3 : MultiObjectiveTestFunction {
@@ -61,4 +56,18 @@
     }
 
+    public override RealVector[] OptimalParetoFront {
+      get {
+        throw new NotImplementedException();
+      }
+    }
+
+    public override RealVector ReferencePoint {
+      get { return new RealVector(new double[] { 11.0, 11.0 }); }
+    }
+
+    public override double BestKnownHypervolume {
+      get { return 128.77811613069076060; }
+    }
+
     [StorableConstructor]
     protected ZDT3(bool deserializing) : base(deserializing) { }
Index: branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/ZDT4.cs
===================================================================
--- branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/ZDT4.cs	(revision 13451)
+++ branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/ZDT4.cs	(revision 13515)
@@ -1,7 +1,3 @@
 ﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -9,8 +5,7 @@
 using HeuristicLab.Encodings.RealVectorEncoding;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Problems.MultiObjectiveTestFunction;
 
-namespace HeuristicLab.Problems.TestFunctions {
-  [Item("ZDT4", "//http://www.tik.ee.ethz.ch/sop/download/supplementary/testproblems/ [30.11.2015]")]
+namespace HeuristicLab.Problems.MultiObjectiveTestFunctions {
+  [Item("ZDT4", "ZDT4 function as defined in http://www.tik.ee.ethz.ch/sop/download/supplementary/testproblems/ [30.11.2015]")]
   [StorableClass]
   public class ZDT4 : MultiObjectiveTestFunction {
@@ -61,4 +56,18 @@
     }
 
+    public override RealVector[] OptimalParetoFront {
+      get {
+        throw new NotImplementedException();
+      }
+    }
+
+    public override RealVector ReferencePoint {
+      get { return new RealVector(new double[] { 11.0, 11.0 }); }
+    }
+
+    public override double BestKnownHypervolume {
+      get { return 120+2.0/3; }
+    }
+
     [StorableConstructor]
     protected ZDT4(bool deserializing) : base(deserializing) { }
Index: branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/ZDT6.cs
===================================================================
--- branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/ZDT6.cs	(revision 13451)
+++ branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/ZDT6.cs	(revision 13515)
@@ -1,7 +1,3 @@
 ﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -9,8 +5,7 @@
 using HeuristicLab.Encodings.RealVectorEncoding;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Problems.MultiObjectiveTestFunction;
 
-namespace HeuristicLab.Problems.TestFunctions {
-  [Item("ZDT6", "//http://www.tik.ee.ethz.ch/sop/download/supplementary/testproblems/ [30.11.2015]")]
+namespace HeuristicLab.Problems.MultiObjectiveTestFunctions {
+  [Item("ZDT6", "ZDT6 function as defined in http://www.tik.ee.ethz.ch/sop/download/supplementary/testproblems/ [30.11.2015]")]
   [StorableClass]
   public class ZDT6 : MultiObjectiveTestFunction {
@@ -61,4 +56,19 @@
     }
 
+    public override RealVector[] OptimalParetoFront {
+      get {
+        throw new NotImplementedException();
+      }
+    }
+
+    public override RealVector ReferencePoint {
+      get { return new RealVector(new double[] { 11.0, 11.0 }); }
+    }
+
+
+    public override double BestKnownHypervolume {
+      get{ return 119.51857519692037009; }
+    }
+
     [StorableConstructor]
     protected ZDT6(bool deserializing) : base(deserializing) { }
