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

时间:2012-11-15 09:31:04

标签: montecarlo prng

我使用伪随机数生成器(PRNG)来蒙特卡罗模拟排队类型的系统。我使用System.Random,因为它很快,但发现它在后续绘制之间有一些奇怪的相关性,这会干扰结果(它不够随机)。

现在我正在使用Mersenne Twister(http://takel.jp/mt/MersenneTwister.cs),到目前为止,已经证明它足够随意用于我的目的。它慢了50%,但这是我愿意为获得可靠结果而付出的代价。

.net的PRNG最适合蒙特卡罗模拟?我正在寻找一个不太慢的可靠的PRNG。

2 个答案:

答案 0 :(得分:4)

Mersenne Twister已针对蒙特卡罗模拟在许多领域进行了优化,因此我会坚持使用。

如果性能是一个问题,并且parlalell不是一个选项,我会去XORshift发电机。 Geroge Marsaglia的一个非常好的(快速)随机数发生器。

这是paper

如果你需要为一些蒙特卡罗或其他统计模拟提供良好而快速的PRNG,那么这可能是你最好的选择,但不是为了加密。

在这个SO post,您可以在JAVA中找到一个非常简单的端口,但在网上重写或找到C#实现应该不难。

答案 1 :(得分:0)

您还可以使用非常快速的面向SIMD的快速梅森扭曲器(SFMT),它使用SIMD指令并行生成随机数。 可以在松本诚的主页中找到:

http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/index.html