【问题标题】:Linear programming accuracy线性规划精度
【发布时间】:2016-01-31 18:36:15
【问题描述】:

我正在研究一个线性问题以最小化。它定义明确,主要使用 [0;1] 范围内的数字。 Excel 的线性求解器和 Mathematica 的 LinearProgramming 确实找到了一个解决方案,但是我认为它以一种糟糕的方式违反了我的一个约束:

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

我知道它处理计算机中使用的浮点数的有限精度。我想确定我是注定要死在这里还是有什么技巧可以克服这个问题。

【问题讨论】:

  • 在更高的层面上,你能解释一下为什么 10e-17 不够好吗?
  • 我有一个小案例的分析解决方案。它与求解器所说的不同,我相信这是原因,因为我仔细检查了所有内容。但是,我想将线性规划用于更大的实例。
  • 一些求解器具有精确模式,使用任意有理数。不过很慢。
  • @harold:我在 QSopt_ex 方面取得了相当大的成功。 “精确模式”可以通过首先以双精度求解,然后检查(精确算术)是否已获得最佳基本解来完成。如果不是,请转到一些更高精度但仍然是固定精度的浮点运算。如果你有一个非常糟糕的最佳基础,你可能仍然会感到沮丧。

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


【解决方案1】:

线性规划求解器几乎肯定使用 IEEE 754 64 位二进制浮点数。它存储相当于 53 个有效位,相当于大约 15.9 个十进制数字。使用这种表示法,精确性是不可能的,找到 10e-17 左右的解就可以了。

首先要做的是检查您使用普通求解器获得的近似解是否足以解决您的实际问题。请记住,任何用作输入的测量物理量的已知精度要低得多。

@harold 在评论中指出“一些求解器具有精确模式,使用任意有理数。虽然非常慢。”。如果您确实需要精确性,那么寻找具有有理数表示的求解器是您唯一的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    相关资源
    最近更新 更多