Skip to content

Hypervolume

Method
FrontContainer
Exact Hypervolume
dimension_type hypervolume() const
dimension_type hypervolume(key_type reference_point) const
Monte-Carlo Hypervolume
dimension_type hypervolume(size_t sample_size) const
dimension_type hypervolume(size_t sample_size, const key_type &reference_point) const

Parameters

  • reference_point - point used as reference for the hypervolume calculation. When not provided, it defaults to the nadir() point.
  • sample_size - number of samples for the hypervolume estimate

Return value

  • Hypervolume indicator

Complexity

  • Exact hypervolume: \(O(n^{m-2} \log n)\)
  • Monte-Carlo hypervolume approximation: \(O(s m \log n)\), where \(s\) is the number of samples

Notes

Because the solutions in a front are incomparable, we need performance indicators to infer the quality of a front. Indicators can measure several front attributes, such as cardinality, convergence, distribution, and spread. Correlation indicators can also estimate the relationship between objectives in a set.

The most popular indicator of a front quality is its hypervolume, as it measures both convergence and distribution quality. The front hypervolume refers to the total hypervolume dominated by the front.

Hypervolume Approximation

When \(m\) is large, the exact hypervolume calculation becomes impractical. Our benchmarks provide a reference on the impact of these approximations.

Example

Continuing from the previous example:

1
2
std::cout << "Exact hypervolume: " << pf.hypervolume(pf.nadir()) << std::endl;
std::cout << "Hypervolume approximation (10000 samples): " << pf.hypervolume(10000, pf.nadir()) << std::endl;
1
2
print('Exact hypervolume:', pf.hypervolume(pf.nadir()))
print('Hypervolume approximation (10000 samples):', pf.hypervolume(10000, pf.nadir()))
1
2
Exact hypervolume: 55.4029
Hypervolume approximation (10000 samples): 54.4734