Mathematical optimization GLPK(纸浆包装机)中的约束冲突

Mathematical optimization GLPK(纸浆包装机)中的约束冲突,mathematical-optimization,glpk,pulp,Mathematical Optimization,Glpk,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 那么,在这种情况下我能做什么?我可以提高精度还是使用其他解决方案?我想,你在数值精度方

我将纸浆与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

那么,在这种情况下我能做什么?我可以提高精度还是使用其他解决方案?

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

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

这是QSopt的链接

这是这个soplex的链接。

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

此外,您还可以将SCIP与SoPLex一起使用。他们有或有一些确切的IP项目。所以,如果许可证对您合适,在这种情况下,我会选择SCIP


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

我现在看到了您的完整评论。请跟进我发给你的关于abs问题的答案。VUB通常不是模拟abs值的最佳方法。如果您需要abs功能,您可以使用SOS约束来协商这些数字危险。最好的解决方案(商业和免费)是COIN-CBC。(参见www.coin-or.org)。顺便说一句,你可以在内部使用cbc,但与+M方法相比,它的工作速度非常慢,是正确的还是我做错了什么?所以,我可以告诉你关于SCIP、CPLEX和Gurobi,它们通常也很好地跟踪数值稳定性。bigM的问题是,它破坏了问题的条件,导致单纯形法中LU分解的更多完整分解,而不是LU更新,这会减慢迭代。其次,SOS约束意味着几个可变的传播规则,因此它通常比有大量vub约束时性能更好。但我无法从自己的经验中告诉您。*在这里,您可以找到与SCIP/CPLEX/Cbc*商业用途的性能比较:GLPK是GPL而不是LGPL,因此在使用上也非常有限。您甚至不能将其与任何其他商业软件结合使用。COIN-CBC是CPL许可的,因此更适合商业用途。