我正在尝试优化二元投资组合向量,使其大于使用 CVXPY 的基准。
import cvxpy as cp
import numpy as np
# Generate a random non-trivial quadratic program.
n = 10 # number of options
np.random.seed(1)
mu = np.random.randn(n) # expected means
var_covar = np.random.randn(n,n) # variance-covariance matrix
var_covar = var_covar.T.dot(var_covar) # cont'd
bench_cov = np.random.randn(n) # n-length vector of cov(benchmark, returns)
lamd = 0.01 # risk tolerance
# Define and solve the CVXPY problem.
x = cp.Variable(n, boolean=True)
prob = cp.Problem(cp.Maximize(mu.T@x + lamd * (cp.quad_form(x, var_covar) - (2 * bench_cov.T@x))), [cp.sum(x) == 4])
prob.solve()
我使用 CVXPY 版本 1.1.0a0(直接从 github 下载)收到此错误:
DCPError:问题不遵循 DCP 规则。具体来说:
目标不是 DCP,即使每个子表达式都是。
您正在尝试最大化凸函数。
从我读过的内容来看,最大化凸函数非常困难,但我从一篇论文中得到了这个方程,该论文使用 Gurobi 的 BQP 求解器求解了相同的方程。我想我一定是做错了什么,因为我是二次规划和 CVXPY 的新手。
谢谢!