我已经能够使用quadprog
来最小化具有线性约束的非线性目标,但是,我却无法以其他方式做到这一点...
require(quadprog)
min_var <- function(Obj,Rentabilidades,var_covar){
b <- c(Obj,1)
Betha <- var_covar
A <- t(matrix(rbind(Rentabilidades,c(1,1)),nrow=2))
Gamma <- matrix(0,nrow=2)
solve.QP(Betha,Gamma,A,b,2)
}
现在,我想将以前的约束最大化,以以前的目标作为新约束。遗憾的是,solve.QP()
仅支持线性约束。有人知道类似于quadprog
的软件包可能对我有帮助吗?
答案 0 :(得分:1)
标准投资组合优化模型如下:
min sum((i,j), x(i)*Q(i,j)*x(j))
sum(i,x(i)) = 1
sum(i,r(i)*x(i)) >= R
x(i) >= 0
这是一个二次规划模型,可以使用标准QP求解器进行求解。
如果您解决了这个问题(在风险约束下获得最大回报),则可以这样写:
max sum(i,r(i)*x(i))
sum((i,j), x(i)*Q(i,j)*x(j)) <= V
sum(i,x(i)) = 1
x(i) >= 0
这是一个平方约束问题。幸运的是,这是凸的,因此您可以使用Cplex,Gurobi或Mosek等求解器(它们具有R接口)进行求解。开源候选人可以是像ECOSolveR这样的求解器,甚至可以是像cxvr这样的框架。