2017-06-05 83 views
0
执行SQP算法

我想R中运行下列优化:中的R

UC:0 < = X < = 1,以及Sum(X)= 1

方程式基于:Efficient Algorithms for Computing Risk Parity Portfolio Weights(公式10)

原始作者说使用SQP。我想遵循但如何?

+0

'NlcOptim'实现了连续二次规划:https://cran.r-project.org/web/packages/NlcOptim/NlcOptim.pdf –

+0

谢谢你很多您的评论!我发现这个包太,当我在寻找SQP包河的问题是我不能成像如何实现这... – DataAdventurer

回答

0

的代码看起来是这样的:

fn <- function(w){return( 
     ((w[1] * w %*% Mat[1,]) - (w[1] * w %*% Mat[1,]))^2 + 
     ((w[1] * w %*% Mat[1,]) - (w[2] * w %*% Mat[2,]))^2 + 
     ((w[1] * w %*% Mat[1,]) - (w[3] * w %*% Mat[3,]))^2 + 

     ((w[2] * w %*% Mat[2,]) - (w[1] * w %*% Mat[1,]))^2 + 
     ((w[2] * w %*% Mat[2,]) - (w[2] * w %*% Mat[2,]))^2 + 
     ((w[2] * w %*% Mat[2,]) - (w[3] * w %*% Mat[3,]))^2 + 

     ((w[3] * w %*% Mat[3,]) - (w[1] * w %*% Mat[1,]))^2 + 
     ((w[3] * w %*% Mat[3,]) - (w[2] * w %*% Mat[2,]))^2 + 
     ((w[3] * w %*% Mat[3,]) - (w[3] * w %*% Mat[3,]))^2 
) 
    } 

    library(Rsolnp) 

    #start values 
    w0 <- c(0.3, 0.6, 0.1) 

    #constrain function 
    eqcon <- function(w){(w[1]+w[2]+w[3])} 
    ebcon <- 1 

    #optimizer 
    sqp <- solnp(pars = w0, 
       fun = fn2, 
       eqfun = eqcon, 
       eqB = ebcon, 
       LB = c(0,0,0), 
       UB = c(1,1,1)) 

    sqp$pars