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。
也许,您可以更深入地了解您的申请,以便重新制定您的限制。
我将 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。
也许,您可以更深入地了解您的申请,以便重新制定您的限制。