问题标签 [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.
c++ - stdlib.h 中的 rand 有多糟糕?
我正在用 C++ 进行蒙特卡罗模拟,并且我使用 Boost 来处理随机数。我也用过 GSL。但事实证明,随机数生成是我最大的运行时低效率之一,所以我刚刚开始使用旧rand()
的 from cstdlib
.
我的模拟中随机数属性差的风险有多严重?我使用大约 10^6 或 10^7 个随机数样本。
c++ - 在 C++ 中使用非默认构造函数初始化对象的成员类
我有一个特定的情况,我有一个对象,我想在其上使用 boost 随机数生成器,这导致了一个更大的问题,我似乎无法回答。这是我正在尝试生成的示例代码。
首先,我的标题:
现在我想做的是:
但这不起作用,因为它在标题中。我以为我可以使用 MyObject 的构造函数以某种方式调用各种子对象(分布、生成器)的构造函数,但我不知道如何。当调用 MyObject 的构造函数时,子对象的默认值构造函数已经被调用,我还没有发现他们有成员方法来重置这些属性......除此之外,这不是我感到困惑的地方。现在可能有太多事情发生了,我m 令人困惑的问题,但据我所知,我的问题归结为以下幼稚的示例:
我确信这是其他所有人的第二天性,但我找不到一篇文章讨论将对象的成员对象初始化为非默认构造函数值的最佳实践。
c++ - 如何使用 std::vector 初始化 boost::random::discrete_distribution?
我想boost::random::discrete_distribution
用std::vector<double>
.
我的问题是,如果我用数组初始化它,就像在官方示例中一样:
然后它完美地工作。
但是,如果我用 a 初始化它std::vector
,那么它的行为就像它只有一个概率为 1.0 的元素。
你能告诉我boost::random::discrete_distribution<>
用向量初始化 a 的正确方法是什么吗?
c++ - Boost random::discrete_distribution 构造后如何更改权重?
好的,可以在 boost::random::discrete_distribution 中给出权重/概率。
例如
双倍概率[] = { 0.5, 0.1, 0.1, 0.1, 0.1, 0.1 };
boost::random::discrete_distribution<> dist (概率);
问题:一旦构造了对象dist
(1)如何将其中一个权重例如0.5更改为0.3?
(2) 如何一次重新分配所有权重?
c++ - 对 long double 的(伪)随机数生成器使用 boost
我正在尝试使用 boost 来生成 long double 的随机数(在 64 位机器上)。
在某些时候我使用
然而,编译器认为在 boost/random/mersenne_twister.hpp 的第 88 行,
有一个隐式转换将 64 位缩短为 32 位值...
我什至没有指定我想要一个长的双打还是双打……他为什么要争论这个?是因为我使用的是 64 位操作系统吗?
这个问题有什么简单的解决方案吗?我需要一个长的双发电机... xD
谢谢
c++ - 如何使用 double[] 初始化 boost::random::discrete_distribution;
我想用这样的 double[] 初始化 boost::random::discrete_distribution:
我知道我可以使用矢量或静态大小的表,但是有没有办法在不重写我的 _distr 的情况下克服它?
c++ - boost::random::discrete_distribution 是否可以动态调整大小?
我找不到很多关于离散分布的 Boost 版本的文档。经过大量的谷歌搜索,我什至找不到这个类具有的方法列表,以及它们中的任何一个是否具有重新分配概率的功能。
就我而言,我正在编写一个进化动力学算法。在每个时间步长,可以随机选择种群成员死亡或繁殖。因此,我的离散分布中的条目总数几乎每次迭代都会改变。
我想要在模拟开始之前定义一个对象,称为gillespie_dist
(管理此 Gillespie 算法的离散分布)。但是我希望在每次迭代结束时潜在地更改特定值和/或向其中添加新值,gillespie_dist
并且特别不想在每次迭代时创建discrete_distribution 的新实例。
对此有什么好的方法。是否有将新值推送到对象上的方法,在特定索引处更改分布值的方法,或者更好的是,使用此处discrete_distribution
提到的向量迭代器思想以某种方式“重新初始化”整个分布?
c++ - 如何使用 boost::uniform_on_sphere?
我试图在单位球体上选择一个随机点,发现 boost 提供的分布正是这样做的。但是当我尝试使用它时,所有生成的值都是nan
. 我不知道我做错了什么,请您赐教吗?这个小代码描述了我正在尝试做的事情:
输出是:
无穷无尽...
c++ - 使用 boost::random 改组向量时的问题
我正在使用此代码使用 Fisher-Yates 随机化算法的变体生成向量的随机排列(我从第一个元素到最后一个元素,而不是相反)。我在程序启动时boost::random::mt11213b
播种的程序中全局使用RNG generator.seed(time(NULL));
,因此这里有一个包装器单例RandomNumber
。
简而言之,一些实验让我相信这个算法可能存在问题。这就是我所做的
- 创建了一个长度为 100 的整数向量
- 前 75 个元素填充
0
,后 25 个元素填充1
- 洗牌一个数组。
- 从列表中取出前 5 个元素并将它们相加。
我重复这个过程几千次(循环,而不是手动:))每次都从一个新的向量开始。然后我计算了总和的算术平均值,0.98
而不是预期的1.25
。
1.22
有趣的是,如果我从一个用相同算法而不是有序算法洗牌一次的向量开始,结果会增加结果大约1.25
是预期值。
我不确定可能出了什么问题。该算法看起来不错,我能想到的唯一可能出错的是播种阶段和
在洗牌向量之前每次调用的行(也许它应该只在程序中调用一次,但这没有意义)
任何帮助将不胜感激!