README.md

bbotk - Black-Box Optimization Toolkit

Package website: release \| dev

r-cmd-check CRAN Status
Badge Mattermost

bbotk is a black-box optimization framework for R. It features highly configurable search spaces via the paradox package and optimizes every user-defined objective function. The package includes several optimization algorithms e.g. Random Search, Iterated Racing, Bayesian Optimization (in mlr3mbo) and Hyperband (in mlr3hyperband). bbotk is the base package of mlr3tuning, mlr3fselect and miesmuschel.

The package includes the basic building blocks of optimization:

Resources

Installation

Install the last release from CRAN:

install.packages("bbotk")

Install the development version from GitHub:

remotes::install_github("mlr-org/bbotk")

Examples

Optimization

# define the objective function
fun = function(xs) {
  - (xs[[1]] - 2)^2 - (xs[[2]] + 3)^2 + 10
}

# set domain
domain = ps(
  x1 = p_dbl(-10, 10),
  x2 = p_dbl(-5, 5)
)

# set codomain
codomain = ps(
  y = p_dbl(tags = "maximize")
)

# create Objective object
objective = ObjectiveRFun$new(
  fun = fun,
  domain = domain,
  codomain = codomain,
  properties = "deterministic"
)

# Define termination criterion
terminator = trm("evals", n_evals = 10)

# create optimization instance
instance = OptimInstanceSingleCrit$new(
  objective = objective,
  terminator = terminator
)

# load optimizer
optimizer = opt("gensa")

# trigger optimization
optimizer$optimize(instance)
##        x1        x2  x_domain        y
## 1: 2.0452 -2.064743 <list[2]> 9.123252
# best performing configuration
instance$result
##        x1        x2  x_domain        y
## 1: 2.0452 -2.064743 <list[2]> 9.123252
# all evaluated configuration
as.data.table(instance$archive)
##            x1        x2          y           timestamp batch_nr x_domain_x1 x_domain_x2
##  1: -4.689827 -1.278761 -37.716445 2023-11-13 10:35:33        1   -4.689827   -1.278761
##  2: -5.930364 -4.400474 -54.851999 2023-11-13 10:35:33        2   -5.930364   -4.400474
##  3:  7.170817 -1.519948 -18.927907 2023-11-13 10:35:33        3    7.170817   -1.519948
##  4:  2.045200 -1.519948   7.807403 2023-11-13 10:35:33        4    2.045200   -1.519948
##  5:  2.045200 -2.064742   9.123250 2023-11-13 10:35:33        5    2.045200   -2.064742
##  6:  2.045200 -2.064742   9.123250 2023-11-13 10:35:33        6    2.045200   -2.064742
##  7:  2.045201 -2.064742   9.123250 2023-11-13 10:35:33        7    2.045201   -2.064742
##  8:  2.045199 -2.064742   9.123250 2023-11-13 10:35:33        8    2.045199   -2.064742
##  9:  2.045200 -2.064741   9.123248 2023-11-13 10:35:33        9    2.045200   -2.064741
## 10:  2.045200 -2.064743   9.123252 2023-11-13 10:35:33       10    2.045200   -2.064743

Quick optimization with bb_optimize

library(bbotk)

# define the objective function
fun = function(xs) {
  c(y1 = - (xs[[1]] - 2)^2 - (xs[[2]] + 3)^2 + 10)
}

# optimize function with random search
result = bb_optimize(fun, method = "random_search", lower = c(-10, -5), upper = c(10, 5),
  max_evals = 100)

# optimized parameters
result$par
##           x1       x2
## 1: -7.982537 4.273021
# optimal outcome
result$value
##        y1 
## -142.5479


Try the bbotk package in your browser

Any scripts or data that you put into this service are public.

bbotk documentation built on Nov. 13, 2023, 5:06 p.m.