我最近在CVXOPT QP解算器上遇到了问题:我一直收到类型错误:“A”必须是一个包含10列的“d”矩阵,而实际上,我有一个维数为(10,10)且类型为d的矩阵A
代码如下:
import numpy as np
from cvxopt import matrix
from cvxopt import solvers
var_all_numpy= np.array([[4,2,4,6,8,6,12,10,8,6],[8,4,6,6,8,10,6,6,2,2]])
var_1_numpy = np.array([4,2,4,6,8,6,12,10,8,6])
var_2_numpy = np.array([8,4,6,6,8,10,6,6,2,2])
y_numpy = np.array([-1,-1,-1,-1,-1,-1,1,1,1,1])
var = matrix(np.concatenate((var_1_numpy.reshape(-1,1),var_2_numpy.reshape(-1,1)),axis=1),tc='d')
Gram = np.dot(var,np.transpose(var))
print(Gram)
H = matrix(np.multiply(np.dot(y_numpy,np.transpose(y_numpy)),Gram),tc='d')
A = -np.array([[1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0],[0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0],[0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0],[0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0],[0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0],[0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0],[0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0],[0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0],[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0],[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0]])
A = A.astype(np.double)
A = matrix(A,tc='d')
B = matrix(np.zeros((10,1)),tc='d')
Aeq = matrix(np.transpose(y_numpy),tc='d')
Beq = matrix(0,tc='d')
ones = -matrix(np.ones((10,1)),tc='d')
sol = solvers.qp(H,ones,A,B,Aeq,Beq)
错误如下:
^{pr2}$显然,对于很多用户来说,这是一个反复出现的错误。我尝试了在stackoverflow上看到的所有方法(像我在这里那样手工定义matrice,使用astype使其成为float…),但仍然不起作用。在
我检查了:我有一个(10,10)矩阵是'd'。在
有什么问题?为什么CVXOPT在这种情况下不起作用?
目前没有回答
相关问题 更多 >
编程相关推荐