2

我正在尝试寻找非线性投资组合优化器

在 fPortfolio 文档以及使用 R/Rmetrics 的 Rmetrics Portfolio 优化中,可以放入非线性约束。

但是,在查看包的源代码后,我无法找到使用非线性约束的任何地方。

可重现的测试代码:

library(fPortfolio)
Data <- 100 * LPP2005.RET[,1:6]
Spec <- portfolioSpec()
setTargetReturn(Spec) <- mean(Data)
Constraints = 'maxW[1:6] = 0.5'
efficientPortfolio(Data, Spec, Constraints)

Title:
MV Efficient Portfolio 
Estimator:         covEstimator 
Solver:            solveRquadprog 
Optimize:          minRisk 
Constraints:       maxW 

Portfolio Weights:
SBI    SPI    SII    LMI    MPI    ALT 
0.0000 0.0086 0.2543 0.3358 0.0000 0.4013 
...

我添加了一个无法满足的非线性约束。(非线性函数总是返回 2,而我要求该值介于 0 和 1 之间)

testfunc = function(x) 2
nonlinConstraints = c('listF=list(testfunc=testfunc)', 'minF = 0', 'maxF = 1')
newConstraints = c(Constraints, nonlinConstraints)
efficientPortfolio(Data, Spec, newConstraints)

    Title:
MV Efficient Portfolio 
Estimator:         covEstimator 
Solver:            solveRquadprog 
Optimize:          minRisk 
Constraints:       maxW 

Portfolio Weights:
SBI    SPI    SII    LMI    MPI    ALT 
0.0000 0.0086 0.2543 0.3358 0.0000 0.4013 
...

并得到完全相同的答案。熟悉该软件包的人可以告诉我我做错了什么还是非线性约束根本没有实现?

4

1 回答 1

0

You would see in getAnywhere(.rquadprogArguments) that solveRquadprog doesn't use minFConstraints or maxFConstraints. You should call your own custom-made solver or use solveRdonlp2

于 2015-05-28T10:23:21.570 回答