线性编程精度

时间:2015-10-31 11:46:24

标签: floating-point precision linear-programming solver lpsolve

我正在努力解决线性问题。它定义明确,主要使用范围[0; 1]中的数字。 Excel的线性求解器以及Mathematica的LinearProgramming确实找到了解决方案,但是当我看到它以一种坏的方式违反了我的一个约束:

约束必须完全等于0才能使我的解决方案有效,而两个求解器都将数字〜10E-17放在那里并将其视为满意。我试着用准确度进行操作但是当我进入10E-17时它表明问题不是线性的,这是错误的。自动缩放也无济于事。

我知道它涉及计算机中使用的浮点数的有限精度。我想确定我是在这里注定要么是否有任何技巧来解决这个问题。

1 个答案:

答案 0 :(得分:3)

线性编程求解器几乎肯定使用IEEE 754 64位二进制浮点。它存储相当于53个有效位,相当于大约15.9个十进制数字。有了这种表示,准确性是不可能的,找到10e-17左右的解决方案就像你将要获得的一样好。

要做的第一件事是检查您使用普通解算器获得的近似解决方案是否足以满足您的实际问题。请记住,任何用作输入的测量物理量都知之甚少。

@harold在评论中表示“有些求解器具有精确模式,使用任意有理数。尽管很慢。”。如果你真的需要精确性,那么寻找具有有理数表示的求解器是你唯一的解决方案。