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(x, reference, maximise = FALSE)

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

References

FonPaqLop06:hypervolumemoocore

BeuFonLopPaqVah09:tecmoocore

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