(R) Error: unused arguments (forbidden = expression(x2 > x1))
(R) Error: unused arguments (forbidden = expression(x2 > x1))
我正在使用 R 编程语言。我正在学习如何使用“mlrMBO”库来优化多 objective 函数(使用贝叶斯方法)。
- 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
在我的示例中,对于以下约束:
x2 >x1 AND x4 >x3
我想优化我定义的以下(multi-objective)函数:
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))
}
为此,我尝试遵循必要的“mlrMBO”语法来针对给定的约束和“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)
此代码的第一部分 returns 出现以下错误并阻止我 运行 代码的其余部分:
Error in makeNumericParamSet(makeNumericParam("x1", lower = 20, upper = 40), :
unused arguments (forbidden = expression(x2 > x1), forbidden = expression(x4 > x3))
似乎在定义约束(即“禁止”语句)时出现问题。我尝试阅读更多关于此功能的信息 https://www.rdocumentation.org/packages/ParamHelpers/versions/1.14/topics/makeParamSet ,但我似乎无法弄清楚我做错了什么。
谁能告诉我为什么会出现这个错误?
谢谢
更新:
根据@blorp6 提供的答案,我尝试将两个“禁止”语句组合成一行代码:
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 & 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)
但这会产生一个新的错误:Error in fn(unlist(x), ...) : unused argument (unlist(x))
我的理解正确吗?
谢谢
您似乎将两个同名参数传递给 makeNumericParamSet()
,它只接受名称 'forbidden' 的 1 个参数。我在 R 控制台中检查了 ?makeNumericParamSet
,发现以 'par.set' 和 'forbidden' 作为参数的函数实际上是 makeParamSet
,所以我尝试了这个:
尝试
#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 & x4 > x3)
#forbidden = expression(x4 >x3)
)
结果
> par.set
Type len Def Constr Req Tunable Trafo
x1 numeric - - 20 to 40 - TRUE -
x2 numeric - - 30 to 45 - TRUE -
x3 numeric - - 10 to 20 - TRUE -
x4 numeric - - 10 to 50 - TRUE -
Forbidden region specified.
我正在使用 R 编程语言。我正在学习如何使用“mlrMBO”库来优化多 objective 函数(使用贝叶斯方法)。
- 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
在我的示例中,对于以下约束:
x2 >x1 AND x4 >x3
我想优化我定义的以下(multi-objective)函数:
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))
}
为此,我尝试遵循必要的“mlrMBO”语法来针对给定的约束和“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)
此代码的第一部分 returns 出现以下错误并阻止我 运行 代码的其余部分:
Error in makeNumericParamSet(makeNumericParam("x1", lower = 20, upper = 40), :
unused arguments (forbidden = expression(x2 > x1), forbidden = expression(x4 > x3))
似乎在定义约束(即“禁止”语句)时出现问题。我尝试阅读更多关于此功能的信息 https://www.rdocumentation.org/packages/ParamHelpers/versions/1.14/topics/makeParamSet ,但我似乎无法弄清楚我做错了什么。
谁能告诉我为什么会出现这个错误?
谢谢
更新:
根据@blorp6 提供的答案,我尝试将两个“禁止”语句组合成一行代码:
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 & 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)
但这会产生一个新的错误:Error in fn(unlist(x), ...) : unused argument (unlist(x))
我的理解正确吗? 谢谢
您似乎将两个同名参数传递给 makeNumericParamSet()
,它只接受名称 'forbidden' 的 1 个参数。我在 R 控制台中检查了 ?makeNumericParamSet
,发现以 'par.set' 和 'forbidden' 作为参数的函数实际上是 makeParamSet
,所以我尝试了这个:
尝试
#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 & x4 > x3)
#forbidden = expression(x4 >x3)
)
结果
> par.set
Type len Def Constr Req Tunable Trafo
x1 numeric - - 20 to 40 - TRUE -
x2 numeric - - 30 to 45 - TRUE -
x3 numeric - - 10 to 20 - TRUE -
x4 numeric - - 10 to 50 - TRUE -
Forbidden region specified.