提问者:小点点

为什么默认种子是`mt19937`5489?


根据标准,mt19937::d efault_seed 的值为 5489u

static constexpr result_type default_seed = 5489u;

这似乎很人为。

这背后有什么(数学或理论)原因吗?


共1个答案

匿名用户

C的Mersenne Twister使用5489作为默认种子值,因为以前有很多很多实现都使用过它。也就是说,这是一种传统。作为一个比C实现早很长时间的例子,Matlab也使用了5489。

因此,使用0或1是不一致的,因为这些值不是其他流行的Mersenne Twister实现所使用的值。

在5489之前已经使用了其他值,如4357,请查看此主题以了解一些详细信息和这些历史默认种子的链接:https://sourceware . org/legacy-ml/GSL-discuse/2006-Q4/msg 00014 . html

5489可能在2002年首次被使用,通过西村和松本的这种实现:http://www.math.sci.hiroshima-u.ac.jp/m-mat/MT/MT2002/CODES/mt19937ar.c

最后,请注意,像这样的一些简单的整数种子可以将Mersenne Twister放入相对低熵的初始序列中。我推测有人注意到(在1998年到2002年之间)4357造成了这样的问题,而5489似乎给出了更好的结果。