tests/testthat/test_InputTrafoUnitcube.R

test_that("InputTrafoUnitcube works", {
  instance = MAKE_INST_1D()
  design = generate_design_random(instance$search_space, n = 4L)$data
  instance$eval_batch(design)

  it = InputTrafoUnitcube$new()
  it$cols_x = instance$archive$cols_x
  it$search_space = instance$archive$search_space

  it$update(instance$archive$data)
  expect_list(it$state, len = 0L)
  data = instance$archive$data
  orig_data = copy(data)
  transformed_data = it$transform(data)
  expect_true(all(apply(transformed_data[, instance$archive$cols_x, with = FALSE], MARGIN = 2L, FUN = min) >= 0))
  expect_true(all(apply(transformed_data[, instance$archive$cols_x, with = FALSE], MARGIN = 2L, FUN = max) <= 1))
  expect_false(address(data) == address(transformed_data))
  expect_equal(data, orig_data)
})

test_that("InputTrafoUnitcube works with SurrogateLearner", {
  instance = MAKE_INST_1D()
  design = generate_design_random(instance$search_space, n = 4L)$data
  instance$eval_batch(design)

  surrogate = SurrogateLearner$new(REGR_KM_DETERM)
  surrogate$archive = instance$archive
  it = InputTrafoUnitcube$new()
  surrogate$input_trafo = it

  surrogate$update()
  expect_list(it$state, len = 0L)
  surrogate$predict(instance$archive$data)
})

test_that("InputTrafoUnitcube works with SurrogateLearnerCollection", {
  instance = MAKE_INST(OBJ_1D_2, search_space = PS_1D, terminator = trm("evals", n_evals = 5L))
  design = generate_design_random(instance$search_space, n = 4L)$data
  instance$eval_batch(design)

  surrogate = SurrogateLearnerCollection$new(list(REGR_KM_DETERM, REGR_KM_DETERM$clone(deep = TRUE)))
  surrogate$archive = instance$archive
  it = InputTrafoUnitcube$new()
  surrogate$input_trafo = it

  surrogate$update()
  expect_list(it$state, len = 0L)
  surrogate$predict(instance$archive$data)
})

test_that("InputTrafoUnitcube works with OptimizerMbo and bayesopt_ego", {
  instance = MAKE_INST_1D()
  surrogate = SurrogateLearner$new(REGR_KM_DETERM)
  it = InputTrafoUnitcube$new()
  surrogate$input_trafo = it
  acq_function = AcqFunctionEI$new()
  acq_optimizer = AcqOptimizer$new(opt("random_search", batch_size = 2L), terminator = trm("evals", n_evals = 2L))

  optimizer = opt("mbo", loop_function = bayesopt_ego, surrogate = surrogate, acq_function = acq_function, acq_optimizer = acq_optimizer)
  optimizer$optimize(instance)
  expect_true(nrow(instance$archive$data) == 5L)
  expect_data_table(instance$result, nrows = 1L)
})

test_that("InputTrafoUnitcube works with OptimizerMbo and bayesopt_parego", {
  instance = MAKE_INST(OBJ_1D_2, search_space = PS_1D, terminator = trm("evals", n_evals = 5L))
  surrogate = SurrogateLearner$new(REGR_KM_DETERM)
  it = InputTrafoUnitcube$new()
  surrogate$input_trafo = it
  acq_function = AcqFunctionEI$new()
  acq_optimizer = AcqOptimizer$new(opt("random_search", batch_size = 2L), terminator = trm("evals", n_evals = 2L))

  optimizer = opt("mbo", loop_function = bayesopt_parego, surrogate = surrogate, acq_function = acq_function, acq_optimizer = acq_optimizer)
  optimizer$optimize(instance)
  expect_true(nrow(instance$archive$data) == 5L)
  expect_data_table(instance$result, min.rows = 1L)
})

test_that("InputTrafoUnitcube works with OptimizerMbo and bayesopt_smsego", {
  instance = MAKE_INST(OBJ_1D_2, search_space = PS_1D, terminator = trm("evals", n_evals = 5L))
  surrogate = SurrogateLearnerCollection$new(list(REGR_KM_DETERM, REGR_KM_DETERM$clone(deep = TRUE)))
  it = InputTrafoUnitcube$new()
  surrogate$input_trafo = it
  acq_function = AcqFunctionSmsEgo$new()
  acq_optimizer = AcqOptimizer$new(opt("random_search", batch_size = 2L), terminator = trm("evals", n_evals = 2L))

  optimizer = opt("mbo", loop_function = bayesopt_smsego, surrogate = surrogate, acq_function = acq_function, acq_optimizer = acq_optimizer)
  optimizer$optimize(instance)
  expect_true(nrow(instance$archive$data) == 5L)
  expect_data_table(instance$result, min.rows = 1L)
})

Try the mlr3mbo package in your browser

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

mlr3mbo documentation built on June 8, 2025, 12:24 p.m.