knitr::opts_chunk$set(echo = TRUE)

Kind of working skeletton!

Dancing Skeletton

set.seed(1)
library(R6)
library(checkmate)
devtools::load_all()

SMBO

Basic Problem Definition:

fun = function(x) sqrt(x) * sin(x) # Alpine 02
search_space = ParamSet$new(params = list(ParamDbl$new("x", 0, 10)))
target_fun = TargetFun$new(fun, search_space)
design = generate_design_lhs(search_space, 5)
design = data.table(x = design$transpose())
design$y = target_fun$eval(design)

MBO Problem:

op = OptProblem$new(
  target_fun = target_fun,
  design = design,
  opt_iterator = OptIteratorBO$new(),
  opt_terminator = OptTerminatorSteps$new(5),
  surrogate_model = SurrogateModelGPfit$new(design = design),
  proposal_generator = ProposalGeneratorSingle$new(
    acq_optimizer = AcqOptimizerGenSA$new(control = list(maxit = 100)),
    acq_function = AcqFunctionCB$new(lambda = 2)
  )
)

res = bayopt(op)
res$surrogate_model$design
res$surrogate_model$predict(res$surrogate_model$design)
plot(res$surrogate_model$storage$model)
curve(fun(x*10), add = TRUE, col = "green") # GP_fit does some scaling

Multipoint MBO

Constant Liar

op = OptProblem$new(
  target_fun = target_fun,
  design = design,
  opt_iterator = OptIteratorBO$new(),
  opt_terminator = OptTerminatorSteps$new(5),
  surrogate_model = SurrogateModelGPfit$new(design = design),
  proposal_generator = ProposalGeneratorMultiCL$new(
    acq_optimizer = AcqOptimizerGenSA$new(control = list(maxit = 100)),
    acq_function = AcqFunctionCB$new(lambda = 2),
    n = 2,
    lie = "min"
  )
)

res = bayopt(op)

Ensemble

Combining multiple ProposalGeneratorSingle to a Multipoint Proposal.

acq_optimizer = AcqOptimizerGenSA$new(control = list(maxit = 100))

proposal_generators = lapply(c(1, 2, 4), function(x) {
  ProposalGeneratorSingle$new(
    acq_optimizer = acq_optimizer,
    acq_function = AcqFunctionCB$new(lambda = x)
  )
})

op = OptProblem$new(
  target_fun = target_fun,
  design = design,
  opt_iterator = OptIteratorBO$new(),
  opt_terminator = OptTerminatorSteps$new(5),
  surrogate_model = SurrogateModelGPfit$new(design = design),
  proposal_generator = ProposalGeneratorMultiEnsemble$new(
      proposal_generator_singles = proposal_generators
    )
)

res = bayopt(op)


jakob-r/BayOptR documentation built on June 3, 2019, 7:05 p.m.