问题标签 [mersenne-twister]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
algorithm - Mersenne Twister 算法的解释
我希望在项目中实现 Mersenne Twister 随机数生成器。但是,由于这是针对嵌入式应用程序,我稍后将针对我的架构优化代码。但是,我几乎找不到关于代码如何工作的文档,而且我几乎可以肯定这不是精灵尘埃和魔法。有没有我可能忽略的好的文档?流程图会很好。如果没有,如果有人能给我一个算法的逐步解释,我将不胜感激。谢谢!
java - Java 的 java.util.Random 可靠吗?
我不禁注意到......在我开始开发我的数学游戏(并在不断调整它后将其提供给 beta 测试人员,但我仍然没有完成!)之后,我的使用java.util.Random
和它的方法nextInt()
可能不会我正在寻找的可靠的救世主课程。是为像我这样的应用程序生成随机数吗?//这个应用程序的重点是制作一个对所有人都具有挑战性的算术游戏,让您解决整数和浮点参数的问题。我的程序生成的最高数字是 6 位数字,这是因为我在人类计算器(最高级别)难度(即除法问题)中使用了一些不同的逻辑。我正在考虑使用 Mersenne twister 算法,但我认为使用的算法java.util.Random
是这样的: http: //docs.oracle.com/javase/7/docs/api/java/util/Random.html#next%28int%29。
另外,我想知道是否建议我使用类似的东西new java.util.Random(System.currentTimeMillis())
c++ - mersenne twister::seed (C++) 的参数无效
我创建了一个模拟环境,其中涉及多个随机部分。我从正态分布、均匀分布和对数正态分布中抽取数字。在大多数情况下,这运行良好,但是,当我决定一个接一个地进行 100 次模拟时,我得到了错误:R6010 Abort() 已被调用。在我的控制台中,我收到错误:mersenne_twister::seed 的参数无效。但是,我只使用标准的伪随机数生成器 rand()。我绝不会打电话给 mersene_twister。所以这可能是来自 std::normal_distribution 的一种方法。
此外,我不播种为什么我的种子值在 X 次迭代后无效,而不是第一次 X 次迭代?
有没有人有这个错误的经验?有没有人有任何建议如何解决这个问题
ps srand(time(0)) 仅在 main 开始时被调用一次。而所有随机数都是在第二类“random_num”中生成的。Pss 我知道这可能不是生成随机数的最佳方式,但它足以满足我的目的。
为 RNG 请求的代码:
c - 将随机数生成器从 matlab 转换为 C
我在matlab中写了一些涉及随机数的东西。当我在 matlab 中运行程序时,它运行良好,每次运行程序时都会给我不同的随机数。
我决定使用 matlabs C 代码生成功能将我在 matlab 中编写的代码转换为 C。在原始 matlab 函数中,我使用内置的 randn() 函数来生成随机数。然后,我使用 matlab 自动从 matlab 函数生成 C 代码的能力将此代码转换为 C。为了生成随机数,自动生成的 C 代码使用以下算法,正如本文底部所示。
然后我的代码简单地调用 randn() 函数。但是,每次我运行代码时,生成的随机数都是一样的。我能做些什么来避免它?
c++ - 使用 Mersenne Twister 生成 C++ 随机数
我正在尝试在我的 C++ 程序中生成随机数。它适用于我运行 Windows 的笔记本电脑。但是,当我尝试在另一台计算机上编译我的程序时,我收到以下错误消息:
对应以下代码:
我正在使用带有 -std=c++0x 标志的 g++ 从命令行编译我的代码。如何解决此问题,以便我的代码可以在两台计算机上正常编译和运行。
c++ - Mersenne Twister c ++ 可能的最大种子
我想找出我可以在 C++ 中播种随机数生成器的最大值。我的代码如下:
变量种子有多大?我注意到如果值变得太大,随机数生成器会吐出相同的“随机”数序列。我想知道如果不发生这种情况,种子可以有多大。
random - CUDA 的 Mersenne Twister 用于任意数量的线程
CUDA 对Mersenne Twister
( MT
) 随机数生成器的实现仅限于线程/块256
和200
块/网格的最大数量,即最大线程数是51200
。
因此,无法启动使用 MT 的内核
在哪里
是线程的n
总数。
MT
使用for的最佳方式是threads > 51200
什么?
我的方法是否为 and 使用常量值blocksPerGrid
,threadsPerBlock
例如<<<128,128>>>
并在内核代码中使用以下内容:
我不确定这是否是正确的方式,或者它是否会以不希望的方式影响 MT 状态?
谢谢你。
ruby - Ruby 的兰特的有效种子范围是多少?
Ruby 将 PRNG 实现为“经过修改的 Mersenne Twister,周期为 2**19937-1”。1
我理解 MT 的方式是它在 2^32 个不同的种子上运行。让我感到困惑的是,它Random.new(seed)
接受任意大的数字,例如Random.new(2**100)
.
但是,我无法找到(逻辑)冲突:
鉴于我们想利用 MT 的最大种子范围,即我们希望使用尽可能多的不同种子,同时仍然避免与两个不同的种子发生冲突,那么什么种子范围可以实现这一点?
我试图了解 Ruby 的随机实现中发生了什么,但并没有走得太远。https://github.com/ruby/ruby/blob/c5e08b764eb342538884b383f0e6428b6faf214b/random.c#L370
random - 关于 Mersenne Twister 发电机的时期
我读过 Mersenne Twister 发电机的周期为 2¹⁹⁹³⁷ - 1,但我很困惑为什么这可能。我看到了 Mersenne Twister 算法的这种实现,在第一条评论中它清楚地说它产生的值在 0 到 2³² - 1 的范围内。因此,在它产生 2³² - 1 个不同的随机数之后,它必然会回到起点(种子),因此周期最大为 2³² - 1。
另外(如果我错了,请告诉我),至少在一个内存块中,计算机不能保存数字 (2¹⁹⁹³⁷ - 1) ~ 4.3×10⁶⁰⁰¹。我在这里想念什么?