- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们有几种不同的优化算法,每次运行都会产生不同的结果。例如,优化的目标可能是找到函数的最小值,其中 0 是全局最小值。优化运行返回的数据如下:
[0.1, 0.1321, 0.0921, 0.012, 0.4]
这非常接近全局最小值,所以这是可以的。我们的第一个方法是只选择一个阈值,如果结果太高,则让单元测试失败。不幸的是,这根本不起作用:结果似乎具有高斯分布,因此,尽管不太可能,但有时测试会失败,即使算法仍然很好,而且我们只是运气不好。
那么,我该如何正确测试呢?我认为这里需要相当多的统计数据。还有一点很重要,测试仍然要快,仅仅让测试运行几百次然后取平均值会太慢。
以下是一些进一步的说明:
例如,我有一个算法可以将圆拟合到一组点中。它非常快,但并不总是产生相同的结果。我想编写一个单元测试来保证在大多数情况下它足够好。
不幸的是,我无法为随机数生成器选择固定种子,因为我不想测试算法是否产生与以前完全相同的结果,但我想测试类似“以 90% 的确定性我获得 0.1 或更好的结果”。
最佳答案
听起来您的优化器需要两种测试:
由于算法涉及随机化,(1) 很难进行单元测试。任何随机过程的测试都会在一定比例的时间内失败。您需要了解一些统计数据才能了解它应该失败的频率。有多种方法可以在测试的严格程度和失败频率之间进行权衡。
但是有一些方法可以为 (2) 编写单元测试。例如,您可以在运行单元测试之前将种子重置为特定值。那么输出是确定性的。这将不允许您评估算法的平均有效性,但这是针对 (1) 的。这样的测试将充当绊线:如果有人在维护期间向代码中引入了错误,确定性单元测试可能会捕获该错误。
可能还有其他可以进行单元测试的东西。例如,无论随机部分发生什么情况,您的算法都可以保证返回特定范围内的值。也许某些值应该始终是正数,等等。
更新:我在《美丽测试》一书中写了一章关于这个问题的内容。请参阅第 10 章:Testing a Random Number Generator .
关于unit-testing - 如何进行不确定性的单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/443000/
我有一个非常简单的目标:编译一个 Scala 类,然后从另一个 Scala 脚本中加载它。问题是 Scala 似乎缓存了(不确定在哪里)我创建的类,并且不尊重后续更改。 以下几行创建一个包含两个 .s
我在 WebSphere 上运行的 Java EE 应用程序发生了一种非常非常奇怪的情况。 EAR --someJar.jar ----config/propfile.properties
我在使用 python 不确定性包时遇到了困难。我必须用python评估实验数据,我已经这样做了一段时间但从未遇到以下问题: >>>from uncertainties import ufloat >
我有phabricator设置。作为 git 的新手,确保我自己的配置文件(可能还有其他文件中的一些 hack)与来自上游的配置文件共存的理智/正确方法是什么? 最佳答案 将您的更改保存在单独的分支上
我今天花了一些时间,试图制作我的第一个 maven 管理的 Google 应用引擎 1.5.4 + GWT 2.4.0 构建。 我终于进入了所有内容都可以编译并且 gae:run 目标起作用的阶段。这
在类中,您可以在其中创建字段,如以下示例中的 int bar 。 Class foo{ int bar; foo(int bar){ bar = bar; }
我正在尝试运行我的程序,但在几次运行中我遇到了一个错误: terminate called after throwing an instance of 'std::system_error' wh
我必须制作具有 epsilon 转换的非确定性有限自动机。我更像是一个 c、c#、JavaScript 的人,但我的大学出于某种原因认为 python 是唯一的出路,所以今天我学习了 python,但
你怎么得到sklearn's SGDClassifier以显示其预测的不确定性? 我正在尝试确认 SGDClassifier 将报告不严格对应于任何标签的输入数据的概率为 50%。但是,我发现分类器始
下面是我导出的 java headless selenium 测试用例代码,可以在 IDE 中正常运行。 package pack; import java.util.regex.Pattern; i
我是一名优秀的程序员,十分优秀!