【问题标题】:ROI optimisation in R using multi-argument F_objective function使用多参数 F_objective 函数在 R 中优化 ROI
【发布时间】:2019-03-01 23:43:18
【问题描述】:

尝试在 R 中运行简单的 ROI 优化,但经过数小时的烦躁,我不知所措。我不断收到错误:

Error in .check_function_for_sanity(F, n) : 
  cannot evaluate function 'F' using 'n' = 5 parameters.

这里是示例代码:

library(ROI)
library(nloptr)
library(ROI.plugin.nloptr)

#Generate some random data for this example
set.seed(3142)
myRet = matrix(runif(100 * 5, -0.1, 0.1), ncol = 5)
myCovMatrix = cov(myRet)

myRet <- myRet
myCovMatrix <- myCovMatrix

# Sample weights
w <-  rep(1/ncol(myRet), ncol(myRet))

#Define functions for the optimisation
diversificationRatio = function(w, covMatrix)
{
  weightedAvgVol = sum(w * sqrt(diag(covMatrix)))

  portfolioVariance = (w %*% covMatrix %*% w)[1,1]

  - 1 * weightedAvgVol / sqrt(portfolioVariance)

}

# Check that the F_objective function works:
diversificationRatio(w, myCovMatrix)

# Now construct the F_objective
foo <- F_objective(F = diversificationRatio, n = (ncol(myRet)))

关于将多少个参数传递给n 的任何想法?

【问题讨论】:

    标签: r optimization nonlinear-optimization r-optimization


    【解决方案1】:

    F_objective 需要一个只有一个参数的函数,因此您必须编写一个包装函数。

    #Define functions for the optimisation
    diversificationRatio <- function(w, covMatrix) {
        weightedAvgVol <- sum(w * sqrt(diag(covMatrix)))
        portfolioVariance <- (w %*% covMatrix %*% w)[1,1]
        - 1 * weightedAvgVol / sqrt(portfolioVariance)
    }
    
    # Check that the F_objective function works:
    wrapper <- function(x) diversificationRatio(x, myCovMatrix)
    
    # Now construct the F_objective
    o <- OP(F_objective(F = wrapper, n = (ncol(myRet))))
    
    ROI_applicable_solvers(o)
    
    start <- runif(ncol(myRet))
    s <- ROI_solve(o, solver = "nloptr", start = start, method = "NLOPT_LD_SLSQP")
    s
    solution(s)
    

    【讨论】:

    • 我在使用 F_constraints() 时遇到了一个相关问题,但又提出了另一个问题。我真的希望您能提供帮助,但不确定如何标记您,因此有此评论。非常感谢任何建议:stackoverflow.com/questions/44932853/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-20
    相关资源
    最近更新 更多