У нас есть несколько различных алгоритмов оптимизации, которые дают разные результаты для каждого прогона. Например, целью оптимизации может быть поиск минимума функции, где 0 - глобальные минимумы. Прогоны оптимизации возвращают данные следующим образом:
[0.1, 0.1321, 0.0921, 0.012, 0.4]
Это довольно близко к глобальным минимумам, так что это нормально. Наш первый подход состоял в том, чтобы просто выбрать пороговое значение и позволить unit test выйти из строя, если результат был слишком высоким. К сожалению, это не работает: результаты, похоже, имеют распределение gauss, поэтому, хотя и маловероятно, время от времени тест не удался, даже если алгоритм все еще прекрасен, и нам просто не повезло.
Итак, как я могу проверить это правильно? Я думаю, что здесь нужно немного статистики. Также важно, чтобы тесты все еще были быстрыми, просто позволяя тесту пройти несколько 100 раз, а затем принять среднее значение будет слишком медленным.
Вот некоторые дополнительные пояснения:
-
Например, у меня есть алгоритм, который соответствует кругу в набор точек. Это очень быстро, но не всегда дает тот же результат. Я хочу написать unit test, чтобы гарантировать, что в большинстве случаев это достаточно хорошо.
-
К сожалению, я не могу выбрать фиксированное семя для генератора случайных чисел, потому что я не хочу проверять, дает ли алгоритм тот же результат, что и раньше, но я хочу проверить что-то вроде "с 90% уверенностью" получить результат с 0,1 или лучше ".