【问题标题】:Minimizing quadratic function subject to norm inequality constraint最小化受范数不等式约束的二次函数
【发布时间】:2016-01-07 19:45:41
【问题描述】:

我正在尝试解决以下不等式约束:

给定 N 个股票的时间序列数据,我正在尝试构建一个投资组合权重向量以最小化收益的方差。

目标函数:

min w^{T}\sum w
s.t. e_{n}^{T}w=1
\left \| w \right \|\leq C

其中w 是权重向量,\sum 是协方差矩阵,e_{n}^{T} 是一个向量,C 是一个常数。其中第二个约束 (\left \| w \right \|) 是不等式约束(权重的 2 范数)。

我尝试使用 nloptr() 函数,但它给了我一个错误:提供的算法不正确。我不确定如何选择正确的算法,也不确定这是否是解决此不等式约束的正确方法。

只要能解决这个限制,我也愿意使用其他功能。

这是我尝试的解决方案:

data <- replicate(4,rnorm(100))
N <- 4
fn<-function(x) {cov.Rt<-cov(data); return(as.numeric(t(x) %*%cov.Rt%*%x))}     
eqn<-function(x){one.vec<-matrix(1,ncol=N,nrow=1); return(-1+as.numeric(one.vec%*%x))}


C <- 1.5
ineq<-function(x){
  z1<- t(x) %*% x
  return(as.numeric(z1-C))  
}   

uh <-rep(C^2,N)
lb<- rep(0,N)
x0 <- rep(1,N)

local_opts <- list("algorithm"="NLOPT_LN_AUGLAG,",xtol_rel=1.0e-7)
opts <- list("algorithm"="NLOPT_LN_AUGLAG,",
             "xtol_rel"=1.0e-8,local_opts=local_opts)
sol1<-nloptr(x0,eval_f=fn,eval_g_eq=eqn, eval_g_ineq=ineq,ub=uh,lb=lb,opts=opts)

【问题讨论】:

  • 也许是“最小化二次函数受范数不等式约束。”我将删除我的答案,因为它并没有真正让你到达那里!
  • 您的代码中似乎有错字。 “NLOPT_LN_AUGLAG”中有一个多余的逗号

标签: r optimization convex-optimization quadratic-programming quadprog


【解决方案1】:

这看起来像一个简单的 QP(二次规划)问题。使用 QP 求解器而不是通用 NLP(非线性编程)求解器(不需要导数、函数等)可能更容易。 R 有一个称为 quadprog 的 QP 求解器。为 quadprog 设置问题并非易事,但here 是一个非常相似的投资组合示例,其中包含完整的 R 代码来展示如何解决这个问题。它具有相同的目标(最小化风险)、相同的预算约束以及下限和上限。该示例只是有一个额外的约束,指定了最低要求的投资组合回报。

其实我误读了这个问题:第二个约束是 ||x||

这实际上看起来像一个凸模型。我可以用 Cplex、Gurobi 和 Mosek 等“大”求解器来解决它。这些求解器支持凸二次约束问题。我也相信这可以表述为锥形规划问题,开辟更多可能性。

这是我在 R 中使用包 cccp 的示例。 cccp 代表 锥约束凸问题,是CVXOPT 的端口。

【讨论】:

  • 感谢您的帮助。如果我错了,请纠正我:我之前尝试过使用 quadprog,但我的理解是它只能处理线性约束。我的约束是非线性的。您认为使用 quadprog 仍然可行吗?
  • 对不起,数学在我的浏览器中没有正确呈现。您希望 w(i) 的平方和有界。事实上,这使得模型受到非线性约束(甚至可能是非凸的)。我认为这对于投资组合模型来说是一个有点不寻常的约束。你能告诉我你是怎么想出这个约束的吗?我的回答并不完全有效,但它仍然可能有助于为完全非线性约束问题找到一个好的起点。我经常使用更简单的模型版本来为更复杂的模型找到一个好的起点。
  • 这个约束来自 DeMiguel 等人。见第 8 页:usc.edu/schools/business/FBE/seminars/papers/…
  • 谢谢!我认为 Mosek 的解决方案已经很有帮助。然后我可以从 R 给 Mosek 打电话。
  • 我用 GAMS + Mosek 尝试了上面的 QCP 模型,它解决得很好。
【解决方案2】:

权重的 2 范数没有意义。它必须是 1 范数。这本质上是对投资组合杠杆的约束。 1-norm(w) = 2-Norm(Lw) [这定义了二次锥体)。现在你最小化 t。 1-范数也可以用圆锥代替,如 abs(x_i) = sqrt(x_i^2) = 2-norm(x_i)。因此,为向量 x 的每个元素引入一个二次圆锥。

【讨论】:

    猜你喜欢
    • 2019-08-27
    • 2017-07-07
    • 2019-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    相关资源
    最近更新 更多