4

我正在尝试解决涉及\sqrt{w^t \Sigma w}目标函数的问题。为了计算w^t \Sigma w,我使用该quad_form函数。我如何取它的平方根?

当我尝试编写代码时

risk = sqrt(quad_form(w, E))

我收到了 DCP 规则错误,但考虑到我拥有的其他约束,我很确定它是凸的。所以问题不是关于数学,而是凸程序的实际实现。

我要解决的问题是

ret = mu.T*w 
risk = sqrt(quad_form(w, E))
gamma.value = distr.pdf(distr.ppf(alpha)) / (1 - alpha)
minimizer = Minimize(-ret + risk * gamma) #cvxpy.sqrt(risk) * gamma) 
constraints = [w >= 0, 
               b.T * log(w) >= k] 
prob = Problem(minimizer, constraints)
prob.solve(solver='ECOS_BB',verbose=True)
4

1 回答 1

1

为了取二次形式的平方根,矩阵Sigma必须是半正定的。计算Cholesky 分解 Sigma = Q.T * Q,然后将项包含norm(Q*w,2)在目标函数中。

于 2018-05-26T09:09:14.667 回答