从 C# 中的 Cplex 预求解中获取结果

Getting results from Cplex presolve in C#

有没有办法获得Cplex在开始求解LP时所做的预求解分析的结果?特别是,我正在寻找有关冗余行的信息。如果可能,只 运行 预求解而不求解 LP 会很有用。我正在使用 C# 应用程序中的 Cplex 12.5。

您可以通过在 Cplex 对象上使用 ExportModel 文件扩展名“.pre”来生成 cplex 预求解模型。这将导致预求解 运行 并使 cplex 将预求解模型写入文件。输出的格式是"sav"格式,是无损的,但不是human-readable。您可以将其转换为可读的“.lp”格式,但将其导入回另一个新的 Cplex 对象,然后将该模型导出为 .lp 文件。

cplex.ExportModel("myModel.pre");

// convert to .lp file  
// Could also do this with interactive cplex
Cplex lp_converter = new Cplex();
lp_converter.ImportModel("myModel.pre");
lp_converter.ExportModel("myModelPresolved.lp");

然后您可以阅读预解析的 lp 文件并了解 cplex 在那个阶段对您的模型做了什么。您可能会对 cplex 的功能范围感到惊讶,甚至可能很难将预求解模型与原始模型进行协调。您可以通过设置参数来尝试更改预求解的范围。例如,将参数 PreLinear 设置为 1 可能会使模型更易于识别。