我们有几种不同的优化算法,每次运行都会产生不同的结果。例如,优化的目标可能是找到函数的最小值,其中 0 是全局最小值。优化运行返回如下数据:
[0.1, 0.1321, 0.0921, 0.012, 0.4]
这非常接近全球最小值,所以这没关系。我们的第一种方法是只选择一个阈值,如果结果太高,则让单元测试失败。不幸的是,这根本不起作用:结果似乎具有高斯分布,因此,尽管不太可能,但有时即使算法仍然很好而我们运气不好,测试也会失败。
那么,我该如何正确测试呢?我认为这里需要相当多的统计数据。同样重要的是测试仍然很快,只是让测试运行几百次然后取平均值会太慢。
以下是一些进一步的说明:
例如,我有一个算法可以将一个圆拟合到一组点中。它非常快,但并不总是产生相同的结果。我想写一个单元测试来保证在大多数情况下它已经足够好了。
不幸的是,我无法为随机数生成器选择固定种子,因为我不想测试算法是否产生与以前完全相同的结果,但我想测试类似“90% 确定我得到 0.1 或更好的”。