如何从 ortools 导出 MPS 文件?

How do you export an MPS file from ortools?

以ortools的SCIP代码为例:

from ortools.linear_solver import pywraplp
solver = pywraplp.Solver.CreateSolver('SCIP')

infinity = solver.infinity()
# x and y are integer non-negative variables.
x = solver.IntVar(0.0, infinity, 'x')
y = solver.IntVar(0.0, infinity, 'y')

print('Number of variables =', solver.NumVariables())

# x + 7 * y <= 17.5.
solver.Add(x + 7 * y <= 17.5)

# x <= 3.5.
solver.Add(x <= 3.5)

print('Number of constraints =', solver.NumConstraints())

# Maximize x + 10 * y.
solver.Maximize(x + 10 * y)

我想将其导出为 MPS 文件。我可以看到

solver.ExportModelAsMpsFormat

存在,但我能找到的唯一文档说

Signature: solver.ExportModelAsMpsFormat(fixed_format: 'bool', obfuscated: 'bool') -> 'std::string'
Docstring: <no docstring>
File:      c:\users\csxrc\anaconda3\lib\site-packages\ortools\linear_solver\pywraplp.py
Type:      method

我不明白如何使用它。例如如何指定文件名。

如果我只是想将模型保存为名为“test.mps”的 MPS 文件,我该怎么办?

更新

@Krerkkiat Chusap 建议调用该函数创建一个可以单独编写的字符串。如果我这样做

output_string = solver.ExportModelAsMpsFormat()

我明白了

TypeError: ExportModelAsMpsFormat() missing 2 required positional arguments: 'fixed_format' and 'obfuscated'

这两个参数似乎都是布尔值。它们代表什么?

C++ implementation开始,fixed_format似乎没有被使用,所以通过FalseTrue应该没问题。

对于obfuscated,它通常意味着让一些东西难以阅读,所以保持它为False是有意义的。

with open("test.mps", "w") as out_f:
    mps_text = solver.ExportModelAsMpsFormat(fixed_format=False, obfuscated=False)
    out_f.write(mps_text)