有没有办法在 Perl 中存储内置伪随机数生成器的当前状态,以便当我的程序再次运行时,它可以从停止的地方拾取序列,而不是从新序列开始?
现在,我正在存储我所在的位置以及初始种子,然后丢弃我已经使用类似以下内容看到的初始段:
sub consume_upto_n {
my ($seed, $n) = @_;
$n = 1 unless defined $n and $n >= 1;
srand $seed;
rand for 1 .. $n - 1;
return;
}
例如:
srand 0x18;
my @v = map { rand } 1 .. 5;
Later:
consume_upto_n(0x18, 3);
my @z = map { rand } 3 .. 5;
Then, $z[0] == $v[2]
, $z[1] == $v[3]
etc.
我不认为内置rand
允许你这样做。但你可以使用替代品rand
。例如,数学::随机::MT::自动 http://search.cpan.org/perldoc?Math::Random::MT::Auto允许您序列化它的对象 http://search.cpan.org/perldoc?Math::Random::MT::Auto#Serialization(大概包括$MRMA::PRNG
,这是被其替换所使用的对象rand
).
不过,我不太确定重点是什么。如果它是一个相当随机的序列,您如何判断是继续该序列还是开始一个新序列?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)