- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在为蒙特卡罗模拟编写 C++ 代码。因此,我需要生成许多均匀分布在 [0,1) 之间的数字。我包含了以下取自 here 的代码生成我的号码:
// uniform_real_distribution
#include <iostream>
#include <random>
std::default_random_engine generator;
std::uniform_real_distribution<double> distribution(0.0,1.0);
int main()
{
double number = distribution(generator); //rnd number uniformly distributed between [0,1)
return 0;
}
所以每次我需要一个新号码时,我只需调用distribution(generator)
。我运行我的蒙特卡洛模拟以获得许多样本结果。结果应该围绕真实平均值(未知)呈正态分布。当我运行卡方拟合优度检验以检查它们是否呈正态分布时,我的样本结果有时无法通过检验。这里的关键词是“有时”,所以这让我觉得我调用了太多次 distribution(generator)
,最后我失去了生成数字的随机性。我说的是每次模拟中生成的 10^11 个数字。
这可能吗?如果我在调用它之前使用 distribution.reset()
重置分配会怎样?这会解决我的问题吗?
感谢您提出任何建议。
最佳答案
如果随机数生成器有时没有通过测试,那么测试就太弱了。例如,如果一个测试有 99% 的置信度,那么一个完美的随机数生成器应该有大约 1% 的概率会失败。
例如,考虑一枚完全公平的硬币。如果翻转 1,000 次,平均会出现 500 次正面朝上。如果你想用它来测试随机性,你可以计算一个公平硬币在一定时间百分比内落入的值范围。然后确保您的随机数生成器不会比预期更频繁地失败测试。
您的测试方法——期望随机数生成器每次都能通过每个测试——只有在您的测试非常弱时才有效。这将使糟糕的随机数生成器过于频繁地通过,这不是一种好的测试方法。
真实故事:我实现的一个随机数生成器经过了 an independent testing lab 的严格测试.他们对其进行了 100 次测试,每次测试使用数百万个样本并测试各种特性。每个测试都有 99% 的置信度。 RNG通过了3次测试,均在预期范围内,因此通过了认证的测试部分。一个 RNG 在绝大多数时间都通过了这些极其严格的测试,这表明它是一个非常非常好的 RNG,也许是完美的。很难编写一个通过任何这些测试的损坏的 RNG。
您需要计算完美 RNG 无法通过测试的概率,然后查看您的 RNG 显示的失败率是否接近预期。
关于c++ - std::uniform_real_distribution 在失去随机性之前可以生成多少个随机数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30515377/
我试图影响 Z3 生成的模型值结果的随机性。据我所知,这方面的选择非常有限:在线性算术的情况下,单纯形求解器不允许仍然满足给定约束的随机结果。但是,有一个选项 smt.arith.random_ini
我需要从表中获取一些数据并通过两个参数对它们进行排序。参数之一是 RAND(),因为记录需要是随机的。我有一个很大的数据库,使用 RAND() 会大大降低性能,我想避免它。是否有机会优化随机排序的性能
所以我尝试将 Boost.Random mt19937 生成器与模板一起使用。我的 c++ 有点生疏,但据我所知(和文档一样,Boost 的文档也很模糊)它应该采用一个模板参数来指定它的返回类型(fl
我正在尝试为家庭作业编写一个遗传算法来解决旅行商问题。 我正在尝试的变异函数之一是在游览中使用 random.shuffle。 当我阅读 random.shuffle 的文档时,我看到: shuffl
尝试创建随机 (0/1) boolean 操作。我设置了一个多维数组。到目前为止,一切正常。我在正确的道路上吗?我目前使用递归;有没有更有效的方法来做到这一点? function randomMove
我想在每天下午 1 点到 2 点之间的随机时间运行一个云函数。我使用 Cloud Scheduler (cron) 将消息发布到触发该功能的 PubSub。我想在 Cloud Scheduler 端实
我想在每天下午 1 点到 2 点之间的随机时间运行一个云函数。我使用 Cloud Scheduler (cron) 将消息发布到触发该功能的 PubSub。我想在 Cloud Scheduler 端实
这可能是一个相当愚蠢的问题。我想知道在 Swift 中使用 arc4random_uniform 是否可以实现不同的细微差别/随机性程度。这是一个例子: let number = arc4random
我正在开发一部分代码,其中我必须使用日历 API 使用现有的 api,而我使用的是全新的 API。在转换中出现了一些奇怪的行为,请看这个例子: SimpleDateFormat df = new Si
我是一名优秀的程序员,十分优秀!