- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
已阅读以下问题:
using one random engine for multi distributions in c++11
Uncorrelated parallel random seeds with C++ 2011?
std::default_random_engine generate values between 0.0 and 1.0
how to generate uncorrelated random sequences using c++
Using same random number generator across multiple functions
并且经历了一些技巧后,我对 c++ 中多个(不同)分布的随机生成器的概念理解产生了疑问。特别是:
例如,假设我正在使用以下内容:
class Zsim {
private:
std::default_random_engine engine;
}
并在构造函数中初始化它:
Zsim::Zsim(...)
{
std::random_device rd;
std::default_random_engine generator(rd());
engine = generator;
}
并使用它在不同的分布(二项分布和均匀分布)中绘制 n 个值(n 可能很大),比方说:
std::binomial_distribution<int> B_distribution(9, 0.5);
int number = B_distribution(engine);
std::uniform_real_distribution<double> R_distribution(0, 15);
position.x = R_distribution(engine);
position.y = R_distribution(engine);
这样可以吗?
有人指出使用std::random_device
很好,而其他人建议它可以出于多种原因抛出,应该避免或尝试/捕获(参见:Using same random number generator across multiple functions)。
在using one random engine for multi distributions in c++11 ,有人建议,当在 n 维(MosteM 给出的示例中 n = 2)模拟随机或布朗运动时,每个维度需要一个生成器,否则它们会变得相关,从而产生人为漂移。虽然我同意这个断言,但考虑到发电机的(巨大)周期,这个断言的有效性是什么?如果模拟很大(步骤数很多)?我们是否应该始终在每个维度使用一个生成器作为安全措施?这似乎与how to generate uncorrelated random sequences using c++中的主要回复相矛盾。
最后,给定 Zsim 示例,当您向方法添加 const 限定符并绘制二项分布时:
int Zscim::get_randomB() const
{
std::binomial_distribution<int> B_distribution(9, 0.5);
int number = B_distribution(engine);
}
编译器抛出错误:expression having type 'const std::tr1::default_random_engine' would lose some const-volatile qualifiers in order to call 'unsigned long std::tr1::mersenne_twister<_Ty,_Wx,_Nx,_Mx,_Rx,_Px,_Ux,_Sx,_Bx,_Tx,_Cx,_Lx>::operator()(void)
建议在调用分发时以某种方式更改生成器“引擎”。这是什么原因造成的?
最佳答案
如果你读到 UniformRandomBitGenerator您会发现随机生成器将生成随机位,这些位在理想情况下几乎彼此独立,只要有问题的 PRNG 可以实现这一点。所以基本上每次调用 engine()
都会生成一个几乎不相关的整数。分发的任务是对其进行适当数量的调用。单个位分布可能会在每 32 次调用分布本身时对 32 位引擎进行一次调用,缓存调用之间未使用的熵。相反, double 生成器可能使用来自两个 32 位引擎结果的熵来确定 double 的所有 53 个尾数位。引擎不关心哪个分布消耗它的随机位,因此在不同的分布中使用相同的引擎不是问题。
如果您阅读 https://en.wikipedia.org/wiki/Mersenne_Twister你会发现它是
k-distributed to 32-bit accuracy for every 1 ≤ k ≤ 623 (for a definition of k-distributed, see below)
因此,如果您使用 std::mt19937
,我会说您应该可以安全地在多达 623 个不同的发行版中使用相同的引擎,无论它们是相同类型还是不同类型。对于更多发行版,这取决于它们的使用方式,但在大多数情况下,我也不会太担心。
关于c++ - c++ 中具有多个(不相关?)分布的随机生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48093621/
我使用以下代码和嵌套生成器迭代文本文档并使用 get_train_minibatch() 返回训练示例。我想保留( pickle )生成器,这样我就可以回到文本文档中的相同位置。但是,您不能 pick
在本教程中,您将借助示例了解 JavaScript 生成器。在 JavaScript 中,生成器提供了一种使用函数和迭代器的新方法。 使用生成器, 您可以从函数内部的任何位置停止执行函数 并从
LESS is very cool .我一直想知道是否有任何好的 html 生成器可以让我更轻松地编写表单或做其他事情。除了 html,是否有一些类似的东西? 最佳答案 已尝试 Haml ? 从它的网
前言 如果是做python或者其他语言的小伙伴,对于生成器应该不陌生。但很多php开发者或许都不知道生成器这个功能,可能是因为生成器是php 5.5.0才引入的功能,也可以是生成器作用不是很明显。
我正在尝试编写一个使用生成器语法生成日期时间列表的函数: let dateRange = let endDate = System.DateTime.Parse("6/1/2010")
我遇到了一些看起来像的代码: [func(val) for val in iterable] 有一个可迭代对象(在我的例子中是一个生成器),用户想要为其副作用调用每个值的函数(例如 func 可以只是
Delphi 有内置的东西来生成 UUID 吗? 最佳答案 program Guid; {$APPTYPE CONSOLE} uses SysUtils; var Uid: TGuid; Result
我正在深入研究 javascript 生成器,但我真的很困惑。 我使用 node@0.11.x 运行此示例: function find() { process.nextTick(functi
有人知道一些关于如何为 hibernate 创建自定义 ID 生成器的好教程吗? 最佳答案 在 Google 上粗略搜索“hibernate 自定义 id 生成器教程”发现了以下可能性。我排除了那些看
我正在关注 Python 大师 David Beazley 的幻灯片。它指出“生成器也用于并发。这是一个示例: from collections import deque def countdown(
我有一个生成事件的生成器,我想用可以从 API 获取的附加元数据来丰富它。 某些事件具有与其链接的对象 ID,而其他事件则具有对象的哈希值,但不能同时具有两者。我无法根据哈希获取对象 id,我只能执行
假设我有一个自定义类: public class CustomClass { private String name; private String data; public
我正在考虑实现一个函数来在 SQL 请求中“构建”WHERE 子句,如下所示: "SELECT * FROM table $where" 使用如下所示的循环构建 $where: $arr=array(
我正在寻找执行此操作的标准函数: def Forever(v): while True: yield v 这看起来太琐碎了,我不敢相信没有标准版本。 就此而言,有人知道指向所有标准生成器函
我知道这个网站上有几个非常相似的相关问题,但是在看了这部剧之后,我相信这个问题本身就是独一无二的。如果有人能找到并提供证据证明我的问题完全被骗了,我会自己撤回它(所以请不要否决这个!)。 我是 Jav
void __fastcall TForm1::Button1Click(TObject *Sender) { int size = MemoEnter->GetTextLen() + 1;
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我试图在我的生成器的以下两个定义之间做出决定。哪个更好?哪个“更像 python ”?无论如何,有没有办法减轻每一个的缺点? def myGenerator1(howMany): result
我有一个 Python 生成器 lexg,它在每次迭代时生成一个列表。该代码似乎在传统的 for 循环意义上工作,即 for i in lexg(2,2): print(i) 产生: [2, 0] [
我希望这不会超出 Python 生成器的能力,但我想构建一个这样,每次调用该函数时,它都会返回下一分钟直到结束时间。 因此该函数读取开始时间和结束时间,并以分钟为单位返回时间,直到涵盖其间的所有时间。
我是一名优秀的程序员,十分优秀!