Takes a matrix of fitness values and calculates the hypervolume improvement of individuals in that matrix, one by one, over the baseline individuals.

The hypervolume improvement for each point is the measure of all points that have fitnesses that are

  • greater than the respective value in nadir in all dimensions, and

  • smaller than the respective value in the given point in all dimensions, and

  • greater than all points in baseline in at least one dimension.

Individuals in fitnesses are considered independently of each other. A possible speedup is achieved because baseline individuals only need to be pre-filtered once.

domhv_improvement(fitnesses, baseline = NULL, nadir = 0)

Arguments

fitnesses

(numeric matrix)
fitness matrix, with one row per individual and one column per objective

baseline

(matrix | NULL)
Fitness-matrix with one column per objective, giving a population over which the hypervolume improvement should be calculated. If NULL, the hypervolume of each individual in fitnesses is calculated.

nadir

(numeric)
Lowest fitness point up to which to calculate dominated hypervolume. May be a scalar, in which case it is used for all dimensions, or a vector, in which case its length must match the number of dimensions. Default 0.

Value

numeric: The vector of dominated hypervolume contributions for each individual in fitnesses.

Examples

(fitnesses = matrix(c(1, 5, 2, 3, 0, 3, 1, 0, 10, 8), ncol = 2))
#>      [,1] [,2]
#> [1,]    1    3
#> [2,]    5    1
#> [3,]    2    0
#> [4,]    3   10
#> [5,]    0    8

# to see the fitness matrix, use:
## plot(fitnesses, pch = as.character(1:5))

domhv_improvement(fitnesses)
#> [1]  3  5  0 30  0

domhv_improvement(fitnesses, fitnesses[1, , drop = FALSE])
#> [1]  0  4  0 27  0