我有一个投资组合优化问题。假设R
和P
是N
股票的期望收益向量和相关矩阵。我想找到在投资组合波动率小于w
且大于upper
的约束下最大化投资组合预期收益的最优投资组合权重lower
。
我使用cvxpy
,这是代码:
import numpy as np
import pandas as pd
import cvxpy as cp
N = 4 # number of stocks
w = cp.Variable(N) # portfolio weights
R = np.random.randn(N) # expected return vector
temp = np.random.randn(N, 100)
P = np.corrcoef(temp) # simulated correlation matrix
obj = cp.Maximize(R@w) # objective function
constraints = [w>=0, w<=1, np.ones(4)@w==1, cp.quad_form(w, P)<=1, cp.quad_form(w, P)>=0.2]
prob = cp.Problem(obj, constraints)
我知道上述问题不是DCP,因为约束cp.quad_form(w, P)>=0.2
不是DCP:
(cp.norm(cp.matmul(P, x))>=0.2).is_dcp() # the result is False
下限使可行集成为非凸集。因此,当我致电prob.solve()
时,我得到了DCPError
。
我的问题是,有没有办法将上述问题表达为DCP问题,以便可以使用cvxpy
来解决它?而且,如果没有,推荐的python
软件包是什么来解决这种非凸优化问题?