2

我将 Pulp 与 GLPK 求解器一起使用并具有以下约束:

-1000000*f1 + v1 + 1000000*f2 - v2 >= -10.999

求解器:

problem.solve(GLPK(options=['--mipgap', '0.000001', '--cuts']))

但结果我解决了违反约束的问题(状态“最佳”):

f1 = 0
v1 = 11
f2 = 1
v2 = 1000000

那么,在这种情况下我能做些什么呢?我可以以某种方式提高准确性或使用其他解决方案吗?

4

1 回答 1

2

我认为,您遇到了数值准确性问题。您的系数按 1.e7 的顺序排列(并且您需要 1.e-6 的解决方案)。解决方案至少需要在 1.e11 中正确才能保持约束,并且通过参数,您需要最大 1.e-14 相对误差。

简单来说,这对于纯数值求解器来说太过分了。(期望最大 1.e-6 到 1.e-7 对 LP-Solver 运行可靠)有像 QSopt 这样的精确求解器,我也认为,soplex 现在有了这些功能。

这是 QSopt 的链接 http://www.math.uwaterloo.ca/~bico/qsopt/downloads/downloads.htm

这是这个复杂的东西的链接。 http://soplex.zib.de/doc/html/EXACT.php

QSopt 仅以二进制形式提供(我认为),SoPlex 可免费用于研究(据我所知)。

此外,您可以将 SCIP 与 SoPLex 一起使用。拥有或拥有一些确切的 IP 项目。所以,如果你的许可证没问题,在这种情况下我会选择 SCIP。

也许,您可以更深入地了解您的应用程序,以便可以重新制定您的限制。

于 2016-05-25T08:35:04.960 回答