使用python cvxopt进行优化

时间:2017-07-14 01:19:50

标签: python optimization cvxopt

我正在尝试使用Python的cvxopt最小化portfolio variance。然而,经过大量尝试后,它似乎无法奏效。函数和我的代码以及错误都粘贴在下面。谢谢你的帮助!

最小化问题

目标函数:min x.dot(sigma_mv).dot(x.T)

约束条件是x> = 0,sum(X)= 1

sigma_mv是800 * 800的协方差矩阵,dim = 800

dim = sigma_mv.shape[0]
P = 2*sigma_mv   
q = np.matrix([0.0])
G = -1*np.identity(dim)
h = np.matrix(np.zeros((dim,1)))

sol = solvers.qp(P,q,G,h)
Traceback (most recent call last):

  File "<ipython-input-47-a077fa141ad2>", line 6, in <module>
    sol = solvers.qp(P,q)   

  File "D:\spyder\lib\site-packages\cvxopt\coneprog.py", line 4470, in qp
    return coneqp(P, q, G, h, None, A,  b, initvals, kktsolver = kktsolver, options = options)

  File "D:\spyder\lib\site-packages\cvxopt\coneprog.py", line 1822, in coneqp
    raise ValueError("use of function valued P, G, A requires a "\

ValueError: use of function valued P, G, A requires a user-provided kktsolver

1 个答案:

答案 0 :(得分:0)

您同时具有相等和不相等约束,因此您需要向内置qp解算器提供所有参数 Gx <= h Ax = b

这里x> = 0可以写成-x <= 0所以G矩阵看起来像-1 *(Identity matrix) 和h将是一个0向量 同样,您的A将是一个单位矩阵,b将是一个单位矢量(所有元素= 1)

最后,求解表达式应如下所示:

sol=solvers.qp(P, q, G, h, A, b)