mlr-org / mlr3mbo

Flexible Bayesian Optimization in R
https://mlr3mbo.mlr-org.com
25 stars 1 forks source link

feat: add AcqFunctionMulti that can wrap multiple acquisition functions resulting in a multi-objective acquisition function problem #157

Closed sumny closed 3 weeks ago

sumny commented 3 weeks ago

Allows for stuff like:

library(bbotk)
library(mlr3mbo)
library(mlr3learners)

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

instance = oi(
  objective = obfun,
  terminator = trm("evals", n_evals = 10))

surrogate = srlrn(lrn("regr.km", control = list(trace = FALSE)))
acqfun = acqf("multi", acqfs(c("ei", "pi", "cb")))
acqopt = acqo(opt("random_search", batch_size = 100),
  terminator = trm("evals", n_evals = 100))

optimizer = opt("mbo",
  loop_function = bayesopt_ego,
  surrogate = surrogate,
  acq_function = acqfun,
  acq_optimizer = acqopt)

optimizer$optimize(instance)

also works "out of the box" for multi-criteria optimization with multiple acquisition functions.

ToDOs: