0

我有基于 CPLEX 求解器(可行性泵 2.0)的 MIP 程序。

我的任务是让这个程序在 CBC 求解器上运行。

所以我尝试用相应的功能更改代码,但程序大小太大,无法修改每个 CPLEX 代码(源代码大小几乎 2MB)。

你知道有效的方法或有用的参考吗?

4

1 回答 1

0

事情可能比您目前想象的要复杂:我怀疑每个 CPLEX 函数是否存在等效的 CBC 函数。即使一个函数具有相同的签名,它也可能具有稍微不同的语义。所以无论如何都必须一一检查。某些 CPLEX 功能甚至可能在 CBC 中没有等效功能,并且使用的某些功能可能不受 CBC 支持。

更好的方法是(如建议的一些评论)调整代码,以便它使用一些抽象和通用接口,您可以通过 CBC 和 CPLEX 实现这些接口。然后,您可以随时更换底层求解器。

如果您不想移动到抽象接口,最好的选择可能是

  1. 查找代码使用的每个 CPLEX 函数。
  2. 在 CBC 中找到一个等价的函数。如果不存在完全相同的等价物,则使用仅基于 CBC 功能的完全相同的签名和语义创建您自己的函数。
  3. 对代码进行搜索/替换。

这里的困难步骤是 2。这在很大程度上取决于您的代码使用哪些 CPLEX 函数以及将它们映射到 CBC 函数的难易程度。

于 2020-07-24T13:33:03.020 回答