4

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

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

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

4

2 回答 2

4

Mersenne Twister 已针对多个领域的蒙特卡洛模拟进行了优化,所以我会坚持使用那个。

如果性能是一个问题并且并行化不是一个选择,我会选择XORshift发电机。来自 Geroge Marsaglia 的一个非常好的(快速)随机数生成器。

这是论文

如果您需要一个良好且快速的 PRNG 来进行某些 monte carlo 或其他统计模拟,而不是密码学,这可能是您最好的选择。

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

于 2012-11-25T10:56:06.873 回答
0

你也可以使用面向 SIMD 的 Fast Mersenne Twister (SFMT),它非常快,它使用 SIMD 指令并行生成随机数。可以在松本诚的主页上找到:

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

于 2018-11-15T11:55:26.813 回答