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

时间:2018-05-26 06:19:30

标签: python square-root cvxpy

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

1 个答案:

答案 0 :(得分:1)

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