避免舍入的输入

数值问题的常见来源数值四舍五入的数字用来表示约束矩阵系数。为了说明这个问题,考虑下面的例子:

< span > < / span > \美元开始{数组}{rcl} x - 6 y & = & 1 \ 0.333 x - 2 y & = &对于brute \结束{数组}< span > < / span >美元
人们可能会说两个方程是等价的,但添加一个模型将导致一个不正确的结果。这一点很重要对于我们的用户:Gurobi总是相信他们提供的输入数字,而且他们永远不会改变,除非可以证明这种变化不会影响到解决方案。

因此,考虑到这一点,在presolve Gurobi可以使用第二个约束来确定:

< span > < / span > y:美元= 0.1665 x - 0.1665 < span > < / span >美元
当替换成第一个约束,这个收益率
< span > < / span > \美元开始{数组}{rcl} x - 6 \ cdot (0.1665 x - 0.1665) & = & 1 \ \ Leftrightarrow 0.001 x & = & 0.001 \结束{数组}< span > < / span >美元
因此< span > < / span > x = 1美元,美元\ y = 0 < span > < / span >作为唯一的解决方案。

如果用户提供了这两个方程:

< span > < / span > \美元开始{数组}{rcl} x - 6 y = & 1 \ 0.3333333333333333 x - 2 y = &0.3333333333333333 \结束{数组}< span > < / span >美元
这将给:
< span > < / span > y:美元= 0.1666666666666667 x - 0.1666666666666667 < span > < / span >美元
收益率:
< span > < / span > \美元开始{数组}{rcl} x - 6 \ cdot (0.1666666666666667 x - 0.1666666666666667) & = & 1 \ \ 2 \ cdot10 Leftrightarrow ^ {-16} x + 1 + 2 \ cdot10 ^{-16} & \大约1 \结束{数组}< span > < / span >美元
即使一个很小的阈值治疗一个系数为零,其结果是,第一个约束是真正的冗余。任何解决方案< span > < / span > x美元= 6 y + 1 < span > < / span >美元会认为是可行的。

的主要观点是,约束是完全平行,或线性相关(双精度浮点和小公差内)是无害的,但几乎是相互平行的约束产生微小系数线性系统解决了预处理,可以肆虐的解决方案的过程。在下一节中,我们扩展的限制双精度浮点数字,特别是为什么< span > < / span > 1美元\大约1 + 2 \ cdot10 ^ {-16} < span > < / span >美元