用python-cvxopt进行优化

用python-cvxopt进行优化,python,optimization,cvxopt,Python,Optimization,Cvxopt,我正在尝试使用Python的cvxopt来最小化这个问题。然而,经过多次尝试,它似乎不起作用。下面粘贴了函数、我的代码和错误。谢谢你的帮助 最小化问题 目标函数:最小x.dot(sigma_mv).dot(x.T) 约束条件为所有x>=0,和(x)=1 sigma_mv是800*800的协方差矩阵,dim=800 代码 回溯(最近一次呼叫最后一次): 文件“”,第6行,在 sol=解算器.qp(P,q) 文件“D:\spyder\lib\site packages\cvxopt\conepro

我正在尝试使用Python的cvxopt来最小化这个问题。然而,经过多次尝试,它似乎不起作用。下面粘贴了函数、我的代码和错误。谢谢你的帮助

最小化问题 目标函数:最小x.dot(sigma_mv).dot(x.T)

约束条件为所有x>=0,和(x)=1

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

代码
回溯(最近一次呼叫最后一次):
文件“”,第6行,在
sol=解算器.qp(P,q)
文件“D:\spyder\lib\site packages\cvxopt\coneprog.py”,第4470行,在qp中
返回coneqp(P,q,G,h,None,A,b,initvals,kktsolver=kktsolver,options=options)
coneqp中第1822行的文件“D:\spyder\lib\site packages\cvxopt\coneprog.py”
raise VALUERROR(“使用函数值P、G、A需要A”\
ValueError:使用值为P,G,A的函数需要用户提供的kktsolver

您既有等式约束又有不等式约束,因此需要向内置的qp解算器提供所有参数
Gx=0可以写成-xWelcome to the site:您可能需要阅读、和,并相应地重新回答您的问题。错误告诉您cvxopt无法将您的输入视为矩阵。它认为其中一些是函数。由于您的代码不完整(没有sigma_mv的定义;您的描述在这里没有帮助)这很难解释。因此,要么sigma_mv被破坏了,要么,我懒得去检查:cvxopt真的可以使用numpy.matrix吗?cvxopt通常有自己的矩阵格式(文档中甚至有numpy->cvxopt转换示例)。感谢您的回答,它确实解决了问题。P Q G H不是cvxopt中定义的正确矩阵形式。正确形式如下:从cvxopt导入解算器,矩阵P=2*矩阵(mat)Q=matrix([0.0]*dim)G=-1*矩阵(np.identity(dim))H=matrix(np.zero((dim,1)))也
np。数组(1.0)*矩阵(G)
不是矩阵xcvxopt是一个很好的解算器。我们只需要注意我们的P矩阵是正定的或任何其他重要的考虑因素。
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
sol=solvers.qp(P, q, G, h, A, b)