当前位置: 首页 > 知识库问答 >
问题:

.NET中用于蒙特卡罗模拟的可靠快速伪随机数生成器(PRNG)

淳于禄
2023-03-14

利用伪随机数生成器(PRNG)对排队型系统进行蒙特卡罗模拟。我使用System.random,因为它速度快,但发现它在后续的绘制之间有某种怪异的相关性,干扰了结果(不够随机)。

现在我使用的是Mersenne Twister(http://takel.jp/mt/mersennetwister.cs),它(到目前为止)已经证明对我的目的来说是足够随机的。它慢了50%,但那是我愿意付出的代价,以得到可靠的结果。

什么PRNG for.net最适合蒙特卡洛模拟?我正在寻找一个可靠的PRNG,不要太慢。

共有1个答案

谭修竹
2023-03-14

梅森扭力器已经优化用于蒙特卡罗模拟在许多领域的使用,所以我将坚持这一个。

如果性能是一个问题,并且使用parralell不是一个选项,我会使用xorshift生成器。来自Geroge Marsaglia的一个非常好的(快速)随机数生成器。

这是报纸:

在这篇文章中,您可以在JAVA中找到一个非常简单的端口,但重写或在网络上找到一个C#实现应该不会那么困难。

 类似资料:
  • 我试图模拟来自rho=0.7的AR(1)模型的数据(Y)。然后我将使用这些数据在截距上运行Y的回归(通过这样做,参数估计成为Y的平均值),然后使用鲁棒的标准错误。我想对这个假设运行一个蒙特卡罗模拟,使用2000次重复不同的滞后值。目的是显示当滞后变化时Newey West估计器的有限样本性能 我的问题是:上面的代码是进行这种模拟的正确方法吗?如果是,我如何得到一个代码来重复这个过程在HAC测试中的

  • 我正在写一个蒙特卡罗模拟来检查有多少次y不是紧挨着另一个y。我变出了一个40 x和10 y的向量,放置在向量中的随机位置。我的目标是计算向量中没有任何相邻y的概率。以下是我尝试过的: 结果是一个非常小的数字,这对我来说似乎没有意义。

  • 下面是我想用R做的算法: 从模型到功能 将序列分为可能的子序列,包括,,,,,,,和 对于每个尺寸,对具有替换的块进行重采样,对于新系列,通过函数 为每个块大小的每个子系列获取 下面的函数可以完成此操作。 调用函数 我得到以下结果: 我想按时间顺序重复上面的到,然后我想到了中的技术。因此,我加载它的包并运行以下函数: 希望在表格中得到如下结果: 但我收到以下错误信息: MonteCarlo错误(f

  • 生成随机数 # random_random.py import random for i in range(5): print('%04.3f' % random.random(), end=' ') print() # random_uniform.py import random for i in range(5): print('{:04.3f}'.format(ran

  • 从名字我们可以看出,MCMC由两个MC组成,即蒙特卡罗方法(Monte Carlo Simulation,简称MC)和马尔科夫链(Markov Chain ,也简称MC)。要弄懂MCMC的原理我们首先得搞清楚蒙特卡罗方法和马尔科夫链的原理。我们将用三篇来完整学习MCMC。在本篇,我们关注于蒙特卡罗方法。 2. 蒙特卡罗方法引入 蒙特卡罗原来是一个赌场的名称,用它作为名字大概是因为蒙特卡罗方法是一种

  • 主要内容:1 伪随机数,2 Random,2.1 随机数的生成和局限性,3 ThreadLocalRandom,3.1 概述,3.2 current方法,3.3 nextInt方法,3.4 总结详细介绍了ThreadLocalRandom伪随机数生成器的原理,以及对Random的优化! 1 伪随机数 简单的了解一下伪随机数的概念。 通过固定算法产生的随机数都是伪随机数,Java语言的随机数生成器或者说整个计算机中的随机数函数,生成的都是伪随机数。只有通过真实的随机事件产生的随机数才是真随机数。比