【问题标题】:Numpy function to check `>=0` with tolerance for floating point errorNumpy 函数检查 `>=0` 对浮点错误的容忍度
【发布时间】:2020-02-03 12:43:01
【问题描述】:

使用 numpy,我们的优化求解器具有一个函数,该函数通过计算约束的松弛度(以矩阵和向量的形式)来检查解决方案的可行性。

我们使用以下代码测试可行性:

    return np.all(slacks_x >= 0) and np.all(slacks_u >= 0)

这有一个错误,因为有时松弛可以采用像 -1.5 e-12 这样的值,即接近零但由于浮点错误而为负值。在这种情况下,它会错误地返回 False

numpy 中是否有一个函数可以检查>=0 的公差?当前的解决方法是检查>= -0.1

【问题讨论】:

  • 使用np.allclose()?
  • 听起来你自己已经想出了这个功能?这只是“0.1 的容差”。
  • @Divakar 不等于==0

标签: python numpy optimization constraints precision


【解决方案1】:

也许尝试使用机器 epsilon np.finfo(np.float32).epsnp.finfo(np.float64).eps,然后返回类似:

eps = np.finfo(np.float32).eps #np.finfo(np.float64).eps
return np.all(slacks_x >= -eps) and np.all(slacks_u >= -eps)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-27
    • 2015-01-08
    • 2020-03-15
    • 2021-11-11
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多