GLPK(Pulp wrapper)中的约束违规

Constraint violation in GLPK (Pulp wrapper)

我将 Pulp 与 GLPK 求解器一起使用,并遵循以下约束:

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

求解器:

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

但结果我解决了违反约束的问题(状态 'Optimal'):

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

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

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

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

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

这是这个复杂内容的 link。 http://soplex.zib.de/doc/html/EXACT.php

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

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

也许,您可以更深入地了解您的申请,以便重新制定您的限制。