jjzjj

c++ - 我可以从 Mersenne Twister 获得当前种子吗?

我正在我的应用程序中调整MersenneTwister,特别是来自http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/emt19937ar.html的mt19937ar.c-代码反射(reflect)在https://gist.github.com/mstum/8367363上这在游戏中用作确定性RNG,并且为了使保存游戏按预期工作,我需要从MT中获取当前种子(而不是初始种子),以便我可以继续。例如,假设我用12345的种子初始化它并调用genrand_int315次。这会产生序列1996335345、1911592690、67

c++ - 为什么在 Gradient Noise Generator 中从 Mersenne twister 切换到其他 PRNG 会产生不好的结果?

我一直在尝试创建一个通用的渐变噪声生成器(它不使用散列方法来获取渐变)。代码如下:classGradientNoise{std::uint64_tm_seed;std::uniform_int_distributiondistribution;conststd::arrayvector_choice={glm::vec2(1.0,1.0),glm::vec2(-1.0,1.0),glm::vec2(1.0,-1.0),glm::vec2(-1.0,-1.0)};public:GradientNoise(uint64_tseed){m_seed=seed;distribution=std

c++ - 使用 32 位 Mersenne Twister 生成 64 位值

根据thisBoostdocumentationpage,MersenneTwister的64位变体比其32位对应变体慢得多(这是有道理的)。据我了解,C++11引入的很多特性,包括随机数生成,基本上都是标准库中的Boost。这使我相信标准C++中的32位MT性能也更好。我正在编写一个光线追踪器(主要是为了好玩),速度是我最关心的问题之一。基本上所有数值都表示为doublefloat。我的问题是,由于32位MT速度相当快,我可以用它来生成double吗?我会遇到哪些缺点(精度损失、性能等)? 最佳答案 为此,我添加了一个您未提及的假

当我%1000时,我为什么要获得大于1000的数字,一个由64位Mersenne Twister Engine生成的数字?

我正在尝试在国际象棋引擎中生成Zobrist键来进行转位表。如下所示,我是如何生成64位数字的方式:如何生成64位随机数?typedefunsignedlonglongU64;std::random_devicerd;std::mt19937_64mt(rd());std::uniform_int_distributiondist(std::llround(std::pow(2,61)),std::llround(std::pow(2,62)));兰德功能:U64ZobristH::random64(){U64ranUI=dist(mt);returnranUI;}为了尝试确保我正在生成足够的

hadoop - 混淆 hadoop、giraph 和 twister

我正在研究大数据,我的项目由具有文本数据的图表组成。我必须在一个项目本身中计算顶点之间的相似性、跳数概率、连接组件的数量、页面排名向量和随机游走。我在hadoop中实现了它们,但我认为它需要更多时间(图形有2500个节点、4000个边、600个连接的组件需要25分钟)所以什么是实现这些的最佳选择,apachehadoop或apachegiraph或apachetwister? 最佳答案 查找连接组件、页面排名计算和随机游走是迭代算法的示例。传统的Map-Reduce编程模型不是迭代算法(特别是图形算法)的好选择。原因是在map-re

Mersenne Twister:基于代理模型中使用的限制

我正在使用MersnenneTwister作为引擎来生成基于代理的模型中的随机数:它很快并且在重复之前的时间很长。最近,我对此进行了文献综述,而柯尔特图书馆JavaAPI推荐MersenneTwister,我遇到了两个局限性:种子不应该为0。这是ApacheCommons数学库中建议的吗?基于密码论文,提到“如果初始状态具有太多的零,那么生成的序列也可能包含许多零以上的零,并且如果系统地选择了种子,例如0、20、30…。输出序列将相关”。有人遇到过这样的问题,还是解决了问题,而不是这样?是否有任何文献显示了MersenneTwister与其他类似线性一致发电机的光谱分析?看答案sfmt具有更好

c++ - 使用 mersenne twister c++ 生成数字 (0,1)

我正在努力将R代码实现到C++中,以便它运行得更快,但我在实现mersennetwister时遇到了困难。我只希望生成(0,1)之间的值。这是我所拥有的与这个问题有关的内容。#includestd::mt19937generator(123);std::cout我尝试除以RAND_MAX,但这并没有产生我正在寻找的值。提前致谢。 最佳答案 在C++11中,“(伪)随机生成器”和“概率分布”的概念是分开的,这是有充分理由的。你想要的可以通过以下几行实现:std::mt19937generator(123);std::uniform_r

c++ - C++11 提供了哪个 Mersenne Twister?

我无法确定MersenneTwisterC++11提供的变体。在Mersennetwister:A623DimensionallyEquidistributedUniformPseudorandomNumberGenerator查看Matsumoto和NishimuraACM论文,作者提供了算法,算法的实现,并称之为MT19937。但是,当我用下面的小程序测试C++11的同名生成器时,我无法重现Matsumoto和Nishimura的MT19937创建的流。流与产生的第一个32位字不同。C++11提供了哪些MersenneTwister?下面的程序使用GCC、-std=c++11和GN

c++ - 为什么 Mersenne twister 比线性同余生成器更快?

我使用gccC++标准库的Mersennetwister实现进行了测试。它优于线性同余生成器和Crand,后者很可能是LCG。Aboostdocumentation似乎也给出了类似的结果,但更倾向于Mersennetwister。谁能解释一下?#include#include#include#includeclassTimer{private:std::chrono::high_resolution_clock::time_pointstart_time;std::chrono::high_resolution_clock::time_pointstop_time;public:voi

通过构造函数错误地播种Mersenne Twister

我的构造函数怎么了?每当我调用一个应该生成随机数的函数(大约每五秒钟一次)时,它就会生成相同的数字。每个呼叫实例化以下这些对象之一。我以为我在播种m_gen随机输出m_rd'operator()称呼。我可以通过m_rd()到构造函数?签名是什么?Shuffler(std::randomdevice&rd)?但是对于用户来说,这将变得更加困难。编辑:实际上,如果可能的话,我更喜欢您不需要将任何内容传递到构造函数的解决方案。Shuffler.H#includeclassShuffler{private:std::random_devicem_rd;std::mt19937m_gen;public:
12