Существует ли способ сохранить текущее состояние созданного в генераторе псевдослучайного числа в 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;
Позже:
consume_upto_n(0x18, 3);
my @z = map { rand } 3 .. 5;
Затем $z[0] == $v[2]
, $z[1] == $v[3]
и т.д.
Я не думаю, что встроенный rand
позволяет вам это сделать. Но вы можете использовать замену rand
. Например, Math :: Random :: MT :: Auto позволяет вам сериализовать свои объекты (предположительно включая $ MRMA :: PRNG
, который является объектом который используется его заменой rand
).
Я не совсем понимаю, в чем дело. Если это достаточно случайная последовательность, как вы можете определить, продолжаете ли вы эту последовательность или начинаете новую?