CVXOPT QP解算器:TypeError:“A”必须是包含10列的“d”矩阵

2024-04-23 23:22:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近在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在这种情况下不起作用?


Tags: fromimportnumpy类型var错误npones