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
- x
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()
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
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] 89283.920 255278.978 8.197 2242.660 7959.940 1945.800
#> [7] 8147.132 73.054 26.255 3698.640 5.971 193143.324
#> [13] 3069.000 779.240 41994.755 2294.064