2

我的目标是将开源 CBC 求解器与 Spyder 中的 Pyomo 连接起来。我正在使用 Windows 10 机器,由于公司政策,我不能选择使用 NEOS 服务器。

我已经从 Bintray ( https://bintray.com/coin-or/download/Cbc#files ) 下载了包含 cbc.exe 文件的二进制文件。但是,当尝试运行它时,会出现几个错误,指出我缺少文件(在其他 libbz2-1.dll 和 zlib1.dll 中)。我对 linux 或软件开发知之甚少,但在谷歌上呆了很长时间后,我了解到这些用于解包数据等。我在同一主题的开发人员聊天中找到了除 zlib1.dll 之外的所有文件,以及在另一个页面上找到的 zlib1.dll。但是在运行时,我现在收到错误消息:“应用程序无法正确启动 (0xc000007b)。

我还尝试下载 MSYS2 MinGW 并按照 CBC 的说明进行操作。我不知道我是否需要这个,或者它是否仅适用于开发人员。

谁能告诉我该怎么做?我怀疑除了我自己以外的其他人想在 Pyomo 中使用 CBC 作为 GLPK 的替代品。

4

2 回答 2

1

您将在此处找到一些一般信息,其中我概述了一些方法。

虽然这是针对 Clp,但它也适用于 Cbc。

我也观察到这有点奇怪,有些库不是静态链接的(zlib),虽然它肯定是可行的。但正如线程中所提到的,这种情况不再是这种情况(请参阅关于哪些文件是完全静态链接的限制),因此您的观察很奇怪(而且您没有说您下载了哪个文件)。

所以我会尝试以下之一(按此顺序):

  • 再次尝试使用您的源代码,但坚持使用主版本(请参阅第一个链接),因为维护者只保证为这些版本提供完全静态的构建!
  • 使用来自AMPL的构建
    • (经过测试并为我工作;通常在构建的质量/稳定性方面推荐)
  • 使用coin-or/pulp的构建,这是 python 的另一个建模工具
    • (经过测试并为我工作)
  • 使用 mingw64 从源代码编译
  • (使用任何构建并提供一些 zlib 和 co 的外部 dll -> 难以调试)

当然,我完全忽略了其他潜在问题:

  • 许可证的东西(这些构建的一部分是什么)
    • 不确定公司是否有能力使用二进制文件而不是在法律方面自行构建
  • 与 python 的版本兼容性
    • 每个版本的 Cbc 都有效吗
  • cbc版本+配置
    • 现代版
    • 多线程编译
    • ...
于 2020-04-01T11:22:27.933 回答
1

如果您已经有 .exe 文件,请确保它在您当前的工作文件夹中(在 Spyder 中设置为工作目录,仅打开文件是不够的)并使用 SolveFactory 函数调用它:

opt = SolverFactory("cbc.exe")

results = opt.solve(model)

这个对我有用。

于 2020-04-09T15:19:06.260 回答