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.
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 .
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