Calculates the hypervolume weighted by a set of rectangles (with zero weight outside the rectangles). The function total_whv_rect()
calculates the total weighted hypervolume as hypervolume()
+ scalefactor * abs(prod(reference - ideal)) * whv_rect()
. The details of the computation are given by Diaz and López-Ibáñez (2021)
.
Usage
whv_rect(data, rectangles, reference, maximise = FALSE)
total_whv_rect(
data,
rectangles,
reference,
maximise = FALSE,
ideal = NULL,
scalefactor = 0.1
)
Arguments
- data
(
matrix
|data.frame
)
Matrix or data frame of numerical values, where each row gives the coordinates of a point.- rectangles
(
matrix()
) Weighted rectangles that will bias the computation of the hypervolume. Maybe generated byeafdiff()
withrectangles=TRUE
or bychoose_eafdiff()
.- 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.- ideal
(
numeric()
)
Ideal point as a vector of numerical values. IfNULL
, it is calculated as minimum (resp. maximum if maximising that objective) of each objective indata
.- scalefactor
(
numeric(1)
) real value within \((0,1]\) that scales the overall weight of the differences. This is parameter psi (\(\psi\)) in Diaz and López-Ibáñez (2021) .
References
Juan Esteban Diaz, Manuel López-Ibáñez (2021). “Incorporating Decision-Maker's Preferences into the Automatic Configuration of Bi-Objective Optimisation Algorithms.” European Journal of Operational Research, 289(3), 1209–1222. doi:10.1016/j.ejor.2020.07.059 .
Examples
rectangles <- as.matrix(read.table(header=FALSE, text='
1.0 3.0 2.0 Inf 1
2.0 3.5 2.5 Inf 2
2.0 3.0 3.0 3.5 3
'))
whv_rect (matrix(2, ncol=2), rectangles, reference = 6)
#> [1] 4
whv_rect (matrix(c(2, 1), ncol=2), rectangles, reference = 6)
#> [1] 4
whv_rect (matrix(c(1, 2), ncol=2), rectangles, reference = 6)
#> [1] 7
total_whv_rect (matrix(2, ncol=2), rectangles, reference = 6, ideal = c(1,1))
#> [1] 26
total_whv_rect (matrix(c(2, 1), ncol=2), rectangles, reference = 6, ideal = c(1,1))
#> [1] 30
total_whv_rect (matrix(c(1, 2), ncol=2), rectangles, reference = 6, ideal = c(1,1))
#> [1] 37.5