【问题标题】:R: Error in fn(unlist(x), ...) : unused argument (unlist(x))R:fn(unlist(x),...)中的错误:未使用的参数(unlist(x))
【发布时间】:2021-07-15 16:52:27
【问题描述】:

我在 R (https://cran.r-project.org/web/packages/mlrMBO/index.html) 中使用“mlrMBO”库。我正在尝试学习如何在我定义的一些任意函数上运行优化算法:

#Load library
library(mlrMBO)

#define objective function
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 = makeParamSet(
     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 | x3 > x4)
),

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)

此代码返回以下错误:

Error in fn(unlist(x), ...) : unused argument (unlist(x))

有谁知道为什么会产生这个错误?我尝试查看各种参考资料(例如https://cran.r-project.org/web/packages/mlrMBO/mlrMBO.pdfhttps://cran.r-project.org/web/packages/mlrMBO/vignettes/mlrMBO.html),但到目前为止我无法理解为什么会产生此错误。

谁能告诉我我做错了什么?

谢谢

【问题讨论】:

    标签: r algorithm function optimization bayesian


    【解决方案1】:

    您需要添加一项设置并调整另一项:

    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 = makeParamSet(
        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 | x3 > x4)
      ),
      
      minimize=rep(TRUE, 3), #corrected
      has.simple.signature = FALSE #added
    )
    

    【讨论】:

    • 非常感谢您的回答!运行所有这些代码后,我尝试运行以下行: res = mbo(obj.fun, design = NULL, learner = lrn, control = ctrl, show.info = TRUE) ......但随后我收到此错误: generateDesign(n.params * 4L, par.set, fun = lhs::maximinLHS) 中的警告:generateDesign 只能产生 0 分而不是 16 分!计算 y 列以进行设计。不提供。 as.data.frame.OptPathDF(opt.path, include.rest = FALSE) 中的错误:没有选择元素(通过“dob”和“eol”)! ....您知道为什么会产生此错误吗?谢谢!
    • 如果你有时间可以看看这个问题吗?谢谢!
    • 非常感谢您的回答!您能解释一下为什么添加这些语句后代码可以工作吗?为什么你需要“minimize=rep(TRUE, 3)” 而不仅仅是“minimize -= TRUE”?为什么需要添加 dpes“has.simple.signature = FALSE”?我非常感谢你的帮助!
    • 我无法比help("makeMultiObjectiveFunction")更好地解释。
    猜你喜欢
    • 2022-01-16
    • 1970-01-01
    • 2019-01-12
    • 2020-04-24
    • 1970-01-01
    • 1970-01-01
    • 2016-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多