2017-06-05 82 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