硬件随机数发生器 Vs。马尔可夫链蒙特卡罗过程战场中的伪随机数生成器

计算科学 统计数据
2021-12-11 10:50:38

我正在为量子蒙特卡罗例程实施马尔可夫链蒙特卡罗过程,到目前为止,在我读过的每一本书和论文中,例程的成功和结果的质量很大程度上取决于随机数生成器。

好吧,我选择在C++ 2011中实现代码,并且向我展示了相当广泛的伪随机数生成器引擎和非确定性随机数生成器(基于大多数现代计算机的硬件随机数生成器)有)。

选择一个好的随机数生成器的物理或统计原因是什么?哪一个最适合这个目的,一个经过充分研究的伪随机数生成器引擎或(我认为不可预测的)硬件随机数生成器?

您可以在此处查看可用的引擎。

2个回答

除了完全加密之外,没有理由使用硬件随机数生成。对于其他一切,包括计算物理学,伪随机生成器都很好。我建议使用 Salmon 等人的Random123库:它快速、易于并行化且功能强大(尤其比 Mersenne Twister 更强大)。

尽管质量要求很大程度上取决于应用程序,但使用高质量的发生器很重要。一个可能出错的例子:在显式溶剂分子动力学中,通常采用 1 飞秒量级的时间步长 (1015s)。一个只有周期的生成器232每步评估一次类似于频率为的辐射输入0.2兆赫。如果这是所讨论系统的物理上有趣的频率,则结果将无效。

令人高兴的是,由于有许多随机生成器对于基本上所有非加密目的(包括 Random123 和 Mersenne Twister)都足够快且足够强大,因此在实践中没有真正的权衡。

Geoffrey 已经回答了这个问题,但我想添加另一个观点。您必须以一种或另一种方式做的事情之一是调试代码。不一定是您必须调试与随机数本身有关的任何事情,而是说,取决于随机选择的样本的函数评估中的错误。

在这种情况下,如果您使用不确定的随机数生成器会非常尴尬,也就是说,在每次运行中不会产生相同的数字:因为如果您确实使用了不确定的随机数生成器并且您会看到一个错误,下次调用程序时将无法重现它。因此,我总是告诉我的学生使用使用固定种子的确定性随机数生成器。今天的 RNG 已经足够好,人们不必担心它们的数字序列中没有足够的熵,而且它们的确定性特性允许您调试程序。