求用于测试并行单纯形算法的大型数据集及MPS解析器
解决方案:并行单纯形算法的测试数据集与MPS解析器推荐
嘿,我刚好在做线性规划并行算法的时候踩过类似的坑,给你分享几个实用的解决方案!
一、直接可用的A/b/c格式数据集
如果你不想折腾MPS文件,这些现成的结构化数据集可以直接拿来测试:
- NETLIB LP预处理数据集:很多开发者已经把NETLIB经典LP问题(比如
afiro、adlittle这类小型问题,或是scagr7、scfxm1这类大型问题)转换成了NumPy数组或稀疏矩阵格式。你可以在GitHub上搜索「NETLIB LP matrices」找到不少公开仓库,里面的文件通常是.npy或.npz格式,直接用numpy.load()就能加载出A、b、c。 - 学术项目公开数据集:一些优化领域的学术项目会发布预处理好的LP数据集,以CSV、Parquet或二进制矩阵格式存储,适合快速导入到Python/C的程序中。
- lp_solve测试集:lp_solve的官方测试库中有部分问题已经导出为结构化文本格式,你可以直接读取其中的约束矩阵、右端项和目标系数。
二、各语言易用的MPS解析器推荐
如果还是需要处理MPS格式的文件,这些工具能帮你快速提取A、b、c:
Python
- pymps:轻量级专门解析库,API极简,返回Scipy稀疏矩阵(刚好适配大型数据集的内存需求),安装和使用都很方便:
from pymps import read_mps lp_problem = read_mps("your_lp_problem.mps") # 获取稀疏矩阵A,向量b、c A = lp_problem['A'] b = lp_problem['b'] c = lp_problem['c'] - scipy.optimize.read_mps:Scipy自带的工具,无需额外安装,适合已经在用Scipy生态的场景:
from scipy.optimize import read_mps result = read_mps("your_file.mps") A = result['A'] b = result['b'] c = result['c'] - mpsreader:对复杂MPS变体支持更好,处理大文件效率较高,执行
pip install mpsreader即可安装使用。
C语言
- MPSlib:轻量级独立库,代码简洁,容易集成到你的并行算法中,直接返回稀疏矩阵的行、列、值数组以及b、c向量,没有多余依赖。
- CLP(Coin-or Linear Programming):虽然是完整的LP求解器,但它的MPS解析模块非常成熟,你可以单独提取解析部分,或者调用其API读取MPS文件并获取所需的矩阵和向量,兼容性拉满,适合工业级大型数据集。
Java
- Apache Commons Math:官方提供的
MpsParser类,稳定性高,文档齐全,能直接读取MPS文件并返回线性规划问题对象,轻松提取A、b、c。 - OsiJava(Coin-or Java绑定):适合需要和求解器集成的场景,解析效率出色,支持各种MPS格式。
JavaScript
- mps-parser:npm上的轻量级包,在Node.js或浏览器环境都能使用,解析后返回JSON格式的问题数据,包含A的稀疏表示和b、c向量,执行
npm install mps-parser即可快速上手。
小提示
处理大型数据集时,优先选择返回稀疏矩阵的解析器,不仅能节省内存,还能更好地适配并行单纯形算法的稀疏运算逻辑。
内容的提问来源于stack exchange,提问作者Lou K.
相关产品推荐
相关产品推荐

