我可以将 lp 文件读入 pulp.LpProblem 对象吗

Can I read an lp file into pulp.LpProblem object

我有一个非常大的 LP 问题保存为 lp 文件。有没有一种方法可以使用 PuLP 将该文件作为 LpProblem 对象读取?构建这个问题花了很多时间(大约 7 个小时),我只想使用一个代码,我必须向它添加更多约束。

据我所知,pulp 不支持读取文件。

文档 here 显示有一个 writeLP 方法(这是所有这些求解器所需的核心功能;纸浆似乎主要基于写入 lp -> 在 lp 文件上调用求解器), 但没有 read/load 方法。

一个可能的原因是,尽管有一些额外的工作不会被许多用户使用,但人们可能会使用它来加载任何 lp 文件。这会有问题,因为不同的求解器使用不同的标准(即使格式的核心思想相同)。

请记住,lp 格式可能会强制执行一些需要转换约束的假设。这意味着,某些基于 lp 文件的读取方法永远无法返回原始公式,而只能返回等同的东西。这进一步增加了这项任务的复杂性。

使用 Python 的内置序列化(如 pickle)可能会存储一些 LpProblem(不同的方法:从 python 角度保存内部状态)。但这在一定程度上取决于实现,对您的用例也无济于事。

由于 运行 遇到了与 PuLP 相同的问题(以及许多其他问题),Freewheel 的一群线性求解、具有开源意识的工程师已经开始开发 Flipy,Python 专门从事线性规划的包。一些主要功能:运行时间性能和 READ LP 功能。请随时查看 https://github.com/freewheel/flipy

我发现 Python-MIP 是读取 Python 中的 LP 文件的一个很好的解决方案。它也可以正确读取 integer/binary 变量,而例如 flipy 则不能。它也比 IBM CPLEX 或 Gurobi 的 Python API 更易于使用。

这似乎对我加载变量和 instance/model。

import pulp

var, model = pulp.LpProblem.fromMPS('my_file.mps')