我希望在Python中解决一个线性规划问题。变量的数量(我将其称为N)非常大(约50000),为了以scipy.optimize.linprog
要求的方式来表达问题,我必须构建两个N x N矩阵(如下所示的A
和B
)。该LP可以写成:
minimize: c.x
subject to:
A.x <= a
B.x = b
x_i >= 0 for all i in {0, ..., n}
其中 .
表示点积,a
、b
和 c
是长度为 N 的向量。
我的经验是构建这样的大矩阵(A
和 B
都有大约 50000x50000 = 25*10^8 个元素)会遇到一些问题:如果硬件不太强,NumPy 可能会拒绝构建如此大的矩阵(例如参见 Very large matrices using Python and NumPy),即使 NumPy 没有出现问题地创建矩阵,也存在巨大的性能问题。考虑到 NumPy 处理的数据量非常庞大,这是很自然的。
然而,尽管我的线性程序具有 N 个变量,但我处理的矩阵非常稀疏。其中一个矩阵只有第一行有条目,另一个矩阵只有前 M 行有条目,其中 M < N/2。当然,我希望利用这一事实。
据我所读(例如尝试使用稀疏矩阵解决Scipy优化问题并失败),scipy.optimize.linprog
不能处理稀疏矩阵。因此,我有以下问题: