# NOT RUN {
params = ParamSet$new(list(
  ParamInt$new("int", 0, 10),
  ParamInt$new("int_unbounded"),
  ParamDbl$new("dbl", 0, 10),
  ParamDbl$new("dbl_unbounded"),
  ParamDbl$new("dbl_bounded_below", lower = 1),
  ParamFct$new("fct", c("a", "b", "c")),
  ParamUty$new("uty1"),
  ParamUty$new("uty2"),
  ParamUty$new("uty3"),
  ParamUty$new("uty4"),
  ParamUty$new("uty5")
))
params$values = list(
  # tune over entire range of `int`, 0..10:
  int = to_tune(),
  # tune over 2..7:
  int_unbounded = to_tune(2, 7),
  # tune on a log scale in range 1..10;
  # recognize upper bound of 10 automatically, but restrict lower bound to 1:
  dbl = to_tune(lower = 1, logscale = TRUE),
  ## This is equivalent to the following:
  # dbl = to_tune(p_dbl(log(1), log(10), trafo = exp)),
  # nothing keeps us from tuning a dbl over integer values
  dbl_unbounded = to_tune(p_int(1, 10)),
  # tune over values "a" and "b" only
  fct = to_tune(c("a", "b")),
  # tune over integers 2..8.
  # ParamUty needs type information in form of p_xxx() in to_tune.
  uty1 = to_tune(p_int(2, 8)),
  # tune uty2 like a factor, trying 1, 10, and 100:
  uty2 = to_tune(c(1, 10, 100)),
  # tune uty3 like a factor. The factor levels are the names of the list
  # ("exp", "square"), but the trafo will generate the values from the list.
  # This way you can tune an objective that has function-valued inputs.
  uty3 = to_tune(list(exp = exp, square = function(x) x^2)),
  # tune through multiple parameters. When doing this, the ParamSet in tune()
  # must have the trafo that generates a list with one element and the right
  # name:
  uty4 = to_tune(ps(
    base = p_dbl(0, 1),
    exp = p_int(0, 3),
    .extra_trafo = function(x, param_set) {
      list(uty4 = x$base ^ x$exp)
    }
  )),
  # not all values need to be tuned!
  uty5 = 100
)
print(params$values)
print(params$search_space())
# Change `$values` directly and generate new `$search_space()` to play around
params$values$uty3 = 8
params$values$uty2 = to_tune(c(2, 4, 8))
print(params$search_space())
# Notice how `logscale` applies `log()` to lower and upper bound pre-trafo:
params = ParamSet$new(list(ParamDbl$new("x")))
params$values$x = to_tune(1, 100, logscale = TRUE)
print(params$search_space())
grid = generate_design_grid(params$search_space(), 3)
# The grid is equidistant within log-bounds pre-trafo:
print(grid)
# But the values are on a log scale scale with desired bounds after trafo:
print(grid$transpose())
# }
Run the code above in your browser using DataLab