mlr-org / mlrMBO

Toolbox for Bayesian Optimization and Model-Based Optimization in R
https://mlrmbo.mlr-org.com
Other
187 stars 47 forks source link

Error: unused arguments (forbidden = expression(x2 > x1)) #514

Closed swaheera closed 3 years ago

swaheera commented 3 years ago

I am working with the R programming language. I am learning how to use the "mlrMBO" library for the purpose of optimizing multi-objective functions (using Bayesian Methods).

https://cran.r-project.org/web/packages/mlrMBO/index.html https://cran.r-project.org/web/packages/mlrMBO/mlrMBO.pdf https://cran.r-project.org/web/packages/mlrMBO/vignettes/mlrMBO.html https://github.com/mlr-org/mlrMBO In my example, for the following constraints:

x2 >x1 AND x4 >x3 I want to optimize the following (multi-objective) function I defined:

bayesian_function <- function(x1, x2, x3, x4) {
    var_1 <- sin(x1 + x2)
    var_2 <- cos(x1 - x2)
    var_3 <- x1 + x4
    var_4 <- x3 + x4 -7
        goal_1 = sum(var_1 + var_2 + var_3 + var_4)
    goal_2 = var_1 + var_2 - var_3 + var_4
    goal_3 = var_1 + var_2 - var_3 + 2*var_4

    return(c(goal_1, goal_2, goal_3))

}

To do this, I tried the follow the necessary "mlrMBO" syntax to optimize this function for the given constraints and allowed ranges for "x1, x2, x3, x4" :

#load libraries
library(mlrMBO)
library(ParamHelpers)
library(smoof)

obj.fn = makeMultiObjectiveFunction(
  name = "My test function",
  fn = function(x1, x2, x3, x4) {
    var_1 <- sin(x1 + x2)
    var_2 <- cos(x1 - x2)
    var_3 <- x1 + x4
    var_4 <- x3 + x4 -7
        goal_1 = sum(var_1 + var_2 + var_3 + var_4)
    goal_2 = var_1 + var_2 - var_3 + var_4
    goal_3 = var_1 + var_2 - var_3 + 2*var_4

    return(c(goal_1, goal_2, goal_3))

},
#define acceptable ranges
par.set = makeNumericParamSet(
     makeNumericParam("x1", lower = 20, upper = 40),
     makeNumericParam("x2", lower = 30, upper = 45),
     makeNumericParam("x3", lower = 10, upper = 20),
     makeNumericParam("x4", lower = 10, upper = 50),
#define constraints
     forbidden = expression(x2 >x1),
     forbidden = expression(x4 >x3)
),

minimize=TRUE
)

#create control gird
 control=makeMBOControl(propose.points=1, final.method="best.predicted", final.evals=10)
 control=setMBOControlTermination(control, iters=10)
 control=setMBOControlInfill(control, crit=makeMBOInfillCritEI())

#perform optimization
lrn=makeMBOLearner(control, obj.fun)

The first part of this code returns the following error and preventing me from running the rest of the code:

Error in makeNumericParamSet(makeNumericParam("x1", lower = 20, upper = 40),  : 
  unused arguments (forbidden = expression(x2 > x1), forbidden = expression(x4 > x3))

It seems that there is a problem while defining the constraints (i.e. "forbidden" statement). I tried reading more about this function https://www.rdocumentation.org/packages/ParamHelpers/versions/1.14/topics/makeParamSet , but I can't seem to figure out what I am doing wrong.

Can someone please show me why this error is being produced?

Thanks

jakob-r commented 3 years ago

You cannot just pass the same argument twice (here: forbidden). You have to come up with one logical expression like you did in the other issues (therefore closed)