Skip to contents

Computes the hypervolume contribution of each point given a set of points with respect to a given reference point assuming minimization of all objectives. Dominated points have zero contribution. Duplicated points have zero contribution even if not dominated, because removing one of them does not change the hypervolume dominated by the remaining set.

Usage

hv_contributions(data, reference, maximise = FALSE)

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.

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.

Value

(numeric) A numerical vector

References

Carlos M. Fonseca, Luís Paquete, Manuel López-Ibáñez (2006). “An improved dimension-sweep algorithm for the hypervolume indicator.” In Proceedings of the 2006 Congress on Evolutionary Computation (CEC 2006), 1157--1163. IEEE Press, Piscataway, NJ. doi:10.1109/CEC.2006.1688440 .

Nicola Beume, Carlos M. Fonseca, Manuel López-Ibáñez, Luís Paquete, Jan Vahrenhold (2009). “On the complexity of computing the hypervolume indicator.” IEEE Transactions on Evolutionary Computation, 13(5), 1075--1082. doi:10.1109/TEVC.2009.2015575 .

See also

Author

Manuel López-Ibáñez

Examples


data(SPEA2minstoptimeRichmond)
# The second objective must be maximized
# We calculate the hypervolume contribution of each point of the union of all sets.
hv_contributions(SPEA2minstoptimeRichmond[, 1:2], reference = c(250, 0),
            maximise = c(FALSE, TRUE))
#>   [1]     0.000     0.000     0.000     0.000     0.000     0.000     0.000
#>   [8]     0.000     0.000     0.000     0.000     0.000     0.000     0.000
#>  [15]     0.000     0.000     0.000     0.000     0.000     0.000     0.000
#>  [22]     0.000     4.380     0.000     0.000     0.000     0.000     0.000
#>  [29]     0.000     0.000     0.000     0.000     0.000     0.000     0.000
#>  [36]     0.000     0.000     0.000     0.000     0.000     0.000     0.000
#>  [43]     0.000     0.000     0.000     0.000     0.000     0.000  6397.052
#>  [50]  1945.800  3386.197     0.000     0.000     0.000     0.000     0.000
#>  [57]     0.000     0.000     0.000     0.000     0.000     0.000     0.000
#>  [64]     0.000     0.000     0.000     0.000     0.000     0.000     0.000
#>  [71]    26.255     0.000     0.000     0.000     0.000     0.000     0.000
#>  [78]     0.000     0.000     0.000     0.000     0.000     0.000     0.000
#>  [85]     0.000     0.000     0.000     0.000     0.000     0.000     0.000
#>  [92]     0.000    15.840     0.000     0.000     0.066     0.000     0.000
#>  [99]     0.000     0.000     0.000     0.000     0.000     0.000     0.000
#> [106]     0.000     0.000     0.000     0.000     0.000     0.000     0.000
#> [113]     0.000     0.000     0.000     0.000     0.000     0.000     0.000
#> [120]     0.000  3069.000   779.240     0.000     0.000     0.000     0.000
#> [127]     0.000     0.000     0.000     0.000     0.000 12428.431     0.000
#> [134]     0.000     0.000     0.000     0.000     0.000     0.000     0.000
#> [141]     0.000     0.000     0.000     0.000     0.000     0.000     0.000
#> [148]     0.000     0.000     0.000     0.000     0.000     0.000     0.000
#> [155]     0.000     0.000     0.000     0.000     0.000  2294.064     0.000
#> [162]     0.000     0.000     0.000     0.000     0.000

# Duplicated points show zero contribution above, even if not
# dominated. However, filter_dominated removes all duplicates except
# one. Hence, there are more points below with nonzero contribution.
hv_contributions(filter_dominated(SPEA2minstoptimeRichmond[, 1:2], maximise = c(FALSE, TRUE)),
                 reference = c(250, 0), maximise = c(FALSE, TRUE))
#>  [1]      8.197  89283.920   7959.940   1945.800   8147.132     26.255
#>  [7] 255278.978   3698.640   2242.660      5.971   3069.000    779.240
#> [13]  41994.755   2294.064     73.054 193143.324