mersenne-twister相关内容

多线程的随机数

问题 我打算为 Linux 编写一个 C++11 应用程序,它基于大约一百万个伪随机 32 位数字进行一些数值模拟(不是密码学).为了加快速度,我想使用台式机 CPU 的所有内核在并行线程中执行模拟.我想使用 Mersenne Twister mt19937 由 boost 作为 PRNG 提供,我想出于性能原因我应该每个线程有一个这样的 PRNG.现在我不确定如何为它们播种以避免在多个线程 ..
发布时间:2021-12-24 15:22:49 C/C++开发

std::mt19937 需要预热吗?

我读到许多伪随机数生成器需要许多样本才能“预热".使用 std::random_device 播种 std::mt19937 时是这种情况,还是我们可以期望它在构建后准备就绪?有问题的代码: #include std::random_device rd;std::mt19937 gen(rd()); 解决方案 Mersenne Twister 是一种基于移位寄存器的 pRNG(伪随机数生成器 ..
发布时间:2021-12-21 15:50:35 C/C++开发

线程安全梅森捻线机

寻找线程安全的随机生成器我找到了一个mersenne twister生成器类,作者说如果线程安全: http://www.umiacs.umd.edu/~yangcj/mtrnd.html 但是在研究了代码之后,我看不出它是否是安全线程.那里没有任何类型的锁或任何类似于锁变量的东西. 这个实现真的是线程安全的吗?如果是这样,魔法是什么? 解决方案 它似乎是线程安全的,因为 ..
发布时间:2021-09-07 18:38:31 其他开发

array_rand 是否使用 Mersenne Twister 算法?

在 PHP 中,我们可以选择 mt_rand() 和rand() 其中 mt_rand() 使用梅森Twister 算法和 rand() 使用 libc 随机生成器. 我想使用 array_rand.但是,array_rand 是否使用 Mersenne Twister 算法? 使用 mt_rand 实现我自己的 array_rand 非常简单,但如果 array_rand 使用 Me ..
发布时间:2021-07-02 19:54:20 PHP

有C ++ 11 CSPRNG吗?

我们知道,梅森·扭转者在影像学上是不安全的: Mersenne Twister不是加密安全的.(MT是基于线性递归.由a生成的任何伪随机数序列线性递归是不安全的,因为从足够长的子序列开始可以预测其余的输出.) 但是许多来源,例如 Stephan T. Lavavej 甚至是此网站.像这样使用梅森绞肉机的建议几乎总是(普通): auto engine = mt19937 {rando ..
发布时间:2021-04-20 18:32:40 C/C++开发

随机数发生器的上限

这实际上是上一个问题的后续问题: ​​双精度到单精度的舍入:强制上限 我以为上一个问题的答案解决了我的问题之后,我尝试再次运行程序,发现我也遇到了同样的问题. 我正在使用的Mersenne Twister实现会生成一个有符号的32位随机整数. 实现RNG的家伙使用此函数来生成范围为[0,1)的随机双精度浮点数: function genrand_real2() dou ..
发布时间:2020-11-10 06:38:59 其他开发

特定C ++随机数生成的Clang性能下降

使用C ++ 11的随机模块,将 std :: mt19937 (32位和64位版本)与 uniform_real_distribution (浮动或双精度,无所谓)。与g ++编译相比,它的速度要慢一个数量级! 罪魁祸首不仅仅是mt生成器,因为它在 uniform_int_distribution 。这不是 uniform_real_distribution 的普遍缺陷,因为对于其他生成器 ..
发布时间:2020-10-01 22:22:18 C/C++开发

mt19937和Uniform_real_distribution

我正在尝试找到一种有效的方法来实现均匀的(0,1)分布.由于必须生成大量样本,因此我选择mt19937作为引擎.我正在使用boost库中的版本.我的问题是:使用引擎本身的输出与使用uniform_real_distribution之间有什么区别? 选项1 std::random_device rd; boost::mt19937 gen(rd()); boost::random::un ..
发布时间:2020-07-04 02:44:21 C/C++开发

C ++ 11从频繁变化的范围生成随机数

问:如何从a未知范围生成(许多)均匀分布的整数?就性能(数百万个生成的数字)而言,首选的方式是什么? 上下文:在我的应用中,我必须在许多地方生成许多伪随机数.我为生成器使用单例模式,以保持应用程序运行的可重复性.在我的情况下,分发始终是统一的,但是问题是,要以C ++ 11样式预先创建分发对象,可能有太多的范围. 我尝试过的方法:有两种明显的解决方案,第一是拥有一次性分配对象,第二是使 ..
发布时间:2020-07-04 01:04:36 C/C++开发

蒙特卡罗模拟的最佳种子mt19937_64的播种方式

我正在开发一个运行蒙特卡洛模拟的程序;具体来说,我使用的是Metropolis算法.该程序需要生成数十亿个“随机"数.我知道Mersenne扭曲器在蒙特卡洛模拟中非常受欢迎,但是我想确保以最好的方式播种生成器. 目前,我正在使用以下方法计算32位种子: mt19937_64 prng; //pseudo random number generator unsigned long see ..
发布时间:2020-07-04 00:36:42 C/C++开发

PHP的mt_rand如何播种?

我知道PHP的mt_rand()不应出于安全目的使用,因为其结果在密码学上不强.然而,许多PHP代码只是这样做,或者在没有更好的随机性来源的情况下将其用作备用. 那它有多糟? mt_rand用于播种的随机性有哪些来源?密码应用程序的mt_rand还有其他安全问题吗? 解决方案 在PHP 5.4中,如果第一次使用mt_rand时会自动为其添加种子( mt_rand背后的RNG算法是 M ..
发布时间:2020-07-03 05:15:34 PHP

用于集群环境的伪随机数生成器

如何在群集上生成独立的伪随机数,例如进行蒙特卡洛模拟?我可以有许多计算节点(例如100个),并且我需要在每个节点上生成数百万个数字.我需要保证一个节点上的PRN序列不会与另一节点上的PRN序列重叠. 我可以在根节点上生成所有PRN,然后将它们发送到其他节点.但这太慢了. 我可以在每个节点上按顺序跳到一个已知的距离.但是,对于Mersenne-Twister或其他任何良好的PRNG,是否有这 ..
发布时间:2020-05-24 21:08:31 其他开发

Mersenne Twister在Python中的开源实现?

在Python中是否可以使用Mersenne Twister和其他良好的随机数生成器实现良好的开源实现?我想用于数学和自然科学专业的教学吗?我也在寻找相应的理论支持. 编辑: Mersenne Twister的源代码可以很多种语言(例如C(random.py)或伪代码(Wikipedia))获得,但是我在Python中找不到. 解决方案 Mersenne Twister 是标准pyt ..
发布时间:2020-05-21 01:58:17 Python

如何获取NumPy随机数生成器的当前种子?

以下代码导入NumPy并设置种子. import numpy as np np.random.seed(42) 但是,我对设置种子不感兴趣,但对阅读它更感兴趣. random.get_state()似乎不包含种子. 文档没有明显的答案. 假设没有手动设置,如何检索numpy.random使用的当前种子? 我想使用当前的种子继续进行下一个过程迭代. 解决方案 简短的答案 ..
发布时间:2020-05-18 19:38:34 Python