如何在CVXPY中对quad_form的输出取平方根?[英] How to take the square root of quad_form output in CVXPY?

本文是小编为大家收集整理的关于如何在CVXPY中对quad_form的输出取平方根?的处理方法,想解了如何在CVXPY中对quad_form的输出取平方根?的问题怎么解决?如何在CVXPY中对quad_form的输出取平方根?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我正在尝试解决目标函数中涉及 \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 分解 Sigma = Q.T * Q,然后在您的目标函数中包含术语 norm(Q*w,2).

本文地址:https://www.itbaoku.cn/post/1793796.html

相关标签/搜索