在r中将参数传递给nloptr

时间:2017-02-15 12:41:25

标签: r nlopt

我正在使用'nloptr'优化r中的一个简单函数,并且我很难将参数传递给目标函数。这是我正在使用的代码:

require("nloptr")

Correl <- matrix(c(1,-.3,-.3,1), nrow=2, ncol=2)
Wghts <- c(.01,.99)
floor <- .035
expret <- c(.05,.02)
pf.return <- function(r, x, threshold=0){

return(r * x - threshold)
}

pf.vol <- function(x, C){

return(sqrt(x %*% C %*% x))
}

res <- nloptr(x0=Wghts,eval_f = pf.vol,eval_g_ineq=pf.return,opts=list(algorithm="NLOPT_GN_ISRES"), x=Wghts,C=Correl)

(我知道我在这里缺少参数,但我试图突出一个我不明白的行为) 运行此命令会出现以下错误:

Error in .checkfunargs(eval_f, arglist, "eval_f") : x' passed to (...) in 'nloptr' but this is not required in the eval_f function.

只是为了看看会发生什么,我可以尝试在没有x参数的情况下运行它:

res <- nloptr(x0=Wghts,eval_f = pf.vol,eval_g_ineq=pf.return,opts=list(algorithm="NLOPT_GN_ISRES"), C=Correl)

给出错误:

Error in .checkfunargs(eval_g_ineq, arglist, "eval_g_ineq") : eval_g_ineq requires argument 'x' but this has not been passed to the 'nloptr' function.

因此,包括x会抛出一个不必要的错误,并且省略它会抛出(至少可以理解的)错误,即它已被省略。

1 个答案:

答案 0 :(得分:1)

好的后代:

我重写了这些函数,以便它们以相同的顺序拥有相同的参数集。

我也省略了x=Wghts位,因为这是我试图搜索的参数。