问题标签 [boost-random]

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.

0 投票
4 回答
7111 浏览

c++ - 使用 boost::random 作为 std::random_shuffle 的 RNG

我有一个程序使用来自 boost::random 的 mt19937 随机数生成器。我需要做一个 random_shuffle 并希望为此生成的随机数来自这个共享状态,这样它们就可以确定 mersenne twister 先前生成的数字。

我试过这样的事情:

但是我收到一个模板错误,用 rand 调用 random_shuffle。但是,这有效:

可能是因为它是一个实际的函数调用。但很明显,这并不能保持原始梅森捻线机的状态。是什么赋予了?在没有全局变量的情况下,有什么方法可以做我想做的事情吗?

0 投票
3 回答
1233 浏览

c++ - 使用 boost::random 从要删除元素的 std::list 中进行选择

请参阅有关 Boost Random 库的更通用使用的相关问题

我的问题涉及从 a 中选择一个随机元素std::list,执行一些操作,这可能包括从列表中删除该元素,然后选择另一个随机元素,直到满足某个条件。

boost 代码和 for 循环大致如下所示:

我的问题是,一旦对元素执行的操作导致删除元素,variate_generator 就有可能在列表中选择无效索引。我认为每次完全重新创建 variate_generator 是没有意义的,特别是如果我用 time(0) 播种它。

0 投票
2 回答
3416 浏览

c++ - Boost Mersenne Twister:如何用多个值播种?

我正在使用 boost mt19937 实现进行模拟。

模拟需要可重现,这意味着存储并可能在以后重复使用 RNG 种子。我正在使用 windows 加密 api 来生成种子值,因为我需要种子的外部来源,而不是因为任何特定的随机性保证。任何模拟运行的输出都会有一个包含 RNG 种子的注释 - 所以种子需要相当短。另一方面,作为模拟分析的一部分,我将比较几次运行——但为了确保这些运行实际上是不同的,我需要使用不同的种子——所以种子需要足够长避免意外碰撞

我已经确定 64 位播种就足够了;在大约 2^32 次运行后,发生碰撞的几率将达到 50%——这个概率足够低,以至于它引起的平均错误对我来说可以忽略不计。仅使用 32 位种子是很棘手的;在 2^16 次运行后,发生碰撞的几率已经达到 50%;这对我的口味来说有点太可能了。

不幸的是,boost 实现要么是具有完整状态向量的种子——它太长了——要么是一个 32 位无符号长的种子——这并不理想。

如何使用超过 32 位但小于完整状态向量的生成器播种?我尝试只是填充向量或重复种子来填充状态向量,但即使粗略地看一下结果也表明这会产生糟糕的结果。

0 投票
2 回答
3513 浏览

c++ - boost RNG的线程安全

我有一个循环,应该通过插入一个 openmp pragma 很好地并行化:

(除非我犯了一个错误,每次执行都完全不依赖于其他人。抱歉,没有插入所有代码)。

但是我的问题是 - boost RNG 线程安全吗?他们似乎指的是 gcc 的 gcc 代码,因此即使 gcc 代码是线程安全的,其他平台也可能并非如此。

0 投票
2 回答
3293 浏览

c++ - 如何使用 boost random 生成随机 64 位整数

我正在尝试使用 boost random 生成一个随机的 64 位无符号整数,但是我遇到了使用 uniform_int 的断言失败。

这是第 3 行的输出。

编辑:根据您的回答,我尝试指定以下尺寸:

但我收到以下编译错误:

编辑:好的,错过了 boost::uniform_int 的第二个实例。一旦我得到了他们两个,一切都过去了。

0 投票
6 回答
2285 浏览

c++ - 封装 boost::random 以便于替换 rand()

对于我的程序,我需要具有不同范围的伪随机整数。到目前为止,我使用了 rand() 函数,但它有其局限性。

我发现 boost::random 库是一个更好的替代品,但我不想到处创建随机生成器。
(我在许多类中都需要随机整数,因为它是一个压力测试软件,可以伪随机地做出每个决定(-> 测试运行必须通过设置相同的起始种子来重复))。

这就是为什么我在自己的班级中将 boost::random 封装起来。

这背后的想法是简化使用,使其几乎与 C++ rand() 方法一样简单

在给定范围内生成一个随机数现在就像

问题:
这种生成随机数的方式有什么问题吗?
我不认识的大开销?
纯粹的邪恶还是过时的编程技术?

(我还是 C++ 新手,想提高我的技能,我发现 Stack Overflow 是获得高质量建议的最佳场所)

0 投票
2 回答
1047 浏览

c++ - 提升随机数 - 奇怪的编译错误

在我正在编写的模拟中,我有一个代表必须采取一些行动的代理的类,并且我希望该代理能够访问随机数生成器。我听说 boost rng 的哪里不错,所以我想学习如何使用它们。

所以,这就是问题所在。此代码编译并完美运行:

所以,我希望我的 Agent 类能够拥有一个私有对象类型:

当代理需要一个随机数时可以调用它。

所以我试图做的是:

我收到以下错误消息:

> 代理::uniRng(int, int)

0 投票
3 回答
5509 浏览

c++ - boost::random 和 boost:uniform_real 适用于双打而不是浮点数?

如果这已经讨论过了,请原谅我。我有一个模板函数,它根据模板参数使用 boost::uniform_int 和 boost::uniform_real 并且应该返回相同的类型:

现在我已经用 int、float 和 double 测试了这个函数。它适用于 int,适用于 double,但不适用于 float。好像它要么将浮点数转换为 int,要么存在一些转换问题。我这么说的原因是因为当我这样做时:

我总是得到一个 int 回来。但是,就像我说的,它适用于双打。我做错了什么或遗漏了什么?谢谢 !

0 投票
1 回答
661 浏览

c++ - 使用模板提升随机性

所以我尝试使用带有模板的 Boost.Random mt19937 生成器。我的 c++ 有点生疏了,但据我所知(文档和 Boost 一样,至少含糊不清)它应该采用一个模板参数来指定它的返回类型(float / double)。

我现在不知道问题出在哪里......这一切都与模板一起工作<double>或停止工作。<float>

这是代码:

variate_generator这在施工中引发了

正如我所说,自从我完成 C++ 以来已经有一段时间了,Boost 文档还有很多要求,所以任何提示都表示赞赏......

0 投票
1 回答
1167 浏览

c++ - 使用 Boost::random 的标准多元正态随机向量

我想在 2D 表面上生成随机点,分布在 x0,y0 坐标周围。

我知道我需要生成的东西称为“标准多元正态随机向量”,但我不知道如何在 C++ 中执行此操作,例如使用 Boost::random 库。

我知道有一个生成这个的算法,称为Box–Muller 变换,但我认为这必须已经在 Boost 中正确实现。

有没有使用Boost::random生成多元正态分布的简单方法?