如何在 CVXPY 中取 quad_form 输出的平方根?

How to take the square root of quad_form output in CVXPY?

我正在尝试解决涉及 objective 函数中的 \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)

为了对二次型求平方根,矩阵Sigma必须是半正定矩阵。计算 Cholesky decomposition Sigma = Q.T * Q,然后在 objective 函数中包含术语 norm(Q*w,2)