mlr_acqfunctions_ehvigh: Acquisition Function Expected Hypervolume Improvement via...

mlr_acqfunctions_ehvighR Documentation

Acquisition Function Expected Hypervolume Improvement via Gauss-Hermite Quadrature

Description

Expected Hypervolume Improvement. Computed via Gauss-Hermite quadrature.

In the case of optimizing only two objective functions AcqFunctionEHVI is to be preferred.

Parameters

  • "k" (integer(1))
    Number of nodes per objective used for the numerical integration via Gauss-Hermite quadrature. Defaults to 15. For example, if two objectives are to be optimized, the total number of nodes will therefore be 225 per default. Changing this value after construction requires a call to ⁠$update()⁠ to update the ⁠$gh_data⁠ field.

  • "r" (numeric(1))
    Pruning rate between 0 and 1 that determines the fraction of nodes of the Gauss-Hermite quadrature rule that are ignored based on their weight value (the nodes with the lowest weights being ignored). Default is 0.2. Changing this value after construction does not require a call to ⁠$update()⁠.

Super classes

bbotk::Objective -> mlr3mbo::AcqFunction -> AcqFunctionEHVIGH

Public fields

ys_front

(matrix())
Approximated Pareto front. Signs are corrected with respect to assuming minimization of objectives.

ref_point

(numeric())
Reference point. Signs are corrected with respect to assuming minimization of objectives.

hypervolume

(numeric(1)). Current hypervolume of the approximated Pareto front with respect to the reference point.

gh_data

(matrix())
Data required for the Gauss-Hermite quadrature rule in the form of a matrix of dimension (k x 2). Each row corresponds to one Gauss-Hermite node (column "x") and corresponding weight (column "w"). Computed via fastGHQuad::gaussHermiteData. Nodes are scaled by a factor of sqrt(2) and weights are normalized under a sum to one constraint.

Methods

Public methods

Inherited methods

Method new()

Creates a new instance of this R6 class.

Usage
AcqFunctionEHVIGH$new(surrogate = NULL, k = 15L, r = 0.2)
Arguments
surrogate

(NULL | SurrogateLearnerCollection).

k

(integer(1)).

r

(numeric(1)).


Method update()

Update the acquisition function and set ys_front, ref_point, hypervolume and gh_data.

Usage
AcqFunctionEHVIGH$update()

Method clone()

The objects of this class are cloneable with this method.

Usage
AcqFunctionEHVIGH$clone(deep = FALSE)
Arguments
deep

Whether to make a deep clone.

References

  • Rahat, Alma, Chugh, Tinkle, Fieldsend, Jonathan, Allmendinger, Richard, Miettinen, Kaisa (2022). “Efficient Approximation of Expected Hypervolume Improvement using Gauss-Hermit Quadrature.” In Rudolph, Günter, Kononova, V. A, Aguirre, Hernán, Kerschke, Pascal, Ochoa, Gabriela, Tušar, Tea (eds.), Parallel Problem Solving from Nature – PPSN XVII, 90–103.

See Also

Other Acquisition Function: AcqFunction, mlr_acqfunctions, mlr_acqfunctions_aei, mlr_acqfunctions_cb, mlr_acqfunctions_ehvi, mlr_acqfunctions_ei, mlr_acqfunctions_eips, mlr_acqfunctions_mean, mlr_acqfunctions_multi, mlr_acqfunctions_pi, mlr_acqfunctions_sd, mlr_acqfunctions_smsego

Examples

if (requireNamespace("mlr3learners") &
    requireNamespace("DiceKriging") &
    requireNamespace("rgenoud")) {
  library(bbotk)
  library(paradox)
  library(mlr3learners)
  library(data.table)

  fun = function(xs) {
    list(y1 = xs$x^2, y2 = (xs$x - 2) ^ 2)
  }
  domain = ps(x = p_dbl(lower = -10, upper = 10))
  codomain = ps(y1 = p_dbl(tags = "minimize"), y2 = p_dbl(tags = "minimize"))
  objective = ObjectiveRFun$new(fun = fun, domain = domain, codomain = codomain)

  instance = OptimInstanceBatchMultiCrit$new(
    objective = objective,
    terminator = trm("evals", n_evals = 5))

  instance$eval_batch(data.table(x = c(-6, -5, 3, 9)))

  learner = default_gp()

  surrogate = srlrn(list(learner, learner$clone(deep = TRUE)), archive = instance$archive)

  acq_function = acqf("ehvigh", surrogate = surrogate)

  acq_function$surrogate$update()
  acq_function$update()
  acq_function$eval_dt(data.table(x = c(-1, 0, 1)))
}

mlr3mbo documentation built on Oct. 17, 2024, 1:06 a.m.