我使用伪随机数生成器(PRNG)来蒙特卡罗模拟排队类型的系统。我使用System.Random,因为它很快,但发现它在后续绘制之间有一些奇怪的相关性,这会干扰结果(它不够随机)。
现在我正在使用Mersenne Twister(http://takel.jp/mt/MersenneTwister.cs),到目前为止,已经证明它足够随意用于我的目的。它慢了50%,但这是我愿意为获得可靠结果而付出的代价。
.net的PRNG最适合蒙特卡罗模拟?我正在寻找一个不太慢的可靠的PRNG。
答案 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