mlr-org/mlrMBO

checkStuff for infill.crit = dib

rodemann opened this issue · 1 comments

Hello :)
checkStuff() does not throw an error if I use direct indicator-based search (DIB) as infill criterion in a single-objective optimization. It only controls whether DIB is used in case of multi-criteria optimization, but not the other way around (cf. line 125 in checkStuff()). Instead an ugly error is thrown later, because diag() is called with nrow = -1 in line 276 of makeMBOInfillCritDIB. It would be nice if the input checking in checkStuff() also controls for wrong use of the multi-criteria infill function DIB.

wondering if there is a follow-up on this?

If yes, wondering if this is related. I have my code:

library(mlrMBO)

ps = makeParamSet(
  makeIntegerParam("A", lower = 10, upper = 5000),
  makeIntegerParam("B", lower = 1, upper = 20000),
  makeIntegerParam("C", lower = 0, upper = 100)
)
ctrl = makeMBOControl(n.objectives = 2L, y.name = c("y1", "y2"))
ctrl = setMBOControlInfill(ctrl, opt = "focussearch", opt.focussearch.maxit = 10, opt.focussearch.points = 10000, crit = makeMBOInfillCritEI())

mo = setMBOControlMultiObj(
                            ctrl,
                            method = "parego",
                            parego.s = 100000,
                            parego.rho = 0.05,
                            parego.sample.more.weights = 1,
                            parego.normalize = standard
                          )

data=read.csv("dataset.csv")
suppressMessages({opt.state = initSMBO(par.set = ps, design = data, control = ctrl, minimize = c(FALSE, FALSE))})

This gives the error:

 Error in checkStuff(fun, design, learner, control) : 
  For multicrit 'dib' infil.crit must be set to 'dib'!