Numpy функция для проверки `> = 0` с допуском для ошибки с плавающей запятой - PullRequest
0 голосов
/ 03 февраля 2020

Используя numpy, наш решатель оптимизации имеет функцию, которая проверяет выполнимость решения, вычисляя слабые места для ограничений в виде матриц и векторов.

Мы проверяем выполнимость, используя такой код, как :

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

В этом есть ошибка, потому что иногда слабины могут принимать значения типа -1.5 e-12, то есть близкие к нулю, но отрицательные из-за ошибок с плавающей запятой. В этом случае он ошибочно возвращает False.

. Есть ли в numpy функция, которая может проверять >=0 с допусками? Текущий обходной путь должен проверить >= -0.1.

1 Ответ

1 голос
/ 03 февраля 2020

Может быть, попытаться использовать машину epsilon np.finfo(np.float32).eps или np.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)
...