-1

我想对 QP 问题使用 Solver ecos,问题是这个求解器不能不承认我的矩阵是稀疏矩阵,我想知道我应该如何修复它。

所以这是矩阵设置的代码

import numpy as np
matrixSize = 10  
Qa= np.random.rand(matrixSize, matrixSize) 
Q_1 = np.dot(Qa, Qa.transpose()) 
print(Q_1)
np.linalg.cholesky(Q_1)
p_1= np.random.uniform(0, 9, size=10)
G_1 = np.diag(-1*np.random.uniform(0, 9, size=10))
h_1 = np.random.uniform(-9, 9, size=10) 
np.savez_compressed(r'C:\Users\skqkr\Desktop\Semesterarbeit/Chiwan_Q1', 
Q=Q_1, p=p_1, G=G_1, h=h_1)

现在是 ecos Solver 的代码

import ecos 
import time 
import numpy as np   
from scipy import sparse 
Matrix10 = np.load(r'C:\Users\skqkr\Desktop\Semesterarbeit/Chiwan_Q1.npz') 
start = time.time()

P = 2*(Matrix10['Q'])  # quick way to build a symmetric matrix 
q =Matrix10['p']
 
G_1= Matrix10['G'] ## sparsematrix?? 
G= sparse.bsr_matrix(G_1)  
 
h = Matrix10['h']
solution = ecos.solve(P,q,G,h) 
print("QP solution: x = {}".format(x))
print("time :", time.time() - start)

TypeError: G is required to be a sparse matrix

我在变量 G 处使用了他们的稀疏矩阵,但它没有被确认为稀疏矩阵 我该如何解决这个问题?

4

1 回答 1

1

根据ecos文档,调用签名是

solution = ecos.solve(c,G,h,dims,A,b,**kwargs)

在哪里GA是稀疏的。

但是你用

solution = ecos.solve(P,q,G,h) 

qG's插槽中。难怪它在抱怨。

阅读并重新阅读文档。那应该是第一步,而不是SO。

于 2021-07-24T01:24:03.703 回答