Skip to contents

Return an estimation of the hypervolume of the space dominated by the input data following the procedure described by Auger et al. (2009) . A weight distribution describing user preferences may be specified.

Usage

whv_hype(
  data,
  reference,
  ideal,
  maximise = FALSE,
  dist = list(type = "uniform"),
  nsamples = 100000L
)

Arguments

data

(matrix | data.frame)
Matrix or data frame of numerical values, where each row gives the coordinates of a point.

reference

(numeric())
Reference point as a vector of numerical values.

ideal

(numeric())
Ideal point as a vector of numerical values.

maximise

(logical() | logical(1))
Whether the objectives must be maximised instead of minimised. Either a single logical value that applies to all objectives or a vector of logical values, with one value per objective.

dist

(list()) weight distribution. See Details.

nsamples

(integer(1)) number of samples for Monte-Carlo sampling.

Value

A single numerical value.

Details

The current implementation only supports 2 objectives.

A weight distribution (Auger et al. 2009) can be provided via the dist argument. The ones currently supported are:

  • type="uniform" corresponds to the default hypervolume (unweighted).

  • type="point" describes a goal in the objective space, where mu gives the coordinates of the goal. The resulting weight distribution is a multivariate normal distribution centred at the goal.

  • type="exponential" describes an exponential distribution with rate parameter 1/mu, i.e., \(\lambda = \frac{1}{\mu}\).

References

Anne Auger, Johannes Bader, Dimo Brockhoff, Eckart Zitzler (2009). “Articulating User Preferences in Many-Objective Problems by Sampling the Weighted Hypervolume.” In Franz Rothlauf (ed.), Proceedings of the Genetic and Evolutionary Computation Conference, GECCO 2009, 555–562. ACM Press, New York, NY.

Examples


whv_hype (matrix(2, ncol=2), reference = 4, ideal = 1)
#> [1] 3.99231

whv_hype (matrix(c(3,1), ncol=2), reference = 4, ideal = 1)
#> [1] 2.99268

whv_hype (matrix(2, ncol=2), reference = 4, ideal = 1,
          dist = list(type="exponential", mu=0.2))
#> [1] 1.12887

whv_hype (matrix(c(3,1), ncol=2), reference = 4, ideal = 1,
          dist = list(type="exponential", mu=0.2))
#> [1] 1.6632

whv_hype (matrix(2, ncol=2), reference = 4, ideal = 1,
          dist = list(type="point", mu=c(1,1)))
#> [1] 0.8289

whv_hype (matrix(c(3,1), ncol=2), reference = 4, ideal = 1,
          dist = list(type="point", mu=c(1,1)))
#> [1] 0.03429